// 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  S3280C4_nt  {
  int s3280c4f0[2];
  void  mf3280c4(); // _ZN10S3280C4_nt8mf3280c4Ev
};
//SIG(-1 S3280C4_nt) C1{ m Fi[2]}


void  S3280C4_nt ::mf3280c4(){}

//skip512 S3280C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3280C3_nt  {
  int s3280c3f0;
  __tsi64 s3280c3f1;
  void *s3280c3f2[4];
  int s3280c3f3[2];
  void *s3280c3f4;
  ::S3280C4_nt s3280c3f5;
  void *s3280c3f6[2];
  virtual  ~S3280C3_nt(); // _ZN10S3280C3_ntD1Ev
  virtual void  v5(); // _ZN10S3280C3_nt2v5Ev
  virtual void  v6(); // _ZN10S3280C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3280C3_nt2v7Ev
  virtual void  v8(); // _ZN10S3280C3_nt2v8Ev
  virtual void  v9(); // _ZN10S3280C3_nt2v9Ev
  virtual void  v10(); // _ZN10S3280C3_nt3v10Ev
  virtual void  v11(); // _ZN10S3280C3_nt3v11Ev
  virtual void  v12(); // _ZN10S3280C3_nt3v12Ev
  virtual void  v13(); // _ZN10S3280C3_nt3v13Ev
  virtual void  v14(); // _ZN10S3280C3_nt3v14Ev
  virtual void  v15(); // _ZN10S3280C3_nt3v15Ev
  virtual void  v16(); // _ZN10S3280C3_nt3v16Ev
  virtual void  v17(); // _ZN10S3280C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3280C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3280C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3280C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3280C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3280C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3280C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3280C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3280C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3280C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3280C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3280C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3280C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3280C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3280C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3280C3_nt3v32Ev
  virtual void  v33(); // _ZN10S3280C3_nt3v33Ev
  virtual void  v34(); // _ZN10S3280C3_nt3v34Ev
  virtual void  v35(); // _ZN10S3280C3_nt3v35Ev
  virtual void  v36(); // _ZN10S3280C3_nt3v36Ev
  virtual void  v37(); // _ZN10S3280C3_nt3v37Ev
  virtual void  v38(); // _ZN10S3280C3_nt3v38Ev
  virtual void  v39(); // _ZN10S3280C3_nt3v39Ev
  virtual void  v40(); // _ZN10S3280C3_nt3v40Ev
  virtual void  v41(); // _ZN10S3280C3_nt3v41Ev
  virtual void  v42(); // _ZN10S3280C3_nt3v42Ev
  virtual void  v43(); // _ZN10S3280C3_nt3v43Ev
  virtual void  v44(); // _ZN10S3280C3_nt3v44Ev
  virtual void  v45(); // _ZN10S3280C3_nt3v45Ev
  virtual void  v46(); // _ZN10S3280C3_nt3v46Ev
  virtual void  v47(); // _ZN10S3280C3_nt3v47Ev
  virtual void  v48(); // _ZN10S3280C3_nt3v48Ev
  virtual void  v49(); // _ZN10S3280C3_nt3v49Ev
  virtual void  v50(); // _ZN10S3280C3_nt3v50Ev
  virtual void  v51(); // _ZN10S3280C3_nt3v51Ev
  virtual void  v52(); // _ZN10S3280C3_nt3v52Ev
  virtual void  v53(); // _ZN10S3280C3_nt3v53Ev
  virtual void  v54(); // _ZN10S3280C3_nt3v54Ev
  virtual void  v55(); // _ZN10S3280C3_nt3v55Ev
  virtual void  v56(); // _ZN10S3280C3_nt3v56Ev
  virtual void  v57(); // _ZN10S3280C3_nt3v57Ev
  virtual void  v58(); // _ZN10S3280C3_nt3v58Ev
  virtual void  v59(); // _ZN10S3280C3_nt3v59Ev
  virtual void  v60(); // _ZN10S3280C3_nt3v60Ev
  virtual void  v61(); // _ZN10S3280C3_nt3v61Ev
  virtual void  v62(); // _ZN10S3280C3_nt3v62Ev
  virtual void  v63(); // _ZN10S3280C3_nt3v63Ev
  virtual void  v64(); // _ZN10S3280C3_nt3v64Ev
  virtual void  v65(); // _ZN10S3280C3_nt3v65Ev
  virtual void  v66(); // _ZN10S3280C3_nt3v66Ev
  virtual void  v67(); // _ZN10S3280C3_nt3v67Ev
  virtual void  v68(); // _ZN10S3280C3_nt3v68Ev
  S3280C3_nt(); // tgen
};
//SIG(-1 S3280C3_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]}


 S3280C3_nt ::~S3280C3_nt(){ note_dtor("S3280C3_nt", this);}
void  S3280C3_nt ::v5(){vfunc_called(this, "_ZN10S3280C3_nt2v5Ev");}
void  S3280C3_nt ::v6(){vfunc_called(this, "_ZN10S3280C3_nt2v6Ev");}
void  S3280C3_nt ::v7(){vfunc_called(this, "_ZN10S3280C3_nt2v7Ev");}
void  S3280C3_nt ::v8(){vfunc_called(this, "_ZN10S3280C3_nt2v8Ev");}
void  S3280C3_nt ::v9(){vfunc_called(this, "_ZN10S3280C3_nt2v9Ev");}
void  S3280C3_nt ::v10(){vfunc_called(this, "_ZN10S3280C3_nt3v10Ev");}
void  S3280C3_nt ::v11(){vfunc_called(this, "_ZN10S3280C3_nt3v11Ev");}
void  S3280C3_nt ::v12(){vfunc_called(this, "_ZN10S3280C3_nt3v12Ev");}
void  S3280C3_nt ::v13(){vfunc_called(this, "_ZN10S3280C3_nt3v13Ev");}
void  S3280C3_nt ::v14(){vfunc_called(this, "_ZN10S3280C3_nt3v14Ev");}
void  S3280C3_nt ::v15(){vfunc_called(this, "_ZN10S3280C3_nt3v15Ev");}
void  S3280C3_nt ::v16(){vfunc_called(this, "_ZN10S3280C3_nt3v16Ev");}
void  S3280C3_nt ::v17(){vfunc_called(this, "_ZN10S3280C3_nt3v17Ev");}
void  S3280C3_nt ::v18(){vfunc_called(this, "_ZN10S3280C3_nt3v18Ev");}
void  S3280C3_nt ::v19(){vfunc_called(this, "_ZN10S3280C3_nt3v19Ev");}
void  S3280C3_nt ::v20(){vfunc_called(this, "_ZN10S3280C3_nt3v20Ev");}
void  S3280C3_nt ::v21(){vfunc_called(this, "_ZN10S3280C3_nt3v21Ev");}
void  S3280C3_nt ::v22(){vfunc_called(this, "_ZN10S3280C3_nt3v22Ev");}
void  S3280C3_nt ::v23(){vfunc_called(this, "_ZN10S3280C3_nt3v23Ev");}
void  S3280C3_nt ::v24(){vfunc_called(this, "_ZN10S3280C3_nt3v24Ev");}
void  S3280C3_nt ::v25(){vfunc_called(this, "_ZN10S3280C3_nt3v25Ev");}
void  S3280C3_nt ::v26(){vfunc_called(this, "_ZN10S3280C3_nt3v26Ev");}
void  S3280C3_nt ::v27(){vfunc_called(this, "_ZN10S3280C3_nt3v27Ev");}
void  S3280C3_nt ::v28(){vfunc_called(this, "_ZN10S3280C3_nt3v28Ev");}
void  S3280C3_nt ::v29(){vfunc_called(this, "_ZN10S3280C3_nt3v29Ev");}
void  S3280C3_nt ::v30(){vfunc_called(this, "_ZN10S3280C3_nt3v30Ev");}
void  S3280C3_nt ::v31(){vfunc_called(this, "_ZN10S3280C3_nt3v31Ev");}
void  S3280C3_nt ::v32(){vfunc_called(this, "_ZN10S3280C3_nt3v32Ev");}
void  S3280C3_nt ::v33(){vfunc_called(this, "_ZN10S3280C3_nt3v33Ev");}
void  S3280C3_nt ::v34(){vfunc_called(this, "_ZN10S3280C3_nt3v34Ev");}
void  S3280C3_nt ::v35(){vfunc_called(this, "_ZN10S3280C3_nt3v35Ev");}
void  S3280C3_nt ::v36(){vfunc_called(this, "_ZN10S3280C3_nt3v36Ev");}
void  S3280C3_nt ::v37(){vfunc_called(this, "_ZN10S3280C3_nt3v37Ev");}
void  S3280C3_nt ::v38(){vfunc_called(this, "_ZN10S3280C3_nt3v38Ev");}
void  S3280C3_nt ::v39(){vfunc_called(this, "_ZN10S3280C3_nt3v39Ev");}
void  S3280C3_nt ::v40(){vfunc_called(this, "_ZN10S3280C3_nt3v40Ev");}
void  S3280C3_nt ::v41(){vfunc_called(this, "_ZN10S3280C3_nt3v41Ev");}
void  S3280C3_nt ::v42(){vfunc_called(this, "_ZN10S3280C3_nt3v42Ev");}
void  S3280C3_nt ::v43(){vfunc_called(this, "_ZN10S3280C3_nt3v43Ev");}
void  S3280C3_nt ::v44(){vfunc_called(this, "_ZN10S3280C3_nt3v44Ev");}
void  S3280C3_nt ::v45(){vfunc_called(this, "_ZN10S3280C3_nt3v45Ev");}
void  S3280C3_nt ::v46(){vfunc_called(this, "_ZN10S3280C3_nt3v46Ev");}
void  S3280C3_nt ::v47(){vfunc_called(this, "_ZN10S3280C3_nt3v47Ev");}
void  S3280C3_nt ::v48(){vfunc_called(this, "_ZN10S3280C3_nt3v48Ev");}
void  S3280C3_nt ::v49(){vfunc_called(this, "_ZN10S3280C3_nt3v49Ev");}
void  S3280C3_nt ::v50(){vfunc_called(this, "_ZN10S3280C3_nt3v50Ev");}
void  S3280C3_nt ::v51(){vfunc_called(this, "_ZN10S3280C3_nt3v51Ev");}
void  S3280C3_nt ::v52(){vfunc_called(this, "_ZN10S3280C3_nt3v52Ev");}
void  S3280C3_nt ::v53(){vfunc_called(this, "_ZN10S3280C3_nt3v53Ev");}
void  S3280C3_nt ::v54(){vfunc_called(this, "_ZN10S3280C3_nt3v54Ev");}
void  S3280C3_nt ::v55(){vfunc_called(this, "_ZN10S3280C3_nt3v55Ev");}
void  S3280C3_nt ::v56(){vfunc_called(this, "_ZN10S3280C3_nt3v56Ev");}
void  S3280C3_nt ::v57(){vfunc_called(this, "_ZN10S3280C3_nt3v57Ev");}
void  S3280C3_nt ::v58(){vfunc_called(this, "_ZN10S3280C3_nt3v58Ev");}
void  S3280C3_nt ::v59(){vfunc_called(this, "_ZN10S3280C3_nt3v59Ev");}
void  S3280C3_nt ::v60(){vfunc_called(this, "_ZN10S3280C3_nt3v60Ev");}
void  S3280C3_nt ::v61(){vfunc_called(this, "_ZN10S3280C3_nt3v61Ev");}
void  S3280C3_nt ::v62(){vfunc_called(this, "_ZN10S3280C3_nt3v62Ev");}
void  S3280C3_nt ::v63(){vfunc_called(this, "_ZN10S3280C3_nt3v63Ev");}
void  S3280C3_nt ::v64(){vfunc_called(this, "_ZN10S3280C3_nt3v64Ev");}
void  S3280C3_nt ::v65(){vfunc_called(this, "_ZN10S3280C3_nt3v65Ev");}
void  S3280C3_nt ::v66(){vfunc_called(this, "_ZN10S3280C3_nt3v66Ev");}
void  S3280C3_nt ::v67(){vfunc_called(this, "_ZN10S3280C3_nt3v67Ev");}
void  S3280C3_nt ::v68(){vfunc_called(this, "_ZN10S3280C3_nt3v68Ev");}
S3280C3_nt ::S3280C3_nt(){ note_ctor("S3280C3_nt", this);} // tgen

//skip512 S3280C3_nt

#else // __cplusplus

extern void _ZN10S3280C3_ntC1Ev();
extern void _ZN10S3280C3_ntD1Ev();
Name_Map name_map_S3280C3_nt[] = {
  NSPAIR(_ZN10S3280C3_ntC1Ev),
  NSPAIR(_ZN10S3280C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3280C3_nt[];
extern void _ZN10S3280C3_ntD1Ev();
extern void _ZN10S3280C3_ntD0Ev();
extern void _ZN10S3280C3_nt2v5Ev();
extern void _ZN10S3280C3_nt2v6Ev();
extern void _ZN10S3280C3_nt2v7Ev();
extern void _ZN10S3280C3_nt2v8Ev();
extern void _ZN10S3280C3_nt2v9Ev();
extern void _ZN10S3280C3_nt3v10Ev();
extern void _ZN10S3280C3_nt3v11Ev();
extern void _ZN10S3280C3_nt3v12Ev();
extern void _ZN10S3280C3_nt3v13Ev();
extern void _ZN10S3280C3_nt3v14Ev();
extern void _ZN10S3280C3_nt3v15Ev();
extern void _ZN10S3280C3_nt3v16Ev();
extern void _ZN10S3280C3_nt3v17Ev();
extern void _ZN10S3280C3_nt3v18Ev();
extern void _ZN10S3280C3_nt3v19Ev();
extern void _ZN10S3280C3_nt3v20Ev();
extern void _ZN10S3280C3_nt3v21Ev();
extern void _ZN10S3280C3_nt3v22Ev();
extern void _ZN10S3280C3_nt3v23Ev();
extern void _ZN10S3280C3_nt3v24Ev();
extern void _ZN10S3280C3_nt3v25Ev();
extern void _ZN10S3280C3_nt3v26Ev();
extern void _ZN10S3280C3_nt3v27Ev();
extern void _ZN10S3280C3_nt3v28Ev();
extern void _ZN10S3280C3_nt3v29Ev();
extern void _ZN10S3280C3_nt3v30Ev();
extern void _ZN10S3280C3_nt3v31Ev();
extern void _ZN10S3280C3_nt3v32Ev();
extern void _ZN10S3280C3_nt3v33Ev();
extern void _ZN10S3280C3_nt3v34Ev();
extern void _ZN10S3280C3_nt3v35Ev();
extern void _ZN10S3280C3_nt3v36Ev();
extern void _ZN10S3280C3_nt3v37Ev();
extern void _ZN10S3280C3_nt3v38Ev();
extern void _ZN10S3280C3_nt3v39Ev();
extern void _ZN10S3280C3_nt3v40Ev();
extern void _ZN10S3280C3_nt3v41Ev();
extern void _ZN10S3280C3_nt3v42Ev();
extern void _ZN10S3280C3_nt3v43Ev();
extern void _ZN10S3280C3_nt3v44Ev();
extern void _ZN10S3280C3_nt3v45Ev();
extern void _ZN10S3280C3_nt3v46Ev();
extern void _ZN10S3280C3_nt3v47Ev();
extern void _ZN10S3280C3_nt3v48Ev();
extern void _ZN10S3280C3_nt3v49Ev();
extern void _ZN10S3280C3_nt3v50Ev();
extern void _ZN10S3280C3_nt3v51Ev();
extern void _ZN10S3280C3_nt3v52Ev();
extern void _ZN10S3280C3_nt3v53Ev();
extern void _ZN10S3280C3_nt3v54Ev();
extern void _ZN10S3280C3_nt3v55Ev();
extern void _ZN10S3280C3_nt3v56Ev();
extern void _ZN10S3280C3_nt3v57Ev();
extern void _ZN10S3280C3_nt3v58Ev();
extern void _ZN10S3280C3_nt3v59Ev();
extern void _ZN10S3280C3_nt3v60Ev();
extern void _ZN10S3280C3_nt3v61Ev();
extern void _ZN10S3280C3_nt3v62Ev();
extern void _ZN10S3280C3_nt3v63Ev();
extern void _ZN10S3280C3_nt3v64Ev();
extern void _ZN10S3280C3_nt3v65Ev();
extern void _ZN10S3280C3_nt3v66Ev();
extern void _ZN10S3280C3_nt3v67Ev();
extern void _ZN10S3280C3_nt3v68Ev();
static  VTBL_ENTRY vtc_S3280C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3280C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3280C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v68Ev,
};
extern VTBL_ENTRY _ZTI10S3280C3_nt[];
VTBL_ENTRY *P__ZTI10S3280C3_nt = _ZTI10S3280C3_nt; 
extern  VTBL_ENTRY _ZTV10S3280C3_nt[];
Class_Descriptor cd_S3280C3_nt = {  "S3280C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3280C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S3280C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3280C3_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  S3280C7_nt  {
  void *s3280c7f0;
  int s3280c7f1[2];
  void  mf3280c7(); // _ZN10S3280C7_nt8mf3280c7Ev
};
//SIG(-1 S3280C7_nt) C1{ m Fp Fi[2]}


void  S3280C7_nt ::mf3280c7(){}

//skip512 S3280C7_nt

#else // __cplusplus

Class_Descriptor cd_S3280C7_nt = {  "S3280C7_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  S3280C6_nt  : S3280C7_nt {
};
//SIG(-1 S3280C6_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S3280C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S3280C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S3280C6_nt = {  "S3280C6_nt", // class name
  bases_S3280C6_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  S3280C5_nt  : S3280C6_nt {
};
//SIG(-1 S3280C5_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S3280C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S3280C6_nt;
static Base_Class bases_S3280C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S3280C6_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  S3280C8_nt  {
  int s3280c8f0;
  void  mf3280c8(); // _ZN10S3280C8_nt8mf3280c8Ev
};
//SIG(-1 S3280C8_nt) C1{ m Fi}


void  S3280C8_nt ::mf3280c8(){}

//skip512 S3280C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S3280C12()
{
  extern Class_Descriptor cd_S3280C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3280C12, buf);
    S3280C12 &lv = *(new (buf) S3280C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3280C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3280C12)");
    check_base_class_offset(lv, (S3280C7_nt*), 0, "S3280C12");
    test_class_info(&lv, &cd_S3280C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3280C12(Test_S3280C12, "S3280C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S3280C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S3280C12 = {  "S3280C12", // class name
  bases_S3280C12, 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  S3280C11  : S3280C12 {
};
//SIG(-1 S3280C11) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3280C11()
{
  extern Class_Descriptor cd_S3280C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3280C11, buf);
    S3280C11 &lv = *(new (buf) S3280C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3280C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3280C11)");
    check_base_class_offset(lv, (S3280C7_nt*)(S3280C12*), 0, "S3280C11");
    check_base_class_offset(lv, (S3280C12*), 0, "S3280C11");
    test_class_info(&lv, &cd_S3280C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3280C11(Test_S3280C11, "S3280C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S3280C12;
static Base_Class bases_S3280C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S3280C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3280C11 = {  "S3280C11", // class name
  bases_S3280C11, 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  S3280C13_nt  {
  int s3280c13f0[3];
  void  mf3280c13(); // _ZN11S3280C13_nt9mf3280c13Ev
};
//SIG(-1 S3280C13_nt) C1{ m Fi[3]}


void  S3280C13_nt ::mf3280c13(){}

//skip512 S3280C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S3280C18()
{
  extern Class_Descriptor cd_S3280C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3280C18, buf);
    S3280C18 &lv = *(new (buf) S3280C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3280C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3280C18)");
    check_base_class_offset(lv, (S3280C7_nt*), 0, "S3280C18");
    test_class_info(&lv, &cd_S3280C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3280C18(Test_S3280C18, "S3280C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S3280C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S3280C18 = {  "S3280C18", // class name
  bases_S3280C18, 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  S3280C17  : S3280C18 {
};
//SIG(-1 S3280C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3280C17()
{
  extern Class_Descriptor cd_S3280C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3280C17, buf);
    S3280C17 &lv = *(new (buf) S3280C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3280C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3280C17)");
    check_base_class_offset(lv, (S3280C7_nt*)(S3280C18*), 0, "S3280C17");
    check_base_class_offset(lv, (S3280C18*), 0, "S3280C17");
    test_class_info(&lv, &cd_S3280C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3280C17(Test_S3280C17, "S3280C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S3280C18;
static Base_Class bases_S3280C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S3280C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3280C17 = {  "S3280C17", // class name
  bases_S3280C17, 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  S3280C2_nt  : S3280C3_nt {
  ::S3280C5_nt s3280c2f0;
  ::S3280C5_nt s3280c2f1;
  ::S3280C8_nt s3280c2f2;
  int s3280c2f3;
  char s3280c2f4[4];
  void *s3280c2f5[2];
  ::S3280C5_nt s3280c2f6;
  unsigned int s3280c2f7:1;
  unsigned int s3280c2f8:1;
  unsigned int s3280c2f9:1;
  unsigned int s3280c2f10:1;
  unsigned int s3280c2f11:1;
  unsigned int s3280c2f12:1;
  unsigned int s3280c2f13:1;
  unsigned int s3280c2f14:1;
  unsigned int s3280c2f15:1;
  unsigned int s3280c2f16:1;
  unsigned int s3280c2f17:1;
  unsigned int s3280c2f18:1;
  unsigned int s3280c2f19:1;
  unsigned int s3280c2f20:1;
  unsigned int s3280c2f21:1;
  unsigned int s3280c2f22:1;
  unsigned int s3280c2f23:1;
  unsigned int s3280c2f24:1;
  unsigned int s3280c2f25:1;
  unsigned int s3280c2f26:1;
  unsigned int s3280c2f27:1;
  unsigned int s3280c2f28:1;
  unsigned int s3280c2f29:1;
  unsigned int s3280c2f30:1;
  unsigned int s3280c2f31:1;
  unsigned int s3280c2f32:1;
  unsigned int s3280c2f33:1;
  unsigned int s3280c2f34:1;
  unsigned int s3280c2f35:1;
  unsigned int s3280c2f36:1;
  unsigned int s3280c2f37:1;
  unsigned int s3280c2f38:1;
  unsigned int s3280c2f39:1;
  unsigned int s3280c2f40:1;
  unsigned int s3280c2f41:1;
  unsigned int s3280c2f42:1;
  unsigned int s3280c2f43:1;
  unsigned int s3280c2f44:1;
  unsigned int s3280c2f45:1;
  unsigned int s3280c2f46:1;
  unsigned int s3280c2f47:1;
  unsigned int s3280c2f48:1;
  unsigned int s3280c2f49:1;
  unsigned int s3280c2f50:1;
  unsigned int s3280c2f51:1;
  unsigned int s3280c2f52:1;
  unsigned int s3280c2f53:1;
  unsigned int s3280c2f54:1;
  unsigned int s3280c2f55:1;
  unsigned int s3280c2f56:1;
  unsigned int s3280c2f57:1;
  unsigned int s3280c2f58:1;
  unsigned int s3280c2f59:1;
  unsigned int s3280c2f60:1;
  unsigned int s3280c2f61:1;
  unsigned int s3280c2f62:1;
  unsigned int s3280c2f63:1;
  unsigned int s3280c2f64:1;
  unsigned int s3280c2f65:1;
  unsigned int s3280c2f66:1;
  unsigned int s3280c2f67:1;
  unsigned int s3280c2f68:1;
  unsigned int s3280c2f69:1;
  unsigned int s3280c2f70:1;
  unsigned int s3280c2f71:1;
  unsigned int s3280c2f72:1;
  unsigned int s3280c2f73:1;
  unsigned int s3280c2f74:1;
  unsigned int s3280c2f75:1;
  unsigned int s3280c2f76:1;
  unsigned int s3280c2f77:1;
  unsigned int s3280c2f78:1;
  unsigned int s3280c2f79:1;
  unsigned int s3280c2f80:1;
  unsigned int s3280c2f81:1;
  unsigned int s3280c2f82:1;
  unsigned int s3280c2f83:1;
  int s3280c2f84[5];
  void *s3280c2f85[2];
  int s3280c2f86[3];
  ::S3280C4_nt s3280c2f87;
  ::S3280C4_nt s3280c2f88;
  ::S3280C4_nt s3280c2f89;
  ::S3280C11 s3280c2f90;
  ::S3280C11 s3280c2f91;
  int s3280c2f92;
  void *s3280c2f93[2];
  ::S3280C13_nt s3280c2f94;
  ::S3280C13_nt s3280c2f95;
  ::S3280C13_nt s3280c2f96;
  ::S3280C13_nt s3280c2f97;
  void *s3280c2f98;
  ::S3280C4_nt s3280c2f99;
  ::S3280C11 s3280c2f100;
  ::S3280C13_nt s3280c2f101;
  ::S3280C13_nt s3280c2f102;
  int s3280c2f103;
  ::S3280C13_nt s3280c2f104;
  ::S3280C13_nt s3280c2f105;
  void *s3280c2f106;
  int s3280c2f107;
  char s3280c2f108;
  ::S3280C13_nt s3280c2f109;
  ::S3280C13_nt s3280c2f110;
  void *s3280c2f111;
  int s3280c2f112;
  void *s3280c2f113;
  ::S3280C11 s3280c2f114;
  ::S3280C17 s3280c2f115;
  ::S3280C17 s3280c2f116;
  virtual  ~S3280C2_nt(); // _ZN10S3280C2_ntD1Ev
  virtual void  v69(); // _ZN10S3280C2_nt3v69Ev
  virtual void  v70(); // _ZN10S3280C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3280C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3280C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3280C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3280C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3280C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3280C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3280C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3280C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3280C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3280C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3280C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3280C2_nt3v82Ev
  virtual void  v83(); // _ZN10S3280C2_nt3v83Ev
  virtual void  v84(); // _ZN10S3280C2_nt3v84Ev
  virtual void  v85(); // _ZN10S3280C2_nt3v85Ev
  virtual void  v86(); // _ZN10S3280C2_nt3v86Ev
  virtual void  v87(); // _ZN10S3280C2_nt3v87Ev
  virtual void  v88(); // _ZN10S3280C2_nt3v88Ev
  virtual void  v89(); // _ZN10S3280C2_nt3v89Ev
  virtual void  v90(); // _ZN10S3280C2_nt3v90Ev
  virtual void  v91(); // _ZN10S3280C2_nt3v91Ev
  virtual void  v92(); // _ZN10S3280C2_nt3v92Ev
  virtual void  v93(); // _ZN10S3280C2_nt3v93Ev
  virtual void  v94(); // _ZN10S3280C2_nt3v94Ev
  virtual void  v95(); // _ZN10S3280C2_nt3v95Ev
  virtual void  v96(); // _ZN10S3280C2_nt3v96Ev
  virtual void  v97(); // _ZN10S3280C2_nt3v97Ev
  virtual void  v98(); // _ZN10S3280C2_nt3v98Ev
  virtual void  v99(); // _ZN10S3280C2_nt3v99Ev
  virtual void  v100(); // _ZN10S3280C2_nt4v100Ev
  virtual void  v101(); // _ZN10S3280C2_nt4v101Ev
  virtual void  v102(); // _ZN10S3280C2_nt4v102Ev
  virtual void  v103(); // _ZN10S3280C2_nt4v103Ev
  virtual void  v104(); // _ZN10S3280C2_nt4v104Ev
  virtual void  v105(); // _ZN10S3280C2_nt4v105Ev
  virtual void  v106(); // _ZN10S3280C2_nt4v106Ev
  virtual void  v107(); // _ZN10S3280C2_nt4v107Ev
  virtual void  v108(); // _ZN10S3280C2_nt4v108Ev
  virtual void  v109(); // _ZN10S3280C2_nt4v109Ev
  virtual void  v110(); // _ZN10S3280C2_nt4v110Ev
  virtual void  v111(); // _ZN10S3280C2_nt4v111Ev
  virtual void  v112(); // _ZN10S3280C2_nt4v112Ev
  virtual void  v113(); // _ZN10S3280C2_nt4v113Ev
  virtual void  v114(); // _ZN10S3280C2_nt4v114Ev
  virtual void  v115(); // _ZN10S3280C2_nt4v115Ev
  virtual void  v116(); // _ZN10S3280C2_nt4v116Ev
  virtual void  v117(); // _ZN10S3280C2_nt4v117Ev
  virtual void  v118(); // _ZN10S3280C2_nt4v118Ev
  virtual void  v119(); // _ZN10S3280C2_nt4v119Ev
  virtual void  v120(); // _ZN10S3280C2_nt4v120Ev
  virtual void  v121(); // _ZN10S3280C2_nt4v121Ev
  virtual void  v122(); // _ZN10S3280C2_nt4v122Ev
  virtual void  v123(); // _ZN10S3280C2_nt4v123Ev
  virtual void  v124(); // _ZN10S3280C2_nt4v124Ev
  virtual void  v125(); // _ZN10S3280C2_nt4v125Ev
  virtual void  v126(); // _ZN10S3280C2_nt4v126Ev
  virtual void  v127(); // _ZN10S3280C2_nt4v127Ev
  virtual void  v128(); // _ZN10S3280C2_nt4v128Ev
  virtual void  v129(); // _ZN10S3280C2_nt4v129Ev
  virtual void  v130(); // _ZN10S3280C2_nt4v130Ev
  virtual void  v131(); // _ZN10S3280C2_nt4v131Ev
  virtual void  v132(); // _ZN10S3280C2_nt4v132Ev
  virtual void  v133(); // _ZN10S3280C2_nt4v133Ev
  virtual void  v134(); // _ZN10S3280C2_nt4v134Ev
  virtual void  v135(); // _ZN10S3280C2_nt4v135Ev
  virtual void  v136(); // _ZN10S3280C2_nt4v136Ev
  virtual void  v137(); // _ZN10S3280C2_nt4v137Ev
  virtual void  v138(); // _ZN10S3280C2_nt4v138Ev
  virtual void  v139(); // _ZN10S3280C2_nt4v139Ev
  virtual void  v140(); // _ZN10S3280C2_nt4v140Ev
  virtual void  v141(); // _ZN10S3280C2_nt4v141Ev
  virtual void  v142(); // _ZN10S3280C2_nt4v142Ev
  virtual void  v143(); // _ZN10S3280C2_nt4v143Ev
  virtual void  v144(); // _ZN10S3280C2_nt4v144Ev
  virtual void  v145(); // _ZN10S3280C2_nt4v145Ev
  virtual void  v146(); // _ZN10S3280C2_nt4v146Ev
  virtual void  v147(); // _ZN10S3280C2_nt4v147Ev
  virtual void  v148(); // _ZN10S3280C2_nt4v148Ev
  virtual void  v149(); // _ZN10S3280C2_nt4v149Ev
  virtual void  v150(); // _ZN10S3280C2_nt4v150Ev
  virtual void  v151(); // _ZN10S3280C2_nt4v151Ev
  virtual void  v152(); // _ZN10S3280C2_nt4v152Ev
  virtual void  v153(); // _ZN10S3280C2_nt4v153Ev
  virtual void  v154(); // _ZN10S3280C2_nt4v154Ev
  virtual void  v155(); // _ZN10S3280C2_nt4v155Ev
  virtual void  v156(); // _ZN10S3280C2_nt4v156Ev
  virtual void  v157(); // _ZN10S3280C2_nt4v157Ev
  virtual void  v158(); // _ZN10S3280C2_nt4v158Ev
  virtual void  v159(); // _ZN10S3280C2_nt4v159Ev
  virtual void  v160(); // _ZN10S3280C2_nt4v160Ev
  virtual void  v161(); // _ZN10S3280C2_nt4v161Ev
  virtual void  v162(); // _ZN10S3280C2_nt4v162Ev
  virtual void  v163(); // _ZN10S3280C2_nt4v163Ev
  virtual void  v164(); // _ZN10S3280C2_nt4v164Ev
  virtual void  v165(); // _ZN10S3280C2_nt4v165Ev
  virtual void  v166(); // _ZN10S3280C2_nt4v166Ev
  virtual void  v167(); // _ZN10S3280C2_nt4v167Ev
  virtual void  v168(); // _ZN10S3280C2_nt4v168Ev
  virtual void  v169(); // _ZN10S3280C2_nt4v169Ev
  virtual void  v170(); // _ZN10S3280C2_nt4v170Ev
  virtual void  v171(); // _ZN10S3280C2_nt4v171Ev
  virtual void  v172(); // _ZN10S3280C2_nt4v172Ev
  virtual void  v173(); // _ZN10S3280C2_nt4v173Ev
  virtual void  v174(); // _ZN10S3280C2_nt4v174Ev
  virtual void  v175(); // _ZN10S3280C2_nt4v175Ev
  virtual void  v176(); // _ZN10S3280C2_nt4v176Ev
  virtual void  v177(); // _ZN10S3280C2_nt4v177Ev
  virtual void  v178(); // _ZN10S3280C2_nt4v178Ev
  virtual void  v179(); // _ZN10S3280C2_nt4v179Ev
  virtual void  v180(); // _ZN10S3280C2_nt4v180Ev
  virtual void  v181(); // _ZN10S3280C2_nt4v181Ev
  virtual void  v182(); // _ZN10S3280C2_nt4v182Ev
  virtual void  v183(); // _ZN10S3280C2_nt4v183Ev
  virtual void  v184(); // _ZN10S3280C2_nt4v184Ev
  virtual void  v185(); // _ZN10S3280C2_nt4v185Ev
  virtual void  v186(); // _ZN10S3280C2_nt4v186Ev
  virtual void  v187(); // _ZN10S3280C2_nt4v187Ev
  virtual void  v188(); // _ZN10S3280C2_nt4v188Ev
  virtual void  v189(); // _ZN10S3280C2_nt4v189Ev
  virtual void  v190(); // _ZN10S3280C2_nt4v190Ev
  virtual void  v191(); // _ZN10S3280C2_nt4v191Ev
  virtual void  v192(); // _ZN10S3280C2_nt4v192Ev
  virtual void  v193(); // _ZN10S3280C2_nt4v193Ev
  virtual void  v194(); // _ZN10S3280C2_nt4v194Ev
  virtual void  v195(); // _ZN10S3280C2_nt4v195Ev
  virtual void  v196(); // _ZN10S3280C2_nt4v196Ev
  virtual void  v197(); // _ZN10S3280C2_nt4v197Ev
  virtual void  v198(); // _ZN10S3280C2_nt4v198Ev
  virtual void  v199(); // _ZN10S3280C2_nt4v199Ev
  virtual void  v200(); // _ZN10S3280C2_nt4v200Ev
  virtual void  v201(); // _ZN10S3280C2_nt4v201Ev
  virtual void  v202(); // _ZN10S3280C2_nt4v202Ev
  virtual void  v203(); // _ZN10S3280C2_nt4v203Ev
  virtual void  v204(); // _ZN10S3280C2_nt4v204Ev
  virtual void  v205(); // _ZN10S3280C2_nt4v205Ev
  virtual void  v206(); // _ZN10S3280C2_nt4v206Ev
  virtual void  v207(); // _ZN10S3280C2_nt4v207Ev
  virtual void  v208(); // _ZN10S3280C2_nt4v208Ev
  virtual void  v209(); // _ZN10S3280C2_nt4v209Ev
  virtual void  v210(); // _ZN10S3280C2_nt4v210Ev
  virtual void  v211(); // _ZN10S3280C2_nt4v211Ev
  S3280C2_nt(); // tgen
};
//SIG(-1 S3280C2_nt) C1{ BC2{ vd 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 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 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 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 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ m Fi} Fi Fc[4] Fp[2] FC4 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 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 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 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 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC3 FC3 FC3 FC8{ BC9{ BC6}} FC8 Fi Fp[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fp FC3 FC8 FC10 FC10 Fi FC10 FC10 Fp Fi Fc FC10 FC10 Fp Fi Fp FC8 FC11{ BC12{ BC6}} FC11}


 S3280C2_nt ::~S3280C2_nt(){ note_dtor("S3280C2_nt", this);}
void  S3280C2_nt ::v69(){vfunc_called(this, "_ZN10S3280C2_nt3v69Ev");}
void  S3280C2_nt ::v70(){vfunc_called(this, "_ZN10S3280C2_nt3v70Ev");}
void  S3280C2_nt ::v71(){vfunc_called(this, "_ZN10S3280C2_nt3v71Ev");}
void  S3280C2_nt ::v72(){vfunc_called(this, "_ZN10S3280C2_nt3v72Ev");}
void  S3280C2_nt ::v73(){vfunc_called(this, "_ZN10S3280C2_nt3v73Ev");}
void  S3280C2_nt ::v74(){vfunc_called(this, "_ZN10S3280C2_nt3v74Ev");}
void  S3280C2_nt ::v75(){vfunc_called(this, "_ZN10S3280C2_nt3v75Ev");}
void  S3280C2_nt ::v76(){vfunc_called(this, "_ZN10S3280C2_nt3v76Ev");}
void  S3280C2_nt ::v77(){vfunc_called(this, "_ZN10S3280C2_nt3v77Ev");}
void  S3280C2_nt ::v78(){vfunc_called(this, "_ZN10S3280C2_nt3v78Ev");}
void  S3280C2_nt ::v79(){vfunc_called(this, "_ZN10S3280C2_nt3v79Ev");}
void  S3280C2_nt ::v80(){vfunc_called(this, "_ZN10S3280C2_nt3v80Ev");}
void  S3280C2_nt ::v81(){vfunc_called(this, "_ZN10S3280C2_nt3v81Ev");}
void  S3280C2_nt ::v82(){vfunc_called(this, "_ZN10S3280C2_nt3v82Ev");}
void  S3280C2_nt ::v83(){vfunc_called(this, "_ZN10S3280C2_nt3v83Ev");}
void  S3280C2_nt ::v84(){vfunc_called(this, "_ZN10S3280C2_nt3v84Ev");}
void  S3280C2_nt ::v85(){vfunc_called(this, "_ZN10S3280C2_nt3v85Ev");}
void  S3280C2_nt ::v86(){vfunc_called(this, "_ZN10S3280C2_nt3v86Ev");}
void  S3280C2_nt ::v87(){vfunc_called(this, "_ZN10S3280C2_nt3v87Ev");}
void  S3280C2_nt ::v88(){vfunc_called(this, "_ZN10S3280C2_nt3v88Ev");}
void  S3280C2_nt ::v89(){vfunc_called(this, "_ZN10S3280C2_nt3v89Ev");}
void  S3280C2_nt ::v90(){vfunc_called(this, "_ZN10S3280C2_nt3v90Ev");}
void  S3280C2_nt ::v91(){vfunc_called(this, "_ZN10S3280C2_nt3v91Ev");}
void  S3280C2_nt ::v92(){vfunc_called(this, "_ZN10S3280C2_nt3v92Ev");}
void  S3280C2_nt ::v93(){vfunc_called(this, "_ZN10S3280C2_nt3v93Ev");}
void  S3280C2_nt ::v94(){vfunc_called(this, "_ZN10S3280C2_nt3v94Ev");}
void  S3280C2_nt ::v95(){vfunc_called(this, "_ZN10S3280C2_nt3v95Ev");}
void  S3280C2_nt ::v96(){vfunc_called(this, "_ZN10S3280C2_nt3v96Ev");}
void  S3280C2_nt ::v97(){vfunc_called(this, "_ZN10S3280C2_nt3v97Ev");}
void  S3280C2_nt ::v98(){vfunc_called(this, "_ZN10S3280C2_nt3v98Ev");}
void  S3280C2_nt ::v99(){vfunc_called(this, "_ZN10S3280C2_nt3v99Ev");}
void  S3280C2_nt ::v100(){vfunc_called(this, "_ZN10S3280C2_nt4v100Ev");}
void  S3280C2_nt ::v101(){vfunc_called(this, "_ZN10S3280C2_nt4v101Ev");}
void  S3280C2_nt ::v102(){vfunc_called(this, "_ZN10S3280C2_nt4v102Ev");}
void  S3280C2_nt ::v103(){vfunc_called(this, "_ZN10S3280C2_nt4v103Ev");}
void  S3280C2_nt ::v104(){vfunc_called(this, "_ZN10S3280C2_nt4v104Ev");}
void  S3280C2_nt ::v105(){vfunc_called(this, "_ZN10S3280C2_nt4v105Ev");}
void  S3280C2_nt ::v106(){vfunc_called(this, "_ZN10S3280C2_nt4v106Ev");}
void  S3280C2_nt ::v107(){vfunc_called(this, "_ZN10S3280C2_nt4v107Ev");}
void  S3280C2_nt ::v108(){vfunc_called(this, "_ZN10S3280C2_nt4v108Ev");}
void  S3280C2_nt ::v109(){vfunc_called(this, "_ZN10S3280C2_nt4v109Ev");}
void  S3280C2_nt ::v110(){vfunc_called(this, "_ZN10S3280C2_nt4v110Ev");}
void  S3280C2_nt ::v111(){vfunc_called(this, "_ZN10S3280C2_nt4v111Ev");}
void  S3280C2_nt ::v112(){vfunc_called(this, "_ZN10S3280C2_nt4v112Ev");}
void  S3280C2_nt ::v113(){vfunc_called(this, "_ZN10S3280C2_nt4v113Ev");}
void  S3280C2_nt ::v114(){vfunc_called(this, "_ZN10S3280C2_nt4v114Ev");}
void  S3280C2_nt ::v115(){vfunc_called(this, "_ZN10S3280C2_nt4v115Ev");}
void  S3280C2_nt ::v116(){vfunc_called(this, "_ZN10S3280C2_nt4v116Ev");}
void  S3280C2_nt ::v117(){vfunc_called(this, "_ZN10S3280C2_nt4v117Ev");}
void  S3280C2_nt ::v118(){vfunc_called(this, "_ZN10S3280C2_nt4v118Ev");}
void  S3280C2_nt ::v119(){vfunc_called(this, "_ZN10S3280C2_nt4v119Ev");}
void  S3280C2_nt ::v120(){vfunc_called(this, "_ZN10S3280C2_nt4v120Ev");}
void  S3280C2_nt ::v121(){vfunc_called(this, "_ZN10S3280C2_nt4v121Ev");}
void  S3280C2_nt ::v122(){vfunc_called(this, "_ZN10S3280C2_nt4v122Ev");}
void  S3280C2_nt ::v123(){vfunc_called(this, "_ZN10S3280C2_nt4v123Ev");}
void  S3280C2_nt ::v124(){vfunc_called(this, "_ZN10S3280C2_nt4v124Ev");}
void  S3280C2_nt ::v125(){vfunc_called(this, "_ZN10S3280C2_nt4v125Ev");}
void  S3280C2_nt ::v126(){vfunc_called(this, "_ZN10S3280C2_nt4v126Ev");}
void  S3280C2_nt ::v127(){vfunc_called(this, "_ZN10S3280C2_nt4v127Ev");}
void  S3280C2_nt ::v128(){vfunc_called(this, "_ZN10S3280C2_nt4v128Ev");}
void  S3280C2_nt ::v129(){vfunc_called(this, "_ZN10S3280C2_nt4v129Ev");}
void  S3280C2_nt ::v130(){vfunc_called(this, "_ZN10S3280C2_nt4v130Ev");}
void  S3280C2_nt ::v131(){vfunc_called(this, "_ZN10S3280C2_nt4v131Ev");}
void  S3280C2_nt ::v132(){vfunc_called(this, "_ZN10S3280C2_nt4v132Ev");}
void  S3280C2_nt ::v133(){vfunc_called(this, "_ZN10S3280C2_nt4v133Ev");}
void  S3280C2_nt ::v134(){vfunc_called(this, "_ZN10S3280C2_nt4v134Ev");}
void  S3280C2_nt ::v135(){vfunc_called(this, "_ZN10S3280C2_nt4v135Ev");}
void  S3280C2_nt ::v136(){vfunc_called(this, "_ZN10S3280C2_nt4v136Ev");}
void  S3280C2_nt ::v137(){vfunc_called(this, "_ZN10S3280C2_nt4v137Ev");}
void  S3280C2_nt ::v138(){vfunc_called(this, "_ZN10S3280C2_nt4v138Ev");}
void  S3280C2_nt ::v139(){vfunc_called(this, "_ZN10S3280C2_nt4v139Ev");}
void  S3280C2_nt ::v140(){vfunc_called(this, "_ZN10S3280C2_nt4v140Ev");}
void  S3280C2_nt ::v141(){vfunc_called(this, "_ZN10S3280C2_nt4v141Ev");}
void  S3280C2_nt ::v142(){vfunc_called(this, "_ZN10S3280C2_nt4v142Ev");}
void  S3280C2_nt ::v143(){vfunc_called(this, "_ZN10S3280C2_nt4v143Ev");}
void  S3280C2_nt ::v144(){vfunc_called(this, "_ZN10S3280C2_nt4v144Ev");}
void  S3280C2_nt ::v145(){vfunc_called(this, "_ZN10S3280C2_nt4v145Ev");}
void  S3280C2_nt ::v146(){vfunc_called(this, "_ZN10S3280C2_nt4v146Ev");}
void  S3280C2_nt ::v147(){vfunc_called(this, "_ZN10S3280C2_nt4v147Ev");}
void  S3280C2_nt ::v148(){vfunc_called(this, "_ZN10S3280C2_nt4v148Ev");}
void  S3280C2_nt ::v149(){vfunc_called(this, "_ZN10S3280C2_nt4v149Ev");}
void  S3280C2_nt ::v150(){vfunc_called(this, "_ZN10S3280C2_nt4v150Ev");}
void  S3280C2_nt ::v151(){vfunc_called(this, "_ZN10S3280C2_nt4v151Ev");}
void  S3280C2_nt ::v152(){vfunc_called(this, "_ZN10S3280C2_nt4v152Ev");}
void  S3280C2_nt ::v153(){vfunc_called(this, "_ZN10S3280C2_nt4v153Ev");}
void  S3280C2_nt ::v154(){vfunc_called(this, "_ZN10S3280C2_nt4v154Ev");}
void  S3280C2_nt ::v155(){vfunc_called(this, "_ZN10S3280C2_nt4v155Ev");}
void  S3280C2_nt ::v156(){vfunc_called(this, "_ZN10S3280C2_nt4v156Ev");}
void  S3280C2_nt ::v157(){vfunc_called(this, "_ZN10S3280C2_nt4v157Ev");}
void  S3280C2_nt ::v158(){vfunc_called(this, "_ZN10S3280C2_nt4v158Ev");}
void  S3280C2_nt ::v159(){vfunc_called(this, "_ZN10S3280C2_nt4v159Ev");}
void  S3280C2_nt ::v160(){vfunc_called(this, "_ZN10S3280C2_nt4v160Ev");}
void  S3280C2_nt ::v161(){vfunc_called(this, "_ZN10S3280C2_nt4v161Ev");}
void  S3280C2_nt ::v162(){vfunc_called(this, "_ZN10S3280C2_nt4v162Ev");}
void  S3280C2_nt ::v163(){vfunc_called(this, "_ZN10S3280C2_nt4v163Ev");}
void  S3280C2_nt ::v164(){vfunc_called(this, "_ZN10S3280C2_nt4v164Ev");}
void  S3280C2_nt ::v165(){vfunc_called(this, "_ZN10S3280C2_nt4v165Ev");}
void  S3280C2_nt ::v166(){vfunc_called(this, "_ZN10S3280C2_nt4v166Ev");}
void  S3280C2_nt ::v167(){vfunc_called(this, "_ZN10S3280C2_nt4v167Ev");}
void  S3280C2_nt ::v168(){vfunc_called(this, "_ZN10S3280C2_nt4v168Ev");}
void  S3280C2_nt ::v169(){vfunc_called(this, "_ZN10S3280C2_nt4v169Ev");}
void  S3280C2_nt ::v170(){vfunc_called(this, "_ZN10S3280C2_nt4v170Ev");}
void  S3280C2_nt ::v171(){vfunc_called(this, "_ZN10S3280C2_nt4v171Ev");}
void  S3280C2_nt ::v172(){vfunc_called(this, "_ZN10S3280C2_nt4v172Ev");}
void  S3280C2_nt ::v173(){vfunc_called(this, "_ZN10S3280C2_nt4v173Ev");}
void  S3280C2_nt ::v174(){vfunc_called(this, "_ZN10S3280C2_nt4v174Ev");}
void  S3280C2_nt ::v175(){vfunc_called(this, "_ZN10S3280C2_nt4v175Ev");}
void  S3280C2_nt ::v176(){vfunc_called(this, "_ZN10S3280C2_nt4v176Ev");}
void  S3280C2_nt ::v177(){vfunc_called(this, "_ZN10S3280C2_nt4v177Ev");}
void  S3280C2_nt ::v178(){vfunc_called(this, "_ZN10S3280C2_nt4v178Ev");}
void  S3280C2_nt ::v179(){vfunc_called(this, "_ZN10S3280C2_nt4v179Ev");}
void  S3280C2_nt ::v180(){vfunc_called(this, "_ZN10S3280C2_nt4v180Ev");}
void  S3280C2_nt ::v181(){vfunc_called(this, "_ZN10S3280C2_nt4v181Ev");}
void  S3280C2_nt ::v182(){vfunc_called(this, "_ZN10S3280C2_nt4v182Ev");}
void  S3280C2_nt ::v183(){vfunc_called(this, "_ZN10S3280C2_nt4v183Ev");}
void  S3280C2_nt ::v184(){vfunc_called(this, "_ZN10S3280C2_nt4v184Ev");}
void  S3280C2_nt ::v185(){vfunc_called(this, "_ZN10S3280C2_nt4v185Ev");}
void  S3280C2_nt ::v186(){vfunc_called(this, "_ZN10S3280C2_nt4v186Ev");}
void  S3280C2_nt ::v187(){vfunc_called(this, "_ZN10S3280C2_nt4v187Ev");}
void  S3280C2_nt ::v188(){vfunc_called(this, "_ZN10S3280C2_nt4v188Ev");}
void  S3280C2_nt ::v189(){vfunc_called(this, "_ZN10S3280C2_nt4v189Ev");}
void  S3280C2_nt ::v190(){vfunc_called(this, "_ZN10S3280C2_nt4v190Ev");}
void  S3280C2_nt ::v191(){vfunc_called(this, "_ZN10S3280C2_nt4v191Ev");}
void  S3280C2_nt ::v192(){vfunc_called(this, "_ZN10S3280C2_nt4v192Ev");}
void  S3280C2_nt ::v193(){vfunc_called(this, "_ZN10S3280C2_nt4v193Ev");}
void  S3280C2_nt ::v194(){vfunc_called(this, "_ZN10S3280C2_nt4v194Ev");}
void  S3280C2_nt ::v195(){vfunc_called(this, "_ZN10S3280C2_nt4v195Ev");}
void  S3280C2_nt ::v196(){vfunc_called(this, "_ZN10S3280C2_nt4v196Ev");}
void  S3280C2_nt ::v197(){vfunc_called(this, "_ZN10S3280C2_nt4v197Ev");}
void  S3280C2_nt ::v198(){vfunc_called(this, "_ZN10S3280C2_nt4v198Ev");}
void  S3280C2_nt ::v199(){vfunc_called(this, "_ZN10S3280C2_nt4v199Ev");}
void  S3280C2_nt ::v200(){vfunc_called(this, "_ZN10S3280C2_nt4v200Ev");}
void  S3280C2_nt ::v201(){vfunc_called(this, "_ZN10S3280C2_nt4v201Ev");}
void  S3280C2_nt ::v202(){vfunc_called(this, "_ZN10S3280C2_nt4v202Ev");}
void  S3280C2_nt ::v203(){vfunc_called(this, "_ZN10S3280C2_nt4v203Ev");}
void  S3280C2_nt ::v204(){vfunc_called(this, "_ZN10S3280C2_nt4v204Ev");}
void  S3280C2_nt ::v205(){vfunc_called(this, "_ZN10S3280C2_nt4v205Ev");}
void  S3280C2_nt ::v206(){vfunc_called(this, "_ZN10S3280C2_nt4v206Ev");}
void  S3280C2_nt ::v207(){vfunc_called(this, "_ZN10S3280C2_nt4v207Ev");}
void  S3280C2_nt ::v208(){vfunc_called(this, "_ZN10S3280C2_nt4v208Ev");}
void  S3280C2_nt ::v209(){vfunc_called(this, "_ZN10S3280C2_nt4v209Ev");}
void  S3280C2_nt ::v210(){vfunc_called(this, "_ZN10S3280C2_nt4v210Ev");}
void  S3280C2_nt ::v211(){vfunc_called(this, "_ZN10S3280C2_nt4v211Ev");}
S3280C2_nt ::S3280C2_nt(){ note_ctor("S3280C2_nt", this);} // tgen

//skip512 S3280C2_nt

#else // __cplusplus

extern void _ZN10S3280C2_ntC1Ev();
extern void _ZN10S3280C2_ntD1Ev();
Name_Map name_map_S3280C2_nt[] = {
  NSPAIR(_ZN10S3280C2_ntC1Ev),
  NSPAIR(_ZN10S3280C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3280C3_nt;
extern VTBL_ENTRY _ZTI10S3280C3_nt[];
extern  VTBL_ENTRY _ZTV10S3280C3_nt[];
static Base_Class bases_S3280C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C3_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 _ZTI10S3280C2_nt[];
extern void _ZN10S3280C2_ntD1Ev();
extern void _ZN10S3280C2_ntD0Ev();
extern void _ZN10S3280C3_nt2v5Ev();
extern void _ZN10S3280C3_nt2v6Ev();
extern void _ZN10S3280C3_nt2v7Ev();
extern void _ZN10S3280C3_nt2v8Ev();
extern void _ZN10S3280C3_nt2v9Ev();
extern void _ZN10S3280C3_nt3v10Ev();
extern void _ZN10S3280C3_nt3v11Ev();
extern void _ZN10S3280C3_nt3v12Ev();
extern void _ZN10S3280C3_nt3v13Ev();
extern void _ZN10S3280C3_nt3v14Ev();
extern void _ZN10S3280C3_nt3v15Ev();
extern void _ZN10S3280C3_nt3v16Ev();
extern void _ZN10S3280C3_nt3v17Ev();
extern void _ZN10S3280C3_nt3v18Ev();
extern void _ZN10S3280C3_nt3v19Ev();
extern void _ZN10S3280C3_nt3v20Ev();
extern void _ZN10S3280C3_nt3v21Ev();
extern void _ZN10S3280C3_nt3v22Ev();
extern void _ZN10S3280C3_nt3v23Ev();
extern void _ZN10S3280C3_nt3v24Ev();
extern void _ZN10S3280C3_nt3v25Ev();
extern void _ZN10S3280C3_nt3v26Ev();
extern void _ZN10S3280C3_nt3v27Ev();
extern void _ZN10S3280C3_nt3v28Ev();
extern void _ZN10S3280C3_nt3v29Ev();
extern void _ZN10S3280C3_nt3v30Ev();
extern void _ZN10S3280C3_nt3v31Ev();
extern void _ZN10S3280C3_nt3v32Ev();
extern void _ZN10S3280C3_nt3v33Ev();
extern void _ZN10S3280C3_nt3v34Ev();
extern void _ZN10S3280C3_nt3v35Ev();
extern void _ZN10S3280C3_nt3v36Ev();
extern void _ZN10S3280C3_nt3v37Ev();
extern void _ZN10S3280C3_nt3v38Ev();
extern void _ZN10S3280C3_nt3v39Ev();
extern void _ZN10S3280C3_nt3v40Ev();
extern void _ZN10S3280C3_nt3v41Ev();
extern void _ZN10S3280C3_nt3v42Ev();
extern void _ZN10S3280C3_nt3v43Ev();
extern void _ZN10S3280C3_nt3v44Ev();
extern void _ZN10S3280C3_nt3v45Ev();
extern void _ZN10S3280C3_nt3v46Ev();
extern void _ZN10S3280C3_nt3v47Ev();
extern void _ZN10S3280C3_nt3v48Ev();
extern void _ZN10S3280C3_nt3v49Ev();
extern void _ZN10S3280C3_nt3v50Ev();
extern void _ZN10S3280C3_nt3v51Ev();
extern void _ZN10S3280C3_nt3v52Ev();
extern void _ZN10S3280C3_nt3v53Ev();
extern void _ZN10S3280C3_nt3v54Ev();
extern void _ZN10S3280C3_nt3v55Ev();
extern void _ZN10S3280C3_nt3v56Ev();
extern void _ZN10S3280C3_nt3v57Ev();
extern void _ZN10S3280C3_nt3v58Ev();
extern void _ZN10S3280C3_nt3v59Ev();
extern void _ZN10S3280C3_nt3v60Ev();
extern void _ZN10S3280C3_nt3v61Ev();
extern void _ZN10S3280C3_nt3v62Ev();
extern void _ZN10S3280C3_nt3v63Ev();
extern void _ZN10S3280C3_nt3v64Ev();
extern void _ZN10S3280C3_nt3v65Ev();
extern void _ZN10S3280C3_nt3v66Ev();
extern void _ZN10S3280C3_nt3v67Ev();
extern void _ZN10S3280C3_nt3v68Ev();
extern void _ZN10S3280C2_nt3v69Ev();
extern void _ZN10S3280C2_nt3v70Ev();
extern void _ZN10S3280C2_nt3v71Ev();
extern void _ZN10S3280C2_nt3v72Ev();
extern void _ZN10S3280C2_nt3v73Ev();
extern void _ZN10S3280C2_nt3v74Ev();
extern void _ZN10S3280C2_nt3v75Ev();
extern void _ZN10S3280C2_nt3v76Ev();
extern void _ZN10S3280C2_nt3v77Ev();
extern void _ZN10S3280C2_nt3v78Ev();
extern void _ZN10S3280C2_nt3v79Ev();
extern void _ZN10S3280C2_nt3v80Ev();
extern void _ZN10S3280C2_nt3v81Ev();
extern void _ZN10S3280C2_nt3v82Ev();
extern void _ZN10S3280C2_nt3v83Ev();
extern void _ZN10S3280C2_nt3v84Ev();
extern void _ZN10S3280C2_nt3v85Ev();
extern void _ZN10S3280C2_nt3v86Ev();
extern void _ZN10S3280C2_nt3v87Ev();
extern void _ZN10S3280C2_nt3v88Ev();
extern void _ZN10S3280C2_nt3v89Ev();
extern void _ZN10S3280C2_nt3v90Ev();
extern void _ZN10S3280C2_nt3v91Ev();
extern void _ZN10S3280C2_nt3v92Ev();
extern void _ZN10S3280C2_nt3v93Ev();
extern void _ZN10S3280C2_nt3v94Ev();
extern void _ZN10S3280C2_nt3v95Ev();
extern void _ZN10S3280C2_nt3v96Ev();
extern void _ZN10S3280C2_nt3v97Ev();
extern void _ZN10S3280C2_nt3v98Ev();
extern void _ZN10S3280C2_nt3v99Ev();
extern void _ZN10S3280C2_nt4v100Ev();
extern void _ZN10S3280C2_nt4v101Ev();
extern void _ZN10S3280C2_nt4v102Ev();
extern void _ZN10S3280C2_nt4v103Ev();
extern void _ZN10S3280C2_nt4v104Ev();
extern void _ZN10S3280C2_nt4v105Ev();
extern void _ZN10S3280C2_nt4v106Ev();
extern void _ZN10S3280C2_nt4v107Ev();
extern void _ZN10S3280C2_nt4v108Ev();
extern void _ZN10S3280C2_nt4v109Ev();
extern void _ZN10S3280C2_nt4v110Ev();
extern void _ZN10S3280C2_nt4v111Ev();
extern void _ZN10S3280C2_nt4v112Ev();
extern void _ZN10S3280C2_nt4v113Ev();
extern void _ZN10S3280C2_nt4v114Ev();
extern void _ZN10S3280C2_nt4v115Ev();
extern void _ZN10S3280C2_nt4v116Ev();
extern void _ZN10S3280C2_nt4v117Ev();
extern void _ZN10S3280C2_nt4v118Ev();
extern void _ZN10S3280C2_nt4v119Ev();
extern void _ZN10S3280C2_nt4v120Ev();
extern void _ZN10S3280C2_nt4v121Ev();
extern void _ZN10S3280C2_nt4v122Ev();
extern void _ZN10S3280C2_nt4v123Ev();
extern void _ZN10S3280C2_nt4v124Ev();
extern void _ZN10S3280C2_nt4v125Ev();
extern void _ZN10S3280C2_nt4v126Ev();
extern void _ZN10S3280C2_nt4v127Ev();
extern void _ZN10S3280C2_nt4v128Ev();
extern void _ZN10S3280C2_nt4v129Ev();
extern void _ZN10S3280C2_nt4v130Ev();
extern void _ZN10S3280C2_nt4v131Ev();
extern void _ZN10S3280C2_nt4v132Ev();
extern void _ZN10S3280C2_nt4v133Ev();
extern void _ZN10S3280C2_nt4v134Ev();
extern void _ZN10S3280C2_nt4v135Ev();
extern void _ZN10S3280C2_nt4v136Ev();
extern void _ZN10S3280C2_nt4v137Ev();
extern void _ZN10S3280C2_nt4v138Ev();
extern void _ZN10S3280C2_nt4v139Ev();
extern void _ZN10S3280C2_nt4v140Ev();
extern void _ZN10S3280C2_nt4v141Ev();
extern void _ZN10S3280C2_nt4v142Ev();
extern void _ZN10S3280C2_nt4v143Ev();
extern void _ZN10S3280C2_nt4v144Ev();
extern void _ZN10S3280C2_nt4v145Ev();
extern void _ZN10S3280C2_nt4v146Ev();
extern void _ZN10S3280C2_nt4v147Ev();
extern void _ZN10S3280C2_nt4v148Ev();
extern void _ZN10S3280C2_nt4v149Ev();
extern void _ZN10S3280C2_nt4v150Ev();
extern void _ZN10S3280C2_nt4v151Ev();
extern void _ZN10S3280C2_nt4v152Ev();
extern void _ZN10S3280C2_nt4v153Ev();
extern void _ZN10S3280C2_nt4v154Ev();
extern void _ZN10S3280C2_nt4v155Ev();
extern void _ZN10S3280C2_nt4v156Ev();
extern void _ZN10S3280C2_nt4v157Ev();
extern void _ZN10S3280C2_nt4v158Ev();
extern void _ZN10S3280C2_nt4v159Ev();
extern void _ZN10S3280C2_nt4v160Ev();
extern void _ZN10S3280C2_nt4v161Ev();
extern void _ZN10S3280C2_nt4v162Ev();
extern void _ZN10S3280C2_nt4v163Ev();
extern void _ZN10S3280C2_nt4v164Ev();
extern void _ZN10S3280C2_nt4v165Ev();
extern void _ZN10S3280C2_nt4v166Ev();
extern void _ZN10S3280C2_nt4v167Ev();
extern void _ZN10S3280C2_nt4v168Ev();
extern void _ZN10S3280C2_nt4v169Ev();
extern void _ZN10S3280C2_nt4v170Ev();
extern void _ZN10S3280C2_nt4v171Ev();
extern void _ZN10S3280C2_nt4v172Ev();
extern void _ZN10S3280C2_nt4v173Ev();
extern void _ZN10S3280C2_nt4v174Ev();
extern void _ZN10S3280C2_nt4v175Ev();
extern void _ZN10S3280C2_nt4v176Ev();
extern void _ZN10S3280C2_nt4v177Ev();
extern void _ZN10S3280C2_nt4v178Ev();
extern void _ZN10S3280C2_nt4v179Ev();
extern void _ZN10S3280C2_nt4v180Ev();
extern void _ZN10S3280C2_nt4v181Ev();
extern void _ZN10S3280C2_nt4v182Ev();
extern void _ZN10S3280C2_nt4v183Ev();
extern void _ZN10S3280C2_nt4v184Ev();
extern void _ZN10S3280C2_nt4v185Ev();
extern void _ZN10S3280C2_nt4v186Ev();
extern void _ZN10S3280C2_nt4v187Ev();
extern void _ZN10S3280C2_nt4v188Ev();
extern void _ZN10S3280C2_nt4v189Ev();
extern void _ZN10S3280C2_nt4v190Ev();
extern void _ZN10S3280C2_nt4v191Ev();
extern void _ZN10S3280C2_nt4v192Ev();
extern void _ZN10S3280C2_nt4v193Ev();
extern void _ZN10S3280C2_nt4v194Ev();
extern void _ZN10S3280C2_nt4v195Ev();
extern void _ZN10S3280C2_nt4v196Ev();
extern void _ZN10S3280C2_nt4v197Ev();
extern void _ZN10S3280C2_nt4v198Ev();
extern void _ZN10S3280C2_nt4v199Ev();
extern void _ZN10S3280C2_nt4v200Ev();
extern void _ZN10S3280C2_nt4v201Ev();
extern void _ZN10S3280C2_nt4v202Ev();
extern void _ZN10S3280C2_nt4v203Ev();
extern void _ZN10S3280C2_nt4v204Ev();
extern void _ZN10S3280C2_nt4v205Ev();
extern void _ZN10S3280C2_nt4v206Ev();
extern void _ZN10S3280C2_nt4v207Ev();
extern void _ZN10S3280C2_nt4v208Ev();
extern void _ZN10S3280C2_nt4v209Ev();
extern void _ZN10S3280C2_nt4v210Ev();
extern void _ZN10S3280C2_nt4v211Ev();
static  VTBL_ENTRY vtc_S3280C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3280C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3280C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v211Ev,
};
extern VTBL_ENTRY _ZTI10S3280C2_nt[];
VTBL_ENTRY *P__ZTI10S3280C2_nt = _ZTI10S3280C2_nt; 
extern  VTBL_ENTRY _ZTV10S3280C2_nt[];
Class_Descriptor cd_S3280C2_nt = {  "S3280C2_nt", // class name
  bases_S3280C2_nt, 1,
  &(vtc_S3280C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S3280C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3280C2_nt),211, //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  S3280C1  : S3280C2_nt {
  unsigned int s3280c1f0:1;
  virtual  ~S3280C1(); // _ZN7S3280C1D1Ev
  virtual void  v1(); // _ZN7S3280C12v1Ev
  virtual void  v2(); // _ZN7S3280C12v2Ev
  virtual void  v3(); // _ZN7S3280C12v3Ev
  virtual void  v4(); // _ZN7S3280C12v4Ev
  S3280C1(); // tgen
};
//SIG(1 S3280C1) 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 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 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 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC5 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 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 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 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 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC4 FC4 FC4 FC9{ BC10{ BC7}} FC9 Fi Fp[2] FC11{ m Fi[3]} FC11 FC11 FC11 Fp FC4 FC9 FC11 FC11 Fi FC11 FC11 Fp Fi Fc FC11 FC11 Fp Fi Fp FC9 FC12{ BC13{ BC7}} FC12} vd v1 v2 v3 v4 Fi:1}


 S3280C1 ::~S3280C1(){ note_dtor("S3280C1", this);}
void  S3280C1 ::v1(){vfunc_called(this, "_ZN7S3280C12v1Ev");}
void  S3280C1 ::v2(){vfunc_called(this, "_ZN7S3280C12v2Ev");}
void  S3280C1 ::v3(){vfunc_called(this, "_ZN7S3280C12v3Ev");}
void  S3280C1 ::v4(){vfunc_called(this, "_ZN7S3280C12v4Ev");}
S3280C1 ::S3280C1(){ note_ctor("S3280C1", this);} // tgen

static void Test_S3280C1()
{
  extern Class_Descriptor cd_S3280C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(73,111)];
    init_test(&cd_S3280C1, buf);
    S3280C1 *dp, &lv = *(dp=new (buf) S3280C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,440), "sizeof(S3280C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3280C1)");
    check_base_class_offset(lv, (S3280C3_nt*)(S3280C2_nt*), 0, "S3280C1");
    check_base_class_offset(lv, (S3280C2_nt*), 0, "S3280C1");
    set_bf_and_test(lv, s3280c1f0, ABISELECT(568,436), 0, 1, 1, "S3280C1");
    test_class_info(&lv, &cd_S3280C1);
    dp->~S3280C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3280C1(Test_S3280C1, "S3280C1", ABISELECT(576,440));

#else // __cplusplus

extern void _ZN7S3280C1C1Ev();
extern void _ZN7S3280C1D1Ev();
Name_Map name_map_S3280C1[] = {
  NSPAIR(_ZN7S3280C1C1Ev),
  NSPAIR(_ZN7S3280C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3280C3_nt;
extern VTBL_ENTRY _ZTI10S3280C3_nt[];
extern  VTBL_ENTRY _ZTV10S3280C3_nt[];
extern Class_Descriptor cd_S3280C2_nt;
extern VTBL_ENTRY _ZTI10S3280C2_nt[];
extern  VTBL_ENTRY _ZTV10S3280C2_nt[];
static Base_Class bases_S3280C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C3_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_S3280C2_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 _ZTI7S3280C1[];
extern void _ZN7S3280C1D1Ev();
extern void _ZN7S3280C1D0Ev();
extern void _ZN10S3280C3_nt2v5Ev();
extern void _ZN10S3280C3_nt2v6Ev();
extern void _ZN10S3280C3_nt2v7Ev();
extern void _ZN10S3280C3_nt2v8Ev();
extern void _ZN10S3280C3_nt2v9Ev();
extern void _ZN10S3280C3_nt3v10Ev();
extern void _ZN10S3280C3_nt3v11Ev();
extern void _ZN10S3280C3_nt3v12Ev();
extern void _ZN10S3280C3_nt3v13Ev();
extern void _ZN10S3280C3_nt3v14Ev();
extern void _ZN10S3280C3_nt3v15Ev();
extern void _ZN10S3280C3_nt3v16Ev();
extern void _ZN10S3280C3_nt3v17Ev();
extern void _ZN10S3280C3_nt3v18Ev();
extern void _ZN10S3280C3_nt3v19Ev();
extern void _ZN10S3280C3_nt3v20Ev();
extern void _ZN10S3280C3_nt3v21Ev();
extern void _ZN10S3280C3_nt3v22Ev();
extern void _ZN10S3280C3_nt3v23Ev();
extern void _ZN10S3280C3_nt3v24Ev();
extern void _ZN10S3280C3_nt3v25Ev();
extern void _ZN10S3280C3_nt3v26Ev();
extern void _ZN10S3280C3_nt3v27Ev();
extern void _ZN10S3280C3_nt3v28Ev();
extern void _ZN10S3280C3_nt3v29Ev();
extern void _ZN10S3280C3_nt3v30Ev();
extern void _ZN10S3280C3_nt3v31Ev();
extern void _ZN10S3280C3_nt3v32Ev();
extern void _ZN10S3280C3_nt3v33Ev();
extern void _ZN10S3280C3_nt3v34Ev();
extern void _ZN10S3280C3_nt3v35Ev();
extern void _ZN10S3280C3_nt3v36Ev();
extern void _ZN10S3280C3_nt3v37Ev();
extern void _ZN10S3280C3_nt3v38Ev();
extern void _ZN10S3280C3_nt3v39Ev();
extern void _ZN10S3280C3_nt3v40Ev();
extern void _ZN10S3280C3_nt3v41Ev();
extern void _ZN10S3280C3_nt3v42Ev();
extern void _ZN10S3280C3_nt3v43Ev();
extern void _ZN10S3280C3_nt3v44Ev();
extern void _ZN10S3280C3_nt3v45Ev();
extern void _ZN10S3280C3_nt3v46Ev();
extern void _ZN10S3280C3_nt3v47Ev();
extern void _ZN10S3280C3_nt3v48Ev();
extern void _ZN10S3280C3_nt3v49Ev();
extern void _ZN10S3280C3_nt3v50Ev();
extern void _ZN10S3280C3_nt3v51Ev();
extern void _ZN10S3280C3_nt3v52Ev();
extern void _ZN10S3280C3_nt3v53Ev();
extern void _ZN10S3280C3_nt3v54Ev();
extern void _ZN10S3280C3_nt3v55Ev();
extern void _ZN10S3280C3_nt3v56Ev();
extern void _ZN10S3280C3_nt3v57Ev();
extern void _ZN10S3280C3_nt3v58Ev();
extern void _ZN10S3280C3_nt3v59Ev();
extern void _ZN10S3280C3_nt3v60Ev();
extern void _ZN10S3280C3_nt3v61Ev();
extern void _ZN10S3280C3_nt3v62Ev();
extern void _ZN10S3280C3_nt3v63Ev();
extern void _ZN10S3280C3_nt3v64Ev();
extern void _ZN10S3280C3_nt3v65Ev();
extern void _ZN10S3280C3_nt3v66Ev();
extern void _ZN10S3280C3_nt3v67Ev();
extern void _ZN10S3280C3_nt3v68Ev();
extern void _ZN10S3280C2_nt3v69Ev();
extern void _ZN10S3280C2_nt3v70Ev();
extern void _ZN10S3280C2_nt3v71Ev();
extern void _ZN10S3280C2_nt3v72Ev();
extern void _ZN10S3280C2_nt3v73Ev();
extern void _ZN10S3280C2_nt3v74Ev();
extern void _ZN10S3280C2_nt3v75Ev();
extern void _ZN10S3280C2_nt3v76Ev();
extern void _ZN10S3280C2_nt3v77Ev();
extern void _ZN10S3280C2_nt3v78Ev();
extern void _ZN10S3280C2_nt3v79Ev();
extern void _ZN10S3280C2_nt3v80Ev();
extern void _ZN10S3280C2_nt3v81Ev();
extern void _ZN10S3280C2_nt3v82Ev();
extern void _ZN10S3280C2_nt3v83Ev();
extern void _ZN10S3280C2_nt3v84Ev();
extern void _ZN10S3280C2_nt3v85Ev();
extern void _ZN10S3280C2_nt3v86Ev();
extern void _ZN10S3280C2_nt3v87Ev();
extern void _ZN10S3280C2_nt3v88Ev();
extern void _ZN10S3280C2_nt3v89Ev();
extern void _ZN10S3280C2_nt3v90Ev();
extern void _ZN10S3280C2_nt3v91Ev();
extern void _ZN10S3280C2_nt3v92Ev();
extern void _ZN10S3280C2_nt3v93Ev();
extern void _ZN10S3280C2_nt3v94Ev();
extern void _ZN10S3280C2_nt3v95Ev();
extern void _ZN10S3280C2_nt3v96Ev();
extern void _ZN10S3280C2_nt3v97Ev();
extern void _ZN10S3280C2_nt3v98Ev();
extern void _ZN10S3280C2_nt3v99Ev();
extern void _ZN10S3280C2_nt4v100Ev();
extern void _ZN10S3280C2_nt4v101Ev();
extern void _ZN10S3280C2_nt4v102Ev();
extern void _ZN10S3280C2_nt4v103Ev();
extern void _ZN10S3280C2_nt4v104Ev();
extern void _ZN10S3280C2_nt4v105Ev();
extern void _ZN10S3280C2_nt4v106Ev();
extern void _ZN10S3280C2_nt4v107Ev();
extern void _ZN10S3280C2_nt4v108Ev();
extern void _ZN10S3280C2_nt4v109Ev();
extern void _ZN10S3280C2_nt4v110Ev();
extern void _ZN10S3280C2_nt4v111Ev();
extern void _ZN10S3280C2_nt4v112Ev();
extern void _ZN10S3280C2_nt4v113Ev();
extern void _ZN10S3280C2_nt4v114Ev();
extern void _ZN10S3280C2_nt4v115Ev();
extern void _ZN10S3280C2_nt4v116Ev();
extern void _ZN10S3280C2_nt4v117Ev();
extern void _ZN10S3280C2_nt4v118Ev();
extern void _ZN10S3280C2_nt4v119Ev();
extern void _ZN10S3280C2_nt4v120Ev();
extern void _ZN10S3280C2_nt4v121Ev();
extern void _ZN10S3280C2_nt4v122Ev();
extern void _ZN10S3280C2_nt4v123Ev();
extern void _ZN10S3280C2_nt4v124Ev();
extern void _ZN10S3280C2_nt4v125Ev();
extern void _ZN10S3280C2_nt4v126Ev();
extern void _ZN10S3280C2_nt4v127Ev();
extern void _ZN10S3280C2_nt4v128Ev();
extern void _ZN10S3280C2_nt4v129Ev();
extern void _ZN10S3280C2_nt4v130Ev();
extern void _ZN10S3280C2_nt4v131Ev();
extern void _ZN10S3280C2_nt4v132Ev();
extern void _ZN10S3280C2_nt4v133Ev();
extern void _ZN10S3280C2_nt4v134Ev();
extern void _ZN10S3280C2_nt4v135Ev();
extern void _ZN10S3280C2_nt4v136Ev();
extern void _ZN10S3280C2_nt4v137Ev();
extern void _ZN10S3280C2_nt4v138Ev();
extern void _ZN10S3280C2_nt4v139Ev();
extern void _ZN10S3280C2_nt4v140Ev();
extern void _ZN10S3280C2_nt4v141Ev();
extern void _ZN10S3280C2_nt4v142Ev();
extern void _ZN10S3280C2_nt4v143Ev();
extern void _ZN10S3280C2_nt4v144Ev();
extern void _ZN10S3280C2_nt4v145Ev();
extern void _ZN10S3280C2_nt4v146Ev();
extern void _ZN10S3280C2_nt4v147Ev();
extern void _ZN10S3280C2_nt4v148Ev();
extern void _ZN10S3280C2_nt4v149Ev();
extern void _ZN10S3280C2_nt4v150Ev();
extern void _ZN10S3280C2_nt4v151Ev();
extern void _ZN10S3280C2_nt4v152Ev();
extern void _ZN10S3280C2_nt4v153Ev();
extern void _ZN10S3280C2_nt4v154Ev();
extern void _ZN10S3280C2_nt4v155Ev();
extern void _ZN10S3280C2_nt4v156Ev();
extern void _ZN10S3280C2_nt4v157Ev();
extern void _ZN10S3280C2_nt4v158Ev();
extern void _ZN10S3280C2_nt4v159Ev();
extern void _ZN10S3280C2_nt4v160Ev();
extern void _ZN10S3280C2_nt4v161Ev();
extern void _ZN10S3280C2_nt4v162Ev();
extern void _ZN10S3280C2_nt4v163Ev();
extern void _ZN10S3280C2_nt4v164Ev();
extern void _ZN10S3280C2_nt4v165Ev();
extern void _ZN10S3280C2_nt4v166Ev();
extern void _ZN10S3280C2_nt4v167Ev();
extern void _ZN10S3280C2_nt4v168Ev();
extern void _ZN10S3280C2_nt4v169Ev();
extern void _ZN10S3280C2_nt4v170Ev();
extern void _ZN10S3280C2_nt4v171Ev();
extern void _ZN10S3280C2_nt4v172Ev();
extern void _ZN10S3280C2_nt4v173Ev();
extern void _ZN10S3280C2_nt4v174Ev();
extern void _ZN10S3280C2_nt4v175Ev();
extern void _ZN10S3280C2_nt4v176Ev();
extern void _ZN10S3280C2_nt4v177Ev();
extern void _ZN10S3280C2_nt4v178Ev();
extern void _ZN10S3280C2_nt4v179Ev();
extern void _ZN10S3280C2_nt4v180Ev();
extern void _ZN10S3280C2_nt4v181Ev();
extern void _ZN10S3280C2_nt4v182Ev();
extern void _ZN10S3280C2_nt4v183Ev();
extern void _ZN10S3280C2_nt4v184Ev();
extern void _ZN10S3280C2_nt4v185Ev();
extern void _ZN10S3280C2_nt4v186Ev();
extern void _ZN10S3280C2_nt4v187Ev();
extern void _ZN10S3280C2_nt4v188Ev();
extern void _ZN10S3280C2_nt4v189Ev();
extern void _ZN10S3280C2_nt4v190Ev();
extern void _ZN10S3280C2_nt4v191Ev();
extern void _ZN10S3280C2_nt4v192Ev();
extern void _ZN10S3280C2_nt4v193Ev();
extern void _ZN10S3280C2_nt4v194Ev();
extern void _ZN10S3280C2_nt4v195Ev();
extern void _ZN10S3280C2_nt4v196Ev();
extern void _ZN10S3280C2_nt4v197Ev();
extern void _ZN10S3280C2_nt4v198Ev();
extern void _ZN10S3280C2_nt4v199Ev();
extern void _ZN10S3280C2_nt4v200Ev();
extern void _ZN10S3280C2_nt4v201Ev();
extern void _ZN10S3280C2_nt4v202Ev();
extern void _ZN10S3280C2_nt4v203Ev();
extern void _ZN10S3280C2_nt4v204Ev();
extern void _ZN10S3280C2_nt4v205Ev();
extern void _ZN10S3280C2_nt4v206Ev();
extern void _ZN10S3280C2_nt4v207Ev();
extern void _ZN10S3280C2_nt4v208Ev();
extern void _ZN10S3280C2_nt4v209Ev();
extern void _ZN10S3280C2_nt4v210Ev();
extern void _ZN10S3280C2_nt4v211Ev();
extern void _ZN7S3280C12v1Ev();
extern void _ZN7S3280C12v2Ev();
extern void _ZN7S3280C12v3Ev();
extern void _ZN7S3280C12v4Ev();
static  VTBL_ENTRY vtc_S3280C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3280C1[0]),
  (VTBL_ENTRY)&_ZN7S3280C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3280C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3280C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3280C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN7S3280C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3280C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3280C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3280C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3280C1[];
extern  VTBL_ENTRY _ZTV7S3280C1[];
Class_Descriptor cd_S3280C1 = {  "S3280C1", // class name
  bases_S3280C1, 2,
  &(vtc_S3280C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(576,440), // object size
  NSPAIRA(_ZTI7S3280C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3280C1),215, //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  S22028C2_nt  {
  void *s22028c2f0[2];
  void  mf22028c2(); // _ZN11S22028C2_nt9mf22028c2Ev
};
//SIG(-1 S22028C2_nt) C1{ m Fp[2]}


void  S22028C2_nt ::mf22028c2(){}

//skip512 S22028C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C4  {
  void *s22028c4f0[2];
  void  mf22028c4(); // _ZN8S22028C49mf22028c4Ev
};
//SIG(-1 S22028C4) C1{ m Fp[2]}


void  S22028C4 ::mf22028c4(){}

static void Test_S22028C4()
{
  {
    init_simple_test("S22028C4");
    S22028C4 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C4)");
    check_field_offset(lv, s22028c4f0, 0, "S22028C4.s22028c4f0");
  }
}
static Arrange_To_Call_Me vS22028C4(Test_S22028C4, "S22028C4", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C10  {
  void *s22028c10f0[2];
  void  mf22028c10(); // _ZN9S22028C1010mf22028c10Ev
};
//SIG(-1 S22028C10) C1{ m Fp[2]}


void  S22028C10 ::mf22028c10(){}

static void Test_S22028C10()
{
  {
    init_simple_test("S22028C10");
    S22028C10 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C10)");
    check_field_offset(lv, s22028c10f0, 0, "S22028C10.s22028c10f0");
  }
}
static Arrange_To_Call_Me vS22028C10(Test_S22028C10, "S22028C10", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C10[];
VTBL_ENTRY *P__ZTI9S22028C10 = _ZTI9S22028C10; 
Class_Descriptor cd_S22028C10 = {  "S22028C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S22028C10),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  S22028C9_nt  {
  ::S22028C10 s22028c9f0;
  void  mf22028c9(); // _ZN11S22028C9_nt9mf22028c9Ev
};
//SIG(-1 S22028C9_nt) C1{ m FC2{ m Fp[2]}}


void  S22028C9_nt ::mf22028c9(){}

//skip512 S22028C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C12_nt  {
  void  mf22028c12(); // _ZN12S22028C12_nt10mf22028c12Ev
};
//SIG(-1 S22028C12_nt) C1{ m}


void  S22028C12_nt ::mf22028c12(){}

//skip512 S22028C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C11_nt  {
  void *s22028c11f0;
  int s22028c11f1;
  ::S22028C12_nt s22028c11f2;
  void  mf22028c11(); // _ZN12S22028C11_nt10mf22028c11Ev
};
//SIG(-1 S22028C11_nt) C1{ m Fp Fi FC2{ m}}


void  S22028C11_nt ::mf22028c11(){}

//skip512 S22028C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C16  {
  void  mf22028c16(); // _ZN9S22028C1610mf22028c16Ev
};
//SIG(-1 S22028C16) C1{ m}


void  S22028C16 ::mf22028c16(){}

static void Test_S22028C16()
{
  {
    init_simple_test("S22028C16");
    S22028C16 lv;
    check2(sizeof(lv), 1, "sizeof(S22028C16)");
    check2(__alignof__(lv), 1, "__alignof__(S22028C16)");
  }
}
static Arrange_To_Call_Me vS22028C16(Test_S22028C16, "S22028C16", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C16[];
VTBL_ENTRY *P__ZTI9S22028C16 = _ZTI9S22028C16; 
Class_Descriptor cd_S22028C16 = {  "S22028C16", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S22028C16),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  S22028C14_nt  {
  void *s22028c14f0;
  int s22028c14f1;
  ::S22028C12_nt s22028c14f2;
  ::S22028C16 s22028c14f3;
  void  mf22028c14(); // _ZN12S22028C14_nt10mf22028c14Ev
};
//SIG(-1 S22028C14_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S22028C14_nt ::mf22028c14(){}

//skip512 S22028C14_nt

#else // __cplusplus

Class_Descriptor cd_S22028C14_nt = {  "S22028C14_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  S22028C13_nt  : S22028C14_nt {
};
//SIG(-1 S22028C13_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S22028C13_nt

#else // __cplusplus

extern Class_Descriptor cd_S22028C14_nt;
static Base_Class bases_S22028C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C14_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  S22028C8_nt  {
  ::S22028C9_nt s22028c8f0;
  ::S22028C11_nt s22028c8f1;
  ::S22028C13_nt s22028c8f2;
  ::S22028C11_nt s22028c8f3;
  ::S22028C11_nt s22028c8f4;
  char s22028c8f5[2];
  int s22028c8f6;
  void  mf22028c8(); // _ZN11S22028C8_nt9mf22028c8Ev
};
//SIG(-1 S22028C8_nt) C1{ m FC2{ m FC3{ m Fp[2]}} FC4{ m Fp Fi FC5{ m}} FC6{ BC7{ m Fp Fi FC5 FC8{ m}}} FC4 FC4 Fc[2] Fi}


void  S22028C8_nt ::mf22028c8(){}

//skip512 S22028C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C19_nt  : S22028C10 {
  ::S22028C13_nt s22028c19f0;
  ::S22028C11_nt s22028c19f1;
  ::S22028C11_nt s22028c19f2;
  ::S22028C11_nt s22028c19f3;
  ::S22028C11_nt s22028c19f4;
  virtual  ~S22028C19_nt(); // _ZN12S22028C19_ntD1Ev
  virtual void  v14(); // _ZN12S22028C19_nt3v14Ev
  virtual void  v15(); // _ZN12S22028C19_nt3v15Ev
  virtual void  v16(); // _ZN12S22028C19_nt3v16Ev
  virtual void  v17(); // _ZN12S22028C19_nt3v17Ev
  virtual void  v18(); // _ZN12S22028C19_nt3v18Ev
  virtual void  v19(); // _ZN12S22028C19_nt3v19Ev
  S22028C19_nt(); // tgen
};
//SIG(-1 S22028C19_nt) C1{ BC2{ m Fp[2]} vd v1 v2 v3 v4 v5 v6 FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ m Fp Fi FC5} FC7 FC7 FC7}


 S22028C19_nt ::~S22028C19_nt(){ note_dtor("S22028C19_nt", this);}
void  S22028C19_nt ::v14(){vfunc_called(this, "_ZN12S22028C19_nt3v14Ev");}
void  S22028C19_nt ::v15(){vfunc_called(this, "_ZN12S22028C19_nt3v15Ev");}
void  S22028C19_nt ::v16(){vfunc_called(this, "_ZN12S22028C19_nt3v16Ev");}
void  S22028C19_nt ::v17(){vfunc_called(this, "_ZN12S22028C19_nt3v17Ev");}
void  S22028C19_nt ::v18(){vfunc_called(this, "_ZN12S22028C19_nt3v18Ev");}
void  S22028C19_nt ::v19(){vfunc_called(this, "_ZN12S22028C19_nt3v19Ev");}
S22028C19_nt ::S22028C19_nt(){ note_ctor("S22028C19_nt", this);} // tgen

//skip512 S22028C19_nt

#else // __cplusplus

extern void _ZN12S22028C19_ntC1Ev();
extern void _ZN12S22028C19_ntD1Ev();
Name_Map name_map_S22028C19_nt[] = {
  NSPAIR(_ZN12S22028C19_ntC1Ev),
  NSPAIR(_ZN12S22028C19_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C10;
extern VTBL_ENTRY _ZTI9S22028C10[];
static Base_Class bases_S22028C19_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C10,    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 _ZTI12S22028C19_nt[];
extern void _ZN12S22028C19_ntD1Ev();
extern void _ZN12S22028C19_ntD0Ev();
extern void _ZN12S22028C19_nt3v14Ev();
extern void _ZN12S22028C19_nt3v15Ev();
extern void _ZN12S22028C19_nt3v16Ev();
extern void _ZN12S22028C19_nt3v17Ev();
extern void _ZN12S22028C19_nt3v18Ev();
extern void _ZN12S22028C19_nt3v19Ev();
static  VTBL_ENTRY vtc_S22028C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S22028C19_nt[0]),
  (VTBL_ENTRY)&_ZN12S22028C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v14Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v15Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v16Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v18Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI12S22028C19_nt[];
VTBL_ENTRY *P__ZTI12S22028C19_nt = _ZTI12S22028C19_nt; 
extern  VTBL_ENTRY _ZTV12S22028C19_nt[];
Class_Descriptor cd_S22028C19_nt = {  "S22028C19_nt", // class name
  bases_S22028C19_nt, 1,
  &(vtc_S22028C19_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI12S22028C19_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV12S22028C19_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C26_nt  {
  void *s22028c26f0;
  int s22028c26f1[2];
  ::S22028C16 s22028c26f2;
  void  mf22028c26(); // _ZN12S22028C26_nt10mf22028c26Ev
};
//SIG(-1 S22028C26_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S22028C26_nt ::mf22028c26(){}

//skip512 S22028C26_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C29_nt  {
  int s22028c29f0[3];
  void  mf22028c29(); // _ZN12S22028C29_nt10mf22028c29Ev
};
//SIG(-1 S22028C29_nt) C1{ m Fi[3]}


void  S22028C29_nt ::mf22028c29(){}

//skip512 S22028C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C28_nt  {
  char s22028c28f0;
  ::S22028C29_nt s22028c28f1;
  int s22028c28f2[2];
  void  mf22028c28(); // _ZN12S22028C28_nt10mf22028c28Ev
};
//SIG(-1 S22028C28_nt) C1{ m Fc FC2{ m Fi[3]} Fi[2]}


void  S22028C28_nt ::mf22028c28(){}

//skip512 S22028C28_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C25_nt  {
  ::S22028C26_nt s22028c25f0;
  ::S22028C28_nt s22028c25f1;
  ::S22028C11_nt s22028c25f2;
  virtual  ~S22028C25_nt(); // _ZN12S22028C25_ntD1Ev
  virtual void  v21(); // _ZN12S22028C25_nt3v21Ev
  S22028C25_nt(); // tgen
};
//SIG(-1 S22028C25_nt) C1{ vd v1 FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fc FC5{ m Fi[3]} Fi[2]} FC6{ m Fp Fi FC7{ m}}}


 S22028C25_nt ::~S22028C25_nt(){ note_dtor("S22028C25_nt", this);}
void  S22028C25_nt ::v21(){vfunc_called(this, "_ZN12S22028C25_nt3v21Ev");}
S22028C25_nt ::S22028C25_nt(){ note_ctor("S22028C25_nt", this);} // tgen

//skip512 S22028C25_nt

#else // __cplusplus

extern void _ZN12S22028C25_ntC1Ev();
extern void _ZN12S22028C25_ntD1Ev();
Name_Map name_map_S22028C25_nt[] = {
  NSPAIR(_ZN12S22028C25_ntC1Ev),
  NSPAIR(_ZN12S22028C25_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
extern void _ZN12S22028C25_ntD1Ev();
extern void _ZN12S22028C25_ntD0Ev();
extern void _ZN12S22028C25_nt3v21Ev();
static  VTBL_ENTRY vtc_S22028C25_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S22028C25_nt[0]),
  (VTBL_ENTRY)&_ZN12S22028C25_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
VTBL_ENTRY *P__ZTI12S22028C25_nt = _ZTI12S22028C25_nt; 
extern  VTBL_ENTRY _ZTV12S22028C25_nt[];
Class_Descriptor cd_S22028C25_nt = {  "S22028C25_nt", // class name
  0,0,//no base classes
  &(vtc_S22028C25_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI12S22028C25_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S22028C25_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C30  {
  void *s22028c30f0[2];
  void  mf22028c30(); // _ZN9S22028C3010mf22028c30Ev
};
//SIG(-1 S22028C30) C1{ m Fp[2]}


void  S22028C30 ::mf22028c30(){}

static void Test_S22028C30()
{
  {
    init_simple_test("S22028C30");
    S22028C30 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C30)");
    check_field_offset(lv, s22028c30f0, 0, "S22028C30.s22028c30f0");
  }
}
static Arrange_To_Call_Me vS22028C30(Test_S22028C30, "S22028C30", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C30[];
VTBL_ENTRY *P__ZTI9S22028C30 = _ZTI9S22028C30; 
Class_Descriptor cd_S22028C30 = {  "S22028C30", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S22028C30),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  S22028C34_nt  {
  __tsi64 s22028c34f0[2];
  void  mf22028c34(); // _ZN12S22028C34_nt10mf22028c34Ev
};
//SIG(-1 S22028C34_nt) C1{ m FL[2]}


void  S22028C34_nt ::mf22028c34(){}

//skip512 S22028C34_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C33_nt  {
  ::S22028C34_nt s22028c33f0;
  void  mf22028c33(); // _ZN12S22028C33_nt10mf22028c33Ev
};
//SIG(-1 S22028C33_nt) C1{ m FC2{ m FL[2]}}


void  S22028C33_nt ::mf22028c33(){}

//skip512 S22028C33_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C32  {
  int s22028c32f0[8];
  ::S22028C33_nt s22028c32f1;
  ::S22028C33_nt s22028c32f2;
  void  mf22028c32(); // _ZN9S22028C3210mf22028c32Ev
};
//SIG(-1 S22028C32) C1{ m Fi[8] FC2{ m FC3{ m FL[2]}} FC2}


void  S22028C32 ::mf22028c32(){}

static void Test_S22028C32()
{
  {
    init_simple_test("S22028C32");
    S22028C32 lv;
    check2(sizeof(lv), 64, "sizeof(S22028C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C32)");
    check_field_offset(lv, s22028c32f0, 0, "S22028C32.s22028c32f0");
    check_field_offset(lv, s22028c32f1, 32, "S22028C32.s22028c32f1");
    check_field_offset(lv, s22028c32f2, 48, "S22028C32.s22028c32f2");
  }
}
static Arrange_To_Call_Me vS22028C32(Test_S22028C32, "S22028C32", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C36_nt  {
  virtual  ~S22028C36_nt(); // _ZN12S22028C36_ntD1Ev
  virtual void  v29(); // _ZN12S22028C36_nt3v29Ev
  virtual void  v30(); // _ZN12S22028C36_nt3v30Ev
  virtual void  v31(); // _ZN12S22028C36_nt3v31Ev
  virtual void  v32(); // _ZN12S22028C36_nt3v32Ev
  virtual void  v33(); // _ZN12S22028C36_nt3v33Ev
  virtual void  v34(); // _ZN12S22028C36_nt3v34Ev
  virtual void  v35(); // _ZN12S22028C36_nt3v35Ev
  S22028C36_nt(); // tgen
};
//SIG(-1 S22028C36_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S22028C36_nt ::~S22028C36_nt(){ note_dtor("S22028C36_nt", this);}
void  S22028C36_nt ::v29(){vfunc_called(this, "_ZN12S22028C36_nt3v29Ev");}
void  S22028C36_nt ::v30(){vfunc_called(this, "_ZN12S22028C36_nt3v30Ev");}
void  S22028C36_nt ::v31(){vfunc_called(this, "_ZN12S22028C36_nt3v31Ev");}
void  S22028C36_nt ::v32(){vfunc_called(this, "_ZN12S22028C36_nt3v32Ev");}
void  S22028C36_nt ::v33(){vfunc_called(this, "_ZN12S22028C36_nt3v33Ev");}
void  S22028C36_nt ::v34(){vfunc_called(this, "_ZN12S22028C36_nt3v34Ev");}
void  S22028C36_nt ::v35(){vfunc_called(this, "_ZN12S22028C36_nt3v35Ev");}
S22028C36_nt ::S22028C36_nt(){ note_ctor("S22028C36_nt", this);} // tgen

//skip512 S22028C36_nt

#else // __cplusplus

extern void _ZN12S22028C36_ntC1Ev();
extern void _ZN12S22028C36_ntD1Ev();
Name_Map name_map_S22028C36_nt[] = {
  NSPAIR(_ZN12S22028C36_ntC1Ev),
  NSPAIR(_ZN12S22028C36_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S22028C36_nt[];
extern void _ZN12S22028C36_ntD1Ev();
extern void _ZN12S22028C36_ntD0Ev();
extern void _ZN12S22028C36_nt3v29Ev();
extern void _ZN12S22028C36_nt3v30Ev();
extern void _ZN12S22028C36_nt3v31Ev();
extern void _ZN12S22028C36_nt3v32Ev();
extern void _ZN12S22028C36_nt3v33Ev();
extern void _ZN12S22028C36_nt3v34Ev();
extern void _ZN12S22028C36_nt3v35Ev();
static  VTBL_ENTRY vtc_S22028C36_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S22028C36_nt[0]),
  (VTBL_ENTRY)&_ZN12S22028C36_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v30Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v31Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v35Ev,
};
extern VTBL_ENTRY _ZTI12S22028C36_nt[];
VTBL_ENTRY *P__ZTI12S22028C36_nt = _ZTI12S22028C36_nt; 
extern  VTBL_ENTRY _ZTV12S22028C36_nt[];
Class_Descriptor cd_S22028C36_nt = {  "S22028C36_nt", // class name
  0,0,//no base classes
  &(vtc_S22028C36_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S22028C36_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S22028C36_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C35_nt  : S22028C36_nt {
  int s22028c35f0;
  void *s22028c35f1;
  virtual  ~S22028C35_nt(); // _ZN12S22028C35_ntD1Ev
  virtual void  v22(); // _ZN12S22028C35_nt3v22Ev
  virtual void  v23(); // _ZN12S22028C35_nt3v23Ev
  virtual void  v24(); // _ZN12S22028C35_nt3v24Ev
  virtual void  v25(); // _ZN12S22028C35_nt3v25Ev
  virtual void  v26(); // _ZN12S22028C35_nt3v26Ev
  virtual void  v27(); // _ZN12S22028C35_nt3v27Ev
  virtual void  v28(); // _ZN12S22028C35_nt3v28Ev
  S22028C35_nt(); // tgen
};
//SIG(-1 S22028C35_nt) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fi Fp}


 S22028C35_nt ::~S22028C35_nt(){ note_dtor("S22028C35_nt", this);}
void  S22028C35_nt ::v22(){vfunc_called(this, "_ZN12S22028C35_nt3v22Ev");}
void  S22028C35_nt ::v23(){vfunc_called(this, "_ZN12S22028C35_nt3v23Ev");}
void  S22028C35_nt ::v24(){vfunc_called(this, "_ZN12S22028C35_nt3v24Ev");}
void  S22028C35_nt ::v25(){vfunc_called(this, "_ZN12S22028C35_nt3v25Ev");}
void  S22028C35_nt ::v26(){vfunc_called(this, "_ZN12S22028C35_nt3v26Ev");}
void  S22028C35_nt ::v27(){vfunc_called(this, "_ZN12S22028C35_nt3v27Ev");}
void  S22028C35_nt ::v28(){vfunc_called(this, "_ZN12S22028C35_nt3v28Ev");}
S22028C35_nt ::S22028C35_nt(){ note_ctor("S22028C35_nt", this);} // tgen

//skip512 S22028C35_nt

#else // __cplusplus

extern void _ZN12S22028C35_ntC1Ev();
extern void _ZN12S22028C35_ntD1Ev();
Name_Map name_map_S22028C35_nt[] = {
  NSPAIR(_ZN12S22028C35_ntC1Ev),
  NSPAIR(_ZN12S22028C35_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C36_nt;
extern VTBL_ENTRY _ZTI12S22028C36_nt[];
extern  VTBL_ENTRY _ZTV12S22028C36_nt[];
static Base_Class bases_S22028C35_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C36_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 _ZTI12S22028C35_nt[];
extern void _ZN12S22028C35_ntD1Ev();
extern void _ZN12S22028C35_ntD0Ev();
extern void _ZN12S22028C36_nt3v29Ev();
extern void _ZN12S22028C36_nt3v30Ev();
extern void _ZN12S22028C36_nt3v31Ev();
extern void _ZN12S22028C36_nt3v32Ev();
extern void _ZN12S22028C36_nt3v33Ev();
extern void _ZN12S22028C36_nt3v34Ev();
extern void _ZN12S22028C36_nt3v35Ev();
extern void _ZN12S22028C35_nt3v22Ev();
extern void _ZN12S22028C35_nt3v23Ev();
extern void _ZN12S22028C35_nt3v24Ev();
extern void _ZN12S22028C35_nt3v25Ev();
extern void _ZN12S22028C35_nt3v26Ev();
extern void _ZN12S22028C35_nt3v27Ev();
extern void _ZN12S22028C35_nt3v28Ev();
static  VTBL_ENTRY vtc_S22028C35_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S22028C35_nt[0]),
  (VTBL_ENTRY)&_ZN12S22028C35_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v30Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v31Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v35Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_nt3v22Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_nt3v23Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_nt3v24Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_nt3v25Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_nt3v26Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_nt3v27Ev,
  (VTBL_ENTRY)&_ZN12S22028C35_nt3v28Ev,
};
extern VTBL_ENTRY _ZTI12S22028C35_nt[];
VTBL_ENTRY *P__ZTI12S22028C35_nt = _ZTI12S22028C35_nt; 
extern  VTBL_ENTRY _ZTV12S22028C35_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C37_nt  : S22028C36_nt {
  ::S22028C33_nt s22028c37f0;
  void *s22028c37f1;
  virtual  ~S22028C37_nt(); // _ZN12S22028C37_ntD1Ev
  virtual void  v36(); // _ZN12S22028C37_nt3v36Ev
  virtual void  v37(); // _ZN12S22028C37_nt3v37Ev
  virtual void  v38(); // _ZN12S22028C37_nt3v38Ev
  virtual void  v39(); // _ZN12S22028C37_nt3v39Ev
  virtual void  v40(); // _ZN12S22028C37_nt3v40Ev
  virtual void  v41(); // _ZN12S22028C37_nt3v41Ev
  virtual void  v42(); // _ZN12S22028C37_nt3v42Ev
  S22028C37_nt(); // tgen
};
//SIG(-1 S22028C37_nt) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 FC3{ m FC4{ m FL[2]}} Fp}


 S22028C37_nt ::~S22028C37_nt(){ note_dtor("S22028C37_nt", this);}
void  S22028C37_nt ::v36(){vfunc_called(this, "_ZN12S22028C37_nt3v36Ev");}
void  S22028C37_nt ::v37(){vfunc_called(this, "_ZN12S22028C37_nt3v37Ev");}
void  S22028C37_nt ::v38(){vfunc_called(this, "_ZN12S22028C37_nt3v38Ev");}
void  S22028C37_nt ::v39(){vfunc_called(this, "_ZN12S22028C37_nt3v39Ev");}
void  S22028C37_nt ::v40(){vfunc_called(this, "_ZN12S22028C37_nt3v40Ev");}
void  S22028C37_nt ::v41(){vfunc_called(this, "_ZN12S22028C37_nt3v41Ev");}
void  S22028C37_nt ::v42(){vfunc_called(this, "_ZN12S22028C37_nt3v42Ev");}
S22028C37_nt ::S22028C37_nt(){ note_ctor("S22028C37_nt", this);} // tgen

//skip512 S22028C37_nt

#else // __cplusplus

extern void _ZN12S22028C37_ntC1Ev();
extern void _ZN12S22028C37_ntD1Ev();
Name_Map name_map_S22028C37_nt[] = {
  NSPAIR(_ZN12S22028C37_ntC1Ev),
  NSPAIR(_ZN12S22028C37_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C36_nt;
extern VTBL_ENTRY _ZTI12S22028C36_nt[];
extern  VTBL_ENTRY _ZTV12S22028C36_nt[];
static Base_Class bases_S22028C37_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C36_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 _ZTI12S22028C37_nt[];
extern void _ZN12S22028C37_ntD1Ev();
extern void _ZN12S22028C37_ntD0Ev();
extern void _ZN12S22028C36_nt3v29Ev();
extern void _ZN12S22028C36_nt3v30Ev();
extern void _ZN12S22028C36_nt3v31Ev();
extern void _ZN12S22028C36_nt3v32Ev();
extern void _ZN12S22028C36_nt3v33Ev();
extern void _ZN12S22028C36_nt3v34Ev();
extern void _ZN12S22028C36_nt3v35Ev();
extern void _ZN12S22028C37_nt3v36Ev();
extern void _ZN12S22028C37_nt3v37Ev();
extern void _ZN12S22028C37_nt3v38Ev();
extern void _ZN12S22028C37_nt3v39Ev();
extern void _ZN12S22028C37_nt3v40Ev();
extern void _ZN12S22028C37_nt3v41Ev();
extern void _ZN12S22028C37_nt3v42Ev();
static  VTBL_ENTRY vtc_S22028C37_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S22028C37_nt[0]),
  (VTBL_ENTRY)&_ZN12S22028C37_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v29Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v30Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v31Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v32Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v33Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v34Ev,
  (VTBL_ENTRY)&_ZN12S22028C36_nt3v35Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_nt3v36Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_nt3v37Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_nt3v38Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_nt3v39Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_nt3v40Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_nt3v41Ev,
  (VTBL_ENTRY)&_ZN12S22028C37_nt3v42Ev,
};
extern VTBL_ENTRY _ZTI12S22028C37_nt[];
VTBL_ENTRY *P__ZTI12S22028C37_nt = _ZTI12S22028C37_nt; 
extern  VTBL_ENTRY _ZTV12S22028C37_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C31  {
  ::S22028C32 s22028c31f0;
  ::S22028C35_nt s22028c31f1;
  ::S22028C35_nt s22028c31f2;
  ::S22028C35_nt s22028c31f3;
  ::S22028C35_nt s22028c31f4;
  ::S22028C35_nt s22028c31f5;
  ::S22028C35_nt s22028c31f6;
  ::S22028C35_nt s22028c31f7;
  ::S22028C35_nt s22028c31f8;
  ::S22028C37_nt s22028c31f9;
  ::S22028C37_nt s22028c31f10;
  void  mf22028c31(); // _ZN9S22028C3110mf22028c31Ev
};
//SIG(-1 S22028C31) C1{ m FC2{ m Fi[8] FC3{ m FC4{ m FL[2]}} FC3} FC5{ BC6{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fi Fp} FC5 FC5 FC5 FC5 FC5 FC5 FC5 FC7{ BC6 vd v15 v16 v17 v18 v19 v20 v21 FC3 Fp} FC7}


void  S22028C31 ::mf22028c31(){}

static void Test_S22028C31()
{
  {
    init_simple_test("S22028C31");
    S22028C31 lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S22028C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C31)");
    check_field_offset(lv, s22028c31f0, 0, "S22028C31.s22028c31f0");
    check_field_offset(lv, s22028c31f1, 64, "S22028C31.s22028c31f1");
    check_field_offset(lv, s22028c31f2, ABISELECT(88,76), "S22028C31.s22028c31f2");
    check_field_offset(lv, s22028c31f3, ABISELECT(112,88), "S22028C31.s22028c31f3");
    check_field_offset(lv, s22028c31f4, ABISELECT(136,100), "S22028C31.s22028c31f4");
    check_field_offset(lv, s22028c31f5, ABISELECT(160,112), "S22028C31.s22028c31f5");
    check_field_offset(lv, s22028c31f6, ABISELECT(184,124), "S22028C31.s22028c31f6");
    check_field_offset(lv, s22028c31f7, ABISELECT(208,136), "S22028C31.s22028c31f7");
    check_field_offset(lv, s22028c31f8, ABISELECT(232,148), "S22028C31.s22028c31f8");
    check_field_offset(lv, s22028c31f9, ABISELECT(256,160), "S22028C31.s22028c31f9");
    check_field_offset(lv, s22028c31f10, ABISELECT(288,184), "S22028C31.s22028c31f10");
  }
}
static Arrange_To_Call_Me vS22028C31(Test_S22028C31, "S22028C31", ABISELECT(320,208));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C24  : S22028C25_nt , S22028C30 {
  ::S22028C31 s22028c24f0;
  virtual void  v20(); // _ZN9S22028C243v20Ev
  ~S22028C24(); // tgen
  S22028C24(); // tgen
};
//SIG(-1 S22028C24) C1{ BC2{ vd v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fc FC6{ m Fi[3]} Fi[2]} FC7{ m Fp Fi FC8{ m}}} BC9{ m Fp[2]} v1 FC10{ m FC11{ m Fi[8] FC12{ m FC13{ m FL[2]}} FC12} FC14{ BC15{ vd v10 v11 v12 v13 v14 v15 v16} vd v3 v4 v5 v6 v7 v8 v9 Fi Fp} FC14 FC14 FC14 FC14 FC14 FC14 FC14 FC16{ BC15 vd v17 v18 v19 v20 v21 v22 v23 FC12 Fp} FC16}}


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

static void Test_S22028C24()
{
  extern Class_Descriptor cd_S22028C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,69)];
    init_test(&cd_S22028C24, buf);
    S22028C24 *dp, &lv = *(dp=new (buf) S22028C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,272), "sizeof(S22028C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C24)");
    check_base_class_offset(lv, (S22028C25_nt*), 0, "S22028C24");
    check_base_class_offset(lv, (S22028C30*), ABISELECT(72,56), "S22028C24");
    check_field_offset(lv, s22028c24f0, ABISELECT(88,64), "S22028C24.s22028c24f0");
    test_class_info(&lv, &cd_S22028C24);
    dp->~S22028C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C24(Test_S22028C24, "S22028C24", ABISELECT(408,272));

#else // __cplusplus

extern void _ZN9S22028C24C1Ev();
extern void _ZN9S22028C24D1Ev();
Name_Map name_map_S22028C24[] = {
  NSPAIR(_ZN9S22028C24C1Ev),
  NSPAIR(_ZN9S22028C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C25_nt;
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
extern  VTBL_ENTRY _ZTV12S22028C25_nt[];
extern Class_Descriptor cd_S22028C30;
extern VTBL_ENTRY _ZTI9S22028C30[];
static Base_Class bases_S22028C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C25_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C30,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S22028C24[];
extern void _ZN9S22028C24D1Ev();
extern void _ZN9S22028C24D0Ev();
extern void _ZN12S22028C25_nt3v21Ev();
extern void _ZN9S22028C243v20Ev();
static  VTBL_ENTRY vtc_S22028C24[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C24[0]),
  (VTBL_ENTRY)&_ZN9S22028C24D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C24D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S22028C243v20Ev,
};
extern VTBL_ENTRY _ZTI9S22028C24[];
extern  VTBL_ENTRY _ZTV9S22028C24[];
Class_Descriptor cd_S22028C24 = {  "S22028C24", // class name
  bases_S22028C24, 2,
  &(vtc_S22028C24[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,272), // object size
  NSPAIRA(_ZTI9S22028C24),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S22028C24),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  S22028C18  : S22028C19_nt {
  ::S22028C24 s22028c18f0;
  ::S22028C9_nt s22028c18f1;
  virtual void  v8(); // _ZN9S22028C182v8Ev
  virtual void  v9(); // _ZN9S22028C182v9Ev
  virtual void  v10(); // _ZN9S22028C183v10Ev
  virtual void  v11(); // _ZN9S22028C183v11Ev
  virtual void  v12(); // _ZN9S22028C183v12Ev
  virtual void  v13(); // _ZN9S22028C183v13Ev
  ~S22028C18(); // tgen
  S22028C18(); // tgen
};
//SIG(-1 S22028C18) C1{ BC2{ BC3{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m Fp Fi FC6} FC8 FC8 FC8} v1 v2 v3 v4 v5 v6 FC9{ BC10{ vd v14 FC11{ m Fp Fi[2] FC7} FC12{ m Fc FC13{ m Fi[3]} Fi[2]} FC8} BC14{ m Fp[2]} v13 FC15{ m FC16{ m Fi[8] FC17{ m FC18{ m FL[2]}} FC17} FC19{ BC20{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC19 FC19 FC19 FC19 FC19 FC19 FC19 FC21{ BC20 vd v29 v30 v31 v32 v33 v34 v35 FC17 Fp} FC21}} FC22{ m FC3}}


void  S22028C18 ::v8(){vfunc_called(this, "_ZN9S22028C182v8Ev");}
void  S22028C18 ::v9(){vfunc_called(this, "_ZN9S22028C182v9Ev");}
void  S22028C18 ::v10(){vfunc_called(this, "_ZN9S22028C183v10Ev");}
void  S22028C18 ::v11(){vfunc_called(this, "_ZN9S22028C183v11Ev");}
void  S22028C18 ::v12(){vfunc_called(this, "_ZN9S22028C183v12Ev");}
void  S22028C18 ::v13(){vfunc_called(this, "_ZN9S22028C183v13Ev");}
S22028C18 ::~S22028C18(){ note_dtor("S22028C18", this);} // tgen
S22028C18 ::S22028C18(){ note_ctor("S22028C18", this);} // tgen

static void Test_S22028C18()
{
  extern Class_Descriptor cd_S22028C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(67,89)];
    init_test(&cd_S22028C18, buf);
    S22028C18 *dp, &lv = *(dp=new (buf) S22028C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,352), "sizeof(S22028C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C18)");
    check_base_class_offset(lv, (S22028C10*)(S22028C19_nt*), ABISELECT(8,4), "S22028C18");
    check_base_class_offset(lv, (S22028C19_nt*), 0, "S22028C18");
    check_field_offset(lv, s22028c18f0, ABISELECT(104,72), "S22028C18.s22028c18f0");
    check_field_offset(lv, s22028c18f1, ABISELECT(512,344), "S22028C18.s22028c18f1");
    test_class_info(&lv, &cd_S22028C18);
    dp->~S22028C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C18(Test_S22028C18, "S22028C18", ABISELECT(528,352));

#else // __cplusplus

extern void _ZN9S22028C18C1Ev();
extern void _ZN9S22028C18D1Ev();
Name_Map name_map_S22028C18[] = {
  NSPAIR(_ZN9S22028C18C1Ev),
  NSPAIR(_ZN9S22028C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C10;
extern VTBL_ENTRY _ZTI9S22028C10[];
extern Class_Descriptor cd_S22028C19_nt;
extern VTBL_ENTRY _ZTI12S22028C19_nt[];
extern  VTBL_ENTRY _ZTV12S22028C19_nt[];
static Base_Class bases_S22028C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C10,    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_S22028C19_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 _ZTI9S22028C18[];
extern void _ZN9S22028C18D1Ev();
extern void _ZN9S22028C18D0Ev();
extern void _ZN12S22028C19_nt3v14Ev();
extern void _ZN12S22028C19_nt3v15Ev();
extern void _ZN12S22028C19_nt3v16Ev();
extern void _ZN12S22028C19_nt3v17Ev();
extern void _ZN12S22028C19_nt3v18Ev();
extern void _ZN12S22028C19_nt3v19Ev();
extern void _ZN9S22028C182v8Ev();
extern void _ZN9S22028C182v9Ev();
extern void _ZN9S22028C183v10Ev();
extern void _ZN9S22028C183v11Ev();
extern void _ZN9S22028C183v12Ev();
extern void _ZN9S22028C183v13Ev();
static  VTBL_ENTRY vtc_S22028C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C18[0]),
  (VTBL_ENTRY)&_ZN9S22028C18D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C18D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v14Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v15Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v16Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v18Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S22028C182v8Ev,
  (VTBL_ENTRY)&_ZN9S22028C182v9Ev,
  (VTBL_ENTRY)&_ZN9S22028C183v10Ev,
  (VTBL_ENTRY)&_ZN9S22028C183v11Ev,
  (VTBL_ENTRY)&_ZN9S22028C183v12Ev,
  (VTBL_ENTRY)&_ZN9S22028C183v13Ev,
};
extern VTBL_ENTRY _ZTI9S22028C18[];
extern  VTBL_ENTRY _ZTV9S22028C18[];
Class_Descriptor cd_S22028C18 = {  "S22028C18", // class name
  bases_S22028C18, 2,
  &(vtc_S22028C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(528,352), // object size
  NSPAIRA(_ZTI9S22028C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S22028C18),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C17  {
  ::S22028C18 s22028c17f0;
  ::S22028C24 s22028c17f1;
  void  mf22028c17(); // _ZN9S22028C1710mf22028c17Ev
};
//SIG(-1 S22028C17) C1{ m FC2{ BC3{ BC4{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ m Fp Fi FC7} FC9 FC9 FC9} v1 v2 v3 v4 v5 v6 FC10{ BC11{ vd v14 FC12{ m Fp Fi[2] FC8} FC13{ m Fc FC14{ m Fi[3]} Fi[2]} FC9} BC15{ m Fp[2]} v13 FC16{ m FC17{ m Fi[8] FC18{ m FC19{ m FL[2]}} FC18} FC20{ BC21{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC20 FC20 FC20 FC20 FC20 FC20 FC20 FC22{ BC21 vd v29 v30 v31 v32 v33 v34 v35 FC18 Fp} FC22}} FC23{ m FC4}} FC10}


void  S22028C17 ::mf22028c17(){}

static void Test_S22028C17()
{
  {
    init_simple_test("S22028C17");
    S22028C17 lv;
    check2(sizeof(lv), ABISELECT(936,624), "sizeof(S22028C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C17)");
    check_field_offset(lv, s22028c17f0, 0, "S22028C17.s22028c17f0");
    check_field_offset(lv, s22028c17f1, ABISELECT(528,352), "S22028C17.s22028c17f1");
  }
}
static Arrange_To_Call_Me vS22028C17(Test_S22028C17, "S22028C17", ABISELECT(936,624));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C42  {
  void *s22028c42f0[2];
  void  mf22028c42(); // _ZN9S22028C4210mf22028c42Ev
};
//SIG(-1 S22028C42) C1{ m Fp[2]}


void  S22028C42 ::mf22028c42(){}

static void Test_S22028C42()
{
  {
    init_simple_test("S22028C42");
    S22028C42 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C42)");
    check_field_offset(lv, s22028c42f0, 0, "S22028C42.s22028c42f0");
  }
}
static Arrange_To_Call_Me vS22028C42(Test_S22028C42, "S22028C42", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C42[];
VTBL_ENTRY *P__ZTI9S22028C42 = _ZTI9S22028C42; 
Class_Descriptor cd_S22028C42 = {  "S22028C42", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S22028C42),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  S22028C44  {
  int s22028c44f0[4];
  ::S22028C33_nt s22028c44f1;
  int s22028c44f2[3];
  void  mf22028c44(); // _ZN9S22028C4410mf22028c44Ev
};
//SIG(-1 S22028C44) C1{ m Fi[4] FC2{ m FC3{ m FL[2]}} Fi[3]}


void  S22028C44 ::mf22028c44(){}

static void Test_S22028C44()
{
  {
    init_simple_test("S22028C44");
    S22028C44 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S22028C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C44)");
    check_field_offset(lv, s22028c44f0, 0, "S22028C44.s22028c44f0");
    check_field_offset(lv, s22028c44f1, 16, "S22028C44.s22028c44f1");
    check_field_offset(lv, s22028c44f2, 32, "S22028C44.s22028c44f2");
  }
}
static Arrange_To_Call_Me vS22028C44(Test_S22028C44, "S22028C44", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C43  {
  ::S22028C44 s22028c43f0;
  ::S22028C35_nt s22028c43f1;
  ::S22028C35_nt s22028c43f2;
  ::S22028C35_nt s22028c43f3;
  ::S22028C35_nt s22028c43f4;
  ::S22028C37_nt s22028c43f5;
  ::S22028C35_nt s22028c43f6;
  ::S22028C35_nt s22028c43f7;
  ::S22028C35_nt s22028c43f8;
  ::S22028C35_nt s22028c43f9;
  void  mf22028c43(); // _ZN9S22028C4310mf22028c43Ev
};
//SIG(-1 S22028C43) C1{ m FC2{ m Fi[4] FC3{ m FC4{ m FL[2]}} Fi[3]} FC5{ BC6{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fi Fp} FC5 FC5 FC5 FC7{ BC6 vd v15 v16 v17 v18 v19 v20 v21 FC3 Fp} FC5 FC5 FC5 FC5}


void  S22028C43 ::mf22028c43(){}

static void Test_S22028C43()
{
  {
    init_simple_test("S22028C43");
    S22028C43 lv;
    check2(sizeof(lv), ABISELECT(272,164), "sizeof(S22028C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C43)");
    check_field_offset(lv, s22028c43f0, 0, "S22028C43.s22028c43f0");
    check_field_offset(lv, s22028c43f1, ABISELECT(48,44), "S22028C43.s22028c43f1");
    check_field_offset(lv, s22028c43f2, ABISELECT(72,56), "S22028C43.s22028c43f2");
    check_field_offset(lv, s22028c43f3, ABISELECT(96,68), "S22028C43.s22028c43f3");
    check_field_offset(lv, s22028c43f4, ABISELECT(120,80), "S22028C43.s22028c43f4");
    check_field_offset(lv, s22028c43f5, ABISELECT(144,92), "S22028C43.s22028c43f5");
    check_field_offset(lv, s22028c43f6, ABISELECT(176,116), "S22028C43.s22028c43f6");
    check_field_offset(lv, s22028c43f7, ABISELECT(200,128), "S22028C43.s22028c43f7");
    check_field_offset(lv, s22028c43f8, ABISELECT(224,140), "S22028C43.s22028c43f8");
    check_field_offset(lv, s22028c43f9, ABISELECT(248,152), "S22028C43.s22028c43f9");
  }
}
static Arrange_To_Call_Me vS22028C43(Test_S22028C43, "S22028C43", ABISELECT(272,164));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C41  : S22028C25_nt , S22028C42 {
  ::S22028C43 s22028c41f0;
  virtual void  v49(); // _ZN9S22028C413v49Ev
  ~S22028C41(); // tgen
  S22028C41(); // tgen
};
//SIG(-1 S22028C41) C1{ BC2{ vd v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fc FC6{ m Fi[3]} Fi[2]} FC7{ m Fp Fi FC8{ m}}} BC9{ m Fp[2]} v1 FC10{ m FC11{ m Fi[4] FC12{ m FC13{ m FL[2]}} Fi[3]} FC14{ BC15{ vd v10 v11 v12 v13 v14 v15 v16} vd v3 v4 v5 v6 v7 v8 v9 Fi Fp} FC14 FC14 FC14 FC16{ BC15 vd v17 v18 v19 v20 v21 v22 v23 FC12 Fp} FC14 FC14 FC14 FC14}}


void  S22028C41 ::v49(){vfunc_called(this, "_ZN9S22028C413v49Ev");}
S22028C41 ::~S22028C41(){ note_dtor("S22028C41", this);} // tgen
S22028C41 ::S22028C41(){ note_ctor("S22028C41", this);} // tgen

static void Test_S22028C41()
{
  extern Class_Descriptor cd_S22028C41;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,58)];
    init_test(&cd_S22028C41, buf);
    S22028C41 *dp, &lv = *(dp=new (buf) S22028C41());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,228), "sizeof(S22028C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C41)");
    check_base_class_offset(lv, (S22028C25_nt*), 0, "S22028C41");
    check_base_class_offset(lv, (S22028C42*), ABISELECT(72,56), "S22028C41");
    check_field_offset(lv, s22028c41f0, ABISELECT(88,64), "S22028C41.s22028c41f0");
    test_class_info(&lv, &cd_S22028C41);
    dp->~S22028C41();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C41(Test_S22028C41, "S22028C41", ABISELECT(360,228));

#else // __cplusplus

extern void _ZN9S22028C41C1Ev();
extern void _ZN9S22028C41D1Ev();
Name_Map name_map_S22028C41[] = {
  NSPAIR(_ZN9S22028C41C1Ev),
  NSPAIR(_ZN9S22028C41D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C25_nt;
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
extern  VTBL_ENTRY _ZTV12S22028C25_nt[];
extern Class_Descriptor cd_S22028C42;
extern VTBL_ENTRY _ZTI9S22028C42[];
static Base_Class bases_S22028C41[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C25_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C42,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S22028C41[];
extern void _ZN9S22028C41D1Ev();
extern void _ZN9S22028C41D0Ev();
extern void _ZN12S22028C25_nt3v21Ev();
extern void _ZN9S22028C413v49Ev();
static  VTBL_ENTRY vtc_S22028C41[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C41[0]),
  (VTBL_ENTRY)&_ZN9S22028C41D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C41D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S22028C413v49Ev,
};
extern VTBL_ENTRY _ZTI9S22028C41[];
extern  VTBL_ENTRY _ZTV9S22028C41[];
Class_Descriptor cd_S22028C41 = {  "S22028C41", // class name
  bases_S22028C41, 2,
  &(vtc_S22028C41[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,228), // object size
  NSPAIRA(_ZTI9S22028C41),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S22028C41),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  S22028C45  {
  ::S22028C42 s22028c45f0;
  void  mf22028c45(); // _ZN9S22028C4510mf22028c45Ev
};
//SIG(-1 S22028C45) C1{ m FC2{ m Fp[2]}}


void  S22028C45 ::mf22028c45(){}

static void Test_S22028C45()
{
  {
    init_simple_test("S22028C45");
    S22028C45 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C45)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C45)");
    check_field_offset(lv, s22028c45f0, 0, "S22028C45.s22028c45f0");
  }
}
static Arrange_To_Call_Me vS22028C45(Test_S22028C45, "S22028C45", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C40  : S22028C19_nt {
  ::S22028C41 s22028c40f0;
  ::S22028C45 s22028c40f1;
  virtual void  v43(); // _ZN9S22028C403v43Ev
  virtual void  v44(); // _ZN9S22028C403v44Ev
  virtual void  v45(); // _ZN9S22028C403v45Ev
  virtual void  v46(); // _ZN9S22028C403v46Ev
  virtual void  v47(); // _ZN9S22028C403v47Ev
  virtual void  v48(); // _ZN9S22028C403v48Ev
  ~S22028C40(); // tgen
  S22028C40(); // tgen
};
//SIG(-1 S22028C40) C1{ BC2{ BC3{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m Fp Fi FC6} FC8 FC8 FC8} v1 v2 v3 v4 v5 v6 FC9{ BC10{ vd v14 FC11{ m Fp Fi[2] FC7} FC12{ m Fc FC13{ m Fi[3]} Fi[2]} FC8} BC14{ m Fp[2]} v13 FC15{ m FC16{ m Fi[4] FC17{ m FC18{ m FL[2]}} Fi[3]} FC19{ BC20{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC19 FC19 FC19 FC21{ BC20 vd v29 v30 v31 v32 v33 v34 v35 FC17 Fp} FC19 FC19 FC19 FC19}} FC22{ m FC14}}


void  S22028C40 ::v43(){vfunc_called(this, "_ZN9S22028C403v43Ev");}
void  S22028C40 ::v44(){vfunc_called(this, "_ZN9S22028C403v44Ev");}
void  S22028C40 ::v45(){vfunc_called(this, "_ZN9S22028C403v45Ev");}
void  S22028C40 ::v46(){vfunc_called(this, "_ZN9S22028C403v46Ev");}
void  S22028C40 ::v47(){vfunc_called(this, "_ZN9S22028C403v47Ev");}
void  S22028C40 ::v48(){vfunc_called(this, "_ZN9S22028C403v48Ev");}
S22028C40 ::~S22028C40(){ note_dtor("S22028C40", this);} // tgen
S22028C40 ::S22028C40(){ note_ctor("S22028C40", this);} // tgen

static void Test_S22028C40()
{
  extern Class_Descriptor cd_S22028C40;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,78)];
    init_test(&cd_S22028C40, buf);
    S22028C40 *dp, &lv = *(dp=new (buf) S22028C40());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,308), "sizeof(S22028C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C40)");
    check_base_class_offset(lv, (S22028C10*)(S22028C19_nt*), ABISELECT(8,4), "S22028C40");
    check_base_class_offset(lv, (S22028C19_nt*), 0, "S22028C40");
    check_field_offset(lv, s22028c40f0, ABISELECT(104,72), "S22028C40.s22028c40f0");
    check_field_offset(lv, s22028c40f1, ABISELECT(464,300), "S22028C40.s22028c40f1");
    test_class_info(&lv, &cd_S22028C40);
    dp->~S22028C40();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C40(Test_S22028C40, "S22028C40", ABISELECT(480,308));

#else // __cplusplus

extern void _ZN9S22028C40C1Ev();
extern void _ZN9S22028C40D1Ev();
Name_Map name_map_S22028C40[] = {
  NSPAIR(_ZN9S22028C40C1Ev),
  NSPAIR(_ZN9S22028C40D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C10;
extern VTBL_ENTRY _ZTI9S22028C10[];
extern Class_Descriptor cd_S22028C19_nt;
extern VTBL_ENTRY _ZTI12S22028C19_nt[];
extern  VTBL_ENTRY _ZTV12S22028C19_nt[];
static Base_Class bases_S22028C40[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C10,    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_S22028C19_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 _ZTI9S22028C40[];
extern void _ZN9S22028C40D1Ev();
extern void _ZN9S22028C40D0Ev();
extern void _ZN12S22028C19_nt3v14Ev();
extern void _ZN12S22028C19_nt3v15Ev();
extern void _ZN12S22028C19_nt3v16Ev();
extern void _ZN12S22028C19_nt3v17Ev();
extern void _ZN12S22028C19_nt3v18Ev();
extern void _ZN12S22028C19_nt3v19Ev();
extern void _ZN9S22028C403v43Ev();
extern void _ZN9S22028C403v44Ev();
extern void _ZN9S22028C403v45Ev();
extern void _ZN9S22028C403v46Ev();
extern void _ZN9S22028C403v47Ev();
extern void _ZN9S22028C403v48Ev();
static  VTBL_ENTRY vtc_S22028C40[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C40[0]),
  (VTBL_ENTRY)&_ZN9S22028C40D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C40D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v14Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v15Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v16Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v18Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S22028C403v43Ev,
  (VTBL_ENTRY)&_ZN9S22028C403v44Ev,
  (VTBL_ENTRY)&_ZN9S22028C403v45Ev,
  (VTBL_ENTRY)&_ZN9S22028C403v46Ev,
  (VTBL_ENTRY)&_ZN9S22028C403v47Ev,
  (VTBL_ENTRY)&_ZN9S22028C403v48Ev,
};
extern VTBL_ENTRY _ZTI9S22028C40[];
extern  VTBL_ENTRY _ZTV9S22028C40[];
Class_Descriptor cd_S22028C40 = {  "S22028C40", // class name
  bases_S22028C40, 2,
  &(vtc_S22028C40[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(480,308), // object size
  NSPAIRA(_ZTI9S22028C40),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S22028C40),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C39  {
  ::S22028C40 s22028c39f0;
  ::S22028C41 s22028c39f1;
  void  mf22028c39(); // _ZN9S22028C3910mf22028c39Ev
};
//SIG(-1 S22028C39) C1{ m FC2{ BC3{ BC4{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ m Fp Fi FC7} FC9 FC9 FC9} v1 v2 v3 v4 v5 v6 FC10{ BC11{ vd v14 FC12{ m Fp Fi[2] FC8} FC13{ m Fc FC14{ m Fi[3]} Fi[2]} FC9} BC15{ m Fp[2]} v13 FC16{ m FC17{ m Fi[4] FC18{ m FC19{ m FL[2]}} Fi[3]} FC20{ BC21{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC20 FC20 FC20 FC22{ BC21 vd v29 v30 v31 v32 v33 v34 v35 FC18 Fp} FC20 FC20 FC20 FC20}} FC23{ m FC15}} FC10}


void  S22028C39 ::mf22028c39(){}

static void Test_S22028C39()
{
  {
    init_simple_test("S22028C39");
    S22028C39 lv;
    check2(sizeof(lv), ABISELECT(840,536), "sizeof(S22028C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C39)");
    check_field_offset(lv, s22028c39f0, 0, "S22028C39.s22028c39f0");
    check_field_offset(lv, s22028c39f1, ABISELECT(480,308), "S22028C39.s22028c39f1");
  }
}
static Arrange_To_Call_Me vS22028C39(Test_S22028C39, "S22028C39", ABISELECT(840,536));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C49  {
  void *s22028c49f0[2];
  void  mf22028c49(); // _ZN9S22028C4910mf22028c49Ev
};
//SIG(-1 S22028C49) C1{ m Fp[2]}


void  S22028C49 ::mf22028c49(){}

static void Test_S22028C49()
{
  {
    init_simple_test("S22028C49");
    S22028C49 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C49)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C49)");
    check_field_offset(lv, s22028c49f0, 0, "S22028C49.s22028c49f0");
  }
}
static Arrange_To_Call_Me vS22028C49(Test_S22028C49, "S22028C49", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C49[];
VTBL_ENTRY *P__ZTI9S22028C49 = _ZTI9S22028C49; 
Class_Descriptor cd_S22028C49 = {  "S22028C49", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S22028C49),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  S22028C51  {
  ::S22028C33_nt s22028c51f0;
  ::S22028C33_nt s22028c51f1;
  int s22028c51f2[8];
  void  mf22028c51(); // _ZN9S22028C5110mf22028c51Ev
};
//SIG(-1 S22028C51) C1{ m FC2{ m FC3{ m FL[2]}} FC2 Fi[8]}


void  S22028C51 ::mf22028c51(){}

static void Test_S22028C51()
{
  {
    init_simple_test("S22028C51");
    S22028C51 lv;
    check2(sizeof(lv), 64, "sizeof(S22028C51)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C51)");
    check_field_offset(lv, s22028c51f0, 0, "S22028C51.s22028c51f0");
    check_field_offset(lv, s22028c51f1, 16, "S22028C51.s22028c51f1");
    check_field_offset(lv, s22028c51f2, 32, "S22028C51.s22028c51f2");
  }
}
static Arrange_To_Call_Me vS22028C51(Test_S22028C51, "S22028C51", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C50  {
  ::S22028C51 s22028c50f0;
  ::S22028C37_nt s22028c50f1;
  ::S22028C37_nt s22028c50f2;
  ::S22028C35_nt s22028c50f3;
  ::S22028C35_nt s22028c50f4;
  ::S22028C35_nt s22028c50f5;
  ::S22028C35_nt s22028c50f6;
  ::S22028C35_nt s22028c50f7;
  ::S22028C35_nt s22028c50f8;
  ::S22028C35_nt s22028c50f9;
  void  mf22028c50(); // _ZN9S22028C5010mf22028c50Ev
};
//SIG(-1 S22028C50) C1{ m FC2{ m FC3{ m FC4{ m FL[2]}} FC3 Fi[8]} FC5{ BC6{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 FC3 Fp} FC5 FC7{ BC6 vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC7 FC7 FC7 FC7 FC7 FC7}


void  S22028C50 ::mf22028c50(){}

static void Test_S22028C50()
{
  {
    init_simple_test("S22028C50");
    S22028C50 lv;
    check2(sizeof(lv), ABISELECT(296,196), "sizeof(S22028C50)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C50)");
    check_field_offset(lv, s22028c50f0, 0, "S22028C50.s22028c50f0");
    check_field_offset(lv, s22028c50f1, 64, "S22028C50.s22028c50f1");
    check_field_offset(lv, s22028c50f2, ABISELECT(96,88), "S22028C50.s22028c50f2");
    check_field_offset(lv, s22028c50f3, ABISELECT(128,112), "S22028C50.s22028c50f3");
    check_field_offset(lv, s22028c50f4, ABISELECT(152,124), "S22028C50.s22028c50f4");
    check_field_offset(lv, s22028c50f5, ABISELECT(176,136), "S22028C50.s22028c50f5");
    check_field_offset(lv, s22028c50f6, ABISELECT(200,148), "S22028C50.s22028c50f6");
    check_field_offset(lv, s22028c50f7, ABISELECT(224,160), "S22028C50.s22028c50f7");
    check_field_offset(lv, s22028c50f8, ABISELECT(248,172), "S22028C50.s22028c50f8");
    check_field_offset(lv, s22028c50f9, ABISELECT(272,184), "S22028C50.s22028c50f9");
  }
}
static Arrange_To_Call_Me vS22028C50(Test_S22028C50, "S22028C50", ABISELECT(296,196));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C48  : S22028C25_nt , S22028C49 {
  ::S22028C50 s22028c48f0;
  virtual void  v56(); // _ZN9S22028C483v56Ev
  ~S22028C48(); // tgen
  S22028C48(); // tgen
};
//SIG(-1 S22028C48) C1{ BC2{ vd v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fc FC6{ m Fi[3]} Fi[2]} FC7{ m Fp Fi FC8{ m}}} BC9{ m Fp[2]} v1 FC10{ m FC11{ m FC12{ m FC13{ m FL[2]}} FC12 Fi[8]} FC14{ BC15{ vd v10 v11 v12 v13 v14 v15 v16} vd v3 v4 v5 v6 v7 v8 v9 FC12 Fp} FC14 FC16{ BC15 vd v17 v18 v19 v20 v21 v22 v23 Fi Fp} FC16 FC16 FC16 FC16 FC16 FC16}}


void  S22028C48 ::v56(){vfunc_called(this, "_ZN9S22028C483v56Ev");}
S22028C48 ::~S22028C48(){ note_dtor("S22028C48", this);} // tgen
S22028C48 ::S22028C48(){ note_ctor("S22028C48", this);} // tgen

static void Test_S22028C48()
{
  extern Class_Descriptor cd_S22028C48;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,66)];
    init_test(&cd_S22028C48, buf);
    S22028C48 *dp, &lv = *(dp=new (buf) S22028C48());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,260), "sizeof(S22028C48)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C48)");
    check_base_class_offset(lv, (S22028C25_nt*), 0, "S22028C48");
    check_base_class_offset(lv, (S22028C49*), ABISELECT(72,56), "S22028C48");
    check_field_offset(lv, s22028c48f0, ABISELECT(88,64), "S22028C48.s22028c48f0");
    test_class_info(&lv, &cd_S22028C48);
    dp->~S22028C48();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C48(Test_S22028C48, "S22028C48", ABISELECT(384,260));

#else // __cplusplus

extern void _ZN9S22028C48C1Ev();
extern void _ZN9S22028C48D1Ev();
Name_Map name_map_S22028C48[] = {
  NSPAIR(_ZN9S22028C48C1Ev),
  NSPAIR(_ZN9S22028C48D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C25_nt;
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
extern  VTBL_ENTRY _ZTV12S22028C25_nt[];
extern Class_Descriptor cd_S22028C49;
extern VTBL_ENTRY _ZTI9S22028C49[];
static Base_Class bases_S22028C48[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C25_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C49,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S22028C48[];
extern void _ZN9S22028C48D1Ev();
extern void _ZN9S22028C48D0Ev();
extern void _ZN12S22028C25_nt3v21Ev();
extern void _ZN9S22028C483v56Ev();
static  VTBL_ENTRY vtc_S22028C48[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C48[0]),
  (VTBL_ENTRY)&_ZN9S22028C48D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C48D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S22028C483v56Ev,
};
extern VTBL_ENTRY _ZTI9S22028C48[];
extern  VTBL_ENTRY _ZTV9S22028C48[];
Class_Descriptor cd_S22028C48 = {  "S22028C48", // class name
  bases_S22028C48, 2,
  &(vtc_S22028C48[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,260), // object size
  NSPAIRA(_ZTI9S22028C48),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S22028C48),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  S22028C47  : S22028C19_nt {
  ::S22028C48 s22028c47f0;
  ::S22028C45 s22028c47f1;
  virtual void  v50(); // _ZN9S22028C473v50Ev
  virtual void  v51(); // _ZN9S22028C473v51Ev
  virtual void  v52(); // _ZN9S22028C473v52Ev
  virtual void  v53(); // _ZN9S22028C473v53Ev
  virtual void  v54(); // _ZN9S22028C473v54Ev
  virtual void  v55(); // _ZN9S22028C473v55Ev
  ~S22028C47(); // tgen
  S22028C47(); // tgen
};
//SIG(-1 S22028C47) C1{ BC2{ BC3{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m Fp Fi FC6} FC8 FC8 FC8} v1 v2 v3 v4 v5 v6 FC9{ BC10{ vd v14 FC11{ m Fp Fi[2] FC7} FC12{ m Fc FC13{ m Fi[3]} Fi[2]} FC8} BC14{ m Fp[2]} v13 FC15{ m FC16{ m FC17{ m FC18{ m FL[2]}} FC17 Fi[8]} FC19{ BC20{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 FC17 Fp} FC19 FC21{ BC20 vd v29 v30 v31 v32 v33 v34 v35 Fi Fp} FC21 FC21 FC21 FC21 FC21 FC21}} FC22{ m FC23{ m Fp[2]}}}


void  S22028C47 ::v50(){vfunc_called(this, "_ZN9S22028C473v50Ev");}
void  S22028C47 ::v51(){vfunc_called(this, "_ZN9S22028C473v51Ev");}
void  S22028C47 ::v52(){vfunc_called(this, "_ZN9S22028C473v52Ev");}
void  S22028C47 ::v53(){vfunc_called(this, "_ZN9S22028C473v53Ev");}
void  S22028C47 ::v54(){vfunc_called(this, "_ZN9S22028C473v54Ev");}
void  S22028C47 ::v55(){vfunc_called(this, "_ZN9S22028C473v55Ev");}
S22028C47 ::~S22028C47(){ note_dtor("S22028C47", this);} // tgen
S22028C47 ::S22028C47(){ note_ctor("S22028C47", this);} // tgen

static void Test_S22028C47()
{
  extern Class_Descriptor cd_S22028C47;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(64,86)];
    init_test(&cd_S22028C47, buf);
    S22028C47 *dp, &lv = *(dp=new (buf) S22028C47());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(504,340), "sizeof(S22028C47)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C47)");
    check_base_class_offset(lv, (S22028C10*)(S22028C19_nt*), ABISELECT(8,4), "S22028C47");
    check_base_class_offset(lv, (S22028C19_nt*), 0, "S22028C47");
    check_field_offset(lv, s22028c47f0, ABISELECT(104,72), "S22028C47.s22028c47f0");
    check_field_offset(lv, s22028c47f1, ABISELECT(488,332), "S22028C47.s22028c47f1");
    test_class_info(&lv, &cd_S22028C47);
    dp->~S22028C47();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C47(Test_S22028C47, "S22028C47", ABISELECT(504,340));

#else // __cplusplus

extern void _ZN9S22028C47C1Ev();
extern void _ZN9S22028C47D1Ev();
Name_Map name_map_S22028C47[] = {
  NSPAIR(_ZN9S22028C47C1Ev),
  NSPAIR(_ZN9S22028C47D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C10;
extern VTBL_ENTRY _ZTI9S22028C10[];
extern Class_Descriptor cd_S22028C19_nt;
extern VTBL_ENTRY _ZTI12S22028C19_nt[];
extern  VTBL_ENTRY _ZTV12S22028C19_nt[];
static Base_Class bases_S22028C47[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C10,    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_S22028C19_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 _ZTI9S22028C47[];
extern void _ZN9S22028C47D1Ev();
extern void _ZN9S22028C47D0Ev();
extern void _ZN12S22028C19_nt3v14Ev();
extern void _ZN12S22028C19_nt3v15Ev();
extern void _ZN12S22028C19_nt3v16Ev();
extern void _ZN12S22028C19_nt3v17Ev();
extern void _ZN12S22028C19_nt3v18Ev();
extern void _ZN12S22028C19_nt3v19Ev();
extern void _ZN9S22028C473v50Ev();
extern void _ZN9S22028C473v51Ev();
extern void _ZN9S22028C473v52Ev();
extern void _ZN9S22028C473v53Ev();
extern void _ZN9S22028C473v54Ev();
extern void _ZN9S22028C473v55Ev();
static  VTBL_ENTRY vtc_S22028C47[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C47[0]),
  (VTBL_ENTRY)&_ZN9S22028C47D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C47D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v14Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v15Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v16Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v18Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S22028C473v50Ev,
  (VTBL_ENTRY)&_ZN9S22028C473v51Ev,
  (VTBL_ENTRY)&_ZN9S22028C473v52Ev,
  (VTBL_ENTRY)&_ZN9S22028C473v53Ev,
  (VTBL_ENTRY)&_ZN9S22028C473v54Ev,
  (VTBL_ENTRY)&_ZN9S22028C473v55Ev,
};
extern VTBL_ENTRY _ZTI9S22028C47[];
extern  VTBL_ENTRY _ZTV9S22028C47[];
Class_Descriptor cd_S22028C47 = {  "S22028C47", // class name
  bases_S22028C47, 2,
  &(vtc_S22028C47[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(504,340), // object size
  NSPAIRA(_ZTI9S22028C47),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S22028C47),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C46  {
  ::S22028C47 s22028c46f0;
  ::S22028C48 s22028c46f1;
  void  mf22028c46(); // _ZN9S22028C4610mf22028c46Ev
};
//SIG(-1 S22028C46) C1{ m FC2{ BC3{ BC4{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ m Fp Fi FC7} FC9 FC9 FC9} v1 v2 v3 v4 v5 v6 FC10{ BC11{ vd v14 FC12{ m Fp Fi[2] FC8} FC13{ m Fc FC14{ m Fi[3]} Fi[2]} FC9} BC15{ m Fp[2]} v13 FC16{ m FC17{ m FC18{ m FC19{ m FL[2]}} FC18 Fi[8]} FC20{ BC21{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 FC18 Fp} FC20 FC22{ BC21 vd v29 v30 v31 v32 v33 v34 v35 Fi Fp} FC22 FC22 FC22 FC22 FC22 FC22}} FC23{ m FC24{ m Fp[2]}}} FC10}


void  S22028C46 ::mf22028c46(){}

static void Test_S22028C46()
{
  {
    init_simple_test("S22028C46");
    S22028C46 lv;
    check2(sizeof(lv), ABISELECT(888,600), "sizeof(S22028C46)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C46)");
    check_field_offset(lv, s22028c46f0, 0, "S22028C46.s22028c46f0");
    check_field_offset(lv, s22028c46f1, ABISELECT(504,340), "S22028C46.s22028c46f1");
  }
}
static Arrange_To_Call_Me vS22028C46(Test_S22028C46, "S22028C46", ABISELECT(888,600));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C56  {
  void *s22028c56f0[2];
  void  mf22028c56(); // _ZN9S22028C5610mf22028c56Ev
};
//SIG(-1 S22028C56) C1{ m Fp[2]}


void  S22028C56 ::mf22028c56(){}

static void Test_S22028C56()
{
  {
    init_simple_test("S22028C56");
    S22028C56 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C56)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C56)");
    check_field_offset(lv, s22028c56f0, 0, "S22028C56.s22028c56f0");
  }
}
static Arrange_To_Call_Me vS22028C56(Test_S22028C56, "S22028C56", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C56[];
VTBL_ENTRY *P__ZTI9S22028C56 = _ZTI9S22028C56; 
Class_Descriptor cd_S22028C56 = {  "S22028C56", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S22028C56),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  S22028C58  {
  int s22028c58f0[15];
  void  mf22028c58(); // _ZN9S22028C5810mf22028c58Ev
};
//SIG(-1 S22028C58) C1{ m Fi[15]}


void  S22028C58 ::mf22028c58(){}

static void Test_S22028C58()
{
  {
    init_simple_test("S22028C58");
    S22028C58 lv;
    check2(sizeof(lv), 60, "sizeof(S22028C58)");
    check2(__alignof__(lv), 4, "__alignof__(S22028C58)");
    check_field_offset(lv, s22028c58f0, 0, "S22028C58.s22028c58f0");
  }
}
static Arrange_To_Call_Me vS22028C58(Test_S22028C58, "S22028C58", 60);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C57  {
  ::S22028C58 s22028c57f0;
  ::S22028C35_nt s22028c57f1;
  ::S22028C35_nt s22028c57f2;
  ::S22028C35_nt s22028c57f3;
  ::S22028C35_nt s22028c57f4;
  ::S22028C35_nt s22028c57f5;
  ::S22028C35_nt s22028c57f6;
  ::S22028C35_nt s22028c57f7;
  ::S22028C35_nt s22028c57f8;
  ::S22028C35_nt s22028c57f9;
  ::S22028C35_nt s22028c57f10;
  ::S22028C35_nt s22028c57f11;
  ::S22028C35_nt s22028c57f12;
  ::S22028C35_nt s22028c57f13;
  ::S22028C35_nt s22028c57f14;
  ::S22028C35_nt s22028c57f15;
  void  mf22028c57(); // _ZN9S22028C5710mf22028c57Ev
};
//SIG(-1 S22028C57) C1{ m FC2{ m Fi[15]} FC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fi Fp} FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3}


void  S22028C57 ::mf22028c57(){}

static void Test_S22028C57()
{
  {
    init_simple_test("S22028C57");
    S22028C57 lv;
    check2(sizeof(lv), ABISELECT(424,240), "sizeof(S22028C57)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C57)");
    check_field_offset(lv, s22028c57f0, 0, "S22028C57.s22028c57f0");
    check_field_offset(lv, s22028c57f1, ABISELECT(64,60), "S22028C57.s22028c57f1");
    check_field_offset(lv, s22028c57f2, ABISELECT(88,72), "S22028C57.s22028c57f2");
    check_field_offset(lv, s22028c57f3, ABISELECT(112,84), "S22028C57.s22028c57f3");
    check_field_offset(lv, s22028c57f4, ABISELECT(136,96), "S22028C57.s22028c57f4");
    check_field_offset(lv, s22028c57f5, ABISELECT(160,108), "S22028C57.s22028c57f5");
    check_field_offset(lv, s22028c57f6, ABISELECT(184,120), "S22028C57.s22028c57f6");
    check_field_offset(lv, s22028c57f7, ABISELECT(208,132), "S22028C57.s22028c57f7");
    check_field_offset(lv, s22028c57f8, ABISELECT(232,144), "S22028C57.s22028c57f8");
    check_field_offset(lv, s22028c57f9, ABISELECT(256,156), "S22028C57.s22028c57f9");
    check_field_offset(lv, s22028c57f10, ABISELECT(280,168), "S22028C57.s22028c57f10");
    check_field_offset(lv, s22028c57f11, ABISELECT(304,180), "S22028C57.s22028c57f11");
    check_field_offset(lv, s22028c57f12, ABISELECT(328,192), "S22028C57.s22028c57f12");
    check_field_offset(lv, s22028c57f13, ABISELECT(352,204), "S22028C57.s22028c57f13");
    check_field_offset(lv, s22028c57f14, ABISELECT(376,216), "S22028C57.s22028c57f14");
    check_field_offset(lv, s22028c57f15, ABISELECT(400,228), "S22028C57.s22028c57f15");
  }
}
static Arrange_To_Call_Me vS22028C57(Test_S22028C57, "S22028C57", ABISELECT(424,240));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C55  : S22028C25_nt , S22028C56 {
  ::S22028C57 s22028c55f0;
  virtual void  v63(); // _ZN9S22028C553v63Ev
  ~S22028C55(); // tgen
  S22028C55(); // tgen
};
//SIG(-1 S22028C55) C1{ BC2{ vd v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fc FC6{ m Fi[3]} Fi[2]} FC7{ m Fp Fi FC8{ m}}} BC9{ m Fp[2]} v1 FC10{ m FC11{ m Fi[15]} FC12{ BC13{ vd v10 v11 v12 v13 v14 v15 v16} vd v3 v4 v5 v6 v7 v8 v9 Fi Fp} FC12 FC12 FC12 FC12 FC12 FC12 FC12 FC12 FC12 FC12 FC12 FC12 FC12 FC12}}


void  S22028C55 ::v63(){vfunc_called(this, "_ZN9S22028C553v63Ev");}
S22028C55 ::~S22028C55(){ note_dtor("S22028C55", this);} // tgen
S22028C55 ::S22028C55(){ note_ctor("S22028C55", this);} // tgen

static void Test_S22028C55()
{
  extern Class_Descriptor cd_S22028C55;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(65,77)];
    init_test(&cd_S22028C55, buf);
    S22028C55 *dp, &lv = *(dp=new (buf) S22028C55());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,304), "sizeof(S22028C55)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C55)");
    check_base_class_offset(lv, (S22028C25_nt*), 0, "S22028C55");
    check_base_class_offset(lv, (S22028C56*), ABISELECT(72,56), "S22028C55");
    check_field_offset(lv, s22028c55f0, ABISELECT(88,64), "S22028C55.s22028c55f0");
    test_class_info(&lv, &cd_S22028C55);
    dp->~S22028C55();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C55(Test_S22028C55, "S22028C55", ABISELECT(512,304));

#else // __cplusplus

extern void _ZN9S22028C55C1Ev();
extern void _ZN9S22028C55D1Ev();
Name_Map name_map_S22028C55[] = {
  NSPAIR(_ZN9S22028C55C1Ev),
  NSPAIR(_ZN9S22028C55D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C25_nt;
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
extern  VTBL_ENTRY _ZTV12S22028C25_nt[];
extern Class_Descriptor cd_S22028C56;
extern VTBL_ENTRY _ZTI9S22028C56[];
static Base_Class bases_S22028C55[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C25_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C56,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S22028C55[];
extern void _ZN9S22028C55D1Ev();
extern void _ZN9S22028C55D0Ev();
extern void _ZN12S22028C25_nt3v21Ev();
extern void _ZN9S22028C553v63Ev();
static  VTBL_ENTRY vtc_S22028C55[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C55[0]),
  (VTBL_ENTRY)&_ZN9S22028C55D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C55D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S22028C553v63Ev,
};
extern VTBL_ENTRY _ZTI9S22028C55[];
extern  VTBL_ENTRY _ZTV9S22028C55[];
Class_Descriptor cd_S22028C55 = {  "S22028C55", // class name
  bases_S22028C55, 2,
  &(vtc_S22028C55[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(512,304), // object size
  NSPAIRA(_ZTI9S22028C55),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S22028C55),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  S22028C59  {
  ::S22028C56 s22028c59f0;
  void  mf22028c59(); // _ZN9S22028C5910mf22028c59Ev
};
//SIG(-1 S22028C59) C1{ m FC2{ m Fp[2]}}


void  S22028C59 ::mf22028c59(){}

static void Test_S22028C59()
{
  {
    init_simple_test("S22028C59");
    S22028C59 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C59)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C59)");
    check_field_offset(lv, s22028c59f0, 0, "S22028C59.s22028c59f0");
  }
}
static Arrange_To_Call_Me vS22028C59(Test_S22028C59, "S22028C59", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C54  : S22028C19_nt {
  ::S22028C55 s22028c54f0;
  ::S22028C59 s22028c54f1;
  virtual void  v57(); // _ZN9S22028C543v57Ev
  virtual void  v58(); // _ZN9S22028C543v58Ev
  virtual void  v59(); // _ZN9S22028C543v59Ev
  virtual void  v60(); // _ZN9S22028C543v60Ev
  virtual void  v61(); // _ZN9S22028C543v61Ev
  virtual void  v62(); // _ZN9S22028C543v62Ev
  ~S22028C54(); // tgen
  S22028C54(); // tgen
};
//SIG(-1 S22028C54) C1{ BC2{ BC3{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m Fp Fi FC6} FC8 FC8 FC8} v1 v2 v3 v4 v5 v6 FC9{ BC10{ vd v14 FC11{ m Fp Fi[2] FC7} FC12{ m Fc FC13{ m Fi[3]} Fi[2]} FC8} BC14{ m Fp[2]} v13 FC15{ m FC16{ m Fi[15]} FC17{ BC18{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17 FC17}} FC19{ m FC14}}


void  S22028C54 ::v57(){vfunc_called(this, "_ZN9S22028C543v57Ev");}
void  S22028C54 ::v58(){vfunc_called(this, "_ZN9S22028C543v58Ev");}
void  S22028C54 ::v59(){vfunc_called(this, "_ZN9S22028C543v59Ev");}
void  S22028C54 ::v60(){vfunc_called(this, "_ZN9S22028C543v60Ev");}
void  S22028C54 ::v61(){vfunc_called(this, "_ZN9S22028C543v61Ev");}
void  S22028C54 ::v62(){vfunc_called(this, "_ZN9S22028C543v62Ev");}
S22028C54 ::~S22028C54(){ note_dtor("S22028C54", this);} // tgen
S22028C54 ::S22028C54(){ note_ctor("S22028C54", this);} // tgen

static void Test_S22028C54()
{
  extern Class_Descriptor cd_S22028C54;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(80,97)];
    init_test(&cd_S22028C54, buf);
    S22028C54 *dp, &lv = *(dp=new (buf) S22028C54());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(632,384), "sizeof(S22028C54)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C54)");
    check_base_class_offset(lv, (S22028C10*)(S22028C19_nt*), ABISELECT(8,4), "S22028C54");
    check_base_class_offset(lv, (S22028C19_nt*), 0, "S22028C54");
    check_field_offset(lv, s22028c54f0, ABISELECT(104,72), "S22028C54.s22028c54f0");
    check_field_offset(lv, s22028c54f1, ABISELECT(616,376), "S22028C54.s22028c54f1");
    test_class_info(&lv, &cd_S22028C54);
    dp->~S22028C54();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C54(Test_S22028C54, "S22028C54", ABISELECT(632,384));

#else // __cplusplus

extern void _ZN9S22028C54C1Ev();
extern void _ZN9S22028C54D1Ev();
Name_Map name_map_S22028C54[] = {
  NSPAIR(_ZN9S22028C54C1Ev),
  NSPAIR(_ZN9S22028C54D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C10;
extern VTBL_ENTRY _ZTI9S22028C10[];
extern Class_Descriptor cd_S22028C19_nt;
extern VTBL_ENTRY _ZTI12S22028C19_nt[];
extern  VTBL_ENTRY _ZTV12S22028C19_nt[];
static Base_Class bases_S22028C54[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C10,    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_S22028C19_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 _ZTI9S22028C54[];
extern void _ZN9S22028C54D1Ev();
extern void _ZN9S22028C54D0Ev();
extern void _ZN12S22028C19_nt3v14Ev();
extern void _ZN12S22028C19_nt3v15Ev();
extern void _ZN12S22028C19_nt3v16Ev();
extern void _ZN12S22028C19_nt3v17Ev();
extern void _ZN12S22028C19_nt3v18Ev();
extern void _ZN12S22028C19_nt3v19Ev();
extern void _ZN9S22028C543v57Ev();
extern void _ZN9S22028C543v58Ev();
extern void _ZN9S22028C543v59Ev();
extern void _ZN9S22028C543v60Ev();
extern void _ZN9S22028C543v61Ev();
extern void _ZN9S22028C543v62Ev();
static  VTBL_ENTRY vtc_S22028C54[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C54[0]),
  (VTBL_ENTRY)&_ZN9S22028C54D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C54D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v14Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v15Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v16Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v18Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S22028C543v57Ev,
  (VTBL_ENTRY)&_ZN9S22028C543v58Ev,
  (VTBL_ENTRY)&_ZN9S22028C543v59Ev,
  (VTBL_ENTRY)&_ZN9S22028C543v60Ev,
  (VTBL_ENTRY)&_ZN9S22028C543v61Ev,
  (VTBL_ENTRY)&_ZN9S22028C543v62Ev,
};
extern VTBL_ENTRY _ZTI9S22028C54[];
extern  VTBL_ENTRY _ZTV9S22028C54[];
Class_Descriptor cd_S22028C54 = {  "S22028C54", // class name
  bases_S22028C54, 2,
  &(vtc_S22028C54[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(632,384), // object size
  NSPAIRA(_ZTI9S22028C54),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S22028C54),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C53  {
  ::S22028C54 s22028c53f0;
  ::S22028C55 s22028c53f1;
  void  mf22028c53(); // _ZN9S22028C5310mf22028c53Ev
};
//SIG(-1 S22028C53) C1{ m FC2{ BC3{ BC4{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ m Fp Fi FC7} FC9 FC9 FC9} v1 v2 v3 v4 v5 v6 FC10{ BC11{ vd v14 FC12{ m Fp Fi[2] FC8} FC13{ m Fc FC14{ m Fi[3]} Fi[2]} FC9} BC15{ m Fp[2]} v13 FC16{ m FC17{ m Fi[15]} FC18{ BC19{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18 FC18}} FC20{ m FC15}} FC10}


void  S22028C53 ::mf22028c53(){}

static void Test_S22028C53()
{
  {
    init_simple_test("S22028C53");
    S22028C53 lv;
    check2(sizeof(lv), ABISELECT(1144,688), "sizeof(S22028C53)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C53)");
    check_field_offset(lv, s22028c53f0, 0, "S22028C53.s22028c53f0");
    check_field_offset(lv, s22028c53f1, ABISELECT(632,384), "S22028C53.s22028c53f1");
  }
}
static Arrange_To_Call_Me vS22028C53(Test_S22028C53, "S22028C53", ABISELECT(1144,688));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C63  {
  void *s22028c63f0[2];
  void  mf22028c63(); // _ZN9S22028C6310mf22028c63Ev
};
//SIG(-1 S22028C63) C1{ m Fp[2]}


void  S22028C63 ::mf22028c63(){}

static void Test_S22028C63()
{
  {
    init_simple_test("S22028C63");
    S22028C63 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C63)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C63)");
    check_field_offset(lv, s22028c63f0, 0, "S22028C63.s22028c63f0");
  }
}
static Arrange_To_Call_Me vS22028C63(Test_S22028C63, "S22028C63", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C63[];
VTBL_ENTRY *P__ZTI9S22028C63 = _ZTI9S22028C63; 
Class_Descriptor cd_S22028C63 = {  "S22028C63", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S22028C63),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  S22028C65_nt  {
  int s22028c65f0[4];
  void  mf22028c65(); // _ZN12S22028C65_nt10mf22028c65Ev
};
//SIG(-1 S22028C65_nt) C1{ m Fi[4]}


void  S22028C65_nt ::mf22028c65(){}

//skip512 S22028C65_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C64  {
  ::S22028C65_nt s22028c64f0;
  ::S22028C35_nt s22028c64f1;
  ::S22028C35_nt s22028c64f2;
  ::S22028C35_nt s22028c64f3;
  ::S22028C35_nt s22028c64f4;
  void  mf22028c64(); // _ZN9S22028C6410mf22028c64Ev
};
//SIG(-1 S22028C64) C1{ m FC2{ m Fi[4]} FC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fi Fp} FC3 FC3 FC3}


void  S22028C64 ::mf22028c64(){}

static void Test_S22028C64()
{
  {
    init_simple_test("S22028C64");
    S22028C64 lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S22028C64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C64)");
    check_field_offset(lv, s22028c64f0, 0, "S22028C64.s22028c64f0");
    check_field_offset(lv, s22028c64f1, 16, "S22028C64.s22028c64f1");
    check_field_offset(lv, s22028c64f2, ABISELECT(40,28), "S22028C64.s22028c64f2");
    check_field_offset(lv, s22028c64f3, ABISELECT(64,40), "S22028C64.s22028c64f3");
    check_field_offset(lv, s22028c64f4, ABISELECT(88,52), "S22028C64.s22028c64f4");
  }
}
static Arrange_To_Call_Me vS22028C64(Test_S22028C64, "S22028C64", ABISELECT(112,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C62  : S22028C25_nt , S22028C63 {
  ::S22028C64 s22028c62f0;
  virtual void  v70(); // _ZN9S22028C623v70Ev
  ~S22028C62(); // tgen
  S22028C62(); // tgen
};
//SIG(-1 S22028C62) C1{ BC2{ vd v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fc FC6{ m Fi[3]} Fi[2]} FC7{ m Fp Fi FC8{ m}}} BC9{ m Fp[2]} v1 FC10{ m FC11{ m Fi[4]} FC12{ BC13{ vd v10 v11 v12 v13 v14 v15 v16} vd v3 v4 v5 v6 v7 v8 v9 Fi Fp} FC12 FC12 FC12}}


void  S22028C62 ::v70(){vfunc_called(this, "_ZN9S22028C623v70Ev");}
S22028C62 ::~S22028C62(){ note_dtor("S22028C62", this);} // tgen
S22028C62 ::S22028C62(){ note_ctor("S22028C62", this);} // tgen

static void Test_S22028C62()
{
  extern Class_Descriptor cd_S22028C62;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,33)];
    init_test(&cd_S22028C62, buf);
    S22028C62 *dp, &lv = *(dp=new (buf) S22028C62());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,128), "sizeof(S22028C62)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C62)");
    check_base_class_offset(lv, (S22028C25_nt*), 0, "S22028C62");
    check_base_class_offset(lv, (S22028C63*), ABISELECT(72,56), "S22028C62");
    check_field_offset(lv, s22028c62f0, ABISELECT(88,64), "S22028C62.s22028c62f0");
    test_class_info(&lv, &cd_S22028C62);
    dp->~S22028C62();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C62(Test_S22028C62, "S22028C62", ABISELECT(200,128));

#else // __cplusplus

extern void _ZN9S22028C62C1Ev();
extern void _ZN9S22028C62D1Ev();
Name_Map name_map_S22028C62[] = {
  NSPAIR(_ZN9S22028C62C1Ev),
  NSPAIR(_ZN9S22028C62D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C25_nt;
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
extern  VTBL_ENTRY _ZTV12S22028C25_nt[];
extern Class_Descriptor cd_S22028C63;
extern VTBL_ENTRY _ZTI9S22028C63[];
static Base_Class bases_S22028C62[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C25_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C63,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S22028C62[];
extern void _ZN9S22028C62D1Ev();
extern void _ZN9S22028C62D0Ev();
extern void _ZN12S22028C25_nt3v21Ev();
extern void _ZN9S22028C623v70Ev();
static  VTBL_ENTRY vtc_S22028C62[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C62[0]),
  (VTBL_ENTRY)&_ZN9S22028C62D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C62D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S22028C623v70Ev,
};
extern VTBL_ENTRY _ZTI9S22028C62[];
extern  VTBL_ENTRY _ZTV9S22028C62[];
Class_Descriptor cd_S22028C62 = {  "S22028C62", // class name
  bases_S22028C62, 2,
  &(vtc_S22028C62[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,128), // object size
  NSPAIRA(_ZTI9S22028C62),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S22028C62),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  S22028C61  : S22028C19_nt {
  ::S22028C62 s22028c61f0;
  ::S22028C59 s22028c61f1;
  virtual void  v64(); // _ZN9S22028C613v64Ev
  virtual void  v65(); // _ZN9S22028C613v65Ev
  virtual void  v66(); // _ZN9S22028C613v66Ev
  virtual void  v67(); // _ZN9S22028C613v67Ev
  virtual void  v68(); // _ZN9S22028C613v68Ev
  virtual void  v69(); // _ZN9S22028C613v69Ev
  ~S22028C61(); // tgen
  S22028C61(); // tgen
};
//SIG(-1 S22028C61) C1{ BC2{ BC3{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m Fp Fi FC6} FC8 FC8 FC8} v1 v2 v3 v4 v5 v6 FC9{ BC10{ vd v14 FC11{ m Fp Fi[2] FC7} FC12{ m Fc FC13{ m Fi[3]} Fi[2]} FC8} BC14{ m Fp[2]} v13 FC15{ m FC16{ m Fi[4]} FC17{ BC18{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC17 FC17 FC17}} FC19{ m FC20{ m Fp[2]}}}


void  S22028C61 ::v64(){vfunc_called(this, "_ZN9S22028C613v64Ev");}
void  S22028C61 ::v65(){vfunc_called(this, "_ZN9S22028C613v65Ev");}
void  S22028C61 ::v66(){vfunc_called(this, "_ZN9S22028C613v66Ev");}
void  S22028C61 ::v67(){vfunc_called(this, "_ZN9S22028C613v67Ev");}
void  S22028C61 ::v68(){vfunc_called(this, "_ZN9S22028C613v68Ev");}
void  S22028C61 ::v69(){vfunc_called(this, "_ZN9S22028C613v69Ev");}
S22028C61 ::~S22028C61(){ note_dtor("S22028C61", this);} // tgen
S22028C61 ::S22028C61(){ note_ctor("S22028C61", this);} // tgen

static void Test_S22028C61()
{
  extern Class_Descriptor cd_S22028C61;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,53)];
    init_test(&cd_S22028C61, buf);
    S22028C61 *dp, &lv = *(dp=new (buf) S22028C61());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,208), "sizeof(S22028C61)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C61)");
    check_base_class_offset(lv, (S22028C10*)(S22028C19_nt*), ABISELECT(8,4), "S22028C61");
    check_base_class_offset(lv, (S22028C19_nt*), 0, "S22028C61");
    check_field_offset(lv, s22028c61f0, ABISELECT(104,72), "S22028C61.s22028c61f0");
    check_field_offset(lv, s22028c61f1, ABISELECT(304,200), "S22028C61.s22028c61f1");
    test_class_info(&lv, &cd_S22028C61);
    dp->~S22028C61();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C61(Test_S22028C61, "S22028C61", ABISELECT(320,208));

#else // __cplusplus

extern void _ZN9S22028C61C1Ev();
extern void _ZN9S22028C61D1Ev();
Name_Map name_map_S22028C61[] = {
  NSPAIR(_ZN9S22028C61C1Ev),
  NSPAIR(_ZN9S22028C61D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C10;
extern VTBL_ENTRY _ZTI9S22028C10[];
extern Class_Descriptor cd_S22028C19_nt;
extern VTBL_ENTRY _ZTI12S22028C19_nt[];
extern  VTBL_ENTRY _ZTV12S22028C19_nt[];
static Base_Class bases_S22028C61[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C10,    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_S22028C19_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 _ZTI9S22028C61[];
extern void _ZN9S22028C61D1Ev();
extern void _ZN9S22028C61D0Ev();
extern void _ZN12S22028C19_nt3v14Ev();
extern void _ZN12S22028C19_nt3v15Ev();
extern void _ZN12S22028C19_nt3v16Ev();
extern void _ZN12S22028C19_nt3v17Ev();
extern void _ZN12S22028C19_nt3v18Ev();
extern void _ZN12S22028C19_nt3v19Ev();
extern void _ZN9S22028C613v64Ev();
extern void _ZN9S22028C613v65Ev();
extern void _ZN9S22028C613v66Ev();
extern void _ZN9S22028C613v67Ev();
extern void _ZN9S22028C613v68Ev();
extern void _ZN9S22028C613v69Ev();
static  VTBL_ENTRY vtc_S22028C61[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C61[0]),
  (VTBL_ENTRY)&_ZN9S22028C61D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C61D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v14Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v15Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v16Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v18Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S22028C613v64Ev,
  (VTBL_ENTRY)&_ZN9S22028C613v65Ev,
  (VTBL_ENTRY)&_ZN9S22028C613v66Ev,
  (VTBL_ENTRY)&_ZN9S22028C613v67Ev,
  (VTBL_ENTRY)&_ZN9S22028C613v68Ev,
  (VTBL_ENTRY)&_ZN9S22028C613v69Ev,
};
extern VTBL_ENTRY _ZTI9S22028C61[];
extern  VTBL_ENTRY _ZTV9S22028C61[];
Class_Descriptor cd_S22028C61 = {  "S22028C61", // class name
  bases_S22028C61, 2,
  &(vtc_S22028C61[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,208), // object size
  NSPAIRA(_ZTI9S22028C61),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S22028C61),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C60  {
  ::S22028C61 s22028c60f0;
  ::S22028C62 s22028c60f1;
  void  mf22028c60(); // _ZN9S22028C6010mf22028c60Ev
};
//SIG(-1 S22028C60) C1{ m FC2{ BC3{ BC4{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ m Fp Fi FC7} FC9 FC9 FC9} v1 v2 v3 v4 v5 v6 FC10{ BC11{ vd v14 FC12{ m Fp Fi[2] FC8} FC13{ m Fc FC14{ m Fi[3]} Fi[2]} FC9} BC15{ m Fp[2]} v13 FC16{ m FC17{ m Fi[4]} FC18{ BC19{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp} FC18 FC18 FC18}} FC20{ m FC21{ m Fp[2]}}} FC10}


void  S22028C60 ::mf22028c60(){}

static void Test_S22028C60()
{
  {
    init_simple_test("S22028C60");
    S22028C60 lv;
    check2(sizeof(lv), ABISELECT(520,336), "sizeof(S22028C60)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C60)");
    check_field_offset(lv, s22028c60f0, 0, "S22028C60.s22028c60f0");
    check_field_offset(lv, s22028c60f1, ABISELECT(320,208), "S22028C60.s22028c60f1");
  }
}
static Arrange_To_Call_Me vS22028C60(Test_S22028C60, "S22028C60", ABISELECT(520,336));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C67_nt  {
  long s22028c67f0;
  void  mf22028c67(); // _ZN12S22028C67_nt10mf22028c67Ev
};
//SIG(-1 S22028C67_nt) C1{ m Fl}


void  S22028C67_nt ::mf22028c67(){}

//skip512 S22028C67_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C68_nt  {
  void *s22028c68f0;
  void  mf22028c68(); // _ZN12S22028C68_nt10mf22028c68Ev
};
//SIG(-1 S22028C68_nt) C1{ m Fp}


void  S22028C68_nt ::mf22028c68(){}

//skip512 S22028C68_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI12S22028C68_nt[];
VTBL_ENTRY *P__ZTI12S22028C68_nt = _ZTI12S22028C68_nt; 
Class_Descriptor cd_S22028C68_nt = {  "S22028C68_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S22028C68_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  S22028C5  {
  int s22028c5f0;
  ::S22028C4 s22028c5f1;
  ::S22028C2_nt s22028c5f2;
  ::S22028C2_nt s22028c5f3;
  int s22028c5f4[4];
  ::S3280C13_nt s22028c5f5;
  int s22028c5f6[2];
  char s22028c5f7;
  ::S22028C8_nt s22028c5f8;
  ::S22028C17 s22028c5f9;
  ::S22028C39 s22028c5f10;
  ::S22028C46 s22028c5f11;
  ::S22028C53 s22028c5f12;
  ::S22028C60 s22028c5f13;
  ::S22028C17 s22028c5f14;
  ::S22028C39 s22028c5f15;
  ::S22028C46 s22028c5f16;
  ::S22028C53 s22028c5f17;
  ::S22028C60 s22028c5f18;
  int s22028c5f19;
  ::S22028C67_nt s22028c5f20;
  int s22028c5f21;
  ::S22028C68_nt s22028c5f22;
  virtual  ~S22028C5(); // _ZN8S22028C5D1Ev
  virtual void  v7(); // _ZN8S22028C52v7Ev
  S22028C5(); // tgen
};
//SIG(-1 S22028C5) C1{ vd v1 Fi FC2{ m Fp[2]} FC3{ m Fp[2]} FC3 Fi[4] FC4{ m Fi[3]} Fi[2] Fc FC5{ m FC6{ m FC7{ m Fp[2]}} FC8{ m Fp Fi FC9{ m}} FC10{ BC11{ m Fp Fi FC9 FC12{ m}}} FC8 FC8 Fc[2] Fi} FC13{ m FC14{ BC15{ BC7 vd v8 v9 v10 v11 v12 v13 FC10 FC8 FC8 FC8 FC8} v2 v3 v4 v5 v6 v7 FC16{ BC17{ vd v15 FC18{ m Fp Fi[2] FC12} FC19{ m Fc FC20{ m Fi[3]} Fi[2]} FC8} BC21{ m Fp[2]} v14 FC22{ m FC23{ m Fi[8] FC24{ m FC25{ m FL[2]}} FC24} FC26{ BC27{ vd v23 v24 v25 v26 v27 v28 v29} vd v16 v17 v18 v19 v20 v21 v22 Fi Fp} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC28{ BC27 vd v30 v31 v32 v33 v34 v35 v36 FC24 Fp} FC28}} FC6} FC16} FC29{ m FC30{ BC15 v37 v38 v39 v40 v41 v42 FC31{ BC17 BC32{ m Fp[2]} v43 FC33{ m FC34{ m Fi[4] FC24 Fi[3]} FC26 FC26 FC26 FC26 FC28 FC26 FC26 FC26 FC26}} FC35{ m FC32}} FC31} FC36{ m FC37{ BC15 v44 v45 v46 v47 v48 v49 FC38{ BC17 BC39{ m Fp[2]} v50 FC40{ m FC41{ m FC24 FC24 Fi[8]} FC28 FC28 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC35} FC38} FC42{ m FC43{ BC15 v51 v52 v53 v54 v55 v56 FC44{ BC17 BC45{ m Fp[2]} v57 FC46{ m FC47{ m Fi[15]} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC48{ m FC45}} FC44} FC49{ m FC50{ BC15 v58 v59 v60 v61 v62 v63 FC51{ BC17 BC52{ m Fp[2]} v64 FC53{ m FC54{ m Fi[4]} FC26 FC26 FC26 FC26}} FC48} FC51} FC13 FC29 FC36 FC42 FC49 Fi FC55{ m Fl} Fi FC56{ m Fp}}


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

static void Test_S22028C5()
{
  extern Class_Descriptor cd_S22028C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1111,1431)];
    init_test(&cd_S22028C5, buf);
    S22028C5 *dp, &lv = *(dp=new (buf) S22028C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8880,5720), "sizeof(S22028C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C5)");
    check_field_offset(lv, s22028c5f0, ABISELECT(8,4), "S22028C5.s22028c5f0");
    check_field_offset(lv, s22028c5f1, ABISELECT(16,8), "S22028C5.s22028c5f1");
    check_field_offset(lv, s22028c5f2, ABISELECT(32,16), "S22028C5.s22028c5f2");
    check_field_offset(lv, s22028c5f3, ABISELECT(48,24), "S22028C5.s22028c5f3");
    check_field_offset(lv, s22028c5f4, ABISELECT(64,32), "S22028C5.s22028c5f4");
    check_field_offset(lv, s22028c5f5, ABISELECT(80,48), "S22028C5.s22028c5f5");
    check_field_offset(lv, s22028c5f6, ABISELECT(92,60), "S22028C5.s22028c5f6");
    check_field_offset(lv, s22028c5f7, ABISELECT(100,68), "S22028C5.s22028c5f7");
    check_field_offset(lv, s22028c5f8, ABISELECT(104,72), "S22028C5.s22028c5f8");
    check_field_offset(lv, s22028c5f9, ABISELECT(192,136), "S22028C5.s22028c5f9");
    check_field_offset(lv, s22028c5f10, ABISELECT(1128,760), "S22028C5.s22028c5f10");
    check_field_offset(lv, s22028c5f11, ABISELECT(1968,1296), "S22028C5.s22028c5f11");
    check_field_offset(lv, s22028c5f12, ABISELECT(2856,1896), "S22028C5.s22028c5f12");
    check_field_offset(lv, s22028c5f13, ABISELECT(4000,2584), "S22028C5.s22028c5f13");
    check_field_offset(lv, s22028c5f14, ABISELECT(4520,2920), "S22028C5.s22028c5f14");
    check_field_offset(lv, s22028c5f15, ABISELECT(5456,3544), "S22028C5.s22028c5f15");
    check_field_offset(lv, s22028c5f16, ABISELECT(6296,4080), "S22028C5.s22028c5f16");
    check_field_offset(lv, s22028c5f17, ABISELECT(7184,4680), "S22028C5.s22028c5f17");
    check_field_offset(lv, s22028c5f18, ABISELECT(8328,5368), "S22028C5.s22028c5f18");
    check_field_offset(lv, s22028c5f19, ABISELECT(8848,5704), "S22028C5.s22028c5f19");
    check_field_offset(lv, s22028c5f20, ABISELECT(8856,5708), "S22028C5.s22028c5f20");
    check_field_offset(lv, s22028c5f21, ABISELECT(8864,5712), "S22028C5.s22028c5f21");
    check_field_offset(lv, s22028c5f22, ABISELECT(8872,5716), "S22028C5.s22028c5f22");
    test_class_info(&lv, &cd_S22028C5);
    dp->~S22028C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C5(Test_S22028C5, "S22028C5", ABISELECT(8880,5720));

#else // __cplusplus

extern void _ZN8S22028C5C1Ev();
extern void _ZN8S22028C5D1Ev();
Name_Map name_map_S22028C5[] = {
  NSPAIR(_ZN8S22028C5C1Ev),
  NSPAIR(_ZN8S22028C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S22028C5[];
extern void _ZN8S22028C5D1Ev();
extern void _ZN8S22028C5D0Ev();
extern void _ZN8S22028C52v7Ev();
static  VTBL_ENTRY vtc_S22028C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S22028C5[0]),
  (VTBL_ENTRY)&_ZN8S22028C5D1Ev,
  (VTBL_ENTRY)&_ZN8S22028C5D0Ev,
  (VTBL_ENTRY)&_ZN8S22028C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S22028C5[];
extern  VTBL_ENTRY _ZTV8S22028C5[];
Class_Descriptor cd_S22028C5 = {  "S22028C5", // class name
  0,0,//no base classes
  &(vtc_S22028C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8880,5720), // object size
  NSPAIRA(_ZTI8S22028C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S22028C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C73  {
  void *s22028c73f0[2];
  void  mf22028c73(); // _ZN9S22028C7310mf22028c73Ev
};
//SIG(-1 S22028C73) C1{ m Fp[2]}


void  S22028C73 ::mf22028c73(){}

static void Test_S22028C73()
{
  {
    init_simple_test("S22028C73");
    S22028C73 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C73)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C73)");
    check_field_offset(lv, s22028c73f0, 0, "S22028C73.s22028c73f0");
  }
}
static Arrange_To_Call_Me vS22028C73(Test_S22028C73, "S22028C73", ABISELECT(16,8));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S22028C73[];
VTBL_ENTRY *P__ZTI9S22028C73 = _ZTI9S22028C73; 
Class_Descriptor cd_S22028C73 = {  "S22028C73", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S22028C73),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  S22028C74  {
  ::S22028C35_nt s22028c74f0;
  void  mf22028c74(); // _ZN9S22028C7410mf22028c74Ev
};
//SIG(-1 S22028C74) C1{ m FC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fi Fp}}


void  S22028C74 ::mf22028c74(){}

static void Test_S22028C74()
{
  {
    init_simple_test("S22028C74");
    S22028C74 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S22028C74)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C74)");
    check_field_offset(lv, s22028c74f0, 0, "S22028C74.s22028c74f0");
  }
}
static Arrange_To_Call_Me vS22028C74(Test_S22028C74, "S22028C74", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C72  : S22028C25_nt , S22028C73 {
  ::S22028C74 s22028c72f0;
  virtual void  v78(); // _ZN9S22028C723v78Ev
  ~S22028C72(); // tgen
  S22028C72(); // tgen
};
//SIG(-1 S22028C72) C1{ BC2{ vd v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fc FC6{ m Fi[3]} Fi[2]} FC7{ m Fp Fi FC8{ m}}} BC9{ m Fp[2]} v1 FC10{ m FC11{ BC12{ vd v10 v11 v12 v13 v14 v15 v16} vd v3 v4 v5 v6 v7 v8 v9 Fi Fp}}}


void  S22028C72 ::v78(){vfunc_called(this, "_ZN9S22028C723v78Ev");}
S22028C72 ::~S22028C72(){ note_dtor("S22028C72", this);} // tgen
S22028C72 ::S22028C72(){ note_ctor("S22028C72", this);} // tgen

static void Test_S22028C72()
{
  extern Class_Descriptor cd_S22028C72;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S22028C72, buf);
    S22028C72 *dp, &lv = *(dp=new (buf) S22028C72());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S22028C72)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C72)");
    check_base_class_offset(lv, (S22028C25_nt*), 0, "S22028C72");
    check_base_class_offset(lv, (S22028C73*), ABISELECT(72,56), "S22028C72");
    check_field_offset(lv, s22028c72f0, ABISELECT(88,64), "S22028C72.s22028c72f0");
    test_class_info(&lv, &cd_S22028C72);
    dp->~S22028C72();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C72(Test_S22028C72, "S22028C72", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN9S22028C72C1Ev();
extern void _ZN9S22028C72D1Ev();
Name_Map name_map_S22028C72[] = {
  NSPAIR(_ZN9S22028C72C1Ev),
  NSPAIR(_ZN9S22028C72D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C25_nt;
extern VTBL_ENTRY _ZTI12S22028C25_nt[];
extern  VTBL_ENTRY _ZTV12S22028C25_nt[];
extern Class_Descriptor cd_S22028C73;
extern VTBL_ENTRY _ZTI9S22028C73[];
static Base_Class bases_S22028C72[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C25_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C73,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S22028C72[];
extern void _ZN9S22028C72D1Ev();
extern void _ZN9S22028C72D0Ev();
extern void _ZN12S22028C25_nt3v21Ev();
extern void _ZN9S22028C723v78Ev();
static  VTBL_ENTRY vtc_S22028C72[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C72[0]),
  (VTBL_ENTRY)&_ZN9S22028C72D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C72D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C25_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S22028C723v78Ev,
};
extern VTBL_ENTRY _ZTI9S22028C72[];
extern  VTBL_ENTRY _ZTV9S22028C72[];
Class_Descriptor cd_S22028C72 = {  "S22028C72", // class name
  bases_S22028C72, 2,
  &(vtc_S22028C72[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI9S22028C72),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S22028C72),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  S22028C75  {
  ::S22028C73 s22028c75f0;
  void  mf22028c75(); // _ZN9S22028C7510mf22028c75Ev
};
//SIG(-1 S22028C75) C1{ m FC2{ m Fp[2]}}


void  S22028C75 ::mf22028c75(){}

static void Test_S22028C75()
{
  {
    init_simple_test("S22028C75");
    S22028C75 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S22028C75)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C75)");
    check_field_offset(lv, s22028c75f0, 0, "S22028C75.s22028c75f0");
  }
}
static Arrange_To_Call_Me vS22028C75(Test_S22028C75, "S22028C75", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C71  : S22028C19_nt {
  ::S22028C72 s22028c71f0;
  ::S22028C75 s22028c71f1;
  virtual void  v72(); // _ZN9S22028C713v72Ev
  virtual void  v73(); // _ZN9S22028C713v73Ev
  virtual void  v74(); // _ZN9S22028C713v74Ev
  virtual void  v75(); // _ZN9S22028C713v75Ev
  virtual void  v76(); // _ZN9S22028C713v76Ev
  virtual void  v77(); // _ZN9S22028C713v77Ev
  ~S22028C71(); // tgen
  S22028C71(); // tgen
};
//SIG(-1 S22028C71) C1{ BC2{ BC3{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC8{ m Fp Fi FC6} FC8 FC8 FC8} v1 v2 v3 v4 v5 v6 FC9{ BC10{ vd v14 FC11{ m Fp Fi[2] FC7} FC12{ m Fc FC13{ m Fi[3]} Fi[2]} FC8} BC14{ m Fp[2]} v13 FC15{ m FC16{ BC17{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp}}} FC18{ m FC14}}


void  S22028C71 ::v72(){vfunc_called(this, "_ZN9S22028C713v72Ev");}
void  S22028C71 ::v73(){vfunc_called(this, "_ZN9S22028C713v73Ev");}
void  S22028C71 ::v74(){vfunc_called(this, "_ZN9S22028C713v74Ev");}
void  S22028C71 ::v75(){vfunc_called(this, "_ZN9S22028C713v75Ev");}
void  S22028C71 ::v76(){vfunc_called(this, "_ZN9S22028C713v76Ev");}
void  S22028C71 ::v77(){vfunc_called(this, "_ZN9S22028C713v77Ev");}
S22028C71 ::~S22028C71(){ note_dtor("S22028C71", this);} // tgen
S22028C71 ::S22028C71(){ note_ctor("S22028C71", this);} // tgen

static void Test_S22028C71()
{
  extern Class_Descriptor cd_S22028C71;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,40)];
    init_test(&cd_S22028C71, buf);
    S22028C71 *dp, &lv = *(dp=new (buf) S22028C71());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,156), "sizeof(S22028C71)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C71)");
    check_base_class_offset(lv, (S22028C10*)(S22028C19_nt*), ABISELECT(8,4), "S22028C71");
    check_base_class_offset(lv, (S22028C19_nt*), 0, "S22028C71");
    check_field_offset(lv, s22028c71f0, ABISELECT(104,72), "S22028C71.s22028c71f0");
    check_field_offset(lv, s22028c71f1, ABISELECT(216,148), "S22028C71.s22028c71f1");
    test_class_info(&lv, &cd_S22028C71);
    dp->~S22028C71();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C71(Test_S22028C71, "S22028C71", ABISELECT(232,156));

#else // __cplusplus

extern void _ZN9S22028C71C1Ev();
extern void _ZN9S22028C71D1Ev();
Name_Map name_map_S22028C71[] = {
  NSPAIR(_ZN9S22028C71C1Ev),
  NSPAIR(_ZN9S22028C71D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C10;
extern VTBL_ENTRY _ZTI9S22028C10[];
extern Class_Descriptor cd_S22028C19_nt;
extern VTBL_ENTRY _ZTI12S22028C19_nt[];
extern  VTBL_ENTRY _ZTV12S22028C19_nt[];
static Base_Class bases_S22028C71[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C10,    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_S22028C19_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 _ZTI9S22028C71[];
extern void _ZN9S22028C71D1Ev();
extern void _ZN9S22028C71D0Ev();
extern void _ZN12S22028C19_nt3v14Ev();
extern void _ZN12S22028C19_nt3v15Ev();
extern void _ZN12S22028C19_nt3v16Ev();
extern void _ZN12S22028C19_nt3v17Ev();
extern void _ZN12S22028C19_nt3v18Ev();
extern void _ZN12S22028C19_nt3v19Ev();
extern void _ZN9S22028C713v72Ev();
extern void _ZN9S22028C713v73Ev();
extern void _ZN9S22028C713v74Ev();
extern void _ZN9S22028C713v75Ev();
extern void _ZN9S22028C713v76Ev();
extern void _ZN9S22028C713v77Ev();
static  VTBL_ENTRY vtc_S22028C71[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C71[0]),
  (VTBL_ENTRY)&_ZN9S22028C71D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C71D0Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v14Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v15Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v16Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v17Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v18Ev,
  (VTBL_ENTRY)&_ZN12S22028C19_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S22028C713v72Ev,
  (VTBL_ENTRY)&_ZN9S22028C713v73Ev,
  (VTBL_ENTRY)&_ZN9S22028C713v74Ev,
  (VTBL_ENTRY)&_ZN9S22028C713v75Ev,
  (VTBL_ENTRY)&_ZN9S22028C713v76Ev,
  (VTBL_ENTRY)&_ZN9S22028C713v77Ev,
};
extern VTBL_ENTRY _ZTI9S22028C71[];
extern  VTBL_ENTRY _ZTV9S22028C71[];
Class_Descriptor cd_S22028C71 = {  "S22028C71", // class name
  bases_S22028C71, 2,
  &(vtc_S22028C71[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,156), // object size
  NSPAIRA(_ZTI9S22028C71),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S22028C71),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C70  {
  ::S22028C71 s22028c70f0;
  ::S22028C72 s22028c70f1;
  void  mf22028c70(); // _ZN9S22028C7010mf22028c70Ev
};
//SIG(-1 S22028C70) C1{ m FC2{ BC3{ BC4{ m Fp[2]} vd v7 v8 v9 v10 v11 v12 FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC9{ m Fp Fi FC7} FC9 FC9 FC9} v1 v2 v3 v4 v5 v6 FC10{ BC11{ vd v14 FC12{ m Fp Fi[2] FC8} FC13{ m Fc FC14{ m Fi[3]} Fi[2]} FC9} BC15{ m Fp[2]} v13 FC16{ m FC17{ BC18{ vd v22 v23 v24 v25 v26 v27 v28} vd v15 v16 v17 v18 v19 v20 v21 Fi Fp}}} FC19{ m FC15}} FC10}


void  S22028C70 ::mf22028c70(){}

static void Test_S22028C70()
{
  {
    init_simple_test("S22028C70");
    S22028C70 lv;
    check2(sizeof(lv), ABISELECT(344,232), "sizeof(S22028C70)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C70)");
    check_field_offset(lv, s22028c70f0, 0, "S22028C70.s22028c70f0");
    check_field_offset(lv, s22028c70f1, ABISELECT(232,156), "S22028C70.s22028c70f1");
  }
}
static Arrange_To_Call_Me vS22028C70(Test_S22028C70, "S22028C70", ABISELECT(344,232));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C79  {
  ::S3280C7_nt s22028c79f0;
  int s22028c79f1[2];
  void  mf22028c79(); // _ZN9S22028C7910mf22028c79Ev
};
//SIG(-1 S22028C79) C1{ m FC2{ m Fp Fi[2]} Fi[2]}


void  S22028C79 ::mf22028c79(){}

static void Test_S22028C79()
{
  {
    init_simple_test("S22028C79");
    S22028C79 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S22028C79)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C79)");
    check_field_offset(lv, s22028c79f0, 0, "S22028C79.s22028c79f0");
    check_field_offset(lv, s22028c79f1, ABISELECT(16,12), "S22028C79.s22028c79f1");
  }
}
static Arrange_To_Call_Me vS22028C79(Test_S22028C79, "S22028C79", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C76  {
  ::S22028C33_nt s22028c76f0[64];
  ::S22028C79 s22028c76f1;
  ::S22028C33_nt s22028c76f2[64];
  void  mf22028c76(); // _ZN9S22028C7610mf22028c76Ev
};
//SIG(-1 S22028C76) C1{ m FC2{ m FC3{ m FL[2]}}[64] FC4{ m FC5{ m Fp Fi[2]} Fi[2]} FC2[64]}


void  S22028C76 ::mf22028c76(){}

static void Test_S22028C76()
{
  {
    init_simple_test("S22028C76");
    S22028C76 lv;
    check2(sizeof(lv), ABISELECT(2072,2068), "sizeof(S22028C76)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C76)");
    check_field_offset(lv, s22028c76f0, 0, "S22028C76.s22028c76f0");
    check_field_offset(lv, s22028c76f1, 1024, "S22028C76.s22028c76f1");
    check_field_offset(lv, s22028c76f2, ABISELECT(1048,1044), "S22028C76.s22028c76f2");
  }
}
static Arrange_To_Call_Me vS22028C76(Test_S22028C76, "S22028C76", ABISELECT(2072,2068));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C69  {
  ::S22028C4 s22028c69f0;
  ::S22028C2_nt s22028c69f1;
  ::S22028C2_nt s22028c69f2;
  int s22028c69f3[4];
  ::S3280C13_nt s22028c69f4;
  char s22028c69f5[2];
  ::S22028C8_nt s22028c69f6;
  ::S22028C17 s22028c69f7;
  ::S22028C39 s22028c69f8;
  ::S22028C46 s22028c69f9;
  ::S22028C53 s22028c69f10;
  ::S22028C60 s22028c69f11;
  ::S22028C70 s22028c69f12;
  int s22028c69f13;
  ::S22028C67_nt s22028c69f14;
  int s22028c69f15[2];
  ::S22028C76 s22028c69f16;
  char s22028c69f17;
  ::S22028C68_nt s22028c69f18;
  virtual  ~S22028C69(); // _ZN9S22028C69D1Ev
  virtual void  v71(); // _ZN9S22028C693v71Ev
  S22028C69(); // tgen
};
//SIG(-1 S22028C69) C1{ vd v1 FC2{ m Fp[2]} FC3{ m Fp[2]} FC3 Fi[4] FC4{ m Fi[3]} Fc[2] FC5{ m FC6{ m FC7{ m Fp[2]}} FC8{ m Fp Fi FC9{ m}} FC10{ BC11{ m Fp Fi FC9 FC12{ m}}} FC8 FC8 Fc[2] Fi} FC13{ m FC14{ BC15{ BC7 vd v8 v9 v10 v11 v12 v13 FC10 FC8 FC8 FC8 FC8} v2 v3 v4 v5 v6 v7 FC16{ BC17{ vd v15 FC18{ m Fp Fi[2] FC12} FC19{ m Fc FC20{ m Fi[3]} Fi[2]} FC8} BC21{ m Fp[2]} v14 FC22{ m FC23{ m Fi[8] FC24{ m FC25{ m FL[2]}} FC24} FC26{ BC27{ vd v23 v24 v25 v26 v27 v28 v29} vd v16 v17 v18 v19 v20 v21 v22 Fi Fp} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC28{ BC27 vd v30 v31 v32 v33 v34 v35 v36 FC24 Fp} FC28}} FC6} FC16} FC29{ m FC30{ BC15 v37 v38 v39 v40 v41 v42 FC31{ BC17 BC32{ m Fp[2]} v43 FC33{ m FC34{ m Fi[4] FC24 Fi[3]} FC26 FC26 FC26 FC26 FC28 FC26 FC26 FC26 FC26}} FC35{ m FC32}} FC31} FC36{ m FC37{ BC15 v44 v45 v46 v47 v48 v49 FC38{ BC17 BC39{ m Fp[2]} v50 FC40{ m FC41{ m FC24 FC24 Fi[8]} FC28 FC28 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC35} FC38} FC42{ m FC43{ BC15 v51 v52 v53 v54 v55 v56 FC44{ BC17 BC45{ m Fp[2]} v57 FC46{ m FC47{ m Fi[15]} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC48{ m FC45}} FC44} FC49{ m FC50{ BC15 v58 v59 v60 v61 v62 v63 FC51{ BC17 BC52{ m Fp[2]} v64 FC53{ m FC54{ m Fi[4]} FC26 FC26 FC26 FC26}} FC48} FC51} FC55{ m FC56{ BC15 v65 v66 v67 v68 v69 v70 FC57{ BC17 BC58{ m Fp[2]} v71 FC59{ m FC26}} FC60{ m FC58}} FC57} Fi FC61{ m Fl} Fi[2] FC62{ m FC24[64] FC63{ m FC64{ m Fp Fi[2]} Fi[2]} FC24[64]} Fc FC65{ m Fp}}


 S22028C69 ::~S22028C69(){ note_dtor("S22028C69", this);}
void  S22028C69 ::v71(){vfunc_called(this, "_ZN9S22028C693v71Ev");}
S22028C69 ::S22028C69(){ note_ctor("S22028C69", this);} // tgen

static void Test_S22028C69()
{
  extern Class_Descriptor cd_S22028C69;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(871,1309)];
    init_test(&cd_S22028C69, buf);
    S22028C69 *dp, &lv = *(dp=new (buf) S22028C69());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6960,5232), "sizeof(S22028C69)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C69)");
    check_field_offset(lv, s22028c69f0, ABISELECT(8,4), "S22028C69.s22028c69f0");
    check_field_offset(lv, s22028c69f1, ABISELECT(24,12), "S22028C69.s22028c69f1");
    check_field_offset(lv, s22028c69f2, ABISELECT(40,20), "S22028C69.s22028c69f2");
    check_field_offset(lv, s22028c69f3, ABISELECT(56,28), "S22028C69.s22028c69f3");
    check_field_offset(lv, s22028c69f4, ABISELECT(72,44), "S22028C69.s22028c69f4");
    check_field_offset(lv, s22028c69f5, ABISELECT(84,56), "S22028C69.s22028c69f5");
    check_field_offset(lv, s22028c69f6, ABISELECT(88,60), "S22028C69.s22028c69f6");
    check_field_offset(lv, s22028c69f7, ABISELECT(176,124), "S22028C69.s22028c69f7");
    check_field_offset(lv, s22028c69f8, ABISELECT(1112,748), "S22028C69.s22028c69f8");
    check_field_offset(lv, s22028c69f9, ABISELECT(1952,1284), "S22028C69.s22028c69f9");
    check_field_offset(lv, s22028c69f10, ABISELECT(2840,1884), "S22028C69.s22028c69f10");
    check_field_offset(lv, s22028c69f11, ABISELECT(3984,2572), "S22028C69.s22028c69f11");
    check_field_offset(lv, s22028c69f12, ABISELECT(4504,2908), "S22028C69.s22028c69f12");
    check_field_offset(lv, s22028c69f13, ABISELECT(4848,3140), "S22028C69.s22028c69f13");
    check_field_offset(lv, s22028c69f14, ABISELECT(4856,3144), "S22028C69.s22028c69f14");
    check_field_offset(lv, s22028c69f15, ABISELECT(4864,3148), "S22028C69.s22028c69f15");
    check_field_offset(lv, s22028c69f16, ABISELECT(4872,3156), "S22028C69.s22028c69f16");
    check_field_offset(lv, s22028c69f17, ABISELECT(6944,5224), "S22028C69.s22028c69f17");
    check_field_offset(lv, s22028c69f18, ABISELECT(6952,5228), "S22028C69.s22028c69f18");
    test_class_info(&lv, &cd_S22028C69);
    dp->~S22028C69();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C69(Test_S22028C69, "S22028C69", ABISELECT(6960,5232));

#else // __cplusplus

extern void _ZN9S22028C69C1Ev();
extern void _ZN9S22028C69D1Ev();
Name_Map name_map_S22028C69[] = {
  NSPAIR(_ZN9S22028C69C1Ev),
  NSPAIR(_ZN9S22028C69D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S22028C69[];
extern void _ZN9S22028C69D1Ev();
extern void _ZN9S22028C69D0Ev();
extern void _ZN9S22028C693v71Ev();
static  VTBL_ENTRY vtc_S22028C69[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22028C69[0]),
  (VTBL_ENTRY)&_ZN9S22028C69D1Ev,
  (VTBL_ENTRY)&_ZN9S22028C69D0Ev,
  (VTBL_ENTRY)&_ZN9S22028C693v71Ev,
};
extern VTBL_ENTRY _ZTI9S22028C69[];
extern  VTBL_ENTRY _ZTV9S22028C69[];
Class_Descriptor cd_S22028C69 = {  "S22028C69", // class name
  0,0,//no base classes
  &(vtc_S22028C69[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6960,5232), // object size
  NSPAIRA(_ZTI9S22028C69),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S22028C69),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22028C1  {
  ::S22028C2_nt s22028c1f0;
  ::S22028C2_nt s22028c1f1;
  ::S22028C4 s22028c1f2;
  ::S22028C5 s22028c1f3;
  ::S22028C69 s22028c1f4;
  virtual  ~S22028C1(); // _ZN8S22028C1D1Ev
  virtual void  v1(); // _ZN8S22028C12v1Ev
  virtual void  v2(); // _ZN8S22028C12v2Ev
  virtual void  v3(); // _ZN8S22028C12v3Ev
  virtual void  v4(); // _ZN8S22028C12v4Ev
  virtual void  v5(); // _ZN8S22028C12v5Ev
  virtual void  v6(); // _ZN8S22028C12v6Ev
  S22028C1(); // tgen
};
//SIG(1 S22028C1) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[2]} FC2 FC3{ m Fp[2]} FC4{ vd v7 Fi FC3 FC2 FC2 Fi[4] FC5{ m Fi[3]} Fi[2] Fc FC6{ m FC7{ m FC8{ m Fp[2]}} FC9{ m Fp Fi FC10{ m}} FC11{ BC12{ m Fp Fi FC10 FC13{ m}}} FC9 FC9 Fc[2] Fi} FC14{ m FC15{ BC16{ BC8 vd v14 v15 v16 v17 v18 v19 FC11 FC9 FC9 FC9 FC9} v8 v9 v10 v11 v12 v13 FC17{ BC18{ vd v21 FC19{ m Fp Fi[2] FC13} FC20{ m Fc FC21{ m Fi[3]} Fi[2]} FC9} BC22{ m Fp[2]} v20 FC23{ m FC24{ m Fi[8] FC25{ m FC26{ m FL[2]}} FC25} FC27{ BC28{ vd v29 v30 v31 v32 v33 v34 v35} vd v22 v23 v24 v25 v26 v27 v28 Fi Fp} FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC29{ BC28 vd v36 v37 v38 v39 v40 v41 v42 FC25 Fp} FC29}} FC7} FC17} FC30{ m FC31{ BC16 v43 v44 v45 v46 v47 v48 FC32{ BC18 BC33{ m Fp[2]} v49 FC34{ m FC35{ m Fi[4] FC25 Fi[3]} FC27 FC27 FC27 FC27 FC29 FC27 FC27 FC27 FC27}} FC36{ m FC33}} FC32} FC37{ m FC38{ BC16 v50 v51 v52 v53 v54 v55 FC39{ BC18 BC40{ m Fp[2]} v56 FC41{ m FC42{ m FC25 FC25 Fi[8]} FC29 FC29 FC27 FC27 FC27 FC27 FC27 FC27 FC27}} FC36} FC39} FC43{ m FC44{ BC16 v57 v58 v59 v60 v61 v62 FC45{ BC18 BC46{ m Fp[2]} v63 FC47{ m FC48{ m Fi[15]} FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27 FC27}} FC49{ m FC46}} FC45} FC50{ m FC51{ BC16 v64 v65 v66 v67 v68 v69 FC52{ BC18 BC53{ m Fp[2]} v70 FC54{ m FC55{ m Fi[4]} FC27 FC27 FC27 FC27}} FC49} FC52} FC14 FC30 FC37 FC43 FC50 Fi FC56{ m Fl} Fi FC57{ m Fp}} FC58{ vd v71 FC3 FC2 FC2 Fi[4] FC5 Fc[2] FC6 FC14 FC30 FC37 FC43 FC50 FC59{ m FC60{ BC16 v72 v73 v74 v75 v76 v77 FC61{ BC18 BC62{ m Fp[2]} v78 FC63{ m FC27}} FC64{ m FC62}} FC61} Fi FC56 Fi[2] FC65{ m FC25[64] FC66{ m FC67{ m Fp Fi[2]} Fi[2]} FC25[64]} Fc FC57}}


 S22028C1 ::~S22028C1(){ note_dtor("S22028C1", this);}
void  S22028C1 ::v1(){vfunc_called(this, "_ZN8S22028C12v1Ev");}
void  S22028C1 ::v2(){vfunc_called(this, "_ZN8S22028C12v2Ev");}
void  S22028C1 ::v3(){vfunc_called(this, "_ZN8S22028C12v3Ev");}
void  S22028C1 ::v4(){vfunc_called(this, "_ZN8S22028C12v4Ev");}
void  S22028C1 ::v5(){vfunc_called(this, "_ZN8S22028C12v5Ev");}
void  S22028C1 ::v6(){vfunc_called(this, "_ZN8S22028C12v6Ev");}
S22028C1 ::S22028C1(){ note_ctor("S22028C1", this);} // tgen

static void Test_S22028C1()
{
  extern Class_Descriptor cd_S22028C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1988,2746)];
    init_test(&cd_S22028C1, buf);
    S22028C1 *dp, &lv = *(dp=new (buf) S22028C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15896,10980), "sizeof(S22028C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22028C1)");
    check_field_offset(lv, s22028c1f0, ABISELECT(8,4), "S22028C1.s22028c1f0");
    check_field_offset(lv, s22028c1f1, ABISELECT(24,12), "S22028C1.s22028c1f1");
    check_field_offset(lv, s22028c1f2, ABISELECT(40,20), "S22028C1.s22028c1f2");
    check_field_offset(lv, s22028c1f3, ABISELECT(56,28), "S22028C1.s22028c1f3");
    check_field_offset(lv, s22028c1f4, ABISELECT(8936,5748), "S22028C1.s22028c1f4");
    test_class_info(&lv, &cd_S22028C1);
    dp->~S22028C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22028C1(Test_S22028C1, "S22028C1", ABISELECT(15896,10980));

#else // __cplusplus

extern void _ZN8S22028C1C1Ev();
extern void _ZN8S22028C1D1Ev();
Name_Map name_map_S22028C1[] = {
  NSPAIR(_ZN8S22028C1C1Ev),
  NSPAIR(_ZN8S22028C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S22028C1[];
extern void _ZN8S22028C1D1Ev();
extern void _ZN8S22028C1D0Ev();
extern void _ZN8S22028C12v1Ev();
extern void _ZN8S22028C12v2Ev();
extern void _ZN8S22028C12v3Ev();
extern void _ZN8S22028C12v4Ev();
extern void _ZN8S22028C12v5Ev();
extern void _ZN8S22028C12v6Ev();
static  VTBL_ENTRY vtc_S22028C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S22028C1[0]),
  (VTBL_ENTRY)&_ZN8S22028C1D1Ev,
  (VTBL_ENTRY)&_ZN8S22028C1D0Ev,
  (VTBL_ENTRY)&_ZN8S22028C12v1Ev,
  (VTBL_ENTRY)&_ZN8S22028C12v2Ev,
  (VTBL_ENTRY)&_ZN8S22028C12v3Ev,
  (VTBL_ENTRY)&_ZN8S22028C12v4Ev,
  (VTBL_ENTRY)&_ZN8S22028C12v5Ev,
  (VTBL_ENTRY)&_ZN8S22028C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S22028C1[];
extern  VTBL_ENTRY _ZTV8S22028C1[];
Class_Descriptor cd_S22028C1 = {  "S22028C1", // class name
  0,0,//no base classes
  &(vtc_S22028C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(15896,10980), // object size
  NSPAIRA(_ZTI8S22028C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S22028C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22029C67_nt  {
  __tsi64 s22029c67f0;
  void  mf22029c67(); // _ZN12S22029C67_nt10mf22029c67Ev
};
//SIG(-1 S22029C67_nt) C1{ m FL}


void  S22029C67_nt ::mf22029c67(){}

//skip512 S22029C67_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22029C5  {
  int s22029c5f0;
  ::S22028C49 s22029c5f1;
  ::S22028C73 s22029c5f2;
  ::S22028C63 s22029c5f3;
  int s22029c5f4[4];
  ::S22028C29_nt s22029c5f5;
  int s22029c5f6[2];
  char s22029c5f7;
  ::S22028C8_nt s22029c5f8;
  ::S22028C17 s22029c5f9;
  ::S22028C39 s22029c5f10;
  ::S22028C46 s22029c5f11;
  ::S22028C53 s22029c5f12;
  ::S22028C60 s22029c5f13;
  ::S22028C17 s22029c5f14;
  ::S22028C39 s22029c5f15;
  ::S22028C46 s22029c5f16;
  ::S22028C53 s22029c5f17;
  ::S22028C60 s22029c5f18;
  int s22029c5f19;
  ::S22029C67_nt s22029c5f20;
  int s22029c5f21;
  ::S22028C68_nt s22029c5f22;
  virtual  ~S22029C5(); // _ZN8S22029C5D1Ev
  virtual void  v7(); // _ZN8S22029C52v7Ev
  S22029C5(); // tgen
};
//SIG(-1 S22029C5) C1{ vd v1 Fi FC2{ m Fp[2]} FC3{ m Fp[2]} FC4{ m Fp[2]} Fi[4] FC5{ m Fi[3]} Fi[2] Fc FC6{ m FC7{ m FC8{ m Fp[2]}} FC9{ m Fp Fi FC10{ m}} FC11{ BC12{ m Fp Fi FC10 FC13{ m}}} FC9 FC9 Fc[2] Fi} FC14{ m FC15{ BC16{ BC8 vd v8 v9 v10 v11 v12 v13 FC11 FC9 FC9 FC9 FC9} v2 v3 v4 v5 v6 v7 FC17{ BC18{ vd v15 FC19{ m Fp Fi[2] FC13} FC20{ m Fc FC5 Fi[2]} FC9} BC21{ m Fp[2]} v14 FC22{ m FC23{ m Fi[8] FC24{ m FC25{ m FL[2]}} FC24} FC26{ BC27{ vd v23 v24 v25 v26 v27 v28 v29} vd v16 v17 v18 v19 v20 v21 v22 Fi Fp} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC28{ BC27 vd v30 v31 v32 v33 v34 v35 v36 FC24 Fp} FC28}} FC7} FC17} FC29{ m FC30{ BC16 v37 v38 v39 v40 v41 v42 FC31{ BC18 BC32{ m Fp[2]} v43 FC33{ m FC34{ m Fi[4] FC24 Fi[3]} FC26 FC26 FC26 FC26 FC28 FC26 FC26 FC26 FC26}} FC35{ m FC32}} FC31} FC36{ m FC37{ BC16 v44 v45 v46 v47 v48 v49 FC38{ BC18 BC2 v50 FC39{ m FC40{ m FC24 FC24 Fi[8]} FC28 FC28 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC35} FC38} FC41{ m FC42{ BC16 v51 v52 v53 v54 v55 v56 FC43{ BC18 BC44{ m Fp[2]} v57 FC45{ m FC46{ m Fi[15]} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC47{ m FC44}} FC43} FC48{ m FC49{ BC16 v58 v59 v60 v61 v62 v63 FC50{ BC18 BC4 v64 FC51{ m FC52{ m Fi[4]} FC26 FC26 FC26 FC26}} FC47} FC50} FC14 FC29 FC36 FC41 FC48 Fi FC53{ m FL} Fi FC54{ m Fp}}


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

static void Test_S22029C5()
{
  extern Class_Descriptor cd_S22029C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1111,1432)];
    init_test(&cd_S22029C5, buf);
    S22029C5 *dp, &lv = *(dp=new (buf) S22029C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8880,5724), "sizeof(S22029C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22029C5)");
    check_field_offset(lv, s22029c5f0, ABISELECT(8,4), "S22029C5.s22029c5f0");
    check_field_offset(lv, s22029c5f1, ABISELECT(16,8), "S22029C5.s22029c5f1");
    check_field_offset(lv, s22029c5f2, ABISELECT(32,16), "S22029C5.s22029c5f2");
    check_field_offset(lv, s22029c5f3, ABISELECT(48,24), "S22029C5.s22029c5f3");
    check_field_offset(lv, s22029c5f4, ABISELECT(64,32), "S22029C5.s22029c5f4");
    check_field_offset(lv, s22029c5f5, ABISELECT(80,48), "S22029C5.s22029c5f5");
    check_field_offset(lv, s22029c5f6, ABISELECT(92,60), "S22029C5.s22029c5f6");
    check_field_offset(lv, s22029c5f7, ABISELECT(100,68), "S22029C5.s22029c5f7");
    check_field_offset(lv, s22029c5f8, ABISELECT(104,72), "S22029C5.s22029c5f8");
    check_field_offset(lv, s22029c5f9, ABISELECT(192,136), "S22029C5.s22029c5f9");
    check_field_offset(lv, s22029c5f10, ABISELECT(1128,760), "S22029C5.s22029c5f10");
    check_field_offset(lv, s22029c5f11, ABISELECT(1968,1296), "S22029C5.s22029c5f11");
    check_field_offset(lv, s22029c5f12, ABISELECT(2856,1896), "S22029C5.s22029c5f12");
    check_field_offset(lv, s22029c5f13, ABISELECT(4000,2584), "S22029C5.s22029c5f13");
    check_field_offset(lv, s22029c5f14, ABISELECT(4520,2920), "S22029C5.s22029c5f14");
    check_field_offset(lv, s22029c5f15, ABISELECT(5456,3544), "S22029C5.s22029c5f15");
    check_field_offset(lv, s22029c5f16, ABISELECT(6296,4080), "S22029C5.s22029c5f16");
    check_field_offset(lv, s22029c5f17, ABISELECT(7184,4680), "S22029C5.s22029c5f17");
    check_field_offset(lv, s22029c5f18, ABISELECT(8328,5368), "S22029C5.s22029c5f18");
    check_field_offset(lv, s22029c5f19, ABISELECT(8848,5704), "S22029C5.s22029c5f19");
    check_field_offset(lv, s22029c5f20, ABISELECT(8856,5708), "S22029C5.s22029c5f20");
    check_field_offset(lv, s22029c5f21, ABISELECT(8864,5716), "S22029C5.s22029c5f21");
    check_field_offset(lv, s22029c5f22, ABISELECT(8872,5720), "S22029C5.s22029c5f22");
    test_class_info(&lv, &cd_S22029C5);
    dp->~S22029C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22029C5(Test_S22029C5, "S22029C5", ABISELECT(8880,5724));

#else // __cplusplus

extern void _ZN8S22029C5C1Ev();
extern void _ZN8S22029C5D1Ev();
Name_Map name_map_S22029C5[] = {
  NSPAIR(_ZN8S22029C5C1Ev),
  NSPAIR(_ZN8S22029C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S22029C5[];
extern void _ZN8S22029C5D1Ev();
extern void _ZN8S22029C5D0Ev();
extern void _ZN8S22029C52v7Ev();
static  VTBL_ENTRY vtc_S22029C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S22029C5[0]),
  (VTBL_ENTRY)&_ZN8S22029C5D1Ev,
  (VTBL_ENTRY)&_ZN8S22029C5D0Ev,
  (VTBL_ENTRY)&_ZN8S22029C52v7Ev,
};
extern VTBL_ENTRY _ZTI8S22029C5[];
extern  VTBL_ENTRY _ZTV8S22029C5[];
Class_Descriptor cd_S22029C5 = {  "S22029C5", // class name
  0,0,//no base classes
  &(vtc_S22029C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8880,5724), // object size
  NSPAIRA(_ZTI8S22029C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S22029C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22029C69  {
  ::S22028C49 s22029c69f0;
  ::S22028C73 s22029c69f1;
  ::S22028C63 s22029c69f2;
  int s22029c69f3[4];
  ::S22028C29_nt s22029c69f4;
  char s22029c69f5[2];
  ::S22028C8_nt s22029c69f6;
  ::S22028C17 s22029c69f7;
  ::S22028C39 s22029c69f8;
  ::S22028C46 s22029c69f9;
  ::S22028C53 s22029c69f10;
  ::S22028C60 s22029c69f11;
  ::S22028C70 s22029c69f12;
  int s22029c69f13;
  ::S22029C67_nt s22029c69f14;
  int s22029c69f15[2];
  ::S22028C76 s22029c69f16;
  char s22029c69f17;
  ::S22028C68_nt s22029c69f18;
  virtual  ~S22029C69(); // _ZN9S22029C69D1Ev
  virtual void  v71(); // _ZN9S22029C693v71Ev
  S22029C69(); // tgen
};
//SIG(-1 S22029C69) C1{ vd v1 FC2{ m Fp[2]} FC3{ m Fp[2]} FC4{ m Fp[2]} Fi[4] FC5{ m Fi[3]} Fc[2] FC6{ m FC7{ m FC8{ m Fp[2]}} FC9{ m Fp Fi FC10{ m}} FC11{ BC12{ m Fp Fi FC10 FC13{ m}}} FC9 FC9 Fc[2] Fi} FC14{ m FC15{ BC16{ BC8 vd v8 v9 v10 v11 v12 v13 FC11 FC9 FC9 FC9 FC9} v2 v3 v4 v5 v6 v7 FC17{ BC18{ vd v15 FC19{ m Fp Fi[2] FC13} FC20{ m Fc FC5 Fi[2]} FC9} BC21{ m Fp[2]} v14 FC22{ m FC23{ m Fi[8] FC24{ m FC25{ m FL[2]}} FC24} FC26{ BC27{ vd v23 v24 v25 v26 v27 v28 v29} vd v16 v17 v18 v19 v20 v21 v22 Fi Fp} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC28{ BC27 vd v30 v31 v32 v33 v34 v35 v36 FC24 Fp} FC28}} FC7} FC17} FC29{ m FC30{ BC16 v37 v38 v39 v40 v41 v42 FC31{ BC18 BC32{ m Fp[2]} v43 FC33{ m FC34{ m Fi[4] FC24 Fi[3]} FC26 FC26 FC26 FC26 FC28 FC26 FC26 FC26 FC26}} FC35{ m FC32}} FC31} FC36{ m FC37{ BC16 v44 v45 v46 v47 v48 v49 FC38{ BC18 BC2 v50 FC39{ m FC40{ m FC24 FC24 Fi[8]} FC28 FC28 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC35} FC38} FC41{ m FC42{ BC16 v51 v52 v53 v54 v55 v56 FC43{ BC18 BC44{ m Fp[2]} v57 FC45{ m FC46{ m Fi[15]} FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26 FC26}} FC47{ m FC44}} FC43} FC48{ m FC49{ BC16 v58 v59 v60 v61 v62 v63 FC50{ BC18 BC4 v64 FC51{ m FC52{ m Fi[4]} FC26 FC26 FC26 FC26}} FC47} FC50} FC53{ m FC54{ BC16 v65 v66 v67 v68 v69 v70 FC55{ BC18 BC3 v71 FC56{ m FC26}} FC57{ m FC3}} FC55} Fi FC58{ m FL} Fi[2] FC59{ m FC24[64] FC60{ m FC61{ m Fp Fi[2]} Fi[2]} FC24[64]} Fc FC62{ m Fp}}


 S22029C69 ::~S22029C69(){ note_dtor("S22029C69", this);}
void  S22029C69 ::v71(){vfunc_called(this, "_ZN9S22029C693v71Ev");}
S22029C69 ::S22029C69(){ note_ctor("S22029C69", this);} // tgen

static void Test_S22029C69()
{
  extern Class_Descriptor cd_S22029C69;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(871,1310)];
    init_test(&cd_S22029C69, buf);
    S22029C69 *dp, &lv = *(dp=new (buf) S22029C69());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6960,5236), "sizeof(S22029C69)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22029C69)");
    check_field_offset(lv, s22029c69f0, ABISELECT(8,4), "S22029C69.s22029c69f0");
    check_field_offset(lv, s22029c69f1, ABISELECT(24,12), "S22029C69.s22029c69f1");
    check_field_offset(lv, s22029c69f2, ABISELECT(40,20), "S22029C69.s22029c69f2");
    check_field_offset(lv, s22029c69f3, ABISELECT(56,28), "S22029C69.s22029c69f3");
    check_field_offset(lv, s22029c69f4, ABISELECT(72,44), "S22029C69.s22029c69f4");
    check_field_offset(lv, s22029c69f5, ABISELECT(84,56), "S22029C69.s22029c69f5");
    check_field_offset(lv, s22029c69f6, ABISELECT(88,60), "S22029C69.s22029c69f6");
    check_field_offset(lv, s22029c69f7, ABISELECT(176,124), "S22029C69.s22029c69f7");
    check_field_offset(lv, s22029c69f8, ABISELECT(1112,748), "S22029C69.s22029c69f8");
    check_field_offset(lv, s22029c69f9, ABISELECT(1952,1284), "S22029C69.s22029c69f9");
    check_field_offset(lv, s22029c69f10, ABISELECT(2840,1884), "S22029C69.s22029c69f10");
    check_field_offset(lv, s22029c69f11, ABISELECT(3984,2572), "S22029C69.s22029c69f11");
    check_field_offset(lv, s22029c69f12, ABISELECT(4504,2908), "S22029C69.s22029c69f12");
    check_field_offset(lv, s22029c69f13, ABISELECT(4848,3140), "S22029C69.s22029c69f13");
    check_field_offset(lv, s22029c69f14, ABISELECT(4856,3144), "S22029C69.s22029c69f14");
    check_field_offset(lv, s22029c69f15, ABISELECT(4864,3152), "S22029C69.s22029c69f15");
    check_field_offset(lv, s22029c69f16, ABISELECT(4872,3160), "S22029C69.s22029c69f16");
    check_field_offset(lv, s22029c69f17, ABISELECT(6944,5228), "S22029C69.s22029c69f17");
    check_field_offset(lv, s22029c69f18, ABISELECT(6952,5232), "S22029C69.s22029c69f18");
    test_class_info(&lv, &cd_S22029C69);
    dp->~S22029C69();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22029C69(Test_S22029C69, "S22029C69", ABISELECT(6960,5236));

#else // __cplusplus

extern void _ZN9S22029C69C1Ev();
extern void _ZN9S22029C69D1Ev();
Name_Map name_map_S22029C69[] = {
  NSPAIR(_ZN9S22029C69C1Ev),
  NSPAIR(_ZN9S22029C69D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S22029C69[];
extern void _ZN9S22029C69D1Ev();
extern void _ZN9S22029C69D0Ev();
extern void _ZN9S22029C693v71Ev();
static  VTBL_ENTRY vtc_S22029C69[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S22029C69[0]),
  (VTBL_ENTRY)&_ZN9S22029C69D1Ev,
  (VTBL_ENTRY)&_ZN9S22029C69D0Ev,
  (VTBL_ENTRY)&_ZN9S22029C693v71Ev,
};
extern VTBL_ENTRY _ZTI9S22029C69[];
extern  VTBL_ENTRY _ZTV9S22029C69[];
Class_Descriptor cd_S22029C69 = {  "S22029C69", // class name
  0,0,//no base classes
  &(vtc_S22029C69[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(6960,5236), // object size
  NSPAIRA(_ZTI9S22029C69),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S22029C69),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S22029C1  {
  ::S22028C73 s22029c1f0;
  ::S22028C63 s22029c1f1;
  ::S22028C56 s22029c1f2;
  ::S22029C5 s22029c1f3;
  ::S22029C69 s22029c1f4;
  virtual  ~S22029C1(); // _ZN8S22029C1D1Ev
  virtual void  v1(); // _ZN8S22029C12v1Ev
  virtual void  v2(); // _ZN8S22029C12v2Ev
  virtual void  v3(); // _ZN8S22029C12v3Ev
  virtual void  v4(); // _ZN8S22029C12v4Ev
  virtual void  v5(); // _ZN8S22029C12v5Ev
  virtual void  v6(); // _ZN8S22029C12v6Ev
  S22029C1(); // tgen
};
//SIG(1 S22029C1) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[2]} FC3{ m Fp[2]} FC4{ m Fp[2]} FC5{ vd v7 Fi FC6{ m Fp[2]} FC2 FC3 Fi[4] FC7{ m Fi[3]} Fi[2] Fc FC8{ m FC9{ m FC10{ m Fp[2]}} FC11{ m Fp Fi FC12{ m}} FC13{ BC14{ m Fp Fi FC12 FC15{ m}}} FC11 FC11 Fc[2] Fi} FC16{ m FC17{ BC18{ BC10 vd v14 v15 v16 v17 v18 v19 FC13 FC11 FC11 FC11 FC11} v8 v9 v10 v11 v12 v13 FC19{ BC20{ vd v21 FC21{ m Fp Fi[2] FC15} FC22{ m Fc FC7 Fi[2]} FC11} BC23{ m Fp[2]} v20 FC24{ m FC25{ m Fi[8] FC26{ m FC27{ m FL[2]}} FC26} FC28{ BC29{ vd v29 v30 v31 v32 v33 v34 v35} vd v22 v23 v24 v25 v26 v27 v28 Fi Fp} FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC30{ BC29 vd v36 v37 v38 v39 v40 v41 v42 FC26 Fp} FC30}} FC9} FC19} FC31{ m FC32{ BC18 v43 v44 v45 v46 v47 v48 FC33{ BC20 BC34{ m Fp[2]} v49 FC35{ m FC36{ m Fi[4] FC26 Fi[3]} FC28 FC28 FC28 FC28 FC30 FC28 FC28 FC28 FC28}} FC37{ m FC34}} FC33} FC38{ m FC39{ BC18 v50 v51 v52 v53 v54 v55 FC40{ BC20 BC6 v56 FC41{ m FC42{ m FC26 FC26 Fi[8]} FC30 FC30 FC28 FC28 FC28 FC28 FC28 FC28 FC28}} FC37} FC40} FC43{ m FC44{ BC18 v57 v58 v59 v60 v61 v62 FC45{ BC20 BC4 v63 FC46{ m FC47{ m Fi[15]} FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28 FC28}} FC48{ m FC4}} FC45} FC49{ m FC50{ BC18 v64 v65 v66 v67 v68 v69 FC51{ BC20 BC3 v70 FC52{ m FC53{ m Fi[4]} FC28 FC28 FC28 FC28}} FC48} FC51} FC16 FC31 FC38 FC43 FC49 Fi FC54{ m FL} Fi FC55{ m Fp}} FC56{ vd v71 FC6 FC2 FC3 Fi[4] FC7 Fc[2] FC8 FC16 FC31 FC38 FC43 FC49 FC57{ m FC58{ BC18 v72 v73 v74 v75 v76 v77 FC59{ BC20 BC2 v78 FC60{ m FC28}} FC61{ m FC2}} FC59} Fi FC54 Fi[2] FC62{ m FC26[64] FC63{ m FC64{ m Fp Fi[2]} Fi[2]} FC26[64]} Fc FC55}}


 S22029C1 ::~S22029C1(){ note_dtor("S22029C1", this);}
void  S22029C1 ::v1(){vfunc_called(this, "_ZN8S22029C12v1Ev");}
void  S22029C1 ::v2(){vfunc_called(this, "_ZN8S22029C12v2Ev");}
void  S22029C1 ::v3(){vfunc_called(this, "_ZN8S22029C12v3Ev");}
void  S22029C1 ::v4(){vfunc_called(this, "_ZN8S22029C12v4Ev");}
void  S22029C1 ::v5(){vfunc_called(this, "_ZN8S22029C12v5Ev");}
void  S22029C1 ::v6(){vfunc_called(this, "_ZN8S22029C12v6Ev");}
S22029C1 ::S22029C1(){ note_ctor("S22029C1", this);} // tgen

static void Test_S22029C1()
{
  extern Class_Descriptor cd_S22029C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1988,2748)];
    init_test(&cd_S22029C1, buf);
    S22029C1 *dp, &lv = *(dp=new (buf) S22029C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15896,10988), "sizeof(S22029C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S22029C1)");
    check_field_offset(lv, s22029c1f0, ABISELECT(8,4), "S22029C1.s22029c1f0");
    check_field_offset(lv, s22029c1f1, ABISELECT(24,12), "S22029C1.s22029c1f1");
    check_field_offset(lv, s22029c1f2, ABISELECT(40,20), "S22029C1.s22029c1f2");
    check_field_offset(lv, s22029c1f3, ABISELECT(56,28), "S22029C1.s22029c1f3");
    check_field_offset(lv, s22029c1f4, ABISELECT(8936,5752), "S22029C1.s22029c1f4");
    test_class_info(&lv, &cd_S22029C1);
    dp->~S22029C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS22029C1(Test_S22029C1, "S22029C1", ABISELECT(15896,10988));

#else // __cplusplus

extern void _ZN8S22029C1C1Ev();
extern void _ZN8S22029C1D1Ev();
Name_Map name_map_S22029C1[] = {
  NSPAIR(_ZN8S22029C1C1Ev),
  NSPAIR(_ZN8S22029C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S22029C1[];
extern void _ZN8S22029C1D1Ev();
extern void _ZN8S22029C1D0Ev();
extern void _ZN8S22029C12v1Ev();
extern void _ZN8S22029C12v2Ev();
extern void _ZN8S22029C12v3Ev();
extern void _ZN8S22029C12v4Ev();
extern void _ZN8S22029C12v5Ev();
extern void _ZN8S22029C12v6Ev();
static  VTBL_ENTRY vtc_S22029C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S22029C1[0]),
  (VTBL_ENTRY)&_ZN8S22029C1D1Ev,
  (VTBL_ENTRY)&_ZN8S22029C1D0Ev,
  (VTBL_ENTRY)&_ZN8S22029C12v1Ev,
  (VTBL_ENTRY)&_ZN8S22029C12v2Ev,
  (VTBL_ENTRY)&_ZN8S22029C12v3Ev,
  (VTBL_ENTRY)&_ZN8S22029C12v4Ev,
  (VTBL_ENTRY)&_ZN8S22029C12v5Ev,
  (VTBL_ENTRY)&_ZN8S22029C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S22029C1[];
extern  VTBL_ENTRY _ZTV8S22029C1[];
Class_Descriptor cd_S22029C1 = {  "S22029C1", // class name
  0,0,//no base classes
  &(vtc_S22029C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(15896,10988), // object size
  NSPAIRA(_ZTI8S22029C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S22029C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C6  {
  void *s3465c6f0;
  long double s3465c6f1;
  __tsi64 s3465c6f2;
  void *s3465c6f3;
  int s3465c6f4:6;
  int s3465c6f5;
  void *s3465c6f6;
  long s3465c6f7[2];
  int s3465c6f8[3];
  void *s3465c6f9[3];
  __tsi64 s3465c6f10;
  long s3465c6f11;
  virtual void  v7(); // _ZN7S3465C62v7Ev
  virtual void  v8(); // _ZN7S3465C62v8Ev
  ~S3465C6(); // tgen
  S3465C6(); // tgen
};
//SIG(-1 S3465C6) C1{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl}


void  S3465C6 ::v7(){vfunc_called(this, "_ZN7S3465C62v7Ev");}
void  S3465C6 ::v8(){vfunc_called(this, "_ZN7S3465C62v8Ev");}
S3465C6 ::~S3465C6(){ note_dtor("S3465C6", this);} // tgen
S3465C6 ::S3465C6(){ note_ctor("S3465C6", this);} // tgen

static void Test_S3465C6()
{
  extern Class_Descriptor cd_S3465C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S3465C6, buf);
    S3465C6 *dp, &lv = *(dp=new (buf) S3465C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S3465C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C6)");
    check_field_offset(lv, s3465c6f0, ABISELECT(8,4), "S3465C6.s3465c6f0");
    check_field_offset(lv, s3465c6f1, ABISELECT(16,8), "S3465C6.s3465c6f1");
    check_field_offset(lv, s3465c6f2, ABISELECT(32,20), "S3465C6.s3465c6f2");
    check_field_offset(lv, s3465c6f3, ABISELECT(40,28), "S3465C6.s3465c6f3");
    set_bf_and_test(lv, s3465c6f4, ABISELECT(48,32), 0, 6, 1, "S3465C6");
    set_bf_and_test(lv, s3465c6f4, ABISELECT(48,32), 0, 6, hide_sll(1LL<<5), "S3465C6");
    check_field_offset(lv, s3465c6f5, ABISELECT(52,36), "S3465C6.s3465c6f5");
    check_field_offset(lv, s3465c6f6, ABISELECT(56,40), "S3465C6.s3465c6f6");
    check_field_offset(lv, s3465c6f7, ABISELECT(64,44), "S3465C6.s3465c6f7");
    check_field_offset(lv, s3465c6f8, ABISELECT(80,52), "S3465C6.s3465c6f8");
    check_field_offset(lv, s3465c6f9, ABISELECT(96,64), "S3465C6.s3465c6f9");
    check_field_offset(lv, s3465c6f10, ABISELECT(120,76), "S3465C6.s3465c6f10");
    check_field_offset(lv, s3465c6f11, ABISELECT(128,84), "S3465C6.s3465c6f11");
    test_class_info(&lv, &cd_S3465C6);
    dp->~S3465C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C6(Test_S3465C6, "S3465C6", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S3465C6C1Ev();
extern void _ZN7S3465C6D1Ev();
Name_Map name_map_S3465C6[] = {
  NSPAIR(_ZN7S3465C6C1Ev),
  NSPAIR(_ZN7S3465C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3465C6[];
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C6[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
Class_Descriptor cd_S3465C6 = {  "S3465C6", // class name
  0,0,//no base classes
  &(vtc_S3465C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S3465C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3465C6),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  S3465C5  {
  int s3465c5f0[2];
  __tsi64 s3465c5f1;
  char  :0;
  ::S3465C6 s3465c5f3;
  char s3465c5f4;
  int s3465c5f5;
  long double s3465c5f6;
  virtual void  v2(); // _ZN7S3465C52v2Ev
  virtual void  v3(); // _ZN7S3465C52v3Ev
  virtual void  v4(); // _ZN7S3465C52v4Ev
  ~S3465C5(); // tgen
  S3465C5(); // tgen
};
//SIG(-1 S3465C5) C1{ v1 v2 v3 Fi[2] FL Fc:0 FC2{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD}


void  S3465C5 ::v2(){vfunc_called(this, "_ZN7S3465C52v2Ev");}
void  S3465C5 ::v3(){vfunc_called(this, "_ZN7S3465C52v3Ev");}
void  S3465C5 ::v4(){vfunc_called(this, "_ZN7S3465C52v4Ev");}
S3465C5 ::~S3465C5(){ note_dtor("S3465C5", this);} // tgen
S3465C5 ::S3465C5(){ note_ctor("S3465C5", this);} // tgen

static void Test_S3465C5()
{
  extern Class_Descriptor cd_S3465C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S3465C5, buf);
    S3465C5 *dp, &lv = *(dp=new (buf) S3465C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S3465C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C5)");
    check_field_offset(lv, s3465c5f0, ABISELECT(8,4), "S3465C5.s3465c5f0");
    check_field_offset(lv, s3465c5f1, ABISELECT(16,12), "S3465C5.s3465c5f1");
    check_field_offset(lv, s3465c5f3, ABISELECT(32,20), "S3465C5.s3465c5f3");
    check_field_offset(lv, s3465c5f4, ABISELECT(176,108), "S3465C5.s3465c5f4");
    check_field_offset(lv, s3465c5f5, ABISELECT(180,112), "S3465C5.s3465c5f5");
    check_field_offset(lv, s3465c5f6, ABISELECT(192,116), "S3465C5.s3465c5f6");
    test_class_info(&lv, &cd_S3465C5);
    dp->~S3465C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C5(Test_S3465C5, "S3465C5", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S3465C5C1Ev();
extern void _ZN7S3465C5D1Ev();
Name_Map name_map_S3465C5[] = {
  NSPAIR(_ZN7S3465C5C1Ev),
  NSPAIR(_ZN7S3465C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3465C5[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY vtc_S3465C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C5[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
Class_Descriptor cd_S3465C5 = {  "S3465C5", // class name
  0,0,//no base classes
  &(vtc_S3465C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S3465C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3465C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C4  : S3465C5 {
  ::S3465C6 s3465c4f0;
  int s3465c4f1;
  ::S3465C6 s3465c4f2;
  ::S3465C5 s3465c4f3;
  ::S3465C6 s3465c4f4;
  long double s3465c4f5;
  void *s3465c4f6;
  int s3465c4f7;
  long double s3465c4f8;
  char  :0;
  virtual void  v5(); // _ZN7S3465C42v5Ev
  virtual void  v6(); // _ZN7S3465C42v6Ev
  ~S3465C4(); // tgen
  S3465C4(); // tgen
};
//SIG(-1 S3465C4) C1{ BC2{ v3 v4 v5 Fi[2] FL Fc:0 FC3{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v1 v2 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0}


void  S3465C4 ::v5(){vfunc_called(this, "_ZN7S3465C42v5Ev");}
void  S3465C4 ::v6(){vfunc_called(this, "_ZN7S3465C42v6Ev");}
S3465C4 ::~S3465C4(){ note_dtor("S3465C4", this);} // tgen
S3465C4 ::S3465C4(){ note_ctor("S3465C4", this);} // tgen

static void Test_S3465C4()
{
  extern Class_Descriptor cd_S3465C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,140)];
    init_test(&cd_S3465C4, buf);
    S3465C4 *dp, &lv = *(dp=new (buf) S3465C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,556), "sizeof(S3465C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C4)");
    check_base_class_offset(lv, (S3465C5*), 0, "S3465C4");
    check_field_offset(lv, s3465c4f0, ABISELECT(208,128), "S3465C4.s3465c4f0");
    check_field_offset(lv, s3465c4f1, ABISELECT(352,216), "S3465C4.s3465c4f1");
    check_field_offset(lv, s3465c4f2, ABISELECT(368,220), "S3465C4.s3465c4f2");
    check_field_offset(lv, s3465c4f3, ABISELECT(512,308), "S3465C4.s3465c4f3");
    check_field_offset(lv, s3465c4f4, ABISELECT(720,436), "S3465C4.s3465c4f4");
    check_field_offset(lv, s3465c4f5, ABISELECT(864,524), "S3465C4.s3465c4f5");
    check_field_offset(lv, s3465c4f6, ABISELECT(880,536), "S3465C4.s3465c4f6");
    check_field_offset(lv, s3465c4f7, ABISELECT(888,540), "S3465C4.s3465c4f7");
    check_field_offset(lv, s3465c4f8, ABISELECT(896,544), "S3465C4.s3465c4f8");
    test_class_info(&lv, &cd_S3465C4);
    dp->~S3465C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C4(Test_S3465C4, "S3465C4", ABISELECT(912,556));

#else // __cplusplus

extern void _ZN7S3465C4C1Ev();
extern void _ZN7S3465C4D1Ev();
Name_Map name_map_S3465C4[] = {
  NSPAIR(_ZN7S3465C4C1Ev),
  NSPAIR(_ZN7S3465C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
static Base_Class bases_S3465C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3465C4[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY vtc_S3465C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C4[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
Class_Descriptor cd_S3465C4 = {  "S3465C4", // class name
  bases_S3465C4, 1,
  &(vtc_S3465C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(912,556), // object size
  NSPAIRA(_ZTI7S3465C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3465C4),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  S3465C3  : virtual S3465C4 {
  int s3465c3f0[3];
  void *s3465c3f1;
  int s3465c3f2[2];
  void *s3465c3f3;
  int s3465c3f4;
  void *s3465c3f5;
  int s3465c3f6;
  virtual  ~S3465C3(); // _ZN7S3465C3D2Ev
  S3465C3(); // tgen
};
//SIG(-1 S3465C3) C1{ VBC2{ BC3{ v1 v2 v3 Fi[2] FL Fc:0 FC4{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v4 v5 FC4 Fi FC4 FC3 FC4 FD Fp Fi FD Fc:0} vd Fi[3] Fp Fi[2] Fp Fi Fp Fi}


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

static void Test_S3465C3()
{
  extern Class_Descriptor cd_S3465C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(63,151)];
    init_test(&cd_S3465C3, buf);
    S3465C3 *dp, &lv = *(dp=new (buf) S3465C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,600), "sizeof(S3465C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C3)");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(80,44), "S3465C3");
    check_base_class_offset(lv, (S3465C4*), ABISELECT(80,44), "S3465C3");
    check_field_offset(lv, s3465c3f0, ABISELECT(8,4), "S3465C3.s3465c3f0");
    check_field_offset(lv, s3465c3f1, ABISELECT(24,16), "S3465C3.s3465c3f1");
    check_field_offset(lv, s3465c3f2, ABISELECT(32,20), "S3465C3.s3465c3f2");
    check_field_offset(lv, s3465c3f3, ABISELECT(40,28), "S3465C3.s3465c3f3");
    check_field_offset(lv, s3465c3f4, ABISELECT(48,32), "S3465C3.s3465c3f4");
    check_field_offset(lv, s3465c3f5, ABISELECT(56,36), "S3465C3.s3465c3f5");
    check_field_offset(lv, s3465c3f6, ABISELECT(64,40), "S3465C3.s3465c3f6");
    test_class_info(&lv, &cd_S3465C3);
    dp->~S3465C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C3(Test_S3465C3, "S3465C3", ABISELECT(992,600));

#else // __cplusplus

extern void _ZN7S3465C3C1Ev();
extern void _ZN7S3465C3D2Ev();
Name_Map name_map_S3465C3[] = {
  NSPAIR(_ZN7S3465C3C1Ev),
  NSPAIR(_ZN7S3465C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
static Base_Class bases_S3465C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C5,    ABISELECT(80,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
  0, 0},
  {&cd_S3465C4,    ABISELECT(80,44), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //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 _ZTI7S3465C3[];
extern void _ZN7S3465C3D1Ev();
extern void _ZN7S3465C3D0Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY vtc_S3465C3[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C3[0]),
  (VTBL_ENTRY)&_ZN7S3465C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C3D0Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3465C3[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S3465C3[];
static  VTT_ENTRY vtt_S3465C3[] = {
  {&(_ZTV7S3465C3[3]),  3,17},
  {&(_ZTV7S3465C3[12]),  12,17},
};
extern VTBL_ENTRY _ZTI7S3465C3[];
extern  VTBL_ENTRY _ZTV7S3465C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C3[];
Class_Descriptor cd_S3465C3 = {  "S3465C3", // class name
  bases_S3465C3, 2,
  &(vtc_S3465C3[0]), // expected_vtbl_contents
  &(vtt_S3465C3[0]), // expected_vtt_contents
  ABISELECT(992,600), // object size
  NSPAIRA(_ZTI7S3465C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3465C3),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3465C3),2, //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  S3465C9_nt  {
};
//SIG(-1 S3465C9_nt) C1{}



//skip512 S3465C9_nt

#else // __cplusplus

Class_Descriptor cd_S3465C9_nt = {  "S3465C9_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  S3465C8  : virtual S3465C6 {
  int s3465c8f0;
  int s3465c8f1:7;
  ::S3465C9_nt s3465c8f2;
  void *s3465c8f3;
  int s3465c8f4;
  void *s3465c8f5;
  ~S3465C8(); // tgen
  S3465C8(); // tgen
};
//SIG(-1 S3465C8) C1{ VBC2{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC3{} Fp Fi Fp}


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

static void Test_S3465C8()
{
  extern Class_Descriptor cd_S3465C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S3465C8, buf);
    S3465C8 *dp, &lv = *(dp=new (buf) S3465C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S3465C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C8)");
    check_base_class_offset(lv, (S3465C6*), ABISELECT(48,24), "S3465C8");
    check_field_offset(lv, s3465c8f0, ABISELECT(8,4), "S3465C8.s3465c8f0");
    set_bf_and_test(lv, s3465c8f1, ABISELECT(12,8), 0, 7, 1, "S3465C8");
    set_bf_and_test(lv, s3465c8f1, ABISELECT(12,8), 0, 7, hide_sll(1LL<<6), "S3465C8");
    check_field_offset(lv, s3465c8f2, ABISELECT(13,9), "S3465C8.s3465c8f2");
    check_field_offset(lv, s3465c8f3, ABISELECT(16,12), "S3465C8.s3465c8f3");
    check_field_offset(lv, s3465c8f4, ABISELECT(24,16), "S3465C8.s3465c8f4");
    check_field_offset(lv, s3465c8f5, ABISELECT(32,20), "S3465C8.s3465c8f5");
    test_class_info(&lv, &cd_S3465C8);
    dp->~S3465C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C8(Test_S3465C8, "S3465C8", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN7S3465C8C1Ev();
extern void _ZN7S3465C8D1Ev();
Name_Map name_map_S3465C8[] = {
  NSPAIR(_ZN7S3465C8C1Ev),
  NSPAIR(_ZN7S3465C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
static Base_Class bases_S3465C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C6,    ABISELECT(48,24), //bcp->offset
    3, //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 _ZTI7S3465C8[];
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C8[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern VTBL_ENTRY _ZTV7S3465C8[];
static  VTT_ENTRY vtt_S3465C8[] = {
  {&(_ZTV7S3465C8[3]),  3,9},
  {&(_ZTV7S3465C8[7]),  7,9},
};
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
Class_Descriptor cd_S3465C8 = {  "S3465C8", // class name
  bases_S3465C8, 1,
  &(vtc_S3465C8[0]), // expected_vtbl_contents
  &(vtt_S3465C8[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI7S3465C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3465C8),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3465C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C7  : S3465C5 , S3465C6 , virtual S3465C8 {
  short s3465c7f0:16;
  __tsi64 s3465c7f1;
  short s3465c7f2;
  virtual  ~S3465C7(); // _ZN7S3465C7D2Ev
  S3465C7(); // tgen
};
//SIG(-1 S3465C7) C1{ BC2{ v1 v2 v3 Fi[2] FL Fc:0 FC3{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} BC3 VBC4{ VBC3 Fi Fi:7 FC5{} Fp Fi Fp} vd Fs:16 FL Fs}


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

static void Test_S3465C7()
{
  extern Class_Descriptor cd_S3465C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,87)];
    init_test(&cd_S3465C7, buf);
    S3465C7 *dp, &lv = *(dp=new (buf) S3465C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,344), "sizeof(S3465C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C7)");
    check_base_class_offset(lv, (S3465C5*), 0, "S3465C7");
    /*is_ambiguous_... S3465C7::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*), ABISELECT(208,128), "S3465C7");
    check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(416,256), "S3465C7");
    check_base_class_offset(lv, (S3465C8*), ABISELECT(368,232), "S3465C7");
    set_bf_and_test(lv, s3465c7f0, ABISELECT(344,216), 0, 16, 1, "S3465C7");
    set_bf_and_test(lv, s3465c7f0, ABISELECT(344,216), 0, 16, hide_sll(1LL<<15), "S3465C7");
    check_field_offset(lv, s3465c7f1, ABISELECT(352,220), "S3465C7.s3465c7f1");
    check_field_offset(lv, s3465c7f2, ABISELECT(360,228), "S3465C7.s3465c7f2");
    test_class_info(&lv, &cd_S3465C7);
    dp->~S3465C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C7(Test_S3465C7, "S3465C7", ABISELECT(560,344));

#else // __cplusplus

extern void _ZN7S3465C7C1Ev();
extern void _ZN7S3465C7D2Ev();
Name_Map name_map_S3465C7[] = {
  NSPAIR(_ZN7S3465C7C1Ev),
  NSPAIR(_ZN7S3465C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
static Base_Class bases_S3465C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3465C6,    ABISELECT(208,128), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C6,    ABISELECT(416,256), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S3465C8,    ABISELECT(368,232), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3465C7[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C7[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern VTBL_ENTRY _ZTV7S3465C7[];
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__7S3465C7[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTT_ENTRY vtt_S3465C7[] = {
  {&(_ZTV7S3465C7[4]),  4,22},
  {&(_ZTV7S3465C7[16]),  16,22},
  {&(_ZTV7S3465C7[20]),  20,22},
  {&(_tg__ZTV7S3465C8__7S3465C7[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__7S3465C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
Class_Descriptor cd_S3465C7 = {  "S3465C7", // class name
  bases_S3465C7, 4,
  &(vtc_S3465C7[0]), // expected_vtbl_contents
  &(vtt_S3465C7[0]), // expected_vtt_contents
  ABISELECT(560,344), // object size
  NSPAIRA(_ZTI7S3465C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3465C7),22, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3465C7),5, //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  S3465C12  : S3465C8 , S3465C4 , virtual S3465C5 , S3465C6 , virtual S3465C7 {
  short s3465c12f0;
  virtual  ~S3465C12(); // _ZN8S3465C12D2Ev
  S3465C12(); // tgen
};
//SIG(-1 S3465C12) C1{ BC2{ VBC3{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC4{} Fp Fi Fp} BC5{ BC6{ v3 v4 v5 Fi[2] FL Fc:0 FC3 Fc Fi FD} v6 v7 FC3 Fi FC3 FC6 FC3 FD Fp Fi FD Fc:0} VBC6 BC3 VBC7{ BC6 BC3 VBC2 vd Fs:16 FL Fs} vd Fs}


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

static void Test_S3465C12()
{
  extern Class_Descriptor cd_S3465C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(118,287)];
    init_test(&cd_S3465C12, buf);
    S3465C12 *dp, &lv = *(dp=new (buf) S3465C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1872,1144), "sizeof(S3465C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C12)");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(1104,672), "S3465C12");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(1104,672), "S3465C12");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*), 0, "S3465C12");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(48,24), "S3465C12");
    check_base_class_offset(lv, (S3465C4*), ABISELECT(48,24), "S3465C12");
    /*is_ambiguous_... S3465C12::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*), ABISELECT(1248,760), "S3465C12");
    /*is_ambiguous_... S3465C12::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*), ABISELECT(960,580), "S3465C12");
    check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(1456,888), "S3465C12");
    /*is_ambiguous_... S3465C7::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(1664,1016), "S3465C12");
    check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(1824,1120), "S3465C12");
    check_base_class_offset(lv, (S3465C7*), ABISELECT(1456,888), "S3465C12");
    check_field_offset(lv, s3465c12f0, ABISELECT(1096,668), "S3465C12.s3465c12f0");
    test_class_info(&lv, &cd_S3465C12);
    dp->~S3465C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C12(Test_S3465C12, "S3465C12", ABISELECT(1872,1144));

#else // __cplusplus

extern void _ZN8S3465C12C1Ev();
extern void _ZN8S3465C12D2Ev();
Name_Map name_map_S3465C12[] = {
  NSPAIR(_ZN8S3465C12C1Ev),
  NSPAIR(_ZN8S3465C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
static Base_Class bases_S3465C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C6,    ABISELECT(1104,672), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3465C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(48,24), //bcp->offset
    8, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(1248,760), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C6,    ABISELECT(960,580), //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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(1456,888), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(1664,1016), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3465C8,    ABISELECT(1824,1120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(1456,888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3465C12[];
extern void _ZN8S3465C12D1Ev();
extern void _ZN8S3465C12D0Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev)();
extern void ABISELECT(_ZThn1456_N8S3465C12D1Ev,_ZThn888_N8S3465C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev)();
extern void ABISELECT(_ZThn1456_N8S3465C12D0Ev,_ZThn888_N8S3465C12D0Ev)() __attribute__((weak));
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C12[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN8S3465C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C12D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(-960,-580),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev),
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
};
extern VTBL_ENTRY _ZTV8S3465C12[];
static  VTBL_ENTRY _tg__ZTV7S3465C8__A__8S3465C12[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__A__8S3465C12[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C12[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__8S3465C12[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__8S3465C12[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C12[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__A1__8S3465C12[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTT_ENTRY vtt_S3465C12[] = {
  {&(_ZTV8S3465C12[6]),  6,55},
  {&(_tg__ZTV7S3465C8__A__8S3465C12[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__A__8S3465C12[4]),  4,6},
  {&(_ZTV8S3465C12[23]),  23,55},
  {&(_ZTV8S3465C12[30]),  30,55},
  {&(_ZTV8S3465C12[43]),  43,55},
  {&(_ZTV8S3465C12[50]),  50,55},
  {&(_ZTV8S3465C12[55]),  55,55},
  {&(_tg__ZTV7S3465C7__8S3465C12[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__8S3465C12[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__8S3465C12[4]),  4,6},
  {&(_tg__ZTV7S3465C8__A1__8S3465C12[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__A1__8S3465C12[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3465C12[];
extern  VTBL_ENTRY _ZTV8S3465C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C12[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3465C12D0Ev,_ZThn888_N8S3465C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3465C12D1Ev,_ZThn888_N8S3465C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3465C12 = {  "S3465C12", // class name
  bases_S3465C12, 10,
  &(vtc_S3465C12[0]), // expected_vtbl_contents
  &(vtt_S3465C12[0]), // expected_vtt_contents
  ABISELECT(1872,1144), // object size
  NSPAIRA(_ZTI8S3465C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3465C12),55, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3465C12),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C11  : virtual S3465C12 , virtual S3465C4 , S3465C5 {
  long s3465c11f0[2];
  ::S3465C7 s3465c11f1;
  int s3465c11f2;
  long double s3465c11f3;
  ::S3465C5 s3465c11f4;
  ::S3465C6 s3465c11f5;
  char s3465c11f6;
  long double s3465c11f7;
  ::S3465C9_nt s3465c11f8;
  __tsi64 s3465c11f9:64;
  ::S3465C6 s3465c11f10;
  virtual  ~S3465C11(); // _ZN8S3465C11D2Ev
  virtual void  v9(); // _ZN8S3465C112v9Ev
  virtual void  v10(); // _ZN8S3465C113v10Ev
  virtual void  v11(); // _ZN8S3465C113v11Ev
  S3465C11(); // tgen
};
//SIG(-1 S3465C11) C1{ VBC2{ BC3{ VBC4{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC5{} Fp Fi Fp} BC6{ BC7{ v6 v7 v8 Fi[2] FL Fc:0 FC4 Fc Fi FD} v9 v10 FC4 Fi FC4 FC7 FC4 FD Fp Fi FD Fc:0} VBC7 BC4 VBC8{ BC7 BC4 VBC3 vd Fs:16 FL Fs} vd Fs} VBC6 BC7 vd v1 v2 v3 Fl[2] FC8 Fi FD FC7 FC4 Fc FD FC5 FL:64 FC4}


 S3465C11 ::~S3465C11(){ note_dtor("S3465C11", this);}
void  S3465C11 ::v9(){vfunc_called(this, "_ZN8S3465C112v9Ev");}
void  S3465C11 ::v10(){vfunc_called(this, "_ZN8S3465C113v10Ev");}
void  S3465C11 ::v11(){vfunc_called(this, "_ZN8S3465C113v11Ev");}
S3465C11 ::S3465C11(){ note_ctor("S3465C11", this);} // tgen

static void Test_S3465C11()
{
  extern Class_Descriptor cd_S3465C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(260,633)];
    init_test(&cd_S3465C11, buf);
    S3465C11 *dp, &lv = *(dp=new (buf) S3465C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4144,2528), "sizeof(S3465C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C11)");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C12*), ABISELECT(2464,1500), "S3465C11");
    /*is_ambiguous_... S3465C11::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(2464,1500), "S3465C11");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C12*), ABISELECT(1360,828), "S3465C11");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*)(S3465C12*), ABISELECT(1408,852), "S3465C11");
    check_base_class_offset(lv, (S3465C4*)(S3465C12*), ABISELECT(1408,852), "S3465C11");
    /*is_ambiguous_... S3465C12::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C12*), ABISELECT(2608,1588), "S3465C11");
    /*is_ambiguous_... S3465C12::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C12*), ABISELECT(2320,1408), "S3465C11");
    check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(2816,1716), "S3465C11");
    /*is_ambiguous_... S3465C7::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(3024,1844), "S3465C11");
    check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(3184,1948), "S3465C11");
    check_base_class_offset(lv, (S3465C7*)(S3465C12*), ABISELECT(2816,1716), "S3465C11");
    check_base_class_offset(lv, (S3465C12*), ABISELECT(1360,828), "S3465C11");
    /*is_ambiguous_... S3465C11::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(3232,1972), "S3465C11");
    /*is_ambiguous_... S3465C11::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*), ABISELECT(3232,1972), "S3465C11");
    /*is_ambiguous_... S3465C11::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*), 0, "S3465C11");
    check_field_offset(lv, s3465c11f0, ABISELECT(208,128), "S3465C11.s3465c11f0");
    check_field_offset(lv, s3465c11f1, ABISELECT(224,136), "S3465C11.s3465c11f1");
    check_field_offset(lv, s3465c11f2, ABISELECT(784,480), "S3465C11.s3465c11f2");
    check_field_offset(lv, s3465c11f3, ABISELECT(800,484), "S3465C11.s3465c11f3");
    check_field_offset(lv, s3465c11f4, ABISELECT(816,496), "S3465C11.s3465c11f4");
    check_field_offset(lv, s3465c11f5, ABISELECT(1024,624), "S3465C11.s3465c11f5");
    check_field_offset(lv, s3465c11f6, ABISELECT(1168,712), "S3465C11.s3465c11f6");
    check_field_offset(lv, s3465c11f7, ABISELECT(1184,716), "S3465C11.s3465c11f7");
    check_field_offset(lv, s3465c11f8, ABISELECT(1200,728), "S3465C11.s3465c11f8");
    set_bf_and_test(lv, s3465c11f9, ABISELECT(1208,732), 0, 64, 1, "S3465C11");
    set_bf_and_test(lv, s3465c11f9, ABISELECT(1208,732), 0, 64, hide_sll(1LL<<63), "S3465C11");
    check_field_offset(lv, s3465c11f10, ABISELECT(1216,740), "S3465C11.s3465c11f10");
    test_class_info(&lv, &cd_S3465C11);
    dp->~S3465C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C11(Test_S3465C11, "S3465C11", ABISELECT(4144,2528));

#else // __cplusplus

extern void _ZN8S3465C11C1Ev();
extern void _ZN8S3465C11D2Ev();
Name_Map name_map_S3465C11[] = {
  NSPAIR(_ZN8S3465C11C1Ev),
  NSPAIR(_ZN8S3465C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C12;
extern VTBL_ENTRY _ZTI8S3465C12[];
extern  VTBL_ENTRY _ZTV8S3465C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C12[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
static Base_Class bases_S3465C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C6,    ABISELECT(2464,1500), //bcp->offset
    43, //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_S3465C8,    ABISELECT(1360,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(1408,852), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(1408,852), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(2608,1588), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(2320,1408), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(2816,1716), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(3024,1844), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3465C8,    ABISELECT(3184,1948), //bcp->offset
    76, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(2816,1716), //bcp->offset
    57, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3465C12,    ABISELECT(1360,828), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C5,    ABISELECT(3232,1972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(3232,1972), //bcp->offset
    79, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3465C11[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN8S3465C11D1Ev();
extern void _ZN8S3465C11D0Ev();
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev)();
extern void ABISELECT(_ZThn2816_N8S3465C11D1Ev,_ZThn1716_N8S3465C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev)();
extern void ABISELECT(_ZThn2816_N8S3465C11D0Ev,_ZThn1716_N8S3465C11D0Ev)() __attribute__((weak));
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY vtc_S3465C11[] = {
  ABISELECT(3232,1972),
  ABISELECT(3184,1948),
  ABISELECT(2816,1716),
  ABISELECT(2608,1588),
  ABISELECT(2464,1500),
  ABISELECT(1360,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1360,-828),
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  ABISELECT(-1360,-828),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev),
  ABISELECT(-1408,-852),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(-2320,-1408),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  ABISELECT(-2464,-1500),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-2608,-1588),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-2816,-1716),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-2816,-1716),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev),
  ABISELECT(-3024,-1844),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(-720,-448),
  ABISELECT(-3184,-1948),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3232,-1972),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S3465C11[];
extern void _ZN8S3465C12D1Ev();
extern void _ZN8S3465C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C11[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN8S3465C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C12__8S3465C11[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C12__8S3465C11[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C12__8S3465C11[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C12__8S3465C11[] = {
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev)();
extern void ABISELECT(_ZThn1456_N8S3465C12D1Ev,_ZThn888_N8S3465C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev)();
extern void ABISELECT(_ZThn1456_N8S3465C12D0Ev,_ZThn888_N8S3465C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C12__8S3465C11[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C11[] = {
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C12__8S3465C11[] = {
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C11[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__8S3465C11[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__8S3465C11[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C11[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__A1__8S3465C11[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTT_ENTRY vtt_S3465C11[] = {
  {&(_ZTV8S3465C11[8]),  8,91},
  {&(_ZTV8S3465C11[30]),  30,91},
  {&(_ZTV8S3465C11[47]),  47,91},
  {&(_ZTV8S3465C11[34]),  34,91},
  {&(_ZTV8S3465C11[54]),  54,91},
  {&(_ZTV8S3465C11[41]),  41,91},
  {&(_ZTV8S3465C11[67]),  67,91},
  {&(_ZTV8S3465C11[74]),  74,91},
  {&(_ZTV8S3465C11[79]),  79,91},
  {&(_ZTV8S3465C11[86]),  86,91},
  {&(_tg__ZTV8S3465C12__8S3465C11[6]),  6,8},
  {&(_tg__ZTV7S3465C88S3465C12__8S3465C11[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C12__8S3465C11[4]),  4,6},
  {&(_tg__ZTV7S3465C6__8S3465C12__8S3465C11[4]),  4,6},
  {&(_tg__ZTV7S3465C5__A1__8S3465C12__8S3465C11[5]),  5,8},
  {&(_tg__ZTV7S3465C7__8S3465C12__8S3465C11[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C11[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C12__8S3465C11[3]),  3,3},
  {&(_tg__ZTV7S3465C7__8S3465C11[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__8S3465C11[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__8S3465C11[4]),  4,6},
  {&(_tg__ZTV7S3465C8__A1__8S3465C11[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__A1__8S3465C11[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3465C11[];
extern  VTBL_ENTRY _ZTV8S3465C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C11[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3465C12D0Ev,_ZThn888_N8S3465C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3465C12D1Ev,_ZThn888_N8S3465C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S3465C11D0Ev,_ZThn1716_N8S3465C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S3465C11D1Ev,_ZThn1716_N8S3465C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3465C11 = {  "S3465C11", // class name
  bases_S3465C11, 14,
  &(vtc_S3465C11[0]), // expected_vtbl_contents
  &(vtt_S3465C11[0]), // expected_vtt_contents
  ABISELECT(4144,2528), // object size
  NSPAIRA(_ZTI8S3465C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3465C11),91, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3465C11),23, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C14  {
  void *s3465c14f0;
  ::S3465C9_nt s3465c14f1;
  void *s3465c14f2;
  int s3465c14f3;
  ::S3465C4 s3465c14f4;
  ::S3465C5 s3465c14f5[5];
  void  mf3465c14(); // _ZN8S3465C149mf3465c14Ev
  virtual  ~S3465C14(); // _ZN8S3465C14D1Ev
  S3465C14(); // tgen
};
//SIG(-1 S3465C14) C1{ vd m Fp FC2{} Fp Fi FC3{ BC4{ v3 v4 v5 Fi[2] FL Fc:0 FC5{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v1 v2 FC5 Fi FC5 FC4 FC5 FD Fp Fi FD Fc:0} FC4[5]}


void  S3465C14 ::mf3465c14(){}
 S3465C14 ::~S3465C14(){ note_dtor("S3465C14", this);}
S3465C14 ::S3465C14(){ note_ctor("S3465C14", this);} // tgen

static void Test_S3465C14()
{
  extern Class_Descriptor cd_S3465C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(126,305)];
    init_test(&cd_S3465C14, buf);
    S3465C14 *dp, &lv = *(dp=new (buf) S3465C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2000,1216), "sizeof(S3465C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C14)");
    check_field_offset(lv, s3465c14f0, ABISELECT(8,4), "S3465C14.s3465c14f0");
    check_field_offset(lv, s3465c14f1, ABISELECT(16,8), "S3465C14.s3465c14f1");
    check_field_offset(lv, s3465c14f2, ABISELECT(24,12), "S3465C14.s3465c14f2");
    check_field_offset(lv, s3465c14f3, ABISELECT(32,16), "S3465C14.s3465c14f3");
    check_field_offset(lv, s3465c14f4, ABISELECT(48,20), "S3465C14.s3465c14f4");
    check_field_offset(lv, s3465c14f5, ABISELECT(960,576), "S3465C14.s3465c14f5");
    test_class_info(&lv, &cd_S3465C14);
    dp->~S3465C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C14(Test_S3465C14, "S3465C14", ABISELECT(2000,1216));

#else // __cplusplus

extern void _ZN8S3465C14C1Ev();
extern void _ZN8S3465C14D1Ev();
Name_Map name_map_S3465C14[] = {
  NSPAIR(_ZN8S3465C14C1Ev),
  NSPAIR(_ZN8S3465C14D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3465C14[];
extern void _ZN8S3465C14D1Ev();
extern void _ZN8S3465C14D0Ev();
static  VTBL_ENTRY vtc_S3465C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C14[0]),
  (VTBL_ENTRY)&_ZN8S3465C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C14D0Ev,
};
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
Class_Descriptor cd_S3465C14 = {  "S3465C14", // class name
  0,0,//no base classes
  &(vtc_S3465C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2000,1216), // object size
  NSPAIRA(_ZTI8S3465C14),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3465C14),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  S3465C13  : virtual S3465C12 , S3465C6 , virtual S3465C4 , S3465C7 {
  char s3465c13f0;
  void *s3465c13f1[2];
  char s3465c13f2[8];
  int s3465c13f3[2];
  long s3465c13f4[9];
  ::S3465C9_nt s3465c13f5;
  int s3465c13f6[5];
  ::S3465C14 s3465c13f7;
  virtual  ~S3465C13(); // _ZN8S3465C13D2Ev
  S3465C13(); // tgen
};
//SIG(-1 S3465C13) C1{ VBC2{ BC3{ VBC4{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC5{} Fp Fi Fp} BC6{ BC7{ v3 v4 v5 Fi[2] FL Fc:0 FC4 Fc Fi FD} v6 v7 FC4 Fi FC4 FC7 FC4 FD Fp Fi FD Fc:0} VBC7 BC4 VBC8{ BC7 BC4 VBC3 vd Fs:16 FL Fs} vd Fs} BC4 VBC6 BC8 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC5 Fi[5] FC9{ vd m Fp FC5 Fp Fi FC6 FC7[5]}}


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

static void Test_S3465C13()
{
  extern Class_Descriptor cd_S3465C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(340,831)];
    init_test(&cd_S3465C13, buf);
    S3465C13 *dp, &lv = *(dp=new (buf) S3465C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5424,3320), "sizeof(S3465C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C13)");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C12*), ABISELECT(3744,2292), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(3744,2292), "S3465C13");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C12*), ABISELECT(2640,1620), "S3465C13");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*)(S3465C12*), ABISELECT(2688,1644), "S3465C13");
    check_base_class_offset(lv, (S3465C4*)(S3465C12*), ABISELECT(2688,1644), "S3465C13");
    /*is_ambiguous_... S3465C12::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C12*), ABISELECT(3888,2380), "S3465C13");
    /*is_ambiguous_... S3465C12::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C12*), ABISELECT(3600,2200), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(4096,2508), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(4304,2636), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(4464,2740), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(4464,2740), "S3465C13");
    check_base_class_offset(lv, (S3465C7*)(S3465C12*), ABISELECT(4096,2508), "S3465C13");
    check_base_class_offset(lv, (S3465C12*), ABISELECT(2640,1620), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*), 0, "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(4512,2764), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*), ABISELECT(4512,2764), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(144,88), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(352,216), "S3465C13");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*), ABISELECT(144,88), "S3465C13");
    check_field_offset(lv, s3465c13f0, ABISELECT(506,318), "S3465C13.s3465c13f0");
    check_field_offset(lv, s3465c13f1, ABISELECT(512,320), "S3465C13.s3465c13f1");
    check_field_offset(lv, s3465c13f2, ABISELECT(528,328), "S3465C13.s3465c13f2");
    check_field_offset(lv, s3465c13f3, ABISELECT(536,336), "S3465C13.s3465c13f3");
    check_field_offset(lv, s3465c13f4, ABISELECT(544,344), "S3465C13.s3465c13f4");
    check_field_offset(lv, s3465c13f5, ABISELECT(616,380), "S3465C13.s3465c13f5");
    check_field_offset(lv, s3465c13f6, ABISELECT(620,384), "S3465C13.s3465c13f6");
    check_field_offset(lv, s3465c13f7, ABISELECT(640,404), "S3465C13.s3465c13f7");
    test_class_info(&lv, &cd_S3465C13);
    dp->~S3465C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C13(Test_S3465C13, "S3465C13", ABISELECT(5424,3320));

#else // __cplusplus

extern void _ZN8S3465C13C1Ev();
extern void _ZN8S3465C13D2Ev();
Name_Map name_map_S3465C13[] = {
  NSPAIR(_ZN8S3465C13C1Ev),
  NSPAIR(_ZN8S3465C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C12;
extern VTBL_ENTRY _ZTI8S3465C12[];
extern  VTBL_ENTRY _ZTV8S3465C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C12[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
static Base_Class bases_S3465C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C6,    ABISELECT(3744,2292), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3465C8,    ABISELECT(2640,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(2688,1644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(2688,1644), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(3888,2380), //bcp->offset
    58, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(3600,2200), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(4096,2508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(4304,2636), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3465C8,    ABISELECT(4464,2740), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(4096,2508), //bcp->offset
    66, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3465C12,    ABISELECT(2640,1620), //bcp->offset
    25, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(4512,2764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(4512,2764), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C5,    ABISELECT(144,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
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(352,216), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(144,88), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3465C13[];
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN8S3465C13D1Ev();
extern void _ZN8S3465C13D0Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn2640_N8S3465C13D1Ev,_ZThn1620_N8S3465C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev)();
extern void ABISELECT(_ZThn2640_N8S3465C13D0Ev,_ZThn1620_N8S3465C13D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn4096_N8S3465C13D1Ev,_ZThn2508_N8S3465C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev)();
extern void ABISELECT(_ZThn4096_N8S3465C13D0Ev,_ZThn2508_N8S3465C13D0Ev)() __attribute__((weak));
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY vtc_S3465C13[] = {
  ABISELECT(4512,2764),
  ABISELECT(4464,2740),
  ABISELECT(4096,2508),
  ABISELECT(3888,2380),
  ABISELECT(3744,2292),
  ABISELECT(2640,1620),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D0Ev,
  ABISELECT(3600,2204),
  ABISELECT(4320,2652),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-2640,-1620),
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  ABISELECT(-2640,-1620),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev),
  ABISELECT(-2688,-1644),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(-3600,-2200),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  ABISELECT(-3744,-2292),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-3888,-2380),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-4096,-2508),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-4096,-2508),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev),
  ABISELECT(-4304,-2636),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(-720,-448),
  ABISELECT(-4464,-2740),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4512,-2764),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S3465C13[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A__8S3465C13[] = {
  ABISELECT(3600,2204),
  ABISELECT(4320,2652),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__A__8S3465C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-4320,-2652),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__A__8S3465C13[] = {
  0,
  0,
  ABISELECT(-3600,-2204),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN8S3465C12D1Ev();
extern void _ZN8S3465C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C13[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN8S3465C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C12__8S3465C13[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C12__8S3465C13[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C12__8S3465C13[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C12__8S3465C13[] = {
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev)();
extern void ABISELECT(_ZThn1456_N8S3465C12D1Ev,_ZThn888_N8S3465C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev)();
extern void ABISELECT(_ZThn1456_N8S3465C12D0Ev,_ZThn888_N8S3465C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C12__8S3465C13[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C13[] = {
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C12__8S3465C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C13[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__8S3465C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__8S3465C13[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C13[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__A1__8S3465C13[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTT_ENTRY vtt_S3465C13[] = {
  {&(_ZTV8S3465C13[8]),  8,100},
  {&(_tg__ZTV7S3465C7__A__8S3465C13[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__A__8S3465C13[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__A__8S3465C13[4]),  4,6},
  {&(_ZTV8S3465C13[39]),  39,100},
  {&(_ZTV8S3465C13[56]),  56,100},
  {&(_ZTV8S3465C13[43]),  43,100},
  {&(_ZTV8S3465C13[63]),  63,100},
  {&(_ZTV8S3465C13[50]),  50,100},
  {&(_ZTV8S3465C13[76]),  76,100},
  {&(_ZTV8S3465C13[83]),  83,100},
  {&(_ZTV8S3465C13[88]),  88,100},
  {&(_ZTV8S3465C13[95]),  95,100},
  {&(_ZTV8S3465C13[16]),  16,100},
  {&(_tg__ZTV8S3465C12__8S3465C13[6]),  6,8},
  {&(_tg__ZTV7S3465C88S3465C12__8S3465C13[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C12__8S3465C13[4]),  4,6},
  {&(_tg__ZTV7S3465C6__8S3465C12__8S3465C13[4]),  4,6},
  {&(_tg__ZTV7S3465C5__A1__8S3465C12__8S3465C13[5]),  5,8},
  {&(_tg__ZTV7S3465C7__8S3465C12__8S3465C13[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C13[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C12__8S3465C13[3]),  3,3},
  {&(_tg__ZTV7S3465C7__8S3465C13[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__8S3465C13[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__8S3465C13[4]),  4,6},
  {&(_tg__ZTV7S3465C8__A1__8S3465C13[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__A1__8S3465C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3465C13[];
extern  VTBL_ENTRY _ZTV8S3465C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C13[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3465C12D0Ev,_ZThn888_N8S3465C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3465C12D1Ev,_ZThn888_N8S3465C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N8S3465C13D0Ev,_ZThn2508_N8S3465C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N8S3465C13D1Ev,_ZThn2508_N8S3465C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2640_N8S3465C13D0Ev,_ZThn1620_N8S3465C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2640_N8S3465C13D1Ev,_ZThn1620_N8S3465C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3465C13 = {  "S3465C13", // class name
  bases_S3465C13, 17,
  &(vtc_S3465C13[0]), // expected_vtbl_contents
  &(vtt_S3465C13[0]), // expected_vtt_contents
  ABISELECT(5424,3320), // object size
  NSPAIRA(_ZTI8S3465C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3465C13),100, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3465C13),27, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C10  : virtual S3465C6 , virtual S3465C7 , virtual S3465C11 , virtual S3465C13 {
  __tsi64 s3465c10f0;
  ::S3465C8 s3465c10f1;
  void *s3465c10f2[2];
  int s3465c10f3;
  ::S3465C6 s3465c10f4;
  int s3465c10f5[8];
  virtual  ~S3465C10(); // _ZN8S3465C10D2Ev
  virtual void  v12(); // _ZN8S3465C103v12Ev
  S3465C10(); // tgen
};
//SIG(-1 S3465C10) C1{ VBC2{ v2 v3 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} VBC3{ BC4{ v4 v5 v6 Fi[2] FL Fc:0 FC2 Fc Fi FD} BC2 VBC5{ VBC2 Fi Fi:7 FC6{} Fp Fi Fp} vd Fs:16 FL Fs} VBC7{ VBC8{ BC5 BC9{ BC4 v7 v8 FC2 Fi FC2 FC4 FC2 FD Fp Fi FD Fc:0} VBC4 BC2 VBC3 vd Fs} VBC9 BC4 vd v9 v10 v11 Fl[2] FC3 Fi FD FC4 FC2 Fc FD FC6 FL:64 FC2} VBC10{ VBC8 BC2 VBC9 BC3 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC6 Fi[5] FC11{ vd m Fp FC6 Fp Fi FC9 FC4[5]}} vd v1 FL FC5 Fp[2] Fi FC2 Fi[8]}


 S3465C10 ::~S3465C10(){ note_dtor("S3465C10", this);}
void  S3465C10 ::v12(){vfunc_called(this, "_ZN8S3465C103v12Ev");}
S3465C10 ::S3465C10(){ note_ctor("S3465C10", this);} // tgen

static void Test_S3465C10()
{
  extern Class_Descriptor cd_S3465C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(451,1102)];
    init_test(&cd_S3465C10, buf);
    S3465C10 *dp, &lv = *(dp=new (buf) S3465C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7200,4404), "sizeof(S3465C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C10)");
    /*is_ambiguous_... S3465C10::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*), ABISELECT(416,256), "S3465C10");
    /*is_ambiguous_... S3465C10::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(416,256), "S3465C10");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C12*), ABISELECT(416,256), "S3465C10");
    /*is_ambiguous_... S3465C10::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(560,344), "S3465C10");
    /*is_ambiguous_... S3465C10::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(768,472), "S3465C10");
    /*is_ambiguous_... S3465C10::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(928,576), "S3465C10");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*)(S3465C13*), ABISELECT(928,576), "S3465C10");
    /*is_ambiguous_... S3465C10::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*), ABISELECT(560,344), "S3465C10");
    check_base_class_offset(lv, (S3465C7*)(S3465C12*), ABISELECT(560,344), "S3465C10");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C12*), ABISELECT(2336,1428), "S3465C10");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*)(S3465C12*), ABISELECT(2384,1452), "S3465C10");
    check_base_class_offset(lv, (S3465C4*)(S3465C12*), ABISELECT(2384,1452), "S3465C10");
    /*is_ambiguous_... S3465C12::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C12*), ABISELECT(3440,2100), "S3465C10");
    /*is_ambiguous_... S3465C12::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C12*), ABISELECT(3296,2008), "S3465C10");
    check_base_class_offset(lv, (S3465C12*)(S3465C11*), ABISELECT(2336,1428), "S3465C10");
    check_base_class_offset(lv, (S3465C12*)(S3465C13*), ABISELECT(2336,1428), "S3465C10");
    /*is_ambiguous_... S3465C10::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(3648,2228), "S3465C10");
    /*is_ambiguous_... S3465C11::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C11*), ABISELECT(3648,2228), "S3465C10");
    /*is_ambiguous_... S3465C13::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C13*), ABISELECT(3648,2228), "S3465C10");
    /*is_ambiguous_... S3465C11::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C11*), ABISELECT(976,600), "S3465C10");
    check_base_class_offset(lv, (S3465C11*), ABISELECT(976,600), "S3465C10");
    /*is_ambiguous_... S3465C13::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C13*), ABISELECT(4560,2784), "S3465C10");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*)(S3465C13*), ABISELECT(4704,2872), "S3465C10");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*)(S3465C13*), ABISELECT(4912,3000), "S3465C10");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C13*), ABISELECT(4704,2872), "S3465C10");
    check_base_class_offset(lv, (S3465C13*), ABISELECT(4560,2784), "S3465C10");
    check_field_offset(lv, s3465c10f0, ABISELECT(8,4), "S3465C10.s3465c10f0");
    check_field_offset(lv, s3465c10f1, ABISELECT(16,12), "S3465C10.s3465c10f1");
    check_field_offset(lv, s3465c10f2, ABISELECT(208,124), "S3465C10.s3465c10f2");
    check_field_offset(lv, s3465c10f3, ABISELECT(224,132), "S3465C10.s3465c10f3");
    check_field_offset(lv, s3465c10f4, ABISELECT(240,136), "S3465C10.s3465c10f4");
    check_field_offset(lv, s3465c10f5, ABISELECT(384,224), "S3465C10.s3465c10f5");
    test_class_info(&lv, &cd_S3465C10);
    dp->~S3465C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C10(Test_S3465C10, "S3465C10", ABISELECT(7200,4404));

#else // __cplusplus

extern void _ZN8S3465C10C1Ev();
extern void _ZN8S3465C10D2Ev();
Name_Map name_map_S3465C10[] = {
  NSPAIR(_ZN8S3465C10C1Ev),
  NSPAIR(_ZN8S3465C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C12;
extern VTBL_ENTRY _ZTI8S3465C12[];
extern  VTBL_ENTRY _ZTV8S3465C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C12[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C11;
extern VTBL_ENTRY _ZTI8S3465C11[];
extern  VTBL_ENTRY _ZTV8S3465C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C11[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C13;
extern VTBL_ENTRY _ZTI8S3465C13[];
extern  VTBL_ENTRY _ZTV8S3465C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C13[];
static Base_Class bases_S3465C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C6,    ABISELECT(416,256), //bcp->offset
    13, //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_S3465C5,    ABISELECT(560,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(768,472), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3465C8,    ABISELECT(928,576), //bcp->offset
    38, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(560,344), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C8,    ABISELECT(2336,1428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(2384,1452), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(2384,1452), //bcp->offset
    80, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(3440,2100), //bcp->offset
    91, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(3296,2008), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3465C12,    ABISELECT(2336,1428), //bcp->offset
    64, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3465C5,    ABISELECT(3648,2228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(3648,2228), //bcp->offset
    99, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3465C5,    ABISELECT(976,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3465C11,    ABISELECT(976,600), //bcp->offset
    41, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C6,    ABISELECT(4560,2784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(4704,2872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(4912,3000), //bcp->offset
    138, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(4704,2872), //bcp->offset
    129, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3465C13,    ABISELECT(4560,2784), //bcp->offset
    111, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3465C10[];
extern void _ZN8S3465C10D1Ev();
extern void _ZN8S3465C10D0Ev();
extern void _ZN8S3465C103v12Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn560_N8S3465C10D1Ev,_ZThn344_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn560_N8S3465C10D0Ev,_ZThn344_N8S3465C10D0Ev)() __attribute__((weak));
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn976_N8S3465C10D1Ev,_ZThn600_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn976_N8S3465C10D0Ev,_ZThn600_N8S3465C10D0Ev)() __attribute__((weak));
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
extern void ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn2336_N8S3465C10D1Ev,_ZThn1428_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn2336_N8S3465C10D0Ev,_ZThn1428_N8S3465C10D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn4560_N8S3465C10D1Ev,_ZThn2784_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn4560_N8S3465C10D0Ev,_ZThn2784_N8S3465C10D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn144_n88_N8S3465C10D1Ev,_ZTvn88_n44_N8S3465C10D1Ev)();
extern void ABISELECT(_ZTvn144_n88_N8S3465C10D0Ev,_ZTvn88_n44_N8S3465C10D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C10[] = {
  ABISELECT(4560,2784),
  ABISELECT(3648,2228),
  ABISELECT(3440,2100),
  ABISELECT(2336,1428),
  ABISELECT(976,600),
  ABISELECT(928,576),
  ABISELECT(560,344),
  ABISELECT(416,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN8S3465C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C103v12Ev,
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-560,-344),
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(368,232),
  ABISELECT(-560,-344),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev),
  ABISELECT(-768,-472),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(-512,-320),
  ABISELECT(-928,-576),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  0,
  0,
  0,
  ABISELECT(-976,-600),
  0,
  0,
  0,
  ABISELECT(2672,1628),
  ABISELECT(-48,-24),
  ABISELECT(-416,-256),
  ABISELECT(2464,1500),
  ABISELECT(-560,-344),
  ABISELECT(1360,828),
  ABISELECT(-976,-600),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-2336,-1428),
  ABISELECT(-1408,-852),
  ABISELECT(-1776,-1084),
  ABISELECT(1104,672),
  ABISELECT(-1920,-1172),
  ABISELECT(-2336,-1428),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev),
  ABISELECT(-2384,-1452),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(-3296,-2008),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-3440,-2100),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3648,-2228),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(-4560,-2784),
  0,
  0,
  ABISELECT(-912,-556),
  ABISELECT(-3632,-2208),
  ABISELECT(-4000,-2440),
  ABISELECT(-1120,-684),
  ABISELECT(-4144,-2528),
  ABISELECT(-2224,-1356),
  ABISELECT(-4560,-2784),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev),
  ABISELECT(-4288,-2616),
  ABISELECT(-3776,-2296),
  ABISELECT(-4704,-2872),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N8S3465C10D1Ev,_ZTvn88_n44_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N8S3465C10D0Ev,_ZTvn88_n44_N8S3465C10D0Ev),
  ABISELECT(-4912,-3000),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern VTBL_ENTRY _ZTV8S3465C10[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C10[] = {
  ABISELECT(-144,-88),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__8S3465C10[] = {
  ABISELECT(-512,-320),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__8S3465C10[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C10[] = {
  ABISELECT(-512,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__8S3465C10[] = {
  0,
  0,
  ABISELECT(512,320),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN8S3465C11D1Ev();
extern void _ZN8S3465C11D0Ev();
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C11__8S3465C10[] = {
  ABISELECT(2672,1628),
  ABISELECT(-48,-24),
  ABISELECT(-416,-256),
  ABISELECT(2464,1500),
  ABISELECT(-560,-344),
  ABISELECT(1360,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C11__8S3465C10[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1360,-828),
  ABISELECT(-1408,-852),
  ABISELECT(-1776,-1084),
  ABISELECT(1104,672),
  ABISELECT(-1920,-1172),
  ABISELECT(-1360,-828),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C11__8S3465C10[] = {
  0,
  0,
  ABISELECT(560,344),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C11__8S3465C10[] = {
  ABISELECT(-1408,-852),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C11__8S3465C10[] = {
  0,
  0,
  0,
  ABISELECT(-2464,-1500),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C11__8S3465C10[] = {
  ABISELECT(-2320,-1408),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C11__8S3465C10[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(416,256),
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(368,232),
  ABISELECT(416,256),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C11__8S3465C10[] = {
  ABISELECT(208,128),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C11__8S3465C10[] = {
  ABISELECT(-512,-320),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C11__8S3465C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2672,-1628),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN8S3465C12D1Ev();
extern void _ZN8S3465C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C10[] = {
  ABISELECT(-1408,-852),
  ABISELECT(-1776,-1084),
  ABISELECT(1104,672),
  ABISELECT(-1920,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN8S3465C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C12__A1__8S3465C10[] = {
  ABISELECT(-1920,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C12__A1__8S3465C10[] = {
  0,
  0,
  ABISELECT(1920,1172),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C12__8S3465C10[] = {
  0,
  0,
  ABISELECT(1920,1172),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C12__8S3465C10[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C12__8S3465C10[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(1776,1084),
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(368,232),
  ABISELECT(1776,1084),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C10[] = {
  ABISELECT(1568,956),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C12__8S3465C10[] = {
  ABISELECT(-512,-320),
  ABISELECT(1408,852),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN8S3465C13D1Ev();
extern void _ZN8S3465C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C13__8S3465C10[] = {
  ABISELECT(-912,-556),
  ABISELECT(-3632,-2208),
  ABISELECT(-4000,-2440),
  ABISELECT(-1120,-684),
  ABISELECT(-4144,-2528),
  ABISELECT(-2224,-1356),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D0Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A1__8S3465C10[] = {
  ABISELECT(-4288,-2616),
  ABISELECT(-3776,-2296),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C78S3465C13__A1__8S3465C10[] = {
  ABISELECT(-512,-320),
  ABISELECT(3776,2296),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A1__8S3465C10[] = {
  0,
  0,
  ABISELECT(4288,2616),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C13__8S3465C10[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(2224,1356),
  ABISELECT(-1408,-852),
  ABISELECT(-1776,-1084),
  ABISELECT(1104,672),
  ABISELECT(-1920,-1172),
  ABISELECT(2224,1356),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C13__8S3465C10[] = {
  0,
  0,
  ABISELECT(4144,2528),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C13__8S3465C10[] = {
  ABISELECT(2176,1332),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C13__8S3465C10[] = {
  0,
  0,
  0,
  ABISELECT(1120,684),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C13__8S3465C10[] = {
  ABISELECT(1264,776),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C13__8S3465C10[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(4000,2440),
  0,
  0,
  0,
  ABISELECT(-144,-88),
  ABISELECT(368,232),
  ABISELECT(4000,2440),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C13__8S3465C10[] = {
  ABISELECT(3792,2312),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C13__8S3465C10[] = {
  ABISELECT(-512,-320),
  ABISELECT(3632,2208),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C13__8S3465C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(912,556),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A__8S3465C13__8S3465C10[] = {
  ABISELECT(-4288,-2616),
  ABISELECT(-3776,-2296),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev),
};
static  VTT_ENTRY vtt_S3465C10[] = {
  {&(_ZTV8S3465C10[10]),  10,142},
  {&(_ZTV8S3465C10[17]),  17,142},
  {&(_ZTV8S3465C10[29]),  29,142},
  {&(_ZTV8S3465C10[36]),  36,142},
  {&(_ZTV8S3465C10[41]),  41,142},
  {&(_ZTV8S3465C10[56]),  56,142},
  {&(_ZTV8S3465C10[78]),  78,142},
  {&(_ZTV8S3465C10[82]),  82,142},
  {&(_ZTV8S3465C10[96]),  96,142},
  {&(_ZTV8S3465C10[89]),  89,142},
  {&(_ZTV8S3465C10[106]),  106,142},
  {&(_ZTV8S3465C10[125]),  125,142},
  {&(_ZTV8S3465C10[133]),  133,142},
  {&(_ZTV8S3465C10[140]),  140,142},
  {&(_tg__ZTV7S3465C7__8S3465C10[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__8S3465C10[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__8S3465C10[4]),  4,6},
  {&(_tg__ZTV7S3465C8__8S3465C10[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__8S3465C10[4]),  4,6},
  {&(_tg__ZTV8S3465C11__8S3465C10[8]),  8,16},
  {&(_tg__ZTV8S3465C12__8S3465C11__8S3465C10[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C11__8S3465C10[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C11__8S3465C10[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C11__8S3465C10[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C11__8S3465C10[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C11__8S3465C10[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C11__8S3465C10[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C11__8S3465C10[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C11__8S3465C10[7]),  7,12},
  {&(_tg__ZTV8S3465C12__8S3465C10[6]),  6,8},
  {&(_tg__ZTV7S3465C88S3465C12__A1__8S3465C10[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C12__A1__8S3465C10[4]),  4,6},
  {&(_tg__ZTV7S3465C6__8S3465C12__8S3465C10[4]),  4,6},
  {&(_tg__ZTV7S3465C5__A1__8S3465C12__8S3465C10[5]),  5,8},
  {&(_tg__ZTV7S3465C7__8S3465C12__8S3465C10[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C10[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C12__8S3465C10[3]),  3,3},
  {&(_tg__ZTV8S3465C13__8S3465C10[8]),  8,12},
  {&(_tg__ZTV7S3465C78S3465C13__A1__8S3465C10[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C78S3465C13__A1__8S3465C10[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A1__8S3465C10[4]),  4,6},
  {&(_tg__ZTV8S3465C12__8S3465C13__8S3465C10[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C13__8S3465C10[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C13__8S3465C10[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C13__8S3465C10[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C13__8S3465C10[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C13__8S3465C10[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C13__8S3465C10[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C13__8S3465C10[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C13__8S3465C10[7]),  7,12},
  {&(_tg__ZTV7S3465C7__A__8S3465C13__8S3465C10[4]),  4,9},
};
extern VTBL_ENTRY _ZTI8S3465C10[];
extern  VTBL_ENTRY _ZTV8S3465C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C10[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S3465C10D0Ev,_ZThn2784_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4560_N8S3465C10D1Ev,_ZThn2784_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S3465C10D0Ev,_ZThn1428_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S3465C10D1Ev,_ZThn1428_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S3465C10D0Ev,_ZThn600_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn976_N8S3465C10D1Ev,_ZThn600_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3465C10D0Ev,_ZThn344_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn560_N8S3465C10D1Ev,_ZThn344_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3465C10 = {  "S3465C10", // class name
  bases_S3465C10, 20,
  &(vtc_S3465C10[0]), // expected_vtbl_contents
  &(vtt_S3465C10[0]), // expected_vtt_contents
  ABISELECT(7200,4404), // object size
  NSPAIRA(_ZTI8S3465C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3465C10),142, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3465C10),51, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C2  : S3465C3 , virtual S3465C7 , S3465C8 , S3465C10 {
  int s3465c2f0;
  void *s3465c2f1;
  int s3465c2f2[2];
  int  :0;
  char s3465c2f4:3;
  void *s3465c2f5[3];
  int s3465c2f6;
  void *s3465c2f7;
  long double s3465c2f8;
  int s3465c2f9[10];
  void *s3465c2f10;
  virtual void  v13(); // _ZN7S3465C23v13Ev
  ~S3465C2(); // tgen
  S3465C2(); // tgen
};
//SIG(-1 S3465C2) C1{ BC2{ VBC3{ BC4{ v2 v3 v4 Fi[2] FL Fc:0 FC5{ v7 v8 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v5 v6 FC5 Fi FC5 FC4 FC5 FD Fp Fi FD Fc:0} vd Fi[3] Fp Fi[2] Fp Fi Fp Fi} VBC6{ BC4 BC5 VBC7{ VBC5 Fi Fi:7 FC8{} Fp Fi Fp} vd Fs:16 FL Fs} BC7 BC9{ VBC5 VBC6 VBC10{ VBC11{ BC7 BC3 VBC4 BC5 VBC6 vd Fs} VBC3 BC4 vd v9 v10 v11 Fl[2] FC6 Fi FD FC4 FC5 Fc FD FC8 FL:64 FC5} VBC12{ VBC11 BC5 VBC3 BC6 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC8 Fi[5] FC13{ vd m Fp FC8 Fp Fi FC3 FC4[5]}} vd v12 FL FC7 Fp[2] Fi FC5 Fi[8]} v1 Fi Fp Fi[2] Fi:0 Fc:3 Fp[3] Fi Fp FD Fi[10] Fp}


void  S3465C2 ::v13(){vfunc_called(this, "_ZN7S3465C23v13Ev");}
S3465C2 ::~S3465C2(){ note_dtor("S3465C2", this);} // tgen
S3465C2 ::S3465C2(){ note_ctor("S3465C2", this);} // tgen

static void Test_S3465C2()
{
  extern Class_Descriptor cd_S3465C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(467,1143)];
    init_test(&cd_S3465C2, buf);
    S3465C2 *dp, &lv = *(dp=new (buf) S3465C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7456,4568), "sizeof(S3465C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C2)");
    /*is_ambiguous_... S3465C2::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(672,420), "S3465C2");
    check_base_class_offset(lv, (S3465C4*)(S3465C3*), ABISELECT(672,420), "S3465C2");
    /*is_ambiguous_... S3465C11::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C11*), ABISELECT(672,420), "S3465C2");
    /*is_ambiguous_... S3465C13::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C13*), ABISELECT(672,420), "S3465C2");
    check_base_class_offset(lv, (S3465C3*), 0, "S3465C2");
    /*is_ambiguous_... S3465C2::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(1584,976), "S3465C2");
    /*is_ambiguous_... S3465C2::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(1792,1104), "S3465C2");
    /*is_ambiguous_... S3465C2::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(2000,1232), "S3465C2");
    /*is_ambiguous_... S3465C2::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(2000,1232), "S3465C2");
    /*is_ambiguous_... S3465C10::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C10*), ABISELECT(2000,1232), "S3465C2");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C12*), ABISELECT(2000,1232), "S3465C2");
    /*is_ambiguous_... S3465C2::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(1952,1208), "S3465C2");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*)(S3465C13*), ABISELECT(1952,1208), "S3465C2");
    /*is_ambiguous_... S3465C2::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*), ABISELECT(1584,976), "S3465C2");
    /*is_ambiguous_... S3465C10::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C10*), ABISELECT(1584,976), "S3465C2");
    check_base_class_offset(lv, (S3465C7*)(S3465C12*), ABISELECT(1584,976), "S3465C2");
    /*is_ambiguous_... S3465C2::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*), ABISELECT(72,44), "S3465C2");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C12*), ABISELECT(3504,2148), "S3465C2");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*)(S3465C12*), ABISELECT(3552,2172), "S3465C2");
    check_base_class_offset(lv, (S3465C4*)(S3465C12*), ABISELECT(3552,2172), "S3465C2");
    /*is_ambiguous_... S3465C12::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C12*), ABISELECT(4608,2820), "S3465C2");
    /*is_ambiguous_... S3465C12::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C12*), ABISELECT(4464,2728), "S3465C2");
    check_base_class_offset(lv, (S3465C12*)(S3465C11*), ABISELECT(3504,2148), "S3465C2");
    check_base_class_offset(lv, (S3465C12*)(S3465C13*), ABISELECT(3504,2148), "S3465C2");
    /*is_ambiguous_... S3465C11::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C11*), ABISELECT(2144,1320), "S3465C2");
    check_base_class_offset(lv, (S3465C11*)(S3465C10*), ABISELECT(2144,1320), "S3465C2");
    /*is_ambiguous_... S3465C13::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C13*), ABISELECT(4816,2948), "S3465C2");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*)(S3465C13*), ABISELECT(4960,3036), "S3465C2");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*)(S3465C13*), ABISELECT(5168,3164), "S3465C2");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C13*), ABISELECT(4960,3036), "S3465C2");
    check_base_class_offset(lv, (S3465C13*)(S3465C10*), ABISELECT(4816,2948), "S3465C2");
    check_base_class_offset(lv, (S3465C10*), ABISELECT(112,68), "S3465C2");
    check_field_offset(lv, s3465c2f0, ABISELECT(528,324), "S3465C2.s3465c2f0");
    check_field_offset(lv, s3465c2f1, ABISELECT(536,328), "S3465C2.s3465c2f1");
    check_field_offset(lv, s3465c2f2, ABISELECT(544,332), "S3465C2.s3465c2f2");
    set_bf_and_test(lv, s3465c2f4, ABISELECT(552,340), 0, 3, 1, "S3465C2");
    set_bf_and_test(lv, s3465c2f4, ABISELECT(552,340), 0, 3, hide_sll(1LL<<2), "S3465C2");
    check_field_offset(lv, s3465c2f5, ABISELECT(560,344), "S3465C2.s3465c2f5");
    check_field_offset(lv, s3465c2f6, ABISELECT(584,356), "S3465C2.s3465c2f6");
    check_field_offset(lv, s3465c2f7, ABISELECT(592,360), "S3465C2.s3465c2f7");
    check_field_offset(lv, s3465c2f8, ABISELECT(608,364), "S3465C2.s3465c2f8");
    check_field_offset(lv, s3465c2f9, ABISELECT(624,376), "S3465C2.s3465c2f9");
    check_field_offset(lv, s3465c2f10, ABISELECT(664,416), "S3465C2.s3465c2f10");
    test_class_info(&lv, &cd_S3465C2);
    dp->~S3465C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C2(Test_S3465C2, "S3465C2", ABISELECT(7456,4568));

#else // __cplusplus

extern void _ZN7S3465C2C1Ev();
extern void _ZN7S3465C2D1Ev();
Name_Map name_map_S3465C2[] = {
  NSPAIR(_ZN7S3465C2C1Ev),
  NSPAIR(_ZN7S3465C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C3;
extern VTBL_ENTRY _ZTI7S3465C3[];
extern  VTBL_ENTRY _ZTV7S3465C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C3[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C12;
extern VTBL_ENTRY _ZTI8S3465C12[];
extern  VTBL_ENTRY _ZTV8S3465C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C12[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C11;
extern VTBL_ENTRY _ZTI8S3465C11[];
extern  VTBL_ENTRY _ZTV8S3465C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C11[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C13;
extern VTBL_ENTRY _ZTI8S3465C13[];
extern  VTBL_ENTRY _ZTV8S3465C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C13[];
extern Class_Descriptor cd_S3465C10;
extern VTBL_ENTRY _ZTI8S3465C10[];
extern  VTBL_ENTRY _ZTV8S3465C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C10[];
static Base_Class bases_S3465C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C5,    ABISELECT(672,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(672,420), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3465C3,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(1584,976), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(1792,1104), //bcp->offset
    56, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(2000,1232), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3465C8,    ABISELECT(1952,1208), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(1584,976), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C8,    ABISELECT(72,44), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C8,    ABISELECT(3504,2148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(3552,2172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(3552,2172), //bcp->offset
    108, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(4608,2820), //bcp->offset
    119, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(4464,2728), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3465C12,    ABISELECT(3504,2148), //bcp->offset
    92, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3465C5,    ABISELECT(2144,1320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3465C11,    ABISELECT(2144,1320), //bcp->offset
    69, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(4816,2948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(4960,3036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(5168,3164), //bcp->offset
    154, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(4960,3036), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3465C13,    ABISELECT(4816,2948), //bcp->offset
    127, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3465C10,    ABISELECT(112,68), //bcp->offset
    16, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3465C2[];
extern void _ZN7S3465C2D1Ev();
extern void _ZN7S3465C2D0Ev();
extern void _ZN7S3465C23v13Ev();
extern void ABISELECT(_ZThn112_N7S3465C2D1Ev,_ZThn68_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S3465C2D0Ev,_ZThn68_N7S3465C2D0Ev)();
extern void _ZN8S3465C103v12Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S3465C2D1Ev,_ZTv0_n32_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn1584_N7S3465C2D1Ev,_ZThn976_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3465C2D0Ev,_ZTv0_n32_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn1584_N7S3465C2D0Ev,_ZThn976_N7S3465C2D0Ev)() __attribute__((weak));
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n96_N7S3465C2D1Ev,_ZTv0_n48_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn2144_N7S3465C2D1Ev,_ZThn1320_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S3465C2D0Ev,_ZTv0_n48_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn2144_N7S3465C2D0Ev,_ZThn1320_N7S3465C2D0Ev)() __attribute__((weak));
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
extern void ABISELECT(_ZTv0_n56_N7S3465C2D1Ev,_ZTv0_n28_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn3504_N7S3465C2D1Ev,_ZThn2148_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3465C2D0Ev,_ZTv0_n28_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn3504_N7S3465C2D0Ev,_ZThn2148_N7S3465C2D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n88_N7S3465C2D1Ev,_ZTv0_n44_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn4816_N7S3465C2D1Ev,_ZThn2948_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3465C2D0Ev,_ZTv0_n44_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn4816_N7S3465C2D0Ev,_ZThn2948_N7S3465C2D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn144_n88_N7S3465C2D1Ev,_ZTvn88_n44_N7S3465C2D1Ev)();
extern void ABISELECT(_ZTvn144_n88_N7S3465C2D0Ev,_ZTvn88_n44_N7S3465C2D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C2[] = {
  ABISELECT(4816,2948),
  ABISELECT(4608,2820),
  ABISELECT(3504,2148),
  ABISELECT(2144,1320),
  ABISELECT(2000,1232),
  ABISELECT(1952,1208),
  ABISELECT(1584,976),
  ABISELECT(672,420),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3465C23v13Ev,
  ABISELECT(1928,1188),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  ABISELECT(4704,2880),
  ABISELECT(560,352),
  ABISELECT(4496,2752),
  ABISELECT(3392,2080),
  ABISELECT(2032,1252),
  ABISELECT(1840,1140),
  ABISELECT(1472,908),
  ABISELECT(1888,1164),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S3465C2D1Ev,_ZThn68_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S3465C2D0Ev,_ZThn68_N7S3465C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C103v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-672,-420),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1584,-976),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(-1584,-976),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3465C2D1Ev,_ZTv0_n32_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3465C2D0Ev,_ZTv0_n32_N7S3465C2D0Ev),
  ABISELECT(-1792,-1104),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(48,24),
  ABISELECT(-1952,-1208),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  0,
  0,
  ABISELECT(-2000,-1232),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-2144,-1320),
  0,
  0,
  0,
  ABISELECT(-1472,-900),
  ABISELECT(-192,-112),
  ABISELECT(-560,-344),
  ABISELECT(2464,1500),
  ABISELECT(-144,-88),
  ABISELECT(1360,828),
  ABISELECT(-2144,-1320),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S3465C2D1Ev,_ZTv0_n48_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S3465C2D0Ev,_ZTv0_n48_N7S3465C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-3504,-2148),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(-3504,-2148),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3465C2D1Ev,_ZTv0_n28_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3465C2D0Ev,_ZTv0_n28_N7S3465C2D0Ev),
  ABISELECT(-3552,-2172),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(-4464,-2728),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-4608,-2820),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(-4816,-2948),
  0,
  0,
  ABISELECT(-4144,-2528),
  ABISELECT(-2864,-1740),
  ABISELECT(-3232,-1972),
  ABISELECT(-208,-128),
  ABISELECT(-2816,-1716),
  ABISELECT(-1312,-800),
  ABISELECT(-4816,-2948),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3465C2D1Ev,_ZTv0_n44_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3465C2D0Ev,_ZTv0_n44_N7S3465C2D0Ev),
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  ABISELECT(-4960,-3036),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N7S3465C2D1Ev,_ZTvn88_n44_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N7S3465C2D0Ev,_ZTvn88_n44_N7S3465C2D0Ev),
  ABISELECT(-5168,-3164),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern VTBL_ENTRY _ZTV7S3465C2[];
extern void _ZN7S3465C3D1Ev();
extern void _ZN7S3465C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C3__7S3465C2[] = {
  ABISELECT(672,420),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C3[0]),
  (VTBL_ENTRY)&_ZN7S3465C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C3D0Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__7S3465C3__7S3465C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-672,-420),
  (VTBL_ENTRY)&(_ZTI7S3465C3[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A__7S3465C2[] = {
  ABISELECT(1928,1188),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__A__7S3465C2[] = {
  0,
  0,
  ABISELECT(-1928,-1188),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN8S3465C10D1Ev();
extern void _ZN8S3465C10D0Ev();
extern void _ZN8S3465C103v12Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C10__7S3465C2[] = {
  ABISELECT(4704,2880),
  ABISELECT(560,352),
  ABISELECT(4496,2752),
  ABISELECT(3392,2080),
  ABISELECT(2032,1252),
  ABISELECT(1840,1140),
  ABISELECT(1472,908),
  ABISELECT(1888,1164),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN8S3465C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C103v12Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C10__7S3465C2[] = {
  0,
  0,
  ABISELECT(-1888,-1164),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn1472_N8S3465C10D1Ev,_ZThn908_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn1472_N8S3465C10D0Ev,_ZThn908_N8S3465C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C10__7S3465C2[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1472,-908),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(-1472,-908),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A1__8S3465C10__7S3465C2[] = {
  ABISELECT(-1680,-1036),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C10__7S3465C2[] = {
  ABISELECT(48,24),
  ABISELECT(-1840,-1140),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn2032_N8S3465C10D1Ev,_ZThn1252_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn2032_N8S3465C10D0Ev,_ZThn1252_N8S3465C10D0Ev)() __attribute__((weak));
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C11__8S3465C10__7S3465C2[] = {
  0,
  0,
  0,
  ABISELECT(-2032,-1252),
  0,
  0,
  0,
  ABISELECT(-1472,-900),
  ABISELECT(-192,-112),
  ABISELECT(-560,-344),
  ABISELECT(2464,1500),
  ABISELECT(-144,-88),
  ABISELECT(1360,828),
  ABISELECT(-2032,-1252),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn3392_N8S3465C10D1Ev,_ZThn2080_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn3392_N8S3465C10D0Ev,_ZThn2080_N8S3465C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C10__7S3465C2[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-3392,-2080),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(-3392,-2080),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C10__7S3465C2[] = {
  ABISELECT(-3440,-2104),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A2__8S3465C10__7S3465C2[] = {
  0,
  0,
  0,
  ABISELECT(-4496,-2752),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A2__8S3465C10__7S3465C2[] = {
  ABISELECT(-4352,-2660),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C10__7S3465C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-560,-352),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn4704_N8S3465C10D1Ev,_ZThn2880_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn4704_N8S3465C10D0Ev,_ZThn2880_N8S3465C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C13__8S3465C10__7S3465C2[] = {
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(-4704,-2880),
  0,
  0,
  ABISELECT(-4144,-2528),
  ABISELECT(-2864,-1740),
  ABISELECT(-3232,-1972),
  ABISELECT(-208,-128),
  ABISELECT(-2816,-1716),
  ABISELECT(-1312,-800),
  ABISELECT(-4704,-2880),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn144_n88_N8S3465C10D1Ev,_ZTvn88_n44_N8S3465C10D1Ev)();
extern void ABISELECT(_ZTvn144_n88_N8S3465C10D0Ev,_ZTvn88_n44_N8S3465C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A1__8S3465C10__7S3465C2[] = {
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  ABISELECT(-4848,-2968),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N8S3465C10D1Ev,_ZTvn88_n44_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N8S3465C10D0Ev,_ZTvn88_n44_N8S3465C10D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C78S3465C13__A4__8S3465C10__7S3465C2[] = {
  ABISELECT(-5056,-3096),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__7S3465C2[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__7S3465C2[] = {
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__7S3465C2[] = {
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C2[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__7S3465C2[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN8S3465C11D1Ev();
extern void _ZN8S3465C11D0Ev();
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C11__7S3465C2[] = {
  ABISELECT(-1472,-900),
  ABISELECT(-192,-112),
  ABISELECT(-560,-344),
  ABISELECT(2464,1500),
  ABISELECT(-144,-88),
  ABISELECT(1360,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C11__7S3465C2[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1360,-828),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(-1360,-828),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C11__7S3465C2[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C11__7S3465C2[] = {
  ABISELECT(-1408,-852),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C11__7S3465C2[] = {
  0,
  0,
  0,
  ABISELECT(-2464,-1500),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C11__7S3465C2[] = {
  ABISELECT(-2320,-1408),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C11__7S3465C2[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(560,344),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(560,344),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C11__7S3465C2[] = {
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C11__7S3465C2[] = {
  ABISELECT(48,24),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C11__7S3465C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1472,900),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN8S3465C12D1Ev();
extern void _ZN8S3465C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C12__7S3465C2[] = {
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN8S3465C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C12__A2__7S3465C2[] = {
  ABISELECT(-1504,-916),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C12__A2__7S3465C2[] = {
  0,
  0,
  ABISELECT(1504,916),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C12__7S3465C2[] = {
  0,
  0,
  ABISELECT(1504,916),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C12__7S3465C2[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C12__7S3465C2[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(1920,1172),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(1920,1172),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C12__7S3465C2[] = {
  ABISELECT(1712,1044),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C12__7S3465C2[] = {
  ABISELECT(48,24),
  ABISELECT(1552,940),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN8S3465C13D1Ev();
extern void _ZN8S3465C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C13__7S3465C2[] = {
  ABISELECT(-4144,-2528),
  ABISELECT(-2864,-1740),
  ABISELECT(-3232,-1972),
  ABISELECT(-208,-128),
  ABISELECT(-2816,-1716),
  ABISELECT(-1312,-800),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D0Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A1__7S3465C2[] = {
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C78S3465C13__A1__7S3465C2[] = {
  ABISELECT(48,24),
  ABISELECT(3008,1828),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A1__7S3465C2[] = {
  0,
  0,
  ABISELECT(2960,1804),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C13__7S3465C2[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(1312,800),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(1312,800),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C13__7S3465C2[] = {
  0,
  0,
  ABISELECT(2816,1716),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C13__7S3465C2[] = {
  ABISELECT(1264,776),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C13__7S3465C2[] = {
  0,
  0,
  0,
  ABISELECT(208,128),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C13__7S3465C2[] = {
  ABISELECT(352,220),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C13__7S3465C2[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(3232,1972),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(3232,1972),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C13__7S3465C2[] = {
  ABISELECT(3024,1844),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C13__7S3465C2[] = {
  ABISELECT(48,24),
  ABISELECT(2864,1740),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C13__7S3465C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4144,2528),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A__8S3465C13__7S3465C2[] = {
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev),
};
static  VTT_ENTRY vtt_S3465C2[] = {
  {&(_ZTV7S3465C2[10]),  10,158},
  {&(_tg__ZTV7S3465C3__7S3465C2[3]),  3,5},
  {&(_tg__ZTV7S3465C4__7S3465C3__7S3465C2[7]),  7,12},
  {&(_tg__ZTV7S3465C8__A__7S3465C2[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__A__7S3465C2[4]),  4,6},
  {&(_tg__ZTV8S3465C10__7S3465C2[10]),  10,13},
  {&(_tg__ZTV7S3465C6__8S3465C10__7S3465C2[4]),  4,6},
  {&(_tg__ZTV7S3465C7__8S3465C10__7S3465C2[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A1__8S3465C10__7S3465C2[2]),  2,4},
  {&(_tg__ZTV7S3465C8__8S3465C10__7S3465C2[3]),  3,3},
  {&(_tg__ZTV8S3465C11__8S3465C10__7S3465C2[15]),  15,23},
  {&(_tg__ZTV8S3465C12__8S3465C10__7S3465C2[14]),  14,16},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C10__7S3465C2[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A2__8S3465C10__7S3465C2[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A2__8S3465C10__7S3465C2[2]),  2,4},
  {&(_tg__ZTV7S3465C4__A1__8S3465C10__7S3465C2[7]),  7,12},
  {&(_tg__ZTV8S3465C13__8S3465C10__7S3465C2[14]),  14,18},
  {&(_tg__ZTV7S3465C78S3465C13__A1__8S3465C10__7S3465C2[4]),  4,9},
  {&(_tg__ZTV7S3465C67S3465C78S3465C13__A4__8S3465C10__7S3465C2[2]),  2,4},
  {&(_ZTV7S3465C2[36]),  36,158},
  {&(_ZTV7S3465C2[51]),  51,158},
  {&(_ZTV7S3465C2[58]),  58,158},
  {&(_ZTV7S3465C2[63]),  63,158},
  {&(_ZTV7S3465C2[67]),  67,158},
  {&(_ZTV7S3465C2[16]),  16,158},
  {&(_ZTV7S3465C2[26]),  26,158},
  {&(_ZTV7S3465C2[84]),  84,158},
  {&(_ZTV7S3465C2[106]),  106,158},
  {&(_ZTV7S3465C2[110]),  110,158},
  {&(_ZTV7S3465C2[124]),  124,158},
  {&(_ZTV7S3465C2[117]),  117,158},
  {&(_ZTV7S3465C2[141]),  141,158},
  {&(_ZTV7S3465C2[149]),  149,158},
  {&(_ZTV7S3465C2[156]),  156,158},
  {&(_tg__ZTV7S3465C7__7S3465C2[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__7S3465C2[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__7S3465C2[4]),  4,6},
  {&(_tg__ZTV7S3465C8__7S3465C2[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__7S3465C2[4]),  4,6},
  {&(_tg__ZTV8S3465C11__7S3465C2[8]),  8,16},
  {&(_tg__ZTV8S3465C12__8S3465C11__7S3465C2[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C11__7S3465C2[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C11__7S3465C2[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C11__7S3465C2[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C11__7S3465C2[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C11__7S3465C2[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C11__7S3465C2[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C11__7S3465C2[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C11__7S3465C2[7]),  7,12},
  {&(_tg__ZTV8S3465C12__7S3465C2[6]),  6,8},
  {&(_tg__ZTV7S3465C88S3465C12__A2__7S3465C2[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C12__A2__7S3465C2[4]),  4,6},
  {&(_tg__ZTV7S3465C6__8S3465C12__7S3465C2[4]),  4,6},
  {&(_tg__ZTV7S3465C5__A1__8S3465C12__7S3465C2[5]),  5,8},
  {&(_tg__ZTV7S3465C7__8S3465C12__7S3465C2[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C12__7S3465C2[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C12__7S3465C2[3]),  3,3},
  {&(_tg__ZTV8S3465C13__7S3465C2[8]),  8,12},
  {&(_tg__ZTV7S3465C78S3465C13__A1__7S3465C2[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C78S3465C13__A1__7S3465C2[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A1__7S3465C2[4]),  4,6},
  {&(_tg__ZTV8S3465C12__8S3465C13__7S3465C2[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C13__7S3465C2[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C13__7S3465C2[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C13__7S3465C2[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C13__7S3465C2[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C13__7S3465C2[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C13__7S3465C2[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C13__7S3465C2[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C13__7S3465C2[7]),  7,12},
  {&(_tg__ZTV7S3465C7__A__8S3465C13__7S3465C2[4]),  4,9},
};
extern VTBL_ENTRY _ZTI7S3465C2[];
extern  VTBL_ENTRY _ZTV7S3465C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C2[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4704_N8S3465C10D0Ev,_ZThn2880_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4704_N8S3465C10D1Ev,_ZThn2880_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3392_N8S3465C10D0Ev,_ZThn2080_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3392_N8S3465C10D1Ev,_ZThn2080_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S3465C10D0Ev,_ZThn1252_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2032_N8S3465C10D1Ev,_ZThn1252_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N8S3465C10D0Ev,_ZThn908_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N8S3465C10D1Ev,_ZThn908_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3465C2D0Ev,_ZTv0_n44_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N7S3465C2D0Ev,_ZThn2948_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3465C2D1Ev,_ZTv0_n44_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N7S3465C2D1Ev,_ZThn2948_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3465C2D0Ev,_ZTv0_n28_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3504_N7S3465C2D0Ev,_ZThn2148_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3465C2D1Ev,_ZTv0_n28_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3504_N7S3465C2D1Ev,_ZThn2148_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S3465C2D0Ev,_ZTv0_n48_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2144_N7S3465C2D0Ev,_ZThn1320_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S3465C2D1Ev,_ZTv0_n48_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2144_N7S3465C2D1Ev,_ZThn1320_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3465C2D0Ev,_ZTv0_n32_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S3465C2D0Ev,_ZThn976_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3465C2D1Ev,_ZTv0_n32_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1584_N7S3465C2D1Ev,_ZThn976_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3465C2 = {  "S3465C2", // class name
  bases_S3465C2, 23,
  &(vtc_S3465C2[0]), // expected_vtbl_contents
  &(vtt_S3465C2[0]), // expected_vtt_contents
  ABISELECT(7456,4568), // object size
  NSPAIRA(_ZTI7S3465C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3465C2),158, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3465C2),71, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C17  : S3465C4 {
  long double s3465c17f0;
  ~S3465C17(); // tgen
  S3465C17(); // tgen
};
//SIG(-1 S3465C17) C1{ BC2{ BC3{ v1 v2 v3 Fi[2] FL Fc:0 FC4{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v4 v5 FC4 Fi FC4 FC3 FC4 FD Fp Fi FD Fc:0} FD}


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

static void Test_S3465C17()
{
  extern Class_Descriptor cd_S3465C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,143)];
    init_test(&cd_S3465C17, buf);
    S3465C17 *dp, &lv = *(dp=new (buf) S3465C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,568), "sizeof(S3465C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C17)");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*), 0, "S3465C17");
    check_base_class_offset(lv, (S3465C4*), 0, "S3465C17");
    check_field_offset(lv, s3465c17f0, ABISELECT(912,556), "S3465C17.s3465c17f0");
    test_class_info(&lv, &cd_S3465C17);
    dp->~S3465C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C17(Test_S3465C17, "S3465C17", ABISELECT(928,568));

#else // __cplusplus

extern void _ZN8S3465C17C1Ev();
extern void _ZN8S3465C17D1Ev();
Name_Map name_map_S3465C17[] = {
  NSPAIR(_ZN8S3465C17C1Ev),
  NSPAIR(_ZN8S3465C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
static Base_Class bases_S3465C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3465C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3465C17[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY vtc_S3465C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C17[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern VTBL_ENTRY _ZTI8S3465C17[];
extern  VTBL_ENTRY _ZTV8S3465C17[];
Class_Descriptor cd_S3465C17 = {  "S3465C17", // class name
  bases_S3465C17, 2,
  &(vtc_S3465C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(928,568), // object size
  NSPAIRA(_ZTI8S3465C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3465C17),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  S3465C16  {
  ::S3465C14 s3465c16f0[6];
  int s3465c16f1;
  ::S3465C17 s3465c16f2;
  int s3465c16f3;
  void *s3465c16f4[2];
  char s3465c16f5;
  void *s3465c16f6;
  virtual void  v14(); // _ZN8S3465C163v14Ev
  virtual void  v15(); // _ZN8S3465C163v15Ev
  virtual void  v16(); // _ZN8S3465C163v16Ev
  virtual void  v17(); // _ZN8S3465C163v17Ev
  virtual void  v18(); // _ZN8S3465C163v18Ev
  ~S3465C16(); // tgen
  S3465C16(); // tgen
};
//SIG(-1 S3465C16) C1{ v1 v2 v3 v4 v5 FC2{ vd m Fp FC3{} Fp Fi FC4{ BC5{ v8 v9 v10 Fi[2] FL Fc:0 FC6{ v11 v12 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v6 v7 FC6 Fi FC6 FC5 FC6 FD Fp Fi FD Fc:0} FC5[5]}[6] Fi FC7{ BC4 FD} Fi Fp[2] Fc Fp}


void  S3465C16 ::v14(){vfunc_called(this, "_ZN8S3465C163v14Ev");}
void  S3465C16 ::v15(){vfunc_called(this, "_ZN8S3465C163v15Ev");}
void  S3465C16 ::v16(){vfunc_called(this, "_ZN8S3465C163v16Ev");}
void  S3465C16 ::v17(){vfunc_called(this, "_ZN8S3465C163v17Ev");}
void  S3465C16 ::v18(){vfunc_called(this, "_ZN8S3465C163v18Ev");}
S3465C16 ::~S3465C16(){ note_dtor("S3465C16", this);} // tgen
S3465C16 ::S3465C16(){ note_ctor("S3465C16", this);} // tgen

static void Test_S3465C16()
{
  extern Class_Descriptor cd_S3465C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(814,1974)];
    init_test(&cd_S3465C16, buf);
    S3465C16 *dp, &lv = *(dp=new (buf) S3465C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13008,7892), "sizeof(S3465C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C16)");
    check_field_offset(lv, s3465c16f0, ABISELECT(16,4), "S3465C16.s3465c16f0");
    check_field_offset(lv, s3465c16f1, ABISELECT(12016,7300), "S3465C16.s3465c16f1");
    check_field_offset(lv, s3465c16f2, ABISELECT(12032,7304), "S3465C16.s3465c16f2");
    check_field_offset(lv, s3465c16f3, ABISELECT(12960,7872), "S3465C16.s3465c16f3");
    check_field_offset(lv, s3465c16f4, ABISELECT(12968,7876), "S3465C16.s3465c16f4");
    check_field_offset(lv, s3465c16f5, ABISELECT(12984,7884), "S3465C16.s3465c16f5");
    check_field_offset(lv, s3465c16f6, ABISELECT(12992,7888), "S3465C16.s3465c16f6");
    test_class_info(&lv, &cd_S3465C16);
    dp->~S3465C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C16(Test_S3465C16, "S3465C16", ABISELECT(13008,7892));

#else // __cplusplus

extern void _ZN8S3465C16C1Ev();
extern void _ZN8S3465C16D1Ev();
Name_Map name_map_S3465C16[] = {
  NSPAIR(_ZN8S3465C16C1Ev),
  NSPAIR(_ZN8S3465C16D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3465C16[];
extern void _ZN8S3465C163v14Ev();
extern void _ZN8S3465C163v15Ev();
extern void _ZN8S3465C163v16Ev();
extern void _ZN8S3465C163v17Ev();
extern void _ZN8S3465C163v18Ev();
static  VTBL_ENTRY vtc_S3465C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C16[0]),
  (VTBL_ENTRY)&_ZN8S3465C163v14Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v15Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v16Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v17Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v18Ev,
};
extern VTBL_ENTRY _ZTI8S3465C16[];
extern  VTBL_ENTRY _ZTV8S3465C16[];
Class_Descriptor cd_S3465C16 = {  "S3465C16", // class name
  0,0,//no base classes
  &(vtc_S3465C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13008,7892), // object size
  NSPAIRA(_ZTI8S3465C16),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3465C16),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  S3465C18  : S3465C5 , virtual S3465C4 , S3465C6 , S3465C7 , S3465C8 {
  ::S3465C6 s3465c18f0;
  char s3465c18f1;
  int s3465c18f2;
  short s3465c18f3;
  ::S3465C7 s3465c18f4;
  long double s3465c18f5[2];
  int s3465c18f6[2];
  long double s3465c18f7;
  virtual  ~S3465C18(); // _ZN8S3465C18D2Ev
  virtual void  v19(); // _ZN8S3465C183v19Ev
  virtual void  v20(); // _ZN8S3465C183v20Ev
  virtual void  v21(); // _ZN8S3465C183v21Ev
  S3465C18(); // tgen
};
//SIG(-1 S3465C18) C1{ BC2{ v4 v5 v6 Fi[2] FL Fc:0 FC3{ v9 v10 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} VBC4{ BC2 v7 v8 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0} BC3 BC5{ BC2 BC3 VBC6{ VBC3 Fi Fi:7 FC7{} Fp Fi Fp} vd Fs:16 FL Fs} BC6 vd v1 v2 v3 FC3 Fc Fi Fs FC5 FD[2] Fi[2] FD}


 S3465C18 ::~S3465C18(){ note_dtor("S3465C18", this);}
void  S3465C18 ::v19(){vfunc_called(this, "_ZN8S3465C183v19Ev");}
void  S3465C18 ::v20(){vfunc_called(this, "_ZN8S3465C183v20Ev");}
void  S3465C18 ::v21(){vfunc_called(this, "_ZN8S3465C183v21Ev");}
S3465C18 ::S3465C18(){ note_ctor("S3465C18", this);} // tgen

static void Test_S3465C18()
{
  extern Class_Descriptor cd_S3465C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(167,408)];
    init_test(&cd_S3465C18, buf);
    S3465C18 *dp, &lv = *(dp=new (buf) S3465C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2656,1628), "sizeof(S3465C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C18)");
    /*is_ambiguous_... S3465C18::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*), 0, "S3465C18");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(1552,960), "S3465C18");
    check_base_class_offset(lv, (S3465C4*), ABISELECT(1552,960), "S3465C18");
    /*is_ambiguous_... S3465C18::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*), ABISELECT(208,128), "S3465C18");
    check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(352,216), "S3465C18");
    /*is_ambiguous_... S3465C7::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(560,344), "S3465C18");
    /*is_ambiguous_... S3465C18::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(2512,1540), "S3465C18");
    /*is_ambiguous_... S3465C18::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(2512,1540), "S3465C18");
    check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(2464,1516), "S3465C18");
    check_base_class_offset(lv, (S3465C7*), ABISELECT(352,216), "S3465C18");
    /*is_ambiguous_... S3465C18::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*), ABISELECT(720,448), "S3465C18");
    check_field_offset(lv, s3465c18f0, ABISELECT(768,472), "S3465C18.s3465c18f0");
    check_field_offset(lv, s3465c18f1, ABISELECT(912,560), "S3465C18.s3465c18f1");
    check_field_offset(lv, s3465c18f2, ABISELECT(916,564), "S3465C18.s3465c18f2");
    check_field_offset(lv, s3465c18f3, ABISELECT(920,568), "S3465C18.s3465c18f3");
    check_field_offset(lv, s3465c18f4, ABISELECT(928,572), "S3465C18.s3465c18f4");
    check_field_offset(lv, s3465c18f5, ABISELECT(1488,916), "S3465C18.s3465c18f5");
    check_field_offset(lv, s3465c18f6, ABISELECT(1520,940), "S3465C18.s3465c18f6");
    check_field_offset(lv, s3465c18f7, ABISELECT(1536,948), "S3465C18.s3465c18f7");
    test_class_info(&lv, &cd_S3465C18);
    dp->~S3465C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C18(Test_S3465C18, "S3465C18", ABISELECT(2656,1628));

#else // __cplusplus

extern void _ZN8S3465C18C1Ev();
extern void _ZN8S3465C18D2Ev();
Name_Map name_map_S3465C18[] = {
  NSPAIR(_ZN8S3465C18C1Ev),
  NSPAIR(_ZN8S3465C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
static Base_Class bases_S3465C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3465C5,    ABISELECT(1552,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3465C4,    ABISELECT(1552,960), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C6,    ABISELECT(208,128), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(352,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(560,344), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(2512,1540), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //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
    7, //immediately_derived
  0, 1},
  {&cd_S3465C8,    ABISELECT(2464,1516), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(352,216), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C8,    ABISELECT(720,448), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3465C18[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN8S3465C18D1Ev();
extern void _ZN8S3465C18D0Ev();
extern void _ZN8S3465C183v19Ev();
extern void _ZN8S3465C183v20Ev();
extern void _ZN8S3465C183v21Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn352_N8S3465C18D1Ev,_ZThn216_N8S3465C18D1Ev)();
extern void ABISELECT(_ZThn352_N8S3465C18D0Ev,_ZThn216_N8S3465C18D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C18[] = {
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN8S3465C18D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C18D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v19Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v20Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v21Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3465C18D1Ev,_ZThn216_N8S3465C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3465C18D0Ev,_ZThn216_N8S3465C18D0Ev),
  ABISELECT(-560,-344),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(1792,1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(48,24),
  ABISELECT(-2464,-1516),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern VTBL_ENTRY _ZTV8S3465C18[];
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C18[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__8S3465C18[] = {
  ABISELECT(48,24),
  ABISELECT(-2112,-1300),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__8S3465C18[] = {
  0,
  0,
  ABISELECT(-2160,-1324),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A__8S3465C18[] = {
  ABISELECT(1792,1092),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__A__8S3465C18[] = {
  0,
  0,
  ABISELECT(-1792,-1092),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C18[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__8S3465C18[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTT_ENTRY vtt_S3465C18[] = {
  {&(_ZTV8S3465C18[5]),  5,54},
  {&(_tg__ZTV7S3465C7__8S3465C18[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__8S3465C18[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__8S3465C18[4]),  4,6},
  {&(_tg__ZTV7S3465C8__A__8S3465C18[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__A__8S3465C18[4]),  4,6},
  {&(_ZTV8S3465C18[40]),  40,54},
  {&(_ZTV8S3465C18[21]),  21,54},
  {&(_ZTV8S3465C18[48]),  48,54},
  {&(_ZTV8S3465C18[52]),  52,54},
  {&(_ZTV8S3465C18[33]),  33,54},
  {&(_tg__ZTV7S3465C8__8S3465C18[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__8S3465C18[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3465C18[];
extern  VTBL_ENTRY _ZTV8S3465C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C18[];
Class_Descriptor cd_S3465C18 = {  "S3465C18", // class name
  bases_S3465C18, 10,
  &(vtc_S3465C18[0]), // expected_vtbl_contents
  &(vtt_S3465C18[0]), // expected_vtt_contents
  ABISELECT(2656,1628), // object size
  NSPAIRA(_ZTI8S3465C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3465C18),54, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3465C18),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C15  : S3465C16 , virtual S3465C18 , S3465C14 , S3465C13 {
  int s3465c15f0:2;
  void *s3465c15f1[5];
  int s3465c15f2[2];
  ::S3465C6 s3465c15f3;
  int s3465c15f4[7];
  ::S3465C6 s3465c15f5;
  char s3465c15f6[7];
  unsigned short s3465c15f7:1;
  virtual  ~S3465C15(); // _ZN8S3465C15D2Ev
  virtual void  v22(); // _ZN8S3465C153v22Ev
  S3465C15(); // tgen
};
//SIG(-1 S3465C15) C1{ BC2{ v2 v3 v4 v5 v6 FC3{ vd m Fp FC4{} Fp Fi FC5{ BC6{ v7 v8 v9 Fi[2] FL Fc:0 FC7{ v12 v13 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v10 v11 FC7 Fi FC7 FC6 FC7 FD Fp Fi FD Fc:0} FC6[5]}[6] Fi FC8{ BC5 FD} Fi Fp[2] Fc Fp} VBC9{ BC6 VBC5 BC7 BC10{ BC6 BC7 VBC11{ VBC7 Fi Fi:7 FC4 Fp Fi Fp} vd Fs:16 FL Fs} BC11 vd v14 v15 v16 FC7 Fc Fi Fs FC10 FD[2] Fi[2] FD} BC3 BC12{ VBC13{ BC11 BC5 VBC6 BC7 VBC10 vd Fs} BC7 VBC5 BC10 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC4 Fi[5] FC3} vd v1 Fi:2 Fp[5] Fi[2] FC7 Fi[7] FC7 Fc[7] Fs:1}


 S3465C15 ::~S3465C15(){ note_dtor("S3465C15", this);}
void  S3465C15 ::v22(){vfunc_called(this, "_ZN8S3465C153v22Ev");}
S3465C15 ::S3465C15(){ note_ctor("S3465C15", this);} // tgen

static void Test_S3465C15()
{
  extern Class_Descriptor cd_S3465C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1400,3409)];
    init_test(&cd_S3465C15, buf);
    S3465C15 *dp, &lv = *(dp=new (buf) S3465C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(22384,13632), "sizeof(S3465C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C15)");
    check_base_class_offset(lv, (S3465C16*), 0, "S3465C15");
    /*is_ambiguous_... S3465C18::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C18*), ABISELECT(18048,10972), "S3465C15");
    /*is_ambiguous_... S3465C15::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(19600,11932), "S3465C15");
    check_base_class_offset(lv, (S3465C4*)(S3465C18*), ABISELECT(19600,11932), "S3465C15");
    /*is_ambiguous_... S3465C13::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C13*), ABISELECT(19600,11932), "S3465C15");
    /*is_ambiguous_... S3465C18::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C18*), ABISELECT(18256,11100), "S3465C15");
    check_base_class_offset(lv, (S3465C5*)(S3465C7*)(S3465C18*), ABISELECT(18400,11188), "S3465C15");
    /*is_ambiguous_... S3465C7::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*)(S3465C18*), ABISELECT(18608,11316), "S3465C15");
    /*is_ambiguous_... S3465C15::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(20560,12512), "S3465C15");
    /*is_ambiguous_... S3465C18::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C18*), ABISELECT(20560,12512), "S3465C15");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C12*), ABISELECT(20560,12512), "S3465C15");
    check_base_class_offset(lv, (S3465C8*)(S3465C7*)(S3465C18*), ABISELECT(20512,12488), "S3465C15");
    /*is_ambiguous_... S3465C15::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(20512,12488), "S3465C15");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*)(S3465C13*), ABISELECT(20512,12488), "S3465C15");
    check_base_class_offset(lv, (S3465C7*)(S3465C18*), ABISELECT(18400,11188), "S3465C15");
    /*is_ambiguous_... S3465C18::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C18*), ABISELECT(18768,11420), "S3465C15");
    check_base_class_offset(lv, (S3465C18*), ABISELECT(18048,10972), "S3465C15");
    check_base_class_offset(lv, (S3465C14*), ABISELECT(13008,7892), "S3465C15");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C12*), ABISELECT(20704,12600), "S3465C15");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*)(S3465C12*), ABISELECT(20752,12624), "S3465C15");
    check_base_class_offset(lv, (S3465C4*)(S3465C12*), ABISELECT(20752,12624), "S3465C15");
    /*is_ambiguous_... S3465C12::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C12*), ABISELECT(21808,13272), "S3465C15");
    /*is_ambiguous_... S3465C12::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C12*), ABISELECT(21664,13180), "S3465C15");
    /*is_ambiguous_... S3465C15::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(22016,13400), "S3465C15");
    /*is_ambiguous_... S3465C15::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(22224,13528), "S3465C15");
    check_base_class_offset(lv, (S3465C7*)(S3465C12*), ABISELECT(22016,13400), "S3465C15");
    check_base_class_offset(lv, (S3465C12*)(S3465C13*), ABISELECT(20704,12600), "S3465C15");
    /*is_ambiguous_... S3465C13::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C13*), ABISELECT(15008,9108), "S3465C15");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*)(S3465C13*), ABISELECT(15152,9196), "S3465C15");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*)(S3465C13*), ABISELECT(15360,9324), "S3465C15");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C13*), ABISELECT(15152,9196), "S3465C15");
    check_base_class_offset(lv, (S3465C13*), ABISELECT(15008,9108), "S3465C15");
    set_bf_and_test(lv, s3465c15f0, ABISELECT(17648,10728), 0, 2, 1, "S3465C15");
    set_bf_and_test(lv, s3465c15f0, ABISELECT(17648,10728), 0, 2, hide_sll(1LL<<1), "S3465C15");
    check_field_offset(lv, s3465c15f1, ABISELECT(17656,10732), "S3465C15.s3465c15f1");
    check_field_offset(lv, s3465c15f2, ABISELECT(17696,10752), "S3465C15.s3465c15f2");
    check_field_offset(lv, s3465c15f3, ABISELECT(17712,10760), "S3465C15.s3465c15f3");
    check_field_offset(lv, s3465c15f4, ABISELECT(17856,10848), "S3465C15.s3465c15f4");
    check_field_offset(lv, s3465c15f5, ABISELECT(17888,10876), "S3465C15.s3465c15f5");
    check_field_offset(lv, s3465c15f6, ABISELECT(18032,10964), "S3465C15.s3465c15f6");
    set_bf_and_test(lv, s3465c15f7, ABISELECT(18039,10971), 0, 1, 1, "S3465C15");
    test_class_info(&lv, &cd_S3465C15);
    dp->~S3465C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C15(Test_S3465C15, "S3465C15", ABISELECT(22384,13632));

#else // __cplusplus

extern void _ZN8S3465C15C1Ev();
extern void _ZN8S3465C15D2Ev();
Name_Map name_map_S3465C15[] = {
  NSPAIR(_ZN8S3465C15C1Ev),
  NSPAIR(_ZN8S3465C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C16;
extern VTBL_ENTRY _ZTI8S3465C16[];
extern  VTBL_ENTRY _ZTV8S3465C16[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C18;
extern VTBL_ENTRY _ZTI8S3465C18[];
extern  VTBL_ENTRY _ZTV8S3465C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C18[];
extern Class_Descriptor cd_S3465C14;
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C12;
extern VTBL_ENTRY _ZTI8S3465C12[];
extern  VTBL_ENTRY _ZTV8S3465C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C12[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C13;
extern VTBL_ENTRY _ZTI8S3465C13[];
extern  VTBL_ENTRY _ZTV8S3465C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C13[];
static Base_Class bases_S3465C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(18048,10972), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(19600,11932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(19600,11932), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //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
    11, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(18256,11100), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(18400,11188), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(18608,11316), //bcp->offset
    81, //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(20560,12512), //bcp->offset
    103, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3465C8,    ABISELECT(20512,12488), //bcp->offset
    100, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(18400,11188), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3465C8,    ABISELECT(18768,11420), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3465C18,    ABISELECT(18048,10972), //bcp->offset
    46, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C14,    ABISELECT(13008,7892), //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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C8,    ABISELECT(20704,12600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(20752,12624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(20752,12624), //bcp->offset
    125, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(21808,13272), //bcp->offset
    136, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(21664,13180), //bcp->offset
    132, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(22016,13400), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3465C6,    ABISELECT(22224,13528), //bcp->offset
    159, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(22016,13400), //bcp->offset
    144, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S3465C12,    ABISELECT(20704,12600), //bcp->offset
    109, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(15008,9108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(15152,9196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(15360,9324), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(15152,9196), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3465C13,    ABISELECT(15008,9108), //bcp->offset
    21, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3465C15[];
extern void _ZN8S3465C163v14Ev();
extern void _ZN8S3465C163v15Ev();
extern void _ZN8S3465C163v16Ev();
extern void _ZN8S3465C163v17Ev();
extern void _ZN8S3465C163v18Ev();
extern void _ZN8S3465C15D1Ev();
extern void _ZN8S3465C15D0Ev();
extern void _ZN8S3465C153v22Ev();
extern void ABISELECT(_ZThn13008_N8S3465C15D1Ev,_ZThn7892_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn13008_N8S3465C15D0Ev,_ZThn7892_N8S3465C15D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZThn15008_N8S3465C15D1Ev,_ZThn9108_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn15008_N8S3465C15D0Ev,_ZThn9108_N8S3465C15D0Ev)();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn15152_N8S3465C15D1Ev,_ZThn9196_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn15152_N8S3465C15D0Ev,_ZThn9196_N8S3465C15D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S3465C15D1Ev,_ZTv0_n36_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn18048_N8S3465C15D1Ev,_ZThn10972_N8S3465C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3465C15D0Ev,_ZTv0_n36_N8S3465C15D0Ev)();
extern void ABISELECT(_ZThn18048_N8S3465C15D0Ev,_ZThn10972_N8S3465C15D0Ev)() __attribute__((weak));
extern void _ZN8S3465C183v19Ev();
extern void _ZN8S3465C183v20Ev();
extern void _ZN8S3465C183v21Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn352_n72_N8S3465C15D1Ev,_ZTvn216_n36_N8S3465C15D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N8S3465C15D0Ev,_ZTvn216_n36_N8S3465C15D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n56_N8S3465C15D1Ev,_ZTv0_n28_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn20704_N8S3465C15D1Ev,_ZThn12600_N8S3465C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C15D0Ev,_ZTv0_n28_N8S3465C15D0Ev)();
extern void ABISELECT(_ZThn20704_N8S3465C15D0Ev,_ZThn12600_N8S3465C15D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C15D1Ev,_ZTv0_n32_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn22016_N8S3465C15D1Ev,_ZThn13400_N8S3465C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C15D0Ev,_ZTv0_n32_N8S3465C15D0Ev)();
extern void ABISELECT(_ZThn22016_N8S3465C15D0Ev,_ZThn13400_N8S3465C15D0Ev)() __attribute__((weak));
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C15[] = {
  ABISELECT(22016,13400),
  ABISELECT(21808,13272),
  ABISELECT(20704,12600),
  ABISELECT(20560,12512),
  ABISELECT(20512,12488),
  ABISELECT(19600,11932),
  ABISELECT(18048,10972),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN8S3465C163v14Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v15Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v16Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v17Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v18Ev,
  (VTBL_ENTRY)&_ZN8S3465C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C153v22Ev,
  ABISELECT(-13008,-7892),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn13008_N8S3465C15D1Ev,_ZThn7892_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn13008_N8S3465C15D0Ev,_ZThn7892_N8S3465C15D0Ev),
  ABISELECT(4592,2824),
  ABISELECT(5504,3380),
  ABISELECT(7008,4292),
  ABISELECT(6800,4164),
  ABISELECT(5552,3404),
  ABISELECT(5696,3492),
  ABISELECT(-15008,-9108),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N8S3465C15D1Ev,_ZThn9108_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N8S3465C15D0Ev,_ZThn9108_N8S3465C15D0Ev),
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  ABISELECT(-15152,-9196),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N8S3465C15D1Ev,_ZThn9196_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N8S3465C15D0Ev,_ZThn9196_N8S3465C15D0Ev),
  ABISELECT(-15360,-9324),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-18048,-10972),
  0,
  0,
  0,
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  ABISELECT(-18048,-10972),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3465C15D1Ev,_ZTv0_n36_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3465C15D0Ev,_ZTv0_n36_N8S3465C15D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C183v19Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v20Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v21Ev,
  ABISELECT(-18256,-11100),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-18400,-11188),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S3465C15D1Ev,_ZTvn216_n36_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S3465C15D0Ev,_ZTvn216_n36_N8S3465C15D0Ev),
  ABISELECT(-18608,-11316),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(1792,1092),
  ABISELECT(-18768,-11420),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-19600,-11932),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(48,24),
  ABISELECT(-20512,-12488),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  0,
  0,
  ABISELECT(-20560,-12512),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-20704,-12600),
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  ABISELECT(-20704,-12600),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C15D1Ev,_ZTv0_n28_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C15D0Ev,_ZTv0_n28_N8S3465C15D0Ev),
  ABISELECT(-20752,-12624),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(-21664,-13180),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-21808,-13272),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-22016,-13400),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-22016,-13400),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C15D1Ev,_ZTv0_n32_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C15D0Ev,_ZTv0_n32_N8S3465C15D0Ev),
  ABISELECT(-22224,-13528),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern VTBL_ENTRY _ZTV8S3465C15[];
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN8S3465C13D1Ev();
extern void _ZN8S3465C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C13__8S3465C15[] = {
  ABISELECT(4592,2824),
  ABISELECT(5504,3380),
  ABISELECT(7008,4292),
  ABISELECT(6800,4164),
  ABISELECT(5552,3404),
  ABISELECT(5696,3492),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D0Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A2__8S3465C15[] = {
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C78S3465C13__A2__8S3465C15[] = {
  ABISELECT(48,24),
  ABISELECT(-5360,-3292),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A2__8S3465C15[] = {
  0,
  0,
  ABISELECT(-5408,-3316),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn5696_N8S3465C13D1Ev,_ZThn3492_N8S3465C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev)();
extern void ABISELECT(_ZThn5696_N8S3465C13D0Ev,_ZThn3492_N8S3465C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C13__8S3465C15[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-5696,-3492),
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  ABISELECT(-5696,-3492),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C13__8S3465C15[] = {
  0,
  0,
  ABISELECT(-5552,-3404),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C13__8S3465C15[] = {
  ABISELECT(-5744,-3516),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C13__8S3465C15[] = {
  0,
  0,
  0,
  ABISELECT(-6800,-4164),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C13__8S3465C15[] = {
  ABISELECT(-6656,-4072),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn7008_N8S3465C13D1Ev,_ZThn4292_N8S3465C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev)();
extern void ABISELECT(_ZThn7008_N8S3465C13D0Ev,_ZThn4292_N8S3465C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C13__8S3465C15[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-7008,-4292),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-7008,-4292),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C13__8S3465C15[] = {
  ABISELECT(-7216,-4420),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C13__8S3465C15[] = {
  ABISELECT(48,24),
  ABISELECT(-5504,-3380),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C13__8S3465C15[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4592,-2824),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A__8S3465C13__8S3465C15[] = {
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN8S3465C18D1Ev();
extern void _ZN8S3465C18D0Ev();
extern void _ZN8S3465C183v19Ev();
extern void _ZN8S3465C183v20Ev();
extern void _ZN8S3465C183v21Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C18__8S3465C15[] = {
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN8S3465C18D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C18D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v19Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v20Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v21Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C18__8S3465C15[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C78S3465C18__8S3465C15[] = {
  ABISELECT(48,24),
  ABISELECT(-2112,-1300),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C78S3465C18__8S3465C15[] = {
  0,
  0,
  ABISELECT(-2160,-1324),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C18__A1__8S3465C15[] = {
  ABISELECT(1792,1092),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C18__A1__8S3465C15[] = {
  0,
  0,
  ABISELECT(-1792,-1092),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__8S3465C18__8S3465C15[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn352_N8S3465C18D1Ev,_ZThn216_N8S3465C18D1Ev)();
extern void ABISELECT(_ZThn352_N8S3465C18D0Ev,_ZThn216_N8S3465C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C18__8S3465C15[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3465C18D1Ev,_ZThn216_N8S3465C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3465C18D0Ev,_ZThn216_N8S3465C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C18__8S3465C15[] = {
  ABISELECT(48,24),
  ABISELECT(-2464,-1516),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A2__8S3465C18__8S3465C15[] = {
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A__8S3465C18__8S3465C15[] = {
  ABISELECT(1792,1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C15[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__8S3465C15[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN8S3465C12D1Ev();
extern void _ZN8S3465C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C15[] = {
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN8S3465C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C12__A2__8S3465C15[] = {
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C12__A2__8S3465C15[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C12__8S3465C15[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C12__8S3465C15[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev)();
extern void ABISELECT(_ZThn1312_N8S3465C12D1Ev,_ZThn800_N8S3465C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev)();
extern void ABISELECT(_ZThn1312_N8S3465C12D0Ev,_ZThn800_N8S3465C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C12__8S3465C15[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1312,-800),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-1312,-800),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C15[] = {
  ABISELECT(-1520,-928),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C12__8S3465C15[] = {
  ABISELECT(48,24),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A1__8S3465C15[] = {
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__A1__8S3465C15[] = {
  ABISELECT(48,24),
  ABISELECT(1504,912),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__A1__8S3465C15[] = {
  0,
  0,
  ABISELECT(1456,888),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTT_ENTRY vtt_S3465C15[] = {
  {&(_ZTV8S3465C15[9]),  9,163},
  {&(_tg__ZTV8S3465C13__8S3465C15[8]),  8,12},
  {&(_tg__ZTV7S3465C78S3465C13__A2__8S3465C15[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C78S3465C13__A2__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A2__8S3465C15[4]),  4,6},
  {&(_tg__ZTV8S3465C12__8S3465C13__8S3465C15[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C13__8S3465C15[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C13__8S3465C15[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C13__8S3465C15[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C13__8S3465C15[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C13__8S3465C15[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C13__8S3465C15[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C13__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C13__8S3465C15[7]),  7,12},
  {&(_tg__ZTV7S3465C7__A__8S3465C13__8S3465C15[4]),  4,9},
  {&(_ZTV8S3465C15[60]),  60,163},
  {&(_ZTV8S3465C15[95]),  95,163},
  {&(_ZTV8S3465C15[70]),  70,163},
  {&(_ZTV8S3465C15[76]),  76,163},
  {&(_ZTV8S3465C15[83]),  83,163},
  {&(_ZTV8S3465C15[103]),  103,163},
  {&(_ZTV8S3465C15[107]),  107,163},
  {&(_ZTV8S3465C15[88]),  88,163},
  {&(_ZTV8S3465C15[29]),  29,163},
  {&(_ZTV8S3465C15[123]),  123,163},
  {&(_ZTV8S3465C15[127]),  127,163},
  {&(_ZTV8S3465C15[141]),  141,163},
  {&(_ZTV8S3465C15[134]),  134,163},
  {&(_ZTV8S3465C15[154]),  154,163},
  {&(_ZTV8S3465C15[161]),  161,163},
  {&(_ZTV8S3465C15[37]),  37,163},
  {&(_tg__ZTV8S3465C18__8S3465C15[5]),  5,13},
  {&(_tg__ZTV7S3465C78S3465C18__8S3465C15[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C78S3465C18__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C78S3465C18__8S3465C15[4]),  4,6},
  {&(_tg__ZTV7S3465C88S3465C18__A1__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C18__A1__8S3465C15[4]),  4,6},
  {&(_tg__ZTV7S3465C4__8S3465C18__8S3465C15[7]),  7,12},
  {&(_tg__ZTV7S3465C7__8S3465C18__8S3465C15[4]),  4,9},
  {&(_tg__ZTV7S3465C8__8S3465C18__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A2__8S3465C18__8S3465C15[4]),  4,6},
  {&(_tg__ZTV7S3465C8__A__8S3465C18__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C8__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__8S3465C15[4]),  4,6},
  {&(_tg__ZTV8S3465C12__8S3465C15[6]),  6,8},
  {&(_tg__ZTV7S3465C88S3465C12__A2__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C12__A2__8S3465C15[4]),  4,6},
  {&(_tg__ZTV7S3465C6__8S3465C12__8S3465C15[4]),  4,6},
  {&(_tg__ZTV7S3465C5__A1__8S3465C12__8S3465C15[5]),  5,8},
  {&(_tg__ZTV7S3465C7__8S3465C12__8S3465C15[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C12__8S3465C15[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C12__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C7__A1__8S3465C15[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__A1__8S3465C15[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__A1__8S3465C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S3465C15[];
extern  VTBL_ENTRY _ZTV8S3465C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C15[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S3465C12D0Ev,_ZThn800_N8S3465C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S3465C12D1Ev,_ZThn800_N8S3465C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7008_N8S3465C13D0Ev,_ZThn4292_N8S3465C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7008_N8S3465C13D1Ev,_ZThn4292_N8S3465C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5696_N8S3465C13D0Ev,_ZThn3492_N8S3465C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5696_N8S3465C13D1Ev,_ZThn3492_N8S3465C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C15D0Ev,_ZTv0_n32_N8S3465C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22016_N8S3465C15D0Ev,_ZThn13400_N8S3465C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C15D1Ev,_ZTv0_n32_N8S3465C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22016_N8S3465C15D1Ev,_ZThn13400_N8S3465C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C15D0Ev,_ZTv0_n28_N8S3465C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20704_N8S3465C15D0Ev,_ZThn12600_N8S3465C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C15D1Ev,_ZTv0_n28_N8S3465C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20704_N8S3465C15D1Ev,_ZThn12600_N8S3465C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3465C15D0Ev,_ZTv0_n36_N8S3465C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S3465C15D0Ev,_ZThn10972_N8S3465C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3465C15D1Ev,_ZTv0_n36_N8S3465C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S3465C15D1Ev,_ZThn10972_N8S3465C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3465C15 = {  "S3465C15", // class name
  bases_S3465C15, 27,
  &(vtc_S3465C15[0]), // expected_vtbl_contents
  &(vtt_S3465C15[0]), // expected_vtt_contents
  ABISELECT(22384,13632), // object size
  NSPAIRA(_ZTI8S3465C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3465C15),163, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3465C15),55, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3465C1  : S3465C2 , S3465C5 , virtual S3465C15 , S3465C7 {
  void *s3465c1f0;
  int s3465c1f1;
  ::S3465C5 s3465c1f2[4];
  int s3465c1f3;
  ::S3465C7 s3465c1f4;
  int s3465c1f5:16;
  ::S3465C6 s3465c1f6;
  int s3465c1f7[2];
  virtual  ~S3465C1(); // _ZN7S3465C1D2Ev
  virtual void  v1(); // _ZN7S3465C12v1Ev
  S3465C1(); // tgen
};
//SIG(1 S3465C1) C1{ BC2{ BC3{ VBC4{ BC5{ v2 v3 v4 Fi[2] FL Fc:0 FC6{ v7 v8 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v5 v6 FC6 Fi FC6 FC5 FC6 FD Fp Fi FD Fc:0} vd Fi[3] Fp Fi[2] Fp Fi Fp Fi} VBC7{ BC5 BC6 VBC8{ VBC6 Fi Fi:7 FC9{} Fp Fi Fp} vd Fs:16 FL Fs} BC8 BC10{ VBC6 VBC7 VBC11{ VBC12{ BC8 BC4 VBC5 BC6 VBC7 vd Fs} VBC4 BC5 vd v9 v10 v11 Fl[2] FC7 Fi FD FC5 FC6 Fc FD FC9 FL:64 FC6} VBC13{ VBC12 BC6 VBC4 BC7 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC9 Fi[5] FC14{ vd m Fp FC9 Fp Fi FC4 FC5[5]}} vd v12 FL FC8 Fp[2] Fi FC6 Fi[8]} v13 Fi Fp Fi[2] Fi:0 Fc:3 Fp[3] Fi Fp FD Fi[10] Fp} BC5 VBC15{ BC16{ v14 v15 v16 v17 v18 FC14[6] Fi FC17{ BC4 FD} Fi Fp[2] Fc Fp} VBC18{ BC5 VBC4 BC6 BC7 BC8 vd v19 v20 v21 FC6 Fc Fi Fs FC7 FD[2] Fi[2] FD} BC14 BC13 vd v22 Fi:2 Fp[5] Fi[2] FC6 Fi[7] FC6 Fc[7] Fs:1} BC7 vd v1 Fp Fi FC5[4] Fi FC7 Fi:16 FC6 Fi[2]}


 S3465C1 ::~S3465C1(){ note_dtor("S3465C1", this);}
void  S3465C1 ::v1(){vfunc_called(this, "_ZN7S3465C12v1Ev");}
S3465C1 ::S3465C1(){ note_ctor("S3465C1", this);} // tgen

static void Test_S3465C1()
{
  extern Class_Descriptor cd_S3465C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1828,4458)];
    init_test(&cd_S3465C1, buf);
    S3465C1 *dp, &lv = *(dp=new (buf) S3465C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(29232,17828), "sizeof(S3465C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3465C1)");
    /*is_ambiguous_... S3465C1::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C4*), ABISELECT(2848,1748), "S3465C1");
    check_base_class_offset(lv, (S3465C4*)(S3465C3*)(S3465C2*), ABISELECT(2848,1748), "S3465C1");
    /*is_ambiguous_... S3465C11::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C11*), ABISELECT(2848,1748), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C13 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C13*), ABISELECT(2848,1748), "S3465C1");
    check_base_class_offset(lv, (S3465C4*)(S3465C18*), ABISELECT(2848,1748), "S3465C1");
    /*is_ambiguous_... S3465C13::S3465C4 */ AMB_check_base_class_offset(lv, (S3465C4*)(S3465C13*)(S3465C15*), ABISELECT(2848,1748), "S3465C1");
    check_base_class_offset(lv, (S3465C3*)(S3465C2*), 0, "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(3760,2304), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(3968,2432), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*), ABISELECT(4176,2560), "S3465C1");
    /*is_ambiguous_... S3465C2::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C2*), ABISELECT(4176,2560), "S3465C1");
    /*is_ambiguous_... S3465C10::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C10*)(S3465C2*), ABISELECT(4176,2560), "S3465C1");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C12*), ABISELECT(4176,2560), "S3465C1");
    /*is_ambiguous_... S3465C18::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C8*)(S3465C18*), ABISELECT(4176,2560), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(4128,2536), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C13 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*)(S3465C13*), ABISELECT(4128,2536), "S3465C1");
    check_base_class_offset(lv, (S3465C8*)(S3465C7*)(S3465C18*), ABISELECT(4128,2536), "S3465C1");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*)(S3465C13*)(S3465C15*), ABISELECT(4128,2536), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C7*), ABISELECT(4128,2536), "S3465C1");
    /*is_ambiguous_... S3465C2::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C2*), ABISELECT(3760,2304), "S3465C1");
    /*is_ambiguous_... S3465C10::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C10*)(S3465C2*), ABISELECT(3760,2304), "S3465C1");
    check_base_class_offset(lv, (S3465C7*)(S3465C12*), ABISELECT(3760,2304), "S3465C1");
    /*is_ambiguous_... S3465C2::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C2*), ABISELECT(72,44), "S3465C1");
    /*is_ambiguous_... S3465C12::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C12*), ABISELECT(5680,3476), "S3465C1");
    check_base_class_offset(lv, (S3465C5*)(S3465C4*)(S3465C12*), ABISELECT(5728,3500), "S3465C1");
    check_base_class_offset(lv, (S3465C4*)(S3465C12*), ABISELECT(5728,3500), "S3465C1");
    /*is_ambiguous_... S3465C12::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C12*), ABISELECT(6784,4148), "S3465C1");
    /*is_ambiguous_... S3465C12::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C12*), ABISELECT(6640,4056), "S3465C1");
    check_base_class_offset(lv, (S3465C12*)(S3465C11*), ABISELECT(5680,3476), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C13 */ AMB_check_base_class_offset(lv, (S3465C12*)(S3465C13*), ABISELECT(5680,3476), "S3465C1");
    check_base_class_offset(lv, (S3465C12*)(S3465C13*)(S3465C15*), ABISELECT(5680,3476), "S3465C1");
    /*is_ambiguous_... S3465C11::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C11*), ABISELECT(4320,2648), "S3465C1");
    check_base_class_offset(lv, (S3465C11*)(S3465C10*)(S3465C2*), ABISELECT(4320,2648), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C13 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C13*), ABISELECT(6992,4276), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C13 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*)(S3465C13*), ABISELECT(7136,4364), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C13 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*)(S3465C13*), ABISELECT(7344,4492), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C13 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C13*), ABISELECT(7136,4364), "S3465C1");
    check_base_class_offset(lv, (S3465C13*)(S3465C10*)(S3465C2*), ABISELECT(6992,4276), "S3465C1");
    check_base_class_offset(lv, (S3465C10*)(S3465C2*), ABISELECT(112,68), "S3465C1");
    check_base_class_offset(lv, (S3465C2*), 0, "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*), ABISELECT(672,420), "S3465C1");
    check_base_class_offset(lv, (S3465C16*)(S3465C15*), ABISELECT(9632,5896), "S3465C1");
    /*is_ambiguous_... S3465C18::S3465C5 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C18*), ABISELECT(27680,16868), "S3465C1");
    /*is_ambiguous_... S3465C18::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C18*), ABISELECT(27888,16996), "S3465C1");
    check_base_class_offset(lv, (S3465C5*)(S3465C7*)(S3465C18*), ABISELECT(28032,17084), "S3465C1");
    /*is_ambiguous_... S3465C7::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*)(S3465C18*), ABISELECT(28240,17212), "S3465C1");
    check_base_class_offset(lv, (S3465C7*)(S3465C18*), ABISELECT(28032,17084), "S3465C1");
    /*is_ambiguous_... S3465C18::S3465C8 */ AMB_check_base_class_offset(lv, (S3465C8*)(S3465C18*), ABISELECT(28400,17316), "S3465C1");
    check_base_class_offset(lv, (S3465C18*)(S3465C15*), ABISELECT(27680,16868), "S3465C1");
    check_base_class_offset(lv, (S3465C14*)(S3465C15*), ABISELECT(22640,13788), "S3465C1");
    /*is_ambiguous_... S3465C13::S3465C6 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C13*)(S3465C15*), ABISELECT(24640,15004), "S3465C1");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*)(S3465C13*)(S3465C15*), ABISELECT(24784,15092), "S3465C1");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*)(S3465C13*)(S3465C15*), ABISELECT(24992,15220), "S3465C1");
    /*is_ambiguous_... S3465C13::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*)(S3465C13*)(S3465C15*), ABISELECT(24784,15092), "S3465C1");
    check_base_class_offset(lv, (S3465C13*)(S3465C15*), ABISELECT(24640,15004), "S3465C1");
    check_base_class_offset(lv, (S3465C15*), ABISELECT(9632,5896), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C5*)(S3465C7*), ABISELECT(880,548), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C6*)(S3465C7*), ABISELECT(1088,676), "S3465C1");
    /*is_ambiguous_... S3465C1::S3465C7 */ AMB_check_base_class_offset(lv, (S3465C7*), ABISELECT(880,548), "S3465C1");
    check_field_offset(lv, s3465c1f0, ABISELECT(1248,780), "S3465C1.s3465c1f0");
    check_field_offset(lv, s3465c1f1, ABISELECT(1256,784), "S3465C1.s3465c1f1");
    check_field_offset(lv, s3465c1f2, ABISELECT(1264,788), "S3465C1.s3465c1f2");
    check_field_offset(lv, s3465c1f3, ABISELECT(2096,1300), "S3465C1.s3465c1f3");
    check_field_offset(lv, s3465c1f4, ABISELECT(2112,1304), "S3465C1.s3465c1f4");
    set_bf_and_test(lv, s3465c1f5, ABISELECT(2672,1648), 0, 16, 1, "S3465C1");
    set_bf_and_test(lv, s3465c1f5, ABISELECT(2672,1648), 0, 16, hide_sll(1LL<<15), "S3465C1");
    check_field_offset(lv, s3465c1f6, ABISELECT(2688,1652), "S3465C1.s3465c1f6");
    check_field_offset(lv, s3465c1f7, ABISELECT(2832,1740), "S3465C1.s3465c1f7");
    test_class_info(&lv, &cd_S3465C1);
    dp->~S3465C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3465C1(Test_S3465C1, "S3465C1", ABISELECT(29232,17828));

#else // __cplusplus

extern void _ZN7S3465C1C1Ev();
extern void _ZN7S3465C1D2Ev();
Name_Map name_map_S3465C1[] = {
  NSPAIR(_ZN7S3465C1C1Ev),
  NSPAIR(_ZN7S3465C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C3;
extern VTBL_ENTRY _ZTI7S3465C3[];
extern  VTBL_ENTRY _ZTV7S3465C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C3[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C4;
extern VTBL_ENTRY _ZTI7S3465C4[];
extern  VTBL_ENTRY _ZTV7S3465C4[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C12;
extern VTBL_ENTRY _ZTI8S3465C12[];
extern  VTBL_ENTRY _ZTV8S3465C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C12[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C11;
extern VTBL_ENTRY _ZTI8S3465C11[];
extern  VTBL_ENTRY _ZTV8S3465C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C11[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C13;
extern VTBL_ENTRY _ZTI8S3465C13[];
extern  VTBL_ENTRY _ZTV8S3465C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C13[];
extern Class_Descriptor cd_S3465C10;
extern VTBL_ENTRY _ZTI8S3465C10[];
extern  VTBL_ENTRY _ZTV8S3465C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C10[];
extern Class_Descriptor cd_S3465C2;
extern VTBL_ENTRY _ZTI7S3465C2[];
extern  VTBL_ENTRY _ZTV7S3465C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C2[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C16;
extern VTBL_ENTRY _ZTI8S3465C16[];
extern  VTBL_ENTRY _ZTV8S3465C16[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C8;
extern VTBL_ENTRY _ZTI7S3465C8[];
extern  VTBL_ENTRY _ZTV7S3465C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C8[];
extern Class_Descriptor cd_S3465C18;
extern VTBL_ENTRY _ZTI8S3465C18[];
extern  VTBL_ENTRY _ZTV8S3465C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C18[];
extern Class_Descriptor cd_S3465C14;
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
extern Class_Descriptor cd_S3465C13;
extern VTBL_ENTRY _ZTI8S3465C13[];
extern  VTBL_ENTRY _ZTV8S3465C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C13[];
extern Class_Descriptor cd_S3465C15;
extern VTBL_ENTRY _ZTI8S3465C15[];
extern  VTBL_ENTRY _ZTV8S3465C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3465C15[];
extern Class_Descriptor cd_S3465C5;
extern VTBL_ENTRY _ZTI7S3465C5[];
extern  VTBL_ENTRY _ZTV7S3465C5[];
extern Class_Descriptor cd_S3465C6;
extern VTBL_ENTRY _ZTI7S3465C6[];
extern  VTBL_ENTRY _ZTV7S3465C6[];
extern Class_Descriptor cd_S3465C7;
extern VTBL_ENTRY _ZTI7S3465C7[];
extern  VTBL_ENTRY _ZTV7S3465C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C7[];
static Base_Class bases_S3465C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C5,    ABISELECT(2848,1748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(2848,1748), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3465C3,    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
    36, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(3760,2304), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(3968,2432), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(4176,2560), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3465C8,    ABISELECT(4128,2536), //bcp->offset
    81, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3465C7,    ABISELECT(3760,2304), //bcp->offset
    62, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3465C8,    ABISELECT(72,44), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3465C8,    ABISELECT(5680,3476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(5728,3500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3465C4,    ABISELECT(5728,3500), //bcp->offset
    129, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(6784,4148), //bcp->offset
    140, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(6640,4056), //bcp->offset
    136, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3465C12,    ABISELECT(5680,3476), //bcp->offset
    113, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3465C5,    ABISELECT(4320,2648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3465C11,    ABISELECT(4320,2648), //bcp->offset
    90, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3465C6,    ABISELECT(6992,4276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(7136,4364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(7344,4492), //bcp->offset
    175, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(7136,4364), //bcp->offset
    166, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3465C13,    ABISELECT(6992,4276), //bcp->offset
    148, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3465C10,    ABISELECT(112,68), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3465C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C5,    ABISELECT(672,420), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3465C16,    ABISELECT(9632,5896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(27680,16868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(27888,16996), //bcp->offset
    259, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(28032,17084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(28240,17212), //bcp->offset
    272, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(28032,17084), //bcp->offset
    263, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    134, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3465C8,    ABISELECT(28400,17316), //bcp->offset
    276, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3465C18,    ABISELECT(27680,16868), //bcp->offset
    237, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    133, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S3465C14,    ABISELECT(22640,13788), //bcp->offset
    208, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(24640,15004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3465C5,    ABISELECT(24784,15092), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(24992,15220), //bcp->offset
    233, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(24784,15092), //bcp->offset
    224, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3465C13,    ABISELECT(24640,15004), //bcp->offset
    212, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3465C15,    ABISELECT(9632,5896), //bcp->offset
    179, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C5,    ABISELECT(880,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3465C6,    ABISELECT(1088,676), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S3465C7,    ABISELECT(880,548), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3465C1[];
extern void _ZN7S3465C1D1Ev();
extern void _ZN7S3465C1D0Ev();
extern void _ZN7S3465C23v13Ev();
extern void _ZN7S3465C12v1Ev();
extern void ABISELECT(_ZThn112_N7S3465C1D1Ev,_ZThn68_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S3465C1D0Ev,_ZThn68_N7S3465C1D0Ev)();
extern void _ZN8S3465C103v12Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn880_N7S3465C1D1Ev,_ZThn548_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn880_N7S3465C1D0Ev,_ZThn548_N7S3465C1D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S3465C1D1Ev,_ZTv0_n32_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn3760_N7S3465C1D1Ev,_ZThn2304_N7S3465C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3465C1D0Ev,_ZTv0_n32_N7S3465C1D0Ev)();
extern void ABISELECT(_ZThn3760_N7S3465C1D0Ev,_ZThn2304_N7S3465C1D0Ev)() __attribute__((weak));
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n96_N7S3465C1D1Ev,_ZTv0_n48_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn4320_N7S3465C1D1Ev,_ZThn2648_N7S3465C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S3465C1D0Ev,_ZTv0_n48_N7S3465C1D0Ev)();
extern void ABISELECT(_ZThn4320_N7S3465C1D0Ev,_ZThn2648_N7S3465C1D0Ev)() __attribute__((weak));
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
extern void ABISELECT(_ZTv0_n56_N7S3465C1D1Ev,_ZTv0_n28_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn5680_N7S3465C1D1Ev,_ZThn3476_N7S3465C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3465C1D0Ev,_ZTv0_n28_N7S3465C1D0Ev)();
extern void ABISELECT(_ZThn5680_N7S3465C1D0Ev,_ZThn3476_N7S3465C1D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n88_N7S3465C1D1Ev,_ZTv0_n44_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn6992_N7S3465C1D1Ev,_ZThn4276_N7S3465C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3465C1D0Ev,_ZTv0_n44_N7S3465C1D0Ev)();
extern void ABISELECT(_ZThn6992_N7S3465C1D0Ev,_ZThn4276_N7S3465C1D0Ev)() __attribute__((weak));
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn144_n88_N7S3465C1D1Ev,_ZTvn88_n44_N7S3465C1D1Ev)();
extern void ABISELECT(_ZTvn144_n88_N7S3465C1D0Ev,_ZTvn88_n44_N7S3465C1D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN8S3465C163v14Ev();
extern void _ZN8S3465C163v15Ev();
extern void _ZN8S3465C163v16Ev();
extern void _ZN8S3465C163v17Ev();
extern void _ZN8S3465C163v18Ev();
extern void ABISELECT(_ZTv0_n120_N7S3465C1D1Ev,_ZTv0_n60_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn9632_N7S3465C1D1Ev,_ZThn5896_N7S3465C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N7S3465C1D0Ev,_ZTv0_n60_N7S3465C1D0Ev)();
extern void ABISELECT(_ZThn9632_N7S3465C1D0Ev,_ZThn5896_N7S3465C1D0Ev)() __attribute__((weak));
extern void _ZN8S3465C153v22Ev();
extern void ABISELECT(_ZTvn13008_n120_N7S3465C1D1Ev,_ZTvn7892_n60_N7S3465C1D1Ev)();
extern void ABISELECT(_ZTvn13008_n120_N7S3465C1D0Ev,_ZTvn7892_n60_N7S3465C1D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTvn15008_n120_N7S3465C1D1Ev,_ZTvn9108_n60_N7S3465C1D1Ev)();
extern void ABISELECT(_ZTvn15008_n120_N7S3465C1D0Ev,_ZTvn9108_n60_N7S3465C1D0Ev)();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn15152_n120_N7S3465C1D1Ev,_ZTvn9196_n60_N7S3465C1D1Ev)();
extern void ABISELECT(_ZTvn15152_n120_N7S3465C1D0Ev,_ZTvn9196_n60_N7S3465C1D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N7S3465C1D1Ev,_ZTv0_n36_N7S3465C1D1Ev)();
extern void ABISELECT(_ZThn27680_N7S3465C1D1Ev,_ZThn16868_N7S3465C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3465C1D0Ev,_ZTv0_n36_N7S3465C1D0Ev)();
extern void ABISELECT(_ZThn27680_N7S3465C1D0Ev,_ZThn16868_N7S3465C1D0Ev)() __attribute__((weak));
extern void _ZN8S3465C183v19Ev();
extern void _ZN8S3465C183v20Ev();
extern void _ZN8S3465C183v21Ev();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn352_n72_N7S3465C1D1Ev,_ZTvn216_n36_N7S3465C1D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N7S3465C1D0Ev,_ZTvn216_n36_N7S3465C1D0Ev)();
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY vtc_S3465C1[] = {
  ABISELECT(27680,16868),
  ABISELECT(9632,5896),
  ABISELECT(6992,4276),
  ABISELECT(6784,4148),
  ABISELECT(5680,3476),
  ABISELECT(4320,2648),
  ABISELECT(4176,2560),
  ABISELECT(4128,2536),
  ABISELECT(3760,2304),
  ABISELECT(2848,1748),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3465C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3465C12v1Ev,
  ABISELECT(4104,2516),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  ABISELECT(6880,4208),
  ABISELECT(2736,1680),
  ABISELECT(6672,4080),
  ABISELECT(5568,3408),
  ABISELECT(4208,2580),
  ABISELECT(4016,2468),
  ABISELECT(3648,2236),
  ABISELECT(4064,2492),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S3465C1D1Ev,_ZThn68_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S3465C1D0Ev,_ZThn68_N7S3465C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C103v12Ev,
  ABISELECT(-672,-420),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  ABISELECT(3296,2012),
  ABISELECT(3248,1988),
  ABISELECT(-880,-548),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn880_N7S3465C1D1Ev,_ZThn548_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn880_N7S3465C1D0Ev,_ZThn548_N7S3465C1D0Ev),
  ABISELECT(-1088,-676),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2848,-1748),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-3760,-2304),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(-3760,-2304),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3465C1D1Ev,_ZTv0_n32_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3465C1D0Ev,_ZTv0_n32_N7S3465C1D0Ev),
  ABISELECT(-3968,-2432),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(48,24),
  ABISELECT(-4128,-2536),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  0,
  0,
  ABISELECT(-4176,-2560),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-4320,-2648),
  0,
  0,
  0,
  ABISELECT(-1472,-900),
  ABISELECT(-192,-112),
  ABISELECT(-560,-344),
  ABISELECT(2464,1500),
  ABISELECT(-144,-88),
  ABISELECT(1360,828),
  ABISELECT(-4320,-2648),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S3465C1D1Ev,_ZTv0_n48_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S3465C1D0Ev,_ZTv0_n48_N7S3465C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-5680,-3476),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(-5680,-3476),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3465C1D1Ev,_ZTv0_n28_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3465C1D0Ev,_ZTv0_n28_N7S3465C1D0Ev),
  ABISELECT(-5728,-3500),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
  ABISELECT(-6640,-4056),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-6784,-4148),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(-6992,-4276),
  0,
  0,
  ABISELECT(-4144,-2528),
  ABISELECT(-2864,-1740),
  ABISELECT(-3232,-1972),
  ABISELECT(-208,-128),
  ABISELECT(-2816,-1716),
  ABISELECT(-1312,-800),
  ABISELECT(-6992,-4276),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3465C1D1Ev,_ZTv0_n44_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3465C1D0Ev,_ZTv0_n44_N7S3465C1D0Ev),
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  ABISELECT(-7136,-4364),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N7S3465C1D1Ev,_ZTvn88_n44_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N7S3465C1D0Ev,_ZTvn88_n44_N7S3465C1D0Ev),
  ABISELECT(-7344,-4492),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(15152,9196),
  ABISELECT(15152,9196),
  ABISELECT(15152,9196),
  ABISELECT(15008,9108),
  ABISELECT(15008,9108),
  0,
  ABISELECT(-9632,-5896),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-5872,-3592),
  ABISELECT(-2848,-1748),
  ABISELECT(-3952,-2420),
  ABISELECT(-5456,-3336),
  ABISELECT(-5504,-3360),
  ABISELECT(-6784,-4148),
  ABISELECT(18048,10972),
  ABISELECT(-9632,-5896),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN8S3465C163v14Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v15Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v16Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v17Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v18Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3465C1D1Ev,_ZTv0_n60_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N7S3465C1D0Ev,_ZTv0_n60_N7S3465C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C153v22Ev,
  ABISELECT(-22640,-13788),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn13008_n120_N7S3465C1D1Ev,_ZTvn7892_n60_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn13008_n120_N7S3465C1D0Ev,_ZTvn7892_n60_N7S3465C1D0Ev),
  ABISELECT(-21792,-13256),
  ABISELECT(-20512,-12468),
  ABISELECT(-20880,-12700),
  ABISELECT(-17856,-10856),
  ABISELECT(-20464,-12444),
  ABISELECT(-18960,-11528),
  ABISELECT(-24640,-15004),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn15008_n120_N7S3465C1D1Ev,_ZTvn9108_n60_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn15008_n120_N7S3465C1D0Ev,_ZTvn9108_n60_N7S3465C1D0Ev),
  ABISELECT(-20608,-12532),
  ABISELECT(-20656,-12556),
  ABISELECT(-24784,-15092),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn15152_n120_N7S3465C1D1Ev,_ZTvn9196_n60_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn15152_n120_N7S3465C1D0Ev,_ZTvn9196_n60_N7S3465C1D0Ev),
  ABISELECT(-24992,-15220),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-27680,-16868),
  0,
  0,
  0,
  ABISELECT(-23504,-14308),
  ABISELECT(-23552,-14332),
  ABISELECT(-24832,-15120),
  ABISELECT(-27680,-16868),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3465C1D1Ev,_ZTv0_n36_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3465C1D0Ev,_ZTv0_n36_N7S3465C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C183v19Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v20Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v21Ev,
  ABISELECT(-27888,-16996),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(-23856,-14524),
  ABISELECT(-23904,-14548),
  ABISELECT(-28032,-17084),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N7S3465C1D1Ev,_ZTvn216_n36_N7S3465C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N7S3465C1D0Ev,_ZTvn216_n36_N7S3465C1D0Ev),
  ABISELECT(-28240,-17212),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  ABISELECT(-24224,-14756),
  ABISELECT(-28400,-17316),
  (VTBL_ENTRY)&(_ZTI7S3465C1[0]),
};
extern VTBL_ENTRY _ZTV7S3465C1[];
extern void _ZN7S3465C2D1Ev();
extern void _ZN7S3465C2D0Ev();
extern void _ZN7S3465C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C2__7S3465C1[] = {
  ABISELECT(6992,4276),
  ABISELECT(6784,4148),
  ABISELECT(5680,3476),
  ABISELECT(4320,2648),
  ABISELECT(4176,2560),
  ABISELECT(4128,2536),
  ABISELECT(3760,2304),
  ABISELECT(2848,1748),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3465C23v13Ev,
};
extern void _ZN7S3465C3D1Ev();
extern void _ZN7S3465C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C37S3465C2__7S3465C1[] = {
  ABISELECT(2848,1748),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C3[0]),
  (VTBL_ENTRY)&_ZN7S3465C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C3D0Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__7S3465C37S3465C2__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2848,-1748),
  (VTBL_ENTRY)&(_ZTI7S3465C3[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C87S3465C2__A1__7S3465C1[] = {
  ABISELECT(4104,2516),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C87S3465C2__A1__7S3465C1[] = {
  0,
  0,
  ABISELECT(-4104,-2516),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN8S3465C10D1Ev();
extern void _ZN8S3465C10D0Ev();
extern void _ZN8S3465C103v12Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(6880,4208),
  ABISELECT(2736,1680),
  ABISELECT(6672,4080),
  ABISELECT(5568,3408),
  ABISELECT(4208,2580),
  ABISELECT(4016,2468),
  ABISELECT(3648,2236),
  ABISELECT(4064,2492),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN8S3465C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C103v12Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C107S3465C2__7S3465C1[] = {
  0,
  0,
  ABISELECT(-4064,-2492),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn3648_N8S3465C10D1Ev,_ZThn2236_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn3648_N8S3465C10D0Ev,_ZThn2236_N8S3465C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-3648,-2236),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(-3648,-2236),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A1__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(-3856,-2364),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(-4016,-2468),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn4208_N8S3465C10D1Ev,_ZThn2580_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn4208_N8S3465C10D0Ev,_ZThn2580_N8S3465C10D0Ev)() __attribute__((weak));
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C11__8S3465C107S3465C2__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(-4208,-2580),
  0,
  0,
  0,
  ABISELECT(-1472,-900),
  ABISELECT(-192,-112),
  ABISELECT(-560,-344),
  ABISELECT(2464,1500),
  ABISELECT(-144,-88),
  ABISELECT(1360,828),
  ABISELECT(-4208,-2580),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn5568_N8S3465C10D1Ev,_ZThn3408_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn5568_N8S3465C10D0Ev,_ZThn3408_N8S3465C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-5568,-3408),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(-5568,-3408),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(-5616,-3432),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A2__8S3465C107S3465C2__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(-6672,-4080),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A2__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(-6528,-3988),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C107S3465C2__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2736,-1680),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev)();
extern void ABISELECT(_ZThn6880_N8S3465C10D1Ev,_ZThn4208_N8S3465C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev)();
extern void ABISELECT(_ZThn6880_N8S3465C10D0Ev,_ZThn4208_N8S3465C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C13__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(-6880,-4208),
  0,
  0,
  ABISELECT(-4144,-2528),
  ABISELECT(-2864,-1740),
  ABISELECT(-3232,-1972),
  ABISELECT(-208,-128),
  ABISELECT(-2816,-1716),
  ABISELECT(-1312,-800),
  ABISELECT(-6880,-4208),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn144_n88_N8S3465C10D1Ev,_ZTvn88_n44_N8S3465C10D1Ev)();
extern void ABISELECT(_ZTvn144_n88_N8S3465C10D0Ev,_ZTvn88_n44_N8S3465C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A1__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  ABISELECT(-7024,-4296),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N8S3465C10D1Ev,_ZTvn88_n44_N8S3465C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N8S3465C10D0Ev,_ZTvn88_n44_N8S3465C10D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C78S3465C13__A4__8S3465C107S3465C2__7S3465C1[] = {
  ABISELECT(-7232,-4424),
  (VTBL_ENTRY)&(_ZTI8S3465C10[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__7S3465C2__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2848,-1748),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N7S3465C2D1Ev,_ZTv0_n32_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn3760_N7S3465C2D1Ev,_ZThn2304_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3465C2D0Ev,_ZTv0_n32_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn3760_N7S3465C2D0Ev,_ZThn2304_N7S3465C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3465C7__7S3465C2__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-3760,-2304),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(-3760,-2304),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3465C2D1Ev,_ZTv0_n32_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3465C2D0Ev,_ZTv0_n32_N7S3465C2D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__7S3465C2__7S3465C1[] = {
  ABISELECT(-3968,-2432),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C2__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(-4128,-2536),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C2__7S3465C1[] = {
  0,
  0,
  ABISELECT(-4176,-2560),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A__7S3465C2__7S3465C1[] = {
  ABISELECT(4104,2516),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
};
extern void ABISELECT(_ZThn112_N7S3465C2D1Ev,_ZThn68_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn112_N7S3465C2D0Ev,_ZThn68_N7S3465C2D0Ev)();
extern void _ZN8S3465C103v12Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C10__7S3465C2__7S3465C1[] = {
  ABISELECT(6880,4208),
  ABISELECT(2736,1680),
  ABISELECT(6672,4080),
  ABISELECT(5568,3408),
  ABISELECT(4208,2580),
  ABISELECT(4016,2468),
  ABISELECT(3648,2236),
  ABISELECT(4064,2492),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S3465C2D1Ev,_ZThn68_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S3465C2D0Ev,_ZThn68_N7S3465C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C103v12Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n96_N7S3465C2D1Ev,_ZTv0_n48_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn4320_N7S3465C2D1Ev,_ZThn2648_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S3465C2D0Ev,_ZTv0_n48_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn4320_N7S3465C2D0Ev,_ZThn2648_N7S3465C2D0Ev)() __attribute__((weak));
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C11__7S3465C2__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(-4320,-2648),
  0,
  0,
  0,
  ABISELECT(-1472,-900),
  ABISELECT(-192,-112),
  ABISELECT(-560,-344),
  ABISELECT(2464,1500),
  ABISELECT(-144,-88),
  ABISELECT(1360,828),
  ABISELECT(-4320,-2648),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S3465C2D1Ev,_ZTv0_n48_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S3465C2D0Ev,_ZTv0_n48_N7S3465C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
};
extern void ABISELECT(_ZTv0_n56_N7S3465C2D1Ev,_ZTv0_n28_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn5680_N7S3465C2D1Ev,_ZThn3476_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S3465C2D0Ev,_ZTv0_n28_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn5680_N7S3465C2D0Ev,_ZThn3476_N7S3465C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C12__7S3465C2__7S3465C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-5680,-3476),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(-5680,-3476),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3465C2D1Ev,_ZTv0_n28_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S3465C2D0Ev,_ZTv0_n28_N7S3465C2D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__A1__7S3465C2__7S3465C1[] = {
  ABISELECT(-5728,-3500),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A3__7S3465C2__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(-6784,-4148),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A2__7S3465C2__7S3465C1[] = {
  ABISELECT(-6640,-4056),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZTv0_n88_N7S3465C2D1Ev,_ZTv0_n44_N7S3465C2D1Ev)();
extern void ABISELECT(_ZThn6992_N7S3465C2D1Ev,_ZThn4276_N7S3465C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S3465C2D0Ev,_ZTv0_n44_N7S3465C2D0Ev)();
extern void ABISELECT(_ZThn6992_N7S3465C2D0Ev,_ZThn4276_N7S3465C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C13__7S3465C2__7S3465C1[] = {
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(144,88),
  ABISELECT(-6992,-4276),
  0,
  0,
  ABISELECT(-4144,-2528),
  ABISELECT(-2864,-1740),
  ABISELECT(-3232,-1972),
  ABISELECT(-208,-128),
  ABISELECT(-2816,-1716),
  ABISELECT(-1312,-800),
  ABISELECT(-6992,-4276),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3465C2D1Ev,_ZTv0_n44_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S3465C2D0Ev,_ZTv0_n44_N7S3465C2D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn144_n88_N7S3465C2D1Ev,_ZTvn88_n44_N7S3465C2D1Ev)();
extern void ABISELECT(_ZTvn144_n88_N7S3465C2D0Ev,_ZTvn88_n44_N7S3465C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A1__7S3465C2__7S3465C1[] = {
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  ABISELECT(-7136,-4364),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N7S3465C2D1Ev,_ZTvn88_n44_N7S3465C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn144_n88_N7S3465C2D0Ev,_ZTvn88_n44_N7S3465C2D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C78S3465C13__A4__7S3465C2__7S3465C1[] = {
  ABISELECT(-7344,-4492),
  (VTBL_ENTRY)&(_ZTI7S3465C2[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A__7S3465C1[] = {
  ABISELECT(3296,2012),
  ABISELECT(3248,1988),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__A__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(-3248,-1988),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__A__7S3465C1[] = {
  0,
  0,
  ABISELECT(-3296,-2012),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C7__7S3465C1[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C7__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C7__7S3465C1[] = {
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C8__7S3465C1[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN8S3465C11D1Ev();
extern void _ZN8S3465C11D0Ev();
extern void _ZN8S3465C112v9Ev();
extern void _ZN8S3465C113v10Ev();
extern void _ZN8S3465C113v11Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C11__7S3465C1[] = {
  ABISELECT(-1472,-900),
  ABISELECT(-192,-112),
  ABISELECT(-560,-344),
  ABISELECT(2464,1500),
  ABISELECT(-144,-88),
  ABISELECT(1360,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C112v9Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v10Ev,
  (VTBL_ENTRY)&_ZN8S3465C113v11Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev)();
extern void ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C11__7S3465C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1360,-828),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(-1360,-828),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C11__7S3465C1[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C11__7S3465C1[] = {
  ABISELECT(-1408,-852),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C11__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(-2464,-1500),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C11__7S3465C1[] = {
  ABISELECT(-2320,-1408),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C11__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(560,344),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(560,344),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D1Ev,_ZTv0_n32_N8S3465C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C11D0Ev,_ZTv0_n32_N8S3465C11D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C11__7S3465C1[] = {
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C11__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C11__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(1472,900),
  (VTBL_ENTRY)&(_ZTI8S3465C11[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN8S3465C12D1Ev();
extern void _ZN8S3465C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C12__7S3465C1[] = {
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN8S3465C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C12__A2__7S3465C1[] = {
  ABISELECT(-1504,-916),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C12__A2__7S3465C1[] = {
  0,
  0,
  ABISELECT(1504,916),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C12__7S3465C1[] = {
  0,
  0,
  ABISELECT(1504,916),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C12__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C12__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(1920,1172),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(1920,1172),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D1Ev,_ZTv0_n32_N8S3465C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C12D0Ev,_ZTv0_n32_N8S3465C12D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C12__7S3465C1[] = {
  ABISELECT(1712,1044),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C12__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(1552,940),
  (VTBL_ENTRY)&(_ZTI8S3465C12[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN8S3465C13D1Ev();
extern void _ZN8S3465C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C13__7S3465C1[] = {
  ABISELECT(-4144,-2528),
  ABISELECT(-2864,-1740),
  ABISELECT(-3232,-1972),
  ABISELECT(-208,-128),
  ABISELECT(-2816,-1716),
  ABISELECT(-1312,-800),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D0Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A1__7S3465C1[] = {
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C78S3465C13__A1__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(3008,1828),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A1__7S3465C1[] = {
  0,
  0,
  ABISELECT(2960,1804),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C13__7S3465C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(1312,800),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(1312,800),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C13__7S3465C1[] = {
  0,
  0,
  ABISELECT(2816,1716),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C13__7S3465C1[] = {
  ABISELECT(1264,776),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C13__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(208,128),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C13__7S3465C1[] = {
  ABISELECT(352,220),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C13__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(3232,1972),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(3232,1972),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C13__7S3465C1[] = {
  ABISELECT(3024,1844),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C13__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(2864,1740),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C13__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4144,2528),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A__8S3465C13__7S3465C1[] = {
  ABISELECT(-2960,-1804),
  ABISELECT(-3008,-1828),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev),
};
extern void _ZN8S3465C163v14Ev();
extern void _ZN8S3465C163v15Ev();
extern void _ZN8S3465C163v16Ev();
extern void _ZN8S3465C163v17Ev();
extern void _ZN8S3465C163v18Ev();
extern void _ZN8S3465C15D1Ev();
extern void _ZN8S3465C15D0Ev();
extern void _ZN8S3465C153v22Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C15__7S3465C1[] = {
  ABISELECT(-5872,-3592),
  ABISELECT(-2848,-1748),
  ABISELECT(-3952,-2420),
  ABISELECT(-5456,-3336),
  ABISELECT(-5504,-3360),
  ABISELECT(-6784,-4148),
  ABISELECT(18048,10972),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN8S3465C163v14Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v15Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v16Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v17Ev,
  (VTBL_ENTRY)&_ZN8S3465C163v18Ev,
  (VTBL_ENTRY)&_ZN8S3465C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C153v22Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void _ZN8S3465C13D1Ev();
extern void _ZN8S3465C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(-21792,-13256),
  ABISELECT(-20512,-12468),
  ABISELECT(-20880,-12700),
  ABISELECT(-17856,-10856),
  ABISELECT(-20464,-12444),
  ABISELECT(-18960,-11528),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C13D0Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C138S3465C15__A3__7S3465C1[] = {
  ABISELECT(-20608,-12532),
  ABISELECT(-20656,-12556),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C78S3465C138S3465C15__A3__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(20656,12556),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C78S3465C138S3465C15__A3__7S3465C1[] = {
  0,
  0,
  ABISELECT(20608,12532),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(18960,11528),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(18960,11528),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D1Ev,_ZTv0_n28_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C13D0Ev,_ZTv0_n28_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__8S3465C138S3465C15__A1__7S3465C1[] = {
  0,
  0,
  ABISELECT(20464,12444),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(18912,11504),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A1__8S3465C138S3465C15__A1__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(17856,10856),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A1__8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(18000,10948),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(20880,12700),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(20880,12700),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D1Ev,_ZTv0_n32_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C13D0Ev,_ZTv0_n32_N8S3465C13D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A2__8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(20672,12572),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A1__8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(20512,12468),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__A1__8S3465C138S3465C15__A1__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(21792,13256),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev)();
extern void ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A__8S3465C138S3465C15__A1__7S3465C1[] = {
  ABISELECT(-20608,-12532),
  ABISELECT(-20656,-12556),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI8S3465C13[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D1Ev,_ZThn88_N8S3465C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N8S3465C13D0Ev,_ZThn88_N8S3465C13D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S3465C15D1Ev,_ZTv0_n36_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn18048_N8S3465C15D1Ev,_ZThn10972_N8S3465C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3465C15D0Ev,_ZTv0_n36_N8S3465C15D0Ev)();
extern void ABISELECT(_ZThn18048_N8S3465C15D0Ev,_ZThn10972_N8S3465C15D0Ev)() __attribute__((weak));
extern void _ZN8S3465C183v19Ev();
extern void _ZN8S3465C183v20Ev();
extern void _ZN8S3465C183v21Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C18__8S3465C15__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-18048,-10972),
  0,
  0,
  0,
  ABISELECT(-23504,-14308),
  ABISELECT(-23552,-14332),
  ABISELECT(-24832,-15120),
  ABISELECT(-18048,-10972),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3465C15D1Ev,_ZTv0_n36_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3465C15D0Ev,_ZTv0_n36_N8S3465C15D0Ev),
  (VTBL_ENTRY)&_ZN8S3465C183v19Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v20Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v21Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__8S3465C15__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(6784,4148),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C18__8S3465C15__7S3465C1[] = {
  ABISELECT(-18256,-11100),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTvn352_n72_N8S3465C15D1Ev,_ZTvn216_n36_N8S3465C15D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N8S3465C15D0Ev,_ZTvn216_n36_N8S3465C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C18__8S3465C15__7S3465C1[] = {
  ABISELECT(-23856,-14524),
  ABISELECT(-23904,-14548),
  ABISELECT(-18400,-11188),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S3465C15D1Ev,_ZTvn216_n36_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S3465C15D0Ev,_ZTvn216_n36_N8S3465C15D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C78S3465C18__A1__8S3465C15__7S3465C1[] = {
  ABISELECT(-18608,-11316),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C15__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(5504,3360),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A2__8S3465C15__7S3465C1[] = {
  0,
  0,
  ABISELECT(5456,3336),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C18__A1__8S3465C15__7S3465C1[] = {
  ABISELECT(-24224,-14756),
  ABISELECT(-18768,-11420),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
extern void ABISELECT(_ZThn15008_N8S3465C15D1Ev,_ZThn9108_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn15008_N8S3465C15D0Ev,_ZThn9108_N8S3465C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3465C13__8S3465C15__7S3465C1[] = {
  ABISELECT(-21792,-13256),
  ABISELECT(-20512,-12468),
  ABISELECT(-20880,-12700),
  ABISELECT(-17856,-10856),
  ABISELECT(-20464,-12444),
  ABISELECT(-18960,-11528),
  ABISELECT(-15008,-9108),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N8S3465C15D1Ev,_ZThn9108_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N8S3465C15D0Ev,_ZThn9108_N8S3465C15D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S3465C15D1Ev,_ZTv0_n28_N8S3465C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S3465C15D0Ev,_ZTv0_n28_N8S3465C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3465C12__8S3465C15__7S3465C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(3952,2420),
  ABISELECT(-1552,-940),
  ABISELECT(-1920,-1172),
  ABISELECT(1104,672),
  ABISELECT(-1504,-916),
  ABISELECT(3952,2420),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C15D1Ev,_ZTv0_n28_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S3465C15D0Ev,_ZTv0_n28_N8S3465C15D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C48S3465C12__A1__8S3465C15__7S3465C1[] = {
  ABISELECT(3904,2396),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C5__A4__8S3465C15__7S3465C1[] = {
  0,
  0,
  0,
  ABISELECT(2848,1748),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C68S3465C12__A3__8S3465C15__7S3465C1[] = {
  ABISELECT(2992,1840),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S3465C15D1Ev,_ZTv0_n32_N8S3465C15D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S3465C15D0Ev,_ZTv0_n32_N8S3465C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__A1__8S3465C15__7S3465C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(5872,3592),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(5872,3592),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C15D1Ev,_ZTv0_n32_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3465C15D0Ev,_ZTv0_n32_N8S3465C15D0Ev),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C67S3465C7__A4__8S3465C15__7S3465C1[] = {
  ABISELECT(5664,3464),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn15152_N8S3465C15D1Ev,_ZThn9196_N8S3465C15D1Ev)();
extern void ABISELECT(_ZThn15152_N8S3465C15D0Ev,_ZThn9196_N8S3465C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C13__A2__8S3465C15__7S3465C1[] = {
  ABISELECT(-20608,-12532),
  ABISELECT(-20656,-12556),
  ABISELECT(-15152,-9196),
  (VTBL_ENTRY)&(_ZTI8S3465C15[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N8S3465C15D1Ev,_ZThn9196_N8S3465C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N8S3465C15D0Ev,_ZThn9196_N8S3465C15D0Ev),
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN8S3465C18D1Ev();
extern void _ZN8S3465C18D0Ev();
extern void _ZN8S3465C183v19Ev();
extern void _ZN8S3465C183v20Ev();
extern void _ZN8S3465C183v21Ev();
static  VTBL_ENTRY _tg__ZTV8S3465C18__7S3465C1[] = {
  ABISELECT(-23504,-14308),
  ABISELECT(-23552,-14332),
  ABISELECT(-24832,-15120),
  0,
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN8S3465C18D1Ev,
  (VTBL_ENTRY)&_ZN8S3465C18D0Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v19Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v20Ev,
  (VTBL_ENTRY)&_ZN8S3465C183v21Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C7D1Ev();
extern void _ZN7S3465C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C78S3465C18__A2__7S3465C1[] = {
  ABISELECT(-23856,-14524),
  ABISELECT(-23904,-14548),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3465C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__7S3465C78S3465C18__A2__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(23904,14548),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A1__7S3465C78S3465C18__A2__7S3465C1[] = {
  0,
  0,
  ABISELECT(23856,14524),
  (VTBL_ENTRY)&(_ZTI7S3465C7[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C88S3465C18__A3__7S3465C1[] = {
  ABISELECT(-24224,-14756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__7S3465C88S3465C18__A3__7S3465C1[] = {
  0,
  0,
  ABISELECT(24224,14756),
  (VTBL_ENTRY)&(_ZTI7S3465C8[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void _ZN7S3465C42v5Ev();
extern void _ZN7S3465C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C4__8S3465C18__7S3465C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24832,15120),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v5Ev,
  (VTBL_ENTRY)&_ZN7S3465C42v6Ev,
};
extern void _ZN7S3465C52v2Ev();
extern void _ZN7S3465C52v3Ev();
extern void _ZN7S3465C52v4Ev();
extern void ABISELECT(_ZThn352_N8S3465C18D1Ev,_ZThn216_N8S3465C18D1Ev)();
extern void ABISELECT(_ZThn352_N8S3465C18D0Ev,_ZThn216_N8S3465C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3465C7__8S3465C18__7S3465C1[] = {
  ABISELECT(-23856,-14524),
  ABISELECT(-23904,-14548),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C52v2Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v3Ev,
  (VTBL_ENTRY)&_ZN7S3465C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3465C18D1Ev,_ZThn216_N8S3465C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S3465C18D0Ev,_ZThn216_N8S3465C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__8S3465C18__7S3465C1[] = {
  ABISELECT(48,24),
  ABISELECT(23552,14332),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
};
extern void _ZN7S3465C62v7Ev();
extern void _ZN7S3465C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3465C6__A2__8S3465C18__7S3465C1[] = {
  0,
  0,
  ABISELECT(23504,14308),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
  (VTBL_ENTRY)&_ZN7S3465C62v7Ev,
  (VTBL_ENTRY)&_ZN7S3465C62v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3465C8__A__8S3465C18__7S3465C1[] = {
  ABISELECT(-24224,-14756),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S3465C18[0]),
};
static  VTT_ENTRY vtt_S3465C1[] = {
  {&(_ZTV7S3465C1[12]),  12,279},
  {&(_tg__ZTV7S3465C2__7S3465C1[10]),  10,13},
  {&(_tg__ZTV7S3465C37S3465C2__7S3465C1[3]),  3,5},
  {&(_tg__ZTV7S3465C4__7S3465C37S3465C2__7S3465C1[7]),  7,12},
  {&(_tg__ZTV7S3465C87S3465C2__A1__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C87S3465C2__A1__7S3465C1[4]),  4,6},
  {&(_tg__ZTV8S3465C107S3465C2__7S3465C1[10]),  10,13},
  {&(_tg__ZTV7S3465C6__8S3465C107S3465C2__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C7__8S3465C107S3465C2__7S3465C1[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A1__8S3465C107S3465C2__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C8__8S3465C107S3465C2__7S3465C1[3]),  3,3},
  {&(_tg__ZTV8S3465C11__8S3465C107S3465C2__7S3465C1[15]),  15,23},
  {&(_tg__ZTV8S3465C12__8S3465C107S3465C2__7S3465C1[14]),  14,16},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C107S3465C2__7S3465C1[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A2__8S3465C107S3465C2__7S3465C1[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A2__8S3465C107S3465C2__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C4__A1__8S3465C107S3465C2__7S3465C1[7]),  7,12},
  {&(_tg__ZTV8S3465C13__8S3465C107S3465C2__7S3465C1[14]),  14,18},
  {&(_tg__ZTV7S3465C78S3465C13__A1__8S3465C107S3465C2__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C67S3465C78S3465C13__A4__8S3465C107S3465C2__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C4__7S3465C2__7S3465C1[7]),  7,12},
  {&(_tg__ZTV7S3465C7__7S3465C2__7S3465C1[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__7S3465C2__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C8__7S3465C2__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C2__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C8__A__7S3465C2__7S3465C1[3]),  3,3},
  {&(_tg__ZTV8S3465C10__7S3465C2__7S3465C1[10]),  10,13},
  {&(_tg__ZTV8S3465C11__7S3465C2__7S3465C1[15]),  15,23},
  {&(_tg__ZTV8S3465C12__7S3465C2__7S3465C1[14]),  14,16},
  {&(_tg__ZTV7S3465C48S3465C12__A1__7S3465C2__7S3465C1[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A3__7S3465C2__7S3465C1[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A2__7S3465C2__7S3465C1[2]),  2,4},
  {&(_tg__ZTV8S3465C13__7S3465C2__7S3465C1[14]),  14,18},
  {&(_tg__ZTV7S3465C78S3465C13__A1__7S3465C2__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C67S3465C78S3465C13__A4__7S3465C2__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C7__A__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__A__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__A__7S3465C1[4]),  4,6},
  {&(_ZTV7S3465C1[57]),  57,279},
  {&(_ZTV7S3465C1[72]),  72,279},
  {&(_ZTV7S3465C1[79]),  79,279},
  {&(_ZTV7S3465C1[84]),  84,279},
  {&(_ZTV7S3465C1[88]),  88,279},
  {&(_ZTV7S3465C1[19]),  19,279},
  {&(_ZTV7S3465C1[29]),  29,279},
  {&(_ZTV7S3465C1[105]),  105,279},
  {&(_ZTV7S3465C1[127]),  127,279},
  {&(_ZTV7S3465C1[131]),  131,279},
  {&(_ZTV7S3465C1[145]),  145,279},
  {&(_ZTV7S3465C1[138]),  138,279},
  {&(_ZTV7S3465C1[162]),  162,279},
  {&(_ZTV7S3465C1[170]),  170,279},
  {&(_ZTV7S3465C1[177]),  177,279},
  {&(_ZTV7S3465C1[200]),  200,279},
  {&(_ZTV7S3465C1[251]),  251,279},
  {&(_ZTV7S3465C1[261]),  261,279},
  {&(_ZTV7S3465C1[267]),  267,279},
  {&(_ZTV7S3465C1[274]),  274,279},
  {&(_ZTV7S3465C1[279]),  279,279},
  {&(_ZTV7S3465C1[210]),  210,279},
  {&(_ZTV7S3465C1[220]),  220,279},
  {&(_ZTV7S3465C1[228]),  228,279},
  {&(_ZTV7S3465C1[235]),  235,279},
  {&(_ZTV7S3465C1[41]),  41,279},
  {&(_tg__ZTV7S3465C7__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C7__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C7__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C8__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C8__7S3465C1[4]),  4,6},
  {&(_tg__ZTV8S3465C11__7S3465C1[8]),  8,16},
  {&(_tg__ZTV8S3465C12__8S3465C11__7S3465C1[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C11__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C11__7S3465C1[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C11__7S3465C1[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C11__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C11__7S3465C1[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C11__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C11__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C11__7S3465C1[7]),  7,12},
  {&(_tg__ZTV8S3465C12__7S3465C1[6]),  6,8},
  {&(_tg__ZTV7S3465C88S3465C12__A2__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C12__A2__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C6__8S3465C12__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C5__A1__8S3465C12__7S3465C1[5]),  5,8},
  {&(_tg__ZTV7S3465C7__8S3465C12__7S3465C1[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C12__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C12__7S3465C1[3]),  3,3},
  {&(_tg__ZTV8S3465C13__7S3465C1[8]),  8,12},
  {&(_tg__ZTV7S3465C78S3465C13__A1__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C78S3465C13__A1__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C78S3465C13__A1__7S3465C1[4]),  4,6},
  {&(_tg__ZTV8S3465C12__8S3465C13__7S3465C1[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C13__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C13__7S3465C1[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C13__7S3465C1[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C13__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C13__7S3465C1[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C13__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C13__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C13__7S3465C1[7]),  7,12},
  {&(_tg__ZTV7S3465C7__A__8S3465C13__7S3465C1[4]),  4,9},
  {&(_tg__ZTV8S3465C15__7S3465C1[9]),  9,17},
  {&(_tg__ZTV8S3465C138S3465C15__A1__7S3465C1[8]),  8,12},
  {&(_tg__ZTV7S3465C78S3465C138S3465C15__A3__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C78S3465C138S3465C15__A3__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C78S3465C138S3465C15__A3__7S3465C1[4]),  4,6},
  {&(_tg__ZTV8S3465C12__8S3465C138S3465C15__A1__7S3465C1[14]),  14,16},
  {&(_tg__ZTV7S3465C6__8S3465C138S3465C15__A1__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C48S3465C12__8S3465C138S3465C15__A1__7S3465C1[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A1__8S3465C138S3465C15__A1__7S3465C1[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A1__8S3465C138S3465C15__A1__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C7__8S3465C138S3465C15__A1__7S3465C1[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A2__8S3465C138S3465C15__A1__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C8__A1__8S3465C138S3465C15__A1__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C4__A1__8S3465C138S3465C15__A1__7S3465C1[7]),  7,12},
  {&(_tg__ZTV7S3465C7__A__8S3465C138S3465C15__A1__7S3465C1[4]),  4,9},
  {&(_tg__ZTV8S3465C18__8S3465C15__7S3465C1[14]),  14,22},
  {&(_tg__ZTV7S3465C4__8S3465C15__7S3465C1[7]),  7,12},
  {&(_tg__ZTV7S3465C68S3465C18__8S3465C15__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C78S3465C18__8S3465C15__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C67S3465C78S3465C18__A1__8S3465C15__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C8__8S3465C15__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A2__8S3465C15__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C88S3465C18__A1__8S3465C15__7S3465C1[3]),  3,3},
  {&(_tg__ZTV8S3465C13__8S3465C15__7S3465C1[8]),  8,12},
  {&(_tg__ZTV8S3465C12__8S3465C15__7S3465C1[14]),  14,16},
  {&(_tg__ZTV7S3465C48S3465C12__A1__8S3465C15__7S3465C1[2]),  2,7},
  {&(_tg__ZTV7S3465C5__A4__8S3465C15__7S3465C1[5]),  5,8},
  {&(_tg__ZTV7S3465C68S3465C12__A3__8S3465C15__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C7__A1__8S3465C15__7S3465C1[10]),  10,15},
  {&(_tg__ZTV7S3465C67S3465C7__A4__8S3465C15__7S3465C1[2]),  2,4},
  {&(_tg__ZTV7S3465C78S3465C13__A2__8S3465C15__7S3465C1[4]),  4,9},
  {&(_tg__ZTV8S3465C18__7S3465C1[5]),  5,13},
  {&(_tg__ZTV7S3465C78S3465C18__A2__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C8__7S3465C78S3465C18__A2__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A1__7S3465C78S3465C18__A2__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C88S3465C18__A3__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__7S3465C88S3465C18__A3__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C4__8S3465C18__7S3465C1[7]),  7,12},
  {&(_tg__ZTV7S3465C7__8S3465C18__7S3465C1[4]),  4,9},
  {&(_tg__ZTV7S3465C8__8S3465C18__7S3465C1[3]),  3,3},
  {&(_tg__ZTV7S3465C6__A2__8S3465C18__7S3465C1[4]),  4,6},
  {&(_tg__ZTV7S3465C8__A__8S3465C18__7S3465C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3465C1[];
extern  VTBL_ENTRY _ZTV7S3465C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3465C1[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3465C15D0Ev,_ZTv0_n36_N8S3465C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S3465C15D0Ev,_ZThn10972_N8S3465C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3465C15D1Ev,_ZTv0_n36_N8S3465C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N8S3465C15D1Ev,_ZThn10972_N8S3465C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D0Ev,_ZTv0_n28_N8S3465C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D0Ev,_ZThn828_N8S3465C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C11D1Ev,_ZTv0_n28_N8S3465C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S3465C11D1Ev,_ZThn828_N8S3465C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3465C2D0Ev,_ZTv0_n44_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6992_N7S3465C2D0Ev,_ZThn4276_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3465C2D1Ev,_ZTv0_n44_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6992_N7S3465C2D1Ev,_ZThn4276_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3465C2D0Ev,_ZTv0_n28_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5680_N7S3465C2D0Ev,_ZThn3476_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3465C2D1Ev,_ZTv0_n28_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5680_N7S3465C2D1Ev,_ZThn3476_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S3465C2D0Ev,_ZTv0_n48_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S3465C2D0Ev,_ZThn2648_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S3465C2D1Ev,_ZTv0_n48_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S3465C2D1Ev,_ZThn2648_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3465C2D0Ev,_ZTv0_n32_N7S3465C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S3465C2D0Ev,_ZThn2304_N7S3465C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3465C2D1Ev,_ZTv0_n32_N7S3465C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S3465C2D1Ev,_ZThn2304_N7S3465C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3465C10D0Ev,_ZTv0_n44_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6880_N8S3465C10D0Ev,_ZThn4208_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S3465C10D1Ev,_ZTv0_n44_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6880_N8S3465C10D1Ev,_ZThn4208_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C10D0Ev,_ZTv0_n28_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N8S3465C10D0Ev,_ZThn3408_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S3465C10D1Ev,_ZTv0_n28_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5568_N8S3465C10D1Ev,_ZThn3408_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S3465C10D0Ev,_ZTv0_n48_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4208_N8S3465C10D0Ev,_ZThn2580_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S3465C10D1Ev,_ZTv0_n48_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4208_N8S3465C10D1Ev,_ZThn2580_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C10D0Ev,_ZTv0_n32_N8S3465C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3465C10D0Ev,_ZThn2236_N8S3465C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3465C10D1Ev,_ZTv0_n32_N8S3465C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3648_N8S3465C10D1Ev,_ZThn2236_N8S3465C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3465C1D0Ev,_ZTv0_n36_N7S3465C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27680_N7S3465C1D0Ev,_ZThn16868_N7S3465C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3465C1D1Ev,_ZTv0_n36_N7S3465C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27680_N7S3465C1D1Ev,_ZThn16868_N7S3465C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3465C1D0Ev,_ZTv0_n60_N7S3465C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9632_N7S3465C1D0Ev,_ZThn5896_N7S3465C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N7S3465C1D1Ev,_ZTv0_n60_N7S3465C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9632_N7S3465C1D1Ev,_ZThn5896_N7S3465C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3465C1D0Ev,_ZTv0_n44_N7S3465C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6992_N7S3465C1D0Ev,_ZThn4276_N7S3465C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S3465C1D1Ev,_ZTv0_n44_N7S3465C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6992_N7S3465C1D1Ev,_ZThn4276_N7S3465C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3465C1D0Ev,_ZTv0_n28_N7S3465C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5680_N7S3465C1D0Ev,_ZThn3476_N7S3465C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S3465C1D1Ev,_ZTv0_n28_N7S3465C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5680_N7S3465C1D1Ev,_ZThn3476_N7S3465C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S3465C1D0Ev,_ZTv0_n48_N7S3465C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S3465C1D0Ev,_ZThn2648_N7S3465C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S3465C1D1Ev,_ZTv0_n48_N7S3465C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4320_N7S3465C1D1Ev,_ZThn2648_N7S3465C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3465C1D0Ev,_ZTv0_n32_N7S3465C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S3465C1D0Ev,_ZThn2304_N7S3465C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3465C1D1Ev,_ZTv0_n32_N7S3465C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3760_N7S3465C1D1Ev,_ZThn2304_N7S3465C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3465C1 = {  "S3465C1", // class name
  bases_S3465C1, 43,
  &(vtc_S3465C1[0]), // expected_vtbl_contents
  &(vtt_S3465C1[0]), // expected_vtt_contents
  ABISELECT(29232,17828), // object size
  NSPAIRA(_ZTI7S3465C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3465C1),279, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3465C1),143, //virtual table table var
  43, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C3  {
  void *s19968c3f0;
  char s19968c3f1;
  void *s19968c3f2;
  long double s19968c3f3;
  char s19968c3f4;
  long double s19968c3f5[3];
  void *s19968c3f6[4];
  char s19968c3f7;
  int s19968c3f8;
  long double s19968c3f9[3];
  void *s19968c3f10[4];
  void  mf19968c3(); // _ZN8S19968C39mf19968c3Ev
};
//SIG(-1 S19968C3) C1{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]}


void  S19968C3 ::mf19968c3(){}

static void Test_S19968C3()
{
  {
    init_simple_test("S19968C3");
    S19968C3 lv;
    check2(sizeof(lv), ABISELECT(240,140), "sizeof(S19968C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C3)");
    check_field_offset(lv, s19968c3f0, 0, "S19968C3.s19968c3f0");
    check_field_offset(lv, s19968c3f1, ABISELECT(8,4), "S19968C3.s19968c3f1");
    check_field_offset(lv, s19968c3f2, ABISELECT(16,8), "S19968C3.s19968c3f2");
    check_field_offset(lv, s19968c3f3, ABISELECT(32,12), "S19968C3.s19968c3f3");
    check_field_offset(lv, s19968c3f4, ABISELECT(48,24), "S19968C3.s19968c3f4");
    check_field_offset(lv, s19968c3f5, ABISELECT(64,28), "S19968C3.s19968c3f5");
    check_field_offset(lv, s19968c3f6, ABISELECT(112,64), "S19968C3.s19968c3f6");
    check_field_offset(lv, s19968c3f7, ABISELECT(144,80), "S19968C3.s19968c3f7");
    check_field_offset(lv, s19968c3f8, ABISELECT(148,84), "S19968C3.s19968c3f8");
    check_field_offset(lv, s19968c3f9, ABISELECT(160,88), "S19968C3.s19968c3f9");
    check_field_offset(lv, s19968c3f10, ABISELECT(208,124), "S19968C3.s19968c3f10");
  }
}
static Arrange_To_Call_Me vS19968C3(Test_S19968C3, "S19968C3", ABISELECT(240,140));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19968C3[];
VTBL_ENTRY *P__ZTI8S19968C3 = _ZTI8S19968C3; 
Class_Descriptor cd_S19968C3 = {  "S19968C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(240,140), // object size
  NSPAIRA(_ZTI8S19968C3),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

union  S19968C4  {
  void *s19968c4f0[8];
  int s19968c4f1;
  void *s19968c4f2[5];
  void *s19968c4f3;
  char  :0;
  long double s19968c4f5;
  __tsi64 s19968c4f6:3;
  void *s19968c4f7;
  __tsi64 s19968c4f8;
  short s19968c4f9[3];
  void *s19968c4f10;
  long double s19968c4f11[10];
  void  mf19968c4(); // _ZN8S19968C49mf19968c4Ev
};
//SIG(1 S19968C4) U1{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19968C2  {
  void *s19968c2f0;
  ::S19968C3 s19968c2f1;
  ::S19968C3 s19968c2f2;
  int s19968c2f3[3];
  void *s19968c2f4[6];
  short s19968c2f5;
  ::S19968C4 s19968c2f6;
  virtual  ~S19968C2(); // _ZN8S19968C2D1Ev
  virtual void  v1(); // _ZN8S19968C22v1Ev
  virtual void  v2(); // _ZN8S19968C22v2Ev
  S19968C2(); // tgen
};
//SIG(-1 S19968C2) C1{ vd v1 v2 Fp FC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC2 Fi[3] Fp[6] Fs FU3{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}}


 S19968C2 ::~S19968C2(){ note_dtor("S19968C2", this);}
void  S19968C2 ::v1(){vfunc_called(this, "_ZN8S19968C22v1Ev");}
void  S19968C2 ::v2(){vfunc_called(this, "_ZN8S19968C22v2Ev");}
S19968C2 ::S19968C2(){ note_ctor("S19968C2", this);} // tgen

static void Test_S19968C2()
{
  extern Class_Descriptor cd_S19968C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,113)];
    init_test(&cd_S19968C2, buf);
    S19968C2 *dp, &lv = *(dp=new (buf) S19968C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,448), "sizeof(S19968C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C2)");
    check_field_offset(lv, s19968c2f0, ABISELECT(8,4), "S19968C2.s19968c2f0");
    check_field_offset(lv, s19968c2f1, ABISELECT(16,8), "S19968C2.s19968c2f1");
    check_field_offset(lv, s19968c2f2, ABISELECT(256,148), "S19968C2.s19968c2f2");
    check_field_offset(lv, s19968c2f3, ABISELECT(496,288), "S19968C2.s19968c2f3");
    check_field_offset(lv, s19968c2f4, ABISELECT(512,300), "S19968C2.s19968c2f4");
    check_field_offset(lv, s19968c2f5, ABISELECT(560,324), "S19968C2.s19968c2f5");
    check_field_offset(lv, s19968c2f6, ABISELECT(576,328), "S19968C2.s19968c2f6");
    test_class_info(&lv, &cd_S19968C2);
    dp->~S19968C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C2(Test_S19968C2, "S19968C2", ABISELECT(736,448));

#else // __cplusplus

extern void _ZN8S19968C2C1Ev();
extern void _ZN8S19968C2D1Ev();
Name_Map name_map_S19968C2[] = {
  NSPAIR(_ZN8S19968C2C1Ev),
  NSPAIR(_ZN8S19968C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19968C2[];
extern void _ZN8S19968C2D1Ev();
extern void _ZN8S19968C2D0Ev();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY vtc_S19968C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C2[0]),
  (VTBL_ENTRY)&_ZN8S19968C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
Class_Descriptor cd_S19968C2 = {  "S19968C2", // class name
  0,0,//no base classes
  &(vtc_S19968C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,448), // object size
  NSPAIRA(_ZTI8S19968C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19968C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C8  : virtual S22028C16 , virtual S19968C3 {
  void *s19968c8f0[9];
  ~S19968C8(); // tgen
  S19968C8(); // tgen
};
//SIG(-1 S19968C8) C1{ VBC2{ m} VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]}


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

static void Test_S19968C8()
{
  extern Class_Descriptor cd_S19968C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,46)];
    init_test(&cd_S19968C8, buf);
    S19968C8 *dp, &lv = *(dp=new (buf) S19968C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,180), "sizeof(S19968C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C8)");
    check_base_class_offset(lv, (S22028C16*), 0, "S19968C8");
    check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S19968C8");
    check_field_offset(lv, s19968c8f0, ABISELECT(8,4), "S19968C8.s19968c8f0");
    test_class_info(&lv, &cd_S19968C8);
    dp->~S19968C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C8(Test_S19968C8, "S19968C8", ABISELECT(320,180));

#else // __cplusplus

extern void _ZN8S19968C8C1Ev();
extern void _ZN8S19968C8D1Ev();
Name_Map name_map_S19968C8[] = {
  NSPAIR(_ZN8S19968C8C1Ev),
  NSPAIR(_ZN8S19968C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S19968C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19968C8[];
static  VTBL_ENTRY vtc_S19968C8[] = {
  ABISELECT(80,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern VTBL_ENTRY _ZTV8S19968C8[];
static  VTT_ENTRY vtt_S19968C8[] = {
  {&(_ZTV8S19968C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
Class_Descriptor cd_S19968C8 = {  "S19968C8", // class name
  bases_S19968C8, 2,
  &(vtc_S19968C8[0]), // expected_vtbl_contents
  &(vtt_S19968C8[0]), // expected_vtt_contents
  ABISELECT(320,180), // object size
  NSPAIRA(_ZTI8S19968C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19968C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19968C8),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  S19968C10  : virtual S19968C8 {
  int s19968c10f0:21;
  int s19968c10f1;
  virtual  ~S19968C10(); // _ZN9S19968C10D2Ev
  S19968C10(); // tgen
};
//SIG(-1 S19968C10) C1{ VBC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi}


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

static void Test_S19968C10()
{
  extern Class_Descriptor cd_S19968C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19968C10, buf);
    S19968C10 *dp, &lv = *(dp=new (buf) S19968C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19968C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C10)");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C10");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(96,52), "S19968C10");
    check_base_class_offset(lv, (S19968C8*), ABISELECT(16,12), "S19968C10");
    set_bf_and_test(lv, s19968c10f0, ABISELECT(8,4), 0, 21, 1, "S19968C10");
    set_bf_and_test(lv, s19968c10f0, ABISELECT(8,4), 0, 21, hide_sll(1LL<<20), "S19968C10");
    check_field_offset(lv, s19968c10f1, ABISELECT(12,8), "S19968C10.s19968c10f1");
    test_class_info(&lv, &cd_S19968C10);
    dp->~S19968C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C10(Test_S19968C10, "S19968C10", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN9S19968C10C1Ev();
extern void _ZN9S19968C10D2Ev();
Name_Map name_map_S19968C10[] = {
  NSPAIR(_ZN9S19968C10C1Ev),
  NSPAIR(_ZN9S19968C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
static Base_Class bases_S19968C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(96,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
    2, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C10[];
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY vtc_S19968C10[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern VTBL_ENTRY _ZTV9S19968C10[];
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10[] = {
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTT_ENTRY vtt_S19968C10[] = {
  {&(_ZTV9S19968C10[5]),  5,11},
  {&(_ZTV9S19968C10[11]),  11,11},
  {&(_tg__ZTV8S19968C8__9S19968C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
Class_Descriptor cd_S19968C10 = {  "S19968C10", // class name
  bases_S19968C10, 3,
  &(vtc_S19968C10[0]), // expected_vtbl_contents
  &(vtt_S19968C10[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI9S19968C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19968C10),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C10),3, //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  S19968C7  : virtual S19968C2 , virtual S19968C8 , virtual S19968C10 , S19968C3 {
  virtual void  v3(); // _ZN8S19968C72v3Ev
  ~S19968C7(); // tgen
  S19968C7(); // tgen
};
//SIG(-1 S19968C7) C1{ VBC2{ vd v2 v3 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ VBC5 vd Fi:21 Fi} BC3 v1}


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

static void Test_S19968C7()
{
  extern Class_Descriptor cd_S19968C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(84,197)];
    init_test(&cd_S19968C7, buf);
    S19968C7 *dp, &lv = *(dp=new (buf) S19968C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,784), "sizeof(S19968C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C7)");
    check_base_class_offset(lv, (S19968C2*), ABISELECT(256,144), "S19968C7");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C7");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(1072,632), "S19968C7");
    check_base_class_offset(lv, (S19968C8*), ABISELECT(992,592), "S19968C7");
    check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(992,592), "S19968C7");
    check_base_class_offset(lv, (S19968C10*), ABISELECT(1312,772), "S19968C7");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(16,4), "S19968C7");
    test_class_info(&lv, &cd_S19968C7);
    dp->~S19968C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C7(Test_S19968C7, "S19968C7", ABISELECT(1328,784));

#else // __cplusplus

extern void _ZN8S19968C7C1Ev();
extern void _ZN8S19968C7D1Ev();
Name_Map name_map_S19968C7[] = {
  NSPAIR(_ZN8S19968C7C1Ev),
  NSPAIR(_ZN8S19968C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S19968C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C2,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1072,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(992,592), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C10,    ABISELECT(1312,772), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19968C7[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C7D1Ev,_ZThn144_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn256_N8S19968C7D0Ev,_ZThn144_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn1312_N8S19968C7D1Ev,_ZThn772_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn1312_N8S19968C7D0Ev,_ZThn772_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C7[] = {
  ABISELECT(1312,772),
  ABISELECT(1072,632),
  0,
  ABISELECT(992,592),
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
  0,
  0,
  ABISELECT(-256,-144),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  ABISELECT(-1312,-772),
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  ABISELECT(-1312,-772),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19968C7[];
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C7[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C7[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__8S19968C7[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C7[] = {
  {&(_ZTV8S19968C7[7]),  7,31},
  {&(_ZTV8S19968C7[15]),  15,31},
  {&(_ZTV8S19968C7[23]),  23,31},
  {&(_ZTV8S19968C7[29]),  29,31},
  {&(_tg__ZTV8S19968C8__8S19968C7[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C7[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__8S19968C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S19968C7D0Ev,_ZThn772_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S19968C7D1Ev,_ZThn772_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19968C7D0Ev,_ZThn144_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19968C7D1Ev,_ZThn144_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C7 = {  "S19968C7", // class name
  bases_S19968C7, 6,
  &(vtc_S19968C7[0]), // expected_vtbl_contents
  &(vtt_S19968C7[0]), // expected_vtt_contents
  ABISELECT(1328,784), // object size
  NSPAIRA(_ZTI8S19968C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19968C7),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19968C7),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C12  : virtual S19968C3 , virtual S19968C8 , S19968C7 , S19968C10 , S19968C2 {
  int s19968c12f0;
  virtual  ~S19968C12(); // _ZN9S19968C12D2Ev
  S19968C12(); // tgen
};
//SIG(-1 S19968C12) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ VBC4{ m} VBC2 Fp[9]} BC5{ VBC6{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC8{ VBC3 vd Fi:21 Fi} BC2 v3} BC8 BC6 vd Fi}


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

static void Test_S19968C12()
{
  extern Class_Descriptor cd_S19968C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,313)];
    init_test(&cd_S19968C12, buf);
    S19968C12 *dp, &lv = *(dp=new (buf) S19968C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1248), "sizeof(S19968C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C12)");
    /*is_ambiguous_... S19968C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S19968C12");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(1024,608), "S19968C12");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C12");
    check_base_class_offset(lv, (S19968C8*), ABISELECT(1264,748), "S19968C12");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*), ABISELECT(1264,748), "S19968C12");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(1264,748), "S19968C12");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(1264,748), "S19968C12");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*), ABISELECT(1344,788), "S19968C12");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*), ABISELECT(2080,1236), "S19968C12");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*), ABISELECT(16,4), "S19968C12");
    check_base_class_offset(lv, (S19968C7*), 0, "S19968C12");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*), ABISELECT(256,144), "S19968C12");
    /*is_ambiguous_... S19968C12::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*), ABISELECT(272,156), "S19968C12");
    check_field_offset(lv, s19968c12f0, ABISELECT(1008,604), "S19968C12.s19968c12f0");
    test_class_info(&lv, &cd_S19968C12);
    dp->~S19968C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C12(Test_S19968C12, "S19968C12", ABISELECT(2096,1248));

#else // __cplusplus

extern void _ZN9S19968C12C1Ev();
extern void _ZN9S19968C12D2Ev();
Name_Map name_map_S19968C12[] = {
  NSPAIR(_ZN9S19968C12C1Ev),
  NSPAIR(_ZN9S19968C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
static Base_Class bases_S19968C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C8,    ABISELECT(1264,748), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C2,    ABISELECT(1344,788), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C10,    ABISELECT(2080,1236), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19968C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C10,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C2,    ABISELECT(272,156), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C12[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn272_N9S19968C12D1Ev,_ZThn156_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn272_N9S19968C12D0Ev,_ZThn156_N9S19968C12D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn1344_N9S19968C12D1Ev,_ZThn788_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn1344_N9S19968C12D0Ev,_ZThn788_N9S19968C12D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn2080_N9S19968C12D1Ev,_ZThn1236_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn2080_N9S19968C12D0Ev,_ZThn1236_N9S19968C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C12[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19968C12D1Ev,_ZThn156_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19968C12D0Ev,_ZThn156_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19968C12[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C12[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn1344_N8S19968C7D1Ev,_ZThn788_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn1344_N8S19968C7D0Ev,_ZThn788_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C7__9S19968C12[] = {
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C7__9S19968C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2080_N8S19968C7D1Ev,_ZThn1236_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2080_N8S19968C7D0Ev,_ZThn1236_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C7__9S19968C12[] = {
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C12[] = {
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__A__9S19968C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1008,-604),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C12[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__9S19968C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(816,488),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C12[] = {
  {&(_ZTV9S19968C12[7]),  7,44},
  {&(_tg__ZTV8S19968C7__9S19968C12[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C7__9S19968C12[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C7__9S19968C12[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C7__9S19968C12[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C12[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__A__9S19968C12[4]),  4,4},
  {&(_ZTV9S19968C12[27]),  27,44},
  {&(_ZTV9S19968C12[32]),  32,44},
  {&(_ZTV9S19968C12[42]),  42,44},
  {&(_ZTV9S19968C12[15]),  15,44},
  {&(_tg__ZTV8S19968C8__9S19968C12[4]),  4,4},
  {&(_tg__ZTV9S19968C10__9S19968C12[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__9S19968C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S19968C7D0Ev,_ZThn1236_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S19968C7D1Ev,_ZThn1236_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S19968C7D0Ev,_ZThn788_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S19968C7D1Ev,_ZThn788_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N9S19968C12D0Ev,_ZThn1236_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N9S19968C12D1Ev,_ZThn1236_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N9S19968C12D0Ev,_ZThn788_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N9S19968C12D1Ev,_ZThn788_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C12 = {  "S19968C12", // class name
  bases_S19968C12, 9,
  &(vtc_S19968C12[0]), // expected_vtbl_contents
  &(vtt_S19968C12[0]), // expected_vtt_contents
  ABISELECT(2096,1248), // object size
  NSPAIRA(_ZTI9S19968C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19968C12),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C12),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C11  : virtual S22028C16 , virtual S19968C8 , S19968C10 , S19968C7 {
  int s19968c11f0;
  int s19968c11f1;
  int s19968c11f2;
  short s19968c11f3;
  int s19968c11f4;
  ::S19968C12 s19968c11f5;
  __tsi64 s19968c11f6;
  void *s19968c11f7;
  int s19968c11f8;
  ~S19968C11(); // tgen
  S19968C11(); // tgen
};
//SIG(-1 S19968C11) C1{ VBC2{ m} VBC3{ VBC2 VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} BC5{ VBC3 vd Fi:21 Fi} BC6{ VBC7{ vd v1 v2 Fp FC4 FC4 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC5 BC4 v3} Fi Fi Fi Fs Fi FC9{ VBC4 VBC3 BC6 BC5 BC7 vd Fi} FL Fp Fi}


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

static void Test_S19968C11()
{
  extern Class_Descriptor cd_S19968C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(220,521)];
    init_test(&cd_S19968C11, buf);
    S19968C11 *dp, &lv = *(dp=new (buf) S19968C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3504,2080), "sizeof(S19968C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C11)");
    check_base_class_offset(lv, (S22028C16*), 0, "S19968C11");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C11");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(2512,1480), "S19968C11");
    check_base_class_offset(lv, (S19968C8*), ABISELECT(2424,1440), "S19968C11");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(2424,1440), "S19968C11");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*), ABISELECT(2424,1440), "S19968C11");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(2424,1440), "S19968C11");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*), 0, "S19968C11");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*), ABISELECT(2752,1620), "S19968C11");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*), ABISELECT(3488,2068), "S19968C11");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*), ABISELECT(32,16), "S19968C11");
    check_base_class_offset(lv, (S19968C7*), ABISELECT(16,12), "S19968C11");
    check_field_offset(lv, s19968c11f0, ABISELECT(272,156), "S19968C11.s19968c11f0");
    check_field_offset(lv, s19968c11f1, ABISELECT(276,160), "S19968C11.s19968c11f1");
    check_field_offset(lv, s19968c11f2, ABISELECT(280,164), "S19968C11.s19968c11f2");
    check_field_offset(lv, s19968c11f3, ABISELECT(284,168), "S19968C11.s19968c11f3");
    check_field_offset(lv, s19968c11f4, ABISELECT(288,172), "S19968C11.s19968c11f4");
    check_field_offset(lv, s19968c11f5, ABISELECT(304,176), "S19968C11.s19968c11f5");
    check_field_offset(lv, s19968c11f6, ABISELECT(2400,1424), "S19968C11.s19968c11f6");
    check_field_offset(lv, s19968c11f7, ABISELECT(2408,1432), "S19968C11.s19968c11f7");
    check_field_offset(lv, s19968c11f8, ABISELECT(2416,1436), "S19968C11.s19968c11f8");
    test_class_info(&lv, &cd_S19968C11);
    dp->~S19968C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C11(Test_S19968C11, "S19968C11", ABISELECT(3504,2080));

#else // __cplusplus

extern void _ZN9S19968C11C1Ev();
extern void _ZN9S19968C11D1Ev();
Name_Map name_map_S19968C11[] = {
  NSPAIR(_ZN9S19968C11C1Ev),
  NSPAIR(_ZN9S19968C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
static Base_Class bases_S19968C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(2512,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C8,    ABISELECT(2424,1440), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C10,    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_S19968C2,    ABISELECT(2752,1620), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C10,    ABISELECT(3488,2068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C11[];
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn2752_N9S19968C11D1Ev,_ZThn1620_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn2752_N9S19968C11D0Ev,_ZThn1620_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2068_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2068_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C11[] = {
  ABISELECT(3488,2068),
  ABISELECT(2752,1620),
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  0,
  0,
  ABISELECT(-2752,-1620),
  ABISELECT(-2752,-1620),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-3488,-2068),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3488,-2068),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19968C11[];
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C11[] = {
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__A__9S19968C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C11[] = {
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2736_N8S19968C7D1Ev,_ZThn1608_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2736_N8S19968C7D0Ev,_ZThn1608_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C7__9S19968C11[] = {
  0,
  0,
  ABISELECT(-2736,-1608),
  ABISELECT(-2736,-1608),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C7__9S19968C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2056_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2056_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C7__9S19968C11[] = {
  ABISELECT(-3472,-2056),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3472,-2056),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__A1__9S19968C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C11[] = {
  {&(_ZTV9S19968C11[7]),  7,40},
  {&(_tg__ZTV9S19968C10__A__9S19968C11[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__A__9S19968C11[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C11[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C7__9S19968C11[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C7__9S19968C11[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C7__9S19968C11[6]),  6,8},
  {&(_ZTV9S19968C11[23]),  23,40},
  {&(_ZTV9S19968C11[16]),  16,40},
  {&(_ZTV9S19968C11[28]),  28,40},
  {&(_ZTV9S19968C11[38]),  38,40},
  {&(_tg__ZTV8S19968C8__9S19968C11[4]),  4,4},
  {&(_tg__ZTV9S19968C10__A1__9S19968C11[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__A1__9S19968C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2056_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2056_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19968C7D0Ev,_ZThn1608_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19968C7D1Ev,_ZThn1608_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2068_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2068_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19968C11D0Ev,_ZThn1620_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19968C11D1Ev,_ZThn1620_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C11 = {  "S19968C11", // class name
  bases_S19968C11, 8,
  &(vtc_S19968C11[0]), // expected_vtbl_contents
  &(vtt_S19968C11[0]), // expected_vtt_contents
  ABISELECT(3504,2080), // object size
  NSPAIRA(_ZTI9S19968C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19968C11),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C6  : virtual S19968C3 , S19968C7 , S19968C11 {
  int s19968c6f0;
  virtual  ~S19968C6(); // _ZN8S19968C6D2Ev
  S19968C6(); // tgen
};
//SIG(-1 S19968C6) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC3{ VBC4{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU5{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC6{ VBC7{ m} VBC2 Fp[9]} VBC8{ VBC6 vd Fi:21 Fi} BC2 v3} BC9{ VBC7 VBC6 BC8 BC3 Fi Fi Fi Fs Fi FC10{ VBC2 VBC6 BC3 BC8 BC4 vd Fi} FL Fp Fi} vd Fi}


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

static void Test_S19968C6()
{
  extern Class_Descriptor cd_S19968C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(236,558)];
    init_test(&cd_S19968C6, buf);
    S19968C6 *dp, &lv = *(dp=new (buf) S19968C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3760,2228), "sizeof(S19968C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C6)");
    /*is_ambiguous_... S19968C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2688,1588), "S19968C6");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(2688,1588), "S19968C6");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*), ABISELECT(2928,1728), "S19968C6");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*), ABISELECT(2928,1728), "S19968C6");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C6");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*), 0, "S19968C6");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*), ABISELECT(3664,2176), "S19968C6");
    /*is_ambiguous_... S19968C6::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(3664,2176), "S19968C6");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*), ABISELECT(3664,2176), "S19968C6");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*), ABISELECT(3664,2176), "S19968C6");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*), ABISELECT(3664,2176), "S19968C6");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*), ABISELECT(3744,2216), "S19968C6");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*), ABISELECT(3744,2216), "S19968C6");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*), ABISELECT(16,4), "S19968C6");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C7*), 0, "S19968C6");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*), ABISELECT(256,144), "S19968C6");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*), ABISELECT(288,160), "S19968C6");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*), ABISELECT(272,156), "S19968C6");
    check_base_class_offset(lv, (S19968C11*), ABISELECT(256,144), "S19968C6");
    check_field_offset(lv, s19968c6f0, ABISELECT(2676,1584), "S19968C6.s19968c6f0");
    test_class_info(&lv, &cd_S19968C6);
    dp->~S19968C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C6(Test_S19968C6, "S19968C6", ABISELECT(3760,2228));

#else // __cplusplus

extern void _ZN8S19968C6C1Ev();
extern void _ZN8S19968C6D2Ev();
Name_Map name_map_S19968C6[] = {
  NSPAIR(_ZN8S19968C6C1Ev),
  NSPAIR(_ZN8S19968C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
static Base_Class bases_S19968C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2688,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C2,    ABISELECT(2928,1728), //bcp->offset
    29, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(3664,2176), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C10,    ABISELECT(3744,2216), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19968C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C10,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(272,156), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19968C6[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C6D1Ev();
extern void _ZN8S19968C6D0Ev();
extern void ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C6D1Ev,_ZThn1728_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C6D0Ev,_ZThn1728_N8S19968C6D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C6D1Ev,_ZThn2216_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C6D0Ev,_ZThn2216_N8S19968C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C6[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D0Ev,
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev),
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19968C6[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C7__8S19968C6[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C7D1Ev,_ZThn1728_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C7D0Ev,_ZThn1728_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C7__8S19968C6[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C7__8S19968C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C7D1Ev,_ZThn2216_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C7D0Ev,_ZThn2216_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C7__8S19968C6[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C11__8S19968C6[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C11__A1__8S19968C6[] = {
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C11__A1__8S19968C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A1__8S19968C6[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2656_N8S19968C7D1Ev,_ZThn1572_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2656_N8S19968C7D0Ev,_ZThn1572_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C11__A1__8S19968C6[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C11__A1__8S19968C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2060_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2060_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C11__A1__8S19968C6[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C11__8S19968C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C11__8S19968C6[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C11D1Ev,_ZThn1584_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C11D0Ev,_ZThn1584_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C11__8S19968C6[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2072_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2072_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C11__8S19968C6[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C6[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__8S19968C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C6[] = {
  {&(_ZTV8S19968C6[7]),  7,50},
  {&(_tg__ZTV8S19968C7__8S19968C6[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C7__8S19968C6[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C7__8S19968C6[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C7__8S19968C6[6]),  6,8},
  {&(_tg__ZTV9S19968C11__8S19968C6[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C11__A1__8S19968C6[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C11__A1__8S19968C6[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__A1__8S19968C6[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C11__A1__8S19968C6[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C11__A1__8S19968C6[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C11__A1__8S19968C6[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C11__8S19968C6[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C11__8S19968C6[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C11__8S19968C6[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C11__8S19968C6[6]),  6,8},
  {&(_ZTV8S19968C6[34]),  34,50},
  {&(_ZTV8S19968C6[42]),  42,50},
  {&(_ZTV8S19968C6[48]),  48,50},
  {&(_ZTV8S19968C6[17]),  17,50},
  {&(_ZTV8S19968C6[26]),  26,50},
  {&(_tg__ZTV8S19968C8__8S19968C6[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C6[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__8S19968C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19968C6[];
extern  VTBL_ENTRY _ZTV8S19968C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C6[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2072_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2072_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19968C11D0Ev,_ZThn1584_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19968C11D1Ev,_ZThn1584_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2060_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C7D0Ev,_ZThn2216_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2060_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C7D1Ev,_ZThn2216_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19968C7D0Ev,_ZThn1572_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C7D0Ev,_ZThn1728_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19968C7D1Ev,_ZThn1572_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C7D1Ev,_ZThn1728_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C6D0Ev,_ZThn2216_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C6D1Ev,_ZThn2216_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C6D0Ev,_ZThn1728_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C6D1Ev,_ZThn1728_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C6 = {  "S19968C6", // class name
  bases_S19968C6, 11,
  &(vtc_S19968C6[0]), // expected_vtbl_contents
  &(vtt_S19968C6[0]), // expected_vtt_contents
  ABISELECT(3760,2228), // object size
  NSPAIRA(_ZTI8S19968C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19968C6),50, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19968C6),24, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C13  : S19968C3 , virtual S19968C2 , S19968C11 , S19968C10 {
  short s19968c13f0;
  short s19968c13f1[4];
  short s19968c13f2;
  ::S19968C2 s19968c13f3;
  virtual  ~S19968C13(); // _ZN9S19968C13D2Ev
  S19968C13(); // tgen
};
//SIG(-1 S19968C13) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ VBC6{ m} VBC7{ VBC6 VBC2 Fp[9]} BC8{ VBC7 vd Fi:21 Fi} BC9{ VBC3 VBC7 VBC8 BC2 v3} Fi Fi Fi Fs Fi FC10{ VBC2 VBC7 BC9 BC8 BC3 vd Fi} FL Fp Fi} BC8 vd Fs Fs[4] Fs FC3}


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

static void Test_S19968C13()
{
  extern Class_Descriptor cd_S19968C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(283,674)];
    init_test(&cd_S19968C13, buf);
    S19968C13 *dp, &lv = *(dp=new (buf) S19968C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4512,2692), "sizeof(S19968C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C13)");
    /*is_ambiguous_... S19968C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2432,1440), "S19968C13");
    check_base_class_offset(lv, (S19968C2*), ABISELECT(3440,2052), "S19968C13");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*), ABISELECT(3440,2052), "S19968C13");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*), 0, "S19968C13");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C13");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(4256,2540), "S19968C13");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*), ABISELECT(4176,2500), "S19968C13");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*), ABISELECT(4176,2500), "S19968C13");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*), ABISELECT(4176,2500), "S19968C13");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(4176,2500), "S19968C13");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(4176,2500), "S19968C13");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*), 0, "S19968C13");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*), ABISELECT(4496,2680), "S19968C13");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*), ABISELECT(32,16), "S19968C13");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*), ABISELECT(16,12), "S19968C13");
    check_base_class_offset(lv, (S19968C11*), 0, "S19968C13");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*), ABISELECT(2672,1580), "S19968C13");
    check_field_offset(lv, s19968c13f0, ABISELECT(2688,1592), "S19968C13.s19968c13f0");
    check_field_offset(lv, s19968c13f1, ABISELECT(2690,1594), "S19968C13.s19968c13f1");
    check_field_offset(lv, s19968c13f2, ABISELECT(2698,1602), "S19968C13.s19968c13f2");
    check_field_offset(lv, s19968c13f3, ABISELECT(2704,1604), "S19968C13.s19968c13f3");
    test_class_info(&lv, &cd_S19968C13);
    dp->~S19968C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C13(Test_S19968C13, "S19968C13", ABISELECT(4512,2692));

#else // __cplusplus

extern void _ZN9S19968C13C1Ev();
extern void _ZN9S19968C13D2Ev();
Name_Map name_map_S19968C13[] = {
  NSPAIR(_ZN9S19968C13C1Ev),
  NSPAIR(_ZN9S19968C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
static Base_Class bases_S19968C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2432,1440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19968C2,    ABISELECT(3440,2052), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //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_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(4256,2540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(4176,2500), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19968C10,    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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(4496,2680), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19968C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C10,    ABISELECT(2672,1580), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C13[];
extern void _ZN9S19968C13D1Ev();
extern void _ZN9S19968C13D0Ev();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn3440_N9S19968C13D1Ev,_ZThn2052_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn3440_N9S19968C13D0Ev,_ZThn2052_N9S19968C13D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn4496_N9S19968C13D1Ev,_ZThn2680_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn4496_N9S19968C13D0Ev,_ZThn2680_N9S19968C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C13[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN9S19968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C13D0Ev,
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev),
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev),
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19968C13[];
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C11__9S19968C13[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C11__9S19968C13[] = {
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C11__9S19968C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C13[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3424_N8S19968C7D1Ev,_ZThn2040_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3424_N8S19968C7D0Ev,_ZThn2040_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C11__9S19968C13[] = {
  0,
  0,
  ABISELECT(-3424,-2040),
  ABISELECT(-3424,-2040),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C11__9S19968C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4160,-2488),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn4480_N8S19968C7D1Ev,_ZThn2668_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn4480_N8S19968C7D0Ev,_ZThn2668_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C11__9S19968C13[] = {
  ABISELECT(-4480,-2668),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4480,-2668),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C11__9S19968C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C11__9S19968C13[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn3440_N9S19968C11D1Ev,_ZThn2052_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn3440_N9S19968C11D0Ev,_ZThn2052_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C11__9S19968C13[] = {
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn4496_N9S19968C11D1Ev,_ZThn2680_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn4496_N9S19968C11D0Ev,_ZThn2680_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C11__9S19968C13[] = {
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C13[] = {
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__A__9S19968C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-1504,-920),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C13[] = {
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__A1__9S19968C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C13[] = {
  {&(_ZTV9S19968C13[7]),  7,47},
  {&(_tg__ZTV9S19968C11__9S19968C13[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C11__9S19968C13[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C11__9S19968C13[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C13[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C11__9S19968C13[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C11__9S19968C13[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C11__9S19968C13[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C11__9S19968C13[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C11__9S19968C13[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C11__9S19968C13[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C11__9S19968C13[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C13[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__A__9S19968C13[4]),  4,4},
  {&(_ZTV9S19968C13[31]),  31,47},
  {&(_ZTV9S19968C13[39]),  39,47},
  {&(_ZTV9S19968C13[16]),  16,47},
  {&(_ZTV9S19968C13[45]),  45,47},
  {&(_ZTV9S19968C13[24]),  24,47},
  {&(_tg__ZTV8S19968C8__9S19968C13[4]),  4,4},
  {&(_tg__ZTV9S19968C10__A1__9S19968C13[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__A1__9S19968C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C13[];
extern  VTBL_ENTRY _ZTV9S19968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C13[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19968C11D0Ev,_ZThn2680_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19968C11D1Ev,_ZThn2680_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19968C11D0Ev,_ZThn2052_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19968C11D1Ev,_ZThn2052_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N8S19968C7D0Ev,_ZThn2668_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N8S19968C7D1Ev,_ZThn2668_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N8S19968C7D0Ev,_ZThn2040_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N8S19968C7D1Ev,_ZThn2040_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19968C13D0Ev,_ZThn2680_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19968C13D1Ev,_ZThn2680_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19968C13D0Ev,_ZThn2052_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19968C13D1Ev,_ZThn2052_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C13 = {  "S19968C13", // class name
  bases_S19968C13, 11,
  &(vtc_S19968C13[0]), // expected_vtbl_contents
  &(vtt_S19968C13[0]), // expected_vtt_contents
  ABISELECT(4512,2692), // object size
  NSPAIRA(_ZTI9S19968C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19968C13),47, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C13),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C5  : virtual S19968C6 , S19968C12 , S19968C3 , S19968C13 {
  char s19968c5f0;
  short s19968c5f1;
  ::S19968C3 s19968c5f2[6];
  virtual  ~S19968C5(); // _ZN8S19968C5D2Ev
  S19968C5(); // tgen
};
//SIG(-1 S19968C5) C1{ VBC2{ VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC4{ VBC5{ vd v1 v2 Fp FC3 FC3 Fi[3] Fp[6] Fs FU6{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC7{ VBC8{ m} VBC3 Fp[9]} VBC9{ VBC7 vd Fi:21 Fi} BC3 v3} BC10{ VBC8 VBC7 BC9 BC4 Fi Fi Fi Fs Fi FC11{ VBC3 VBC7 BC4 BC9 BC5 vd Fi} FL Fp Fi} vd Fi} BC11 BC3 BC12{ BC3 VBC5 BC10 BC9 vd Fs Fs[4] Fs FC5} vd Fc Fs FC3[6]}


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

static void Test_S19968C5()
{
  extern Class_Descriptor cd_S19968C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(621,1469)];
    init_test(&cd_S19968C5, buf);
    S19968C5 *dp, &lv = *(dp=new (buf) S19968C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9920,5872), "sizeof(S19968C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C5)");
    /*is_ambiguous_... S19968C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C6*), ABISELECT(8848,5232), "S19968C5");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(8848,5232), "S19968C5");
    /*is_ambiguous_... S19968C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C12*), ABISELECT(8848,5232), "S19968C5");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C6*), ABISELECT(9088,5372), "S19968C5");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(9088,5372), "S19968C5");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C12*), ABISELECT(9088,5372), "S19968C5");
    check_base_class_offset(lv, (S19968C2*)(S19968C13*), ABISELECT(9088,5372), "S19968C5");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C13*), ABISELECT(9088,5372), "S19968C5");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C5");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C6*), 0, "S19968C5");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C13*), 0, "S19968C5");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C6*), ABISELECT(9824,5820), "S19968C5");
    /*is_ambiguous_... S19968C5::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(9824,5820), "S19968C5");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C6*), ABISELECT(9824,5820), "S19968C5");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(9824,5820), "S19968C5");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(9824,5820), "S19968C5");
    check_base_class_offset(lv, (S19968C8*)(S19968C12*), ABISELECT(9824,5820), "S19968C5");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C12*), ABISELECT(9824,5820), "S19968C5");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C12*), ABISELECT(9824,5820), "S19968C5");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C13*), ABISELECT(9824,5820), "S19968C5");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C13*), ABISELECT(9824,5820), "S19968C5");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C13*), ABISELECT(9824,5820), "S19968C5");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C13*), ABISELECT(9824,5820), "S19968C5");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C6*), ABISELECT(9904,5860), "S19968C5");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(9904,5860), "S19968C5");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C12*), ABISELECT(9904,5860), "S19968C5");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C13*), ABISELECT(9904,5860), "S19968C5");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C6*), ABISELECT(6176,3648), "S19968C5");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C7*)(S19968C6*), ABISELECT(6160,3644), "S19968C5");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(6416,3788), "S19968C5");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(6448,3804), "S19968C5");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(6432,3800), "S19968C5");
    check_base_class_offset(lv, (S19968C11*)(S19968C6*), ABISELECT(6416,3788), "S19968C5");
    check_base_class_offset(lv, (S19968C6*), ABISELECT(6160,3644), "S19968C5");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C12*), ABISELECT(16,4), "S19968C5");
    check_base_class_offset(lv, (S19968C7*)(S19968C12*), 0, "S19968C5");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C12*), ABISELECT(256,144), "S19968C5");
    /*is_ambiguous_... S19968C12::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C12*), ABISELECT(272,156), "S19968C5");
    check_base_class_offset(lv, (S19968C12*), 0, "S19968C5");
    /*is_ambiguous_... S19968C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S19968C5");
    /*is_ambiguous_... S19968C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C13*), ABISELECT(3696,2188), "S19968C5");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C13*), ABISELECT(1264,748), "S19968C5");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C13*), ABISELECT(1296,764), "S19968C5");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C13*), ABISELECT(1280,760), "S19968C5");
    check_base_class_offset(lv, (S19968C11*)(S19968C13*), ABISELECT(1264,748), "S19968C5");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C13*), ABISELECT(3936,2328), "S19968C5");
    check_base_class_offset(lv, (S19968C13*), ABISELECT(1264,748), "S19968C5");
    check_field_offset(lv, s19968c5f0, ABISELECT(4704,2800), "S19968C5.s19968c5f0");
    check_field_offset(lv, s19968c5f1, ABISELECT(4706,2802), "S19968C5.s19968c5f1");
    check_field_offset(lv, s19968c5f2, ABISELECT(4720,2804), "S19968C5.s19968c5f2");
    test_class_info(&lv, &cd_S19968C5);
    dp->~S19968C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C5(Test_S19968C5, "S19968C5", ABISELECT(9920,5872));

#else // __cplusplus

extern void _ZN8S19968C5C1Ev();
extern void _ZN8S19968C5D2Ev();
Name_Map name_map_S19968C5[] = {
  NSPAIR(_ZN8S19968C5C1Ev),
  NSPAIR(_ZN8S19968C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C6;
extern VTBL_ENTRY _ZTI8S19968C6[];
extern  VTBL_ENTRY _ZTV8S19968C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C12;
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C13;
extern VTBL_ENTRY _ZTI9S19968C13[];
extern  VTBL_ENTRY _ZTV9S19968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C13[];
static Base_Class bases_S19968C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(8848,5232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C2,    ABISELECT(9088,5372), //bcp->offset
    81, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(9824,5820), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C10,    ABISELECT(9904,5860), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(6176,3648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19968C7,    ABISELECT(6160,3644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(6416,3788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6448,3804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(6432,3800), //bcp->offset
    71, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(6416,3788), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19968C6,    ABISELECT(6160,3644), //bcp->offset
    50, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19968C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(256,144), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C2,    ABISELECT(272,156), //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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C12,    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_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19968C3,    ABISELECT(3696,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1296,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(1280,760), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(3936,2328), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C13,    ABISELECT(1264,748), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19968C5[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C5D1Ev();
extern void _ZN8S19968C5D0Ev();
extern void ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn272_N8S19968C5D1Ev,_ZThn156_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn272_N8S19968C5D0Ev,_ZThn156_N8S19968C5D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn6160_N8S19968C5D1Ev,_ZThn3644_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn6160_N8S19968C5D0Ev,_ZThn3644_N8S19968C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn9088_N8S19968C5D1Ev,_ZThn5372_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn9088_N8S19968C5D0Ev,_ZThn5372_N8S19968C5D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn9904_N8S19968C5D1Ev,_ZThn5860_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn9904_N8S19968C5D0Ev,_ZThn5860_N8S19968C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C5[] = {
  ABISELECT(6160,3644),
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D0Ev,
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C5D1Ev,_ZThn156_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C5D0Ev,_ZThn156_N8S19968C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev),
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev),
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev),
  ABISELECT(-6160,-3644),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-6160,-3644),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-6416,-3788),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-6432,-3800),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev),
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19968C5[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C12__8S19968C5[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C12__A2__8S19968C5[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn9088_N8S19968C7D1Ev,_ZThn5372_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn9088_N8S19968C7D0Ev,_ZThn5372_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C12__A2__8S19968C5[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C12__A2__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn9904_N8S19968C7D1Ev,_ZThn5860_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn9904_N8S19968C7D0Ev,_ZThn5860_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C12__A2__8S19968C5[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C12__A2__8S19968C5[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C12__A2__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9568,-5676),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C12__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn9088_N9S19968C12D1Ev,_ZThn5372_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn9088_N9S19968C12D0Ev,_ZThn5372_N9S19968C12D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C12__8S19968C5[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn9904_N9S19968C12D1Ev,_ZThn5860_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn9904_N9S19968C12D0Ev,_ZThn5860_N9S19968C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C12__8S19968C5[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C12__8S19968C5[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
};
extern void _ZN9S19968C13D1Ev();
extern void _ZN9S19968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C13__8S19968C5[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN9S19968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C13D0Ev,
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C119S19968C13__A1__8S19968C5[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C119S19968C13__A3__8S19968C5[] = {
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C119S19968C13__A3__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C5[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn7808_N8S19968C7D1Ev,_ZThn4612_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn7808_N8S19968C7D0Ev,_ZThn4612_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C119S19968C13__A3__8S19968C5[] = {
  0,
  0,
  ABISELECT(-7808,-4612),
  ABISELECT(-7808,-4612),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C119S19968C13__A3__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8544,-5060),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn8624_N8S19968C7D1Ev,_ZThn5100_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn8624_N8S19968C7D0Ev,_ZThn5100_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C119S19968C13__A3__8S19968C5[] = {
  ABISELECT(-8624,-5100),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8624,-5100),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C119S19968C13__A1__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C119S19968C13__A1__8S19968C5[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn7824_N9S19968C11D1Ev,_ZThn4624_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn7824_N9S19968C11D0Ev,_ZThn4624_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C119S19968C13__A1__8S19968C5[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn8640_N9S19968C11D1Ev,_ZThn5112_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn8640_N9S19968C11D0Ev,_ZThn5112_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C119S19968C13__A1__8S19968C5[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C13__A4__8S19968C5[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C13__A4__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-5888,-3492),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn7824_N9S19968C13D1Ev,_ZThn4624_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn7824_N9S19968C13D0Ev,_ZThn4624_N9S19968C13D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C13__8S19968C5[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C13__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C13__8S19968C5[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn8640_N9S19968C13D1Ev,_ZThn5112_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn8640_N9S19968C13D0Ev,_ZThn5112_N9S19968C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C13__8S19968C5[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C13__8S19968C5[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C6D1Ev();
extern void _ZN8S19968C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C6__8S19968C5[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C78S19968C6__8S19968C5[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C7D1Ev,_ZThn1728_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C7D0Ev,_ZThn1728_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C78S19968C6__8S19968C5[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C78S19968C6__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C7D1Ev,_ZThn2216_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C7D0Ev,_ZThn2216_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C78S19968C6__8S19968C5[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__8S19968C5[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C118S19968C6__A1__8S19968C5[] = {
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C5[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2656_N8S19968C7D1Ev,_ZThn1572_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2656_N8S19968C7D0Ev,_ZThn1572_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__8S19968C5[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2060_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2060_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__8S19968C5[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C118S19968C6__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C118S19968C6__8S19968C5[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C11D1Ev,_ZThn1584_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C11D0Ev,_ZThn1584_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C118S19968C6__8S19968C5[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2072_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2072_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C118S19968C6__8S19968C5[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C6D1Ev,_ZThn1728_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C6D0Ev,_ZThn1728_N8S19968C6D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C6__8S19968C5[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C6__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C6D1Ev,_ZThn2216_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C6D0Ev,_ZThn2216_N8S19968C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C6__8S19968C5[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C11__8S19968C6__8S19968C5[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A1__8S19968C6__8S19968C5[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C5[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__8S19968C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C5[] = {
  {&(_ZTV8S19968C5[8]),  8,102},
  {&(_tg__ZTV9S19968C12__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C79S19968C12__A2__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C12__A2__8S19968C5[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C12__A2__8S19968C5[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C12__A2__8S19968C5[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C12__A2__8S19968C5[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C12__A2__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C12__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C12__8S19968C5[5]),  5,9},
  {&(_tg__ZTV9S19968C10__9S19968C12__8S19968C5[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C12__8S19968C5[5]),  5,7},
  {&(_tg__ZTV9S19968C13__8S19968C5[7]),  7,9},
  {&(_tg__ZTV9S19968C119S19968C13__A1__8S19968C5[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C119S19968C13__A3__8S19968C5[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C119S19968C13__A3__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C119S19968C13__A3__8S19968C5[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C119S19968C13__A3__8S19968C5[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C119S19968C13__A3__8S19968C5[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C119S19968C13__A1__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C119S19968C13__A1__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C119S19968C13__A1__8S19968C5[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C119S19968C13__A1__8S19968C5[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C13__A4__8S19968C5[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C13__A4__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C13__8S19968C5[5]),  5,9},
  {&(_tg__ZTV8S19968C8__9S19968C13__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C13__8S19968C5[7]),  7,10},
  {&(_tg__ZTV9S19968C10__A1__9S19968C13__8S19968C5[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C13__8S19968C5[5]),  5,7},
  {&(_ZTV8S19968C5[59]),  59,102},
  {&(_ZTV8S19968C5[86]),  86,102},
  {&(_ZTV8S19968C5[94]),  94,102},
  {&(_ZTV8S19968C5[100]),  100,102},
  {&(_ZTV8S19968C5[69]),  69,102},
  {&(_ZTV8S19968C5[78]),  78,102},
  {&(_ZTV8S19968C5[16]),  16,102},
  {&(_ZTV8S19968C5[31]),  31,102},
  {&(_ZTV8S19968C5[40]),  40,102},
  {&(_ZTV8S19968C5[48]),  48,102},
  {&(_tg__ZTV8S19968C6__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C78S19968C6__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C78S19968C6__8S19968C5[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C78S19968C6__8S19968C5[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C78S19968C6__8S19968C5[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__8S19968C5[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C118S19968C6__A1__8S19968C5[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__8S19968C5[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__8S19968C5[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__8S19968C5[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C118S19968C6__8S19968C5[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C118S19968C6__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C118S19968C6__8S19968C5[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C118S19968C6__8S19968C5[6]),  6,8},
  {&(_tg__ZTV8S19968C2__8S19968C6__8S19968C5[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C6__8S19968C5[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C6__8S19968C5[6]),  6,8},
  {&(_tg__ZTV9S19968C11__8S19968C6__8S19968C5[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C11__A1__8S19968C6__8S19968C5[7]),  7,10},
  {&(_tg__ZTV8S19968C8__8S19968C5[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C5[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__8S19968C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19968C5[];
extern  VTBL_ENTRY _ZTV8S19968C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C5[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C6D0Ev,_ZThn2216_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C6D1Ev,_ZThn2216_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C6D0Ev,_ZThn1728_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C6D1Ev,_ZThn1728_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19968C13D0Ev,_ZThn5112_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19968C13D1Ev,_ZThn5112_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19968C13D0Ev,_ZThn4624_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19968C13D1Ev,_ZThn4624_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2072_N9S19968C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19968C11D0Ev,_ZThn5112_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2072_N9S19968C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19968C11D1Ev,_ZThn5112_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19968C11D0Ev,_ZThn1584_N9S19968C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19968C11D0Ev,_ZThn4624_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19968C11D1Ev,_ZThn1584_N9S19968C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19968C11D1Ev,_ZThn4624_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N9S19968C12D0Ev,_ZThn5860_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N9S19968C12D1Ev,_ZThn5860_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N9S19968C12D0Ev,_ZThn5372_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N9S19968C12D1Ev,_ZThn5372_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2060_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C7D0Ev,_ZThn2216_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N8S19968C7D0Ev,_ZThn5100_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19968C7D0Ev,_ZThn5860_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2060_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C7D1Ev,_ZThn2216_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N8S19968C7D1Ev,_ZThn5100_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19968C7D1Ev,_ZThn5860_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19968C7D0Ev,_ZThn1572_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C7D0Ev,_ZThn1728_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N8S19968C7D0Ev,_ZThn4612_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19968C7D0Ev,_ZThn5372_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19968C7D1Ev,_ZThn1572_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C7D1Ev,_ZThn1728_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N8S19968C7D1Ev,_ZThn4612_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19968C7D1Ev,_ZThn5372_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19968C5D0Ev,_ZThn5860_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19968C5D1Ev,_ZThn5860_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19968C5D0Ev,_ZThn5372_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19968C5D1Ev,_ZThn5372_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19968C5D0Ev,_ZThn3644_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19968C5D1Ev,_ZThn3644_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C5 = {  "S19968C5", // class name
  bases_S19968C5, 25,
  &(vtc_S19968C5[0]), // expected_vtbl_contents
  &(vtt_S19968C5[0]), // expected_vtt_contents
  ABISELECT(9920,5872), // object size
  NSPAIRA(_ZTI8S19968C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19968C5),102, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19968C5),65, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C16  : S19968C3 , S19968C8 {
  int s19968c16f0;
  void *s19968c16f1;
  int s19968c16f2;
  short s19968c16f3;
  unsigned int s19968c16f4:1;
  ::S22028C16 s19968c16f5;
  ::S3465C9_nt s19968c16f6;
  int s19968c16f7;
  ~S19968C16(); // tgen
  S19968C16(); // tgen
};
//SIG(-1 S19968C16) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC3{ VBC4{ m} VBC2 Fp[9]} Fi Fp Fi Fs Fi:1 FC4 FC5{} Fi}


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

static void Test_S19968C16()
{
  extern Class_Descriptor cd_S19968C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,87)];
    init_test(&cd_S19968C16, buf);
    S19968C16 *dp, &lv = *(dp=new (buf) S19968C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,344), "sizeof(S19968C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C16)");
    /*is_ambiguous_... S19968C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S19968C16");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C16");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(352,204), "S19968C16");
    check_base_class_offset(lv, (S19968C8*), 0, "S19968C16");
    check_field_offset(lv, s19968c16f0, ABISELECT(320,180), "S19968C16.s19968c16f0");
    check_field_offset(lv, s19968c16f1, ABISELECT(328,184), "S19968C16.s19968c16f1");
    check_field_offset(lv, s19968c16f2, ABISELECT(336,188), "S19968C16.s19968c16f2");
    check_field_offset(lv, s19968c16f3, ABISELECT(340,192), "S19968C16.s19968c16f3");
    set_bf_and_test(lv, s19968c16f4, ABISELECT(342,194), 0, 1, 1, "S19968C16");
    check_field_offset(lv, s19968c16f5, ABISELECT(343,195), "S19968C16.s19968c16f5");
    check_field_offset(lv, s19968c16f6, ABISELECT(344,196), "S19968C16.s19968c16f6");
    check_field_offset(lv, s19968c16f7, ABISELECT(348,200), "S19968C16.s19968c16f7");
    test_class_info(&lv, &cd_S19968C16);
    dp->~S19968C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C16(Test_S19968C16, "S19968C16", ABISELECT(592,344));

#else // __cplusplus

extern void _ZN9S19968C16C1Ev();
extern void _ZN9S19968C16D1Ev();
Name_Map name_map_S19968C16[] = {
  NSPAIR(_ZN9S19968C16C1Ev),
  NSPAIR(_ZN9S19968C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
static Base_Class bases_S19968C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(352,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C16[];
static  VTBL_ENTRY vtc_S19968C16[] = {
  ABISELECT(352,204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C16[0]),
};
extern VTBL_ENTRY _ZTV9S19968C16[];
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C16[] = {
  ABISELECT(352,204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTT_ENTRY vtt_S19968C16[] = {
  {&(_ZTV9S19968C16[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C16[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C16[];
extern  VTBL_ENTRY _ZTV9S19968C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C16[];
Class_Descriptor cd_S19968C16 = {  "S19968C16", // class name
  bases_S19968C16, 4,
  &(vtc_S19968C16[0]), // expected_vtbl_contents
  &(vtt_S19968C16[0]), // expected_vtt_contents
  ABISELECT(592,344), // object size
  NSPAIRA(_ZTI9S19968C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19968C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C16),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C15  : virtual S19968C2 , S19968C16 , S22028C16 , S19968C8 {
  ::S19968C8 s19968c15f0;
  void *s19968c15f1;
  long double s19968c15f2;
  void *s19968c15f3;
  ::S19968C4 s19968c15f4;
  void *s19968c15f5;
  short s19968c15f6:4;
  char  :0;
  int s19968c15f8;
  short s19968c15f9;
  int s19968c15f10;
  ~S19968C15(); // tgen
  S19968C15(); // tgen
};
//SIG(-1 S19968C15) C1{ VBC2{ vd v1 v2 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ BC3 BC6{ VBC7{ m} VBC3 Fp[9]} Fi Fp Fi Fs Fi:1 FC7 FC8{} Fi} BC7 BC6 FC6 Fp FD Fp FU4 Fp Fs:4 Fc:0 Fi Fs Fi}


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

static void Test_S19968C15()
{
  extern Class_Descriptor cd_S19968C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(124,294)];
    init_test(&cd_S19968C15, buf);
    S19968C15 *dp, &lv = *(dp=new (buf) S19968C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1968,1172), "sizeof(S19968C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C15)");
    check_base_class_offset(lv, (S19968C2*), ABISELECT(992,584), "S19968C15");
    /*is_ambiguous_... S19968C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C16*), ABISELECT(80,40), "S19968C15");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C16*), ABISELECT(1728,1032), "S19968C15");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*), ABISELECT(1728,1032), "S19968C15");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C16*), ABISELECT(1728,1032), "S19968C15");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(1728,1032), "S19968C15");
    check_base_class_offset(lv, (S19968C8*)(S19968C16*), 0, "S19968C15");
    check_base_class_offset(lv, (S19968C16*), 0, "S19968C15");
    /*is_ambiguous_... S19968C15::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*), 0, "S19968C15");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C8*), ABISELECT(352,204), "S19968C15");
    check_field_offset(lv, s19968c15f0, ABISELECT(432,244), "S19968C15.s19968c15f0");
    check_field_offset(lv, s19968c15f1, ABISELECT(752,424), "S19968C15.s19968c15f1");
    check_field_offset(lv, s19968c15f2, ABISELECT(768,428), "S19968C15.s19968c15f2");
    check_field_offset(lv, s19968c15f3, ABISELECT(784,440), "S19968C15.s19968c15f3");
    check_field_offset(lv, s19968c15f4, ABISELECT(800,444), "S19968C15.s19968c15f4");
    check_field_offset(lv, s19968c15f5, ABISELECT(960,564), "S19968C15.s19968c15f5");
    set_bf_and_test(lv, s19968c15f6, ABISELECT(968,568), 0, 4, 1, "S19968C15");
    set_bf_and_test(lv, s19968c15f6, ABISELECT(968,568), 0, 4, hide_sll(1LL<<3), "S19968C15");
    check_field_offset(lv, s19968c15f8, ABISELECT(972,572), "S19968C15.s19968c15f8");
    check_field_offset(lv, s19968c15f9, ABISELECT(976,576), "S19968C15.s19968c15f9");
    check_field_offset(lv, s19968c15f10, ABISELECT(980,580), "S19968C15.s19968c15f10");
    test_class_info(&lv, &cd_S19968C15);
    dp->~S19968C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C15(Test_S19968C15, "S19968C15", ABISELECT(1968,1172));

#else // __cplusplus

extern void _ZN9S19968C15C1Ev();
extern void _ZN9S19968C15D1Ev();
Name_Map name_map_S19968C15[] = {
  NSPAIR(_ZN9S19968C15C1Ev),
  NSPAIR(_ZN9S19968C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C16;
extern VTBL_ENTRY _ZTI9S19968C16[];
extern  VTBL_ENTRY _ZTV9S19968C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C16[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
static Base_Class bases_S19968C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C2,    ABISELECT(992,584), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //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_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(1728,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1728,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19968C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19968C8,    ABISELECT(352,204), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C15[];
extern void _ZN9S19968C15D1Ev();
extern void _ZN9S19968C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev)();
extern void ABISELECT(_ZThn992_N9S19968C15D1Ev,_ZThn584_N9S19968C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev)();
extern void ABISELECT(_ZThn992_N9S19968C15D0Ev,_ZThn584_N9S19968C15D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY vtc_S19968C15[] = {
  ABISELECT(992,584),
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
  (VTBL_ENTRY)&_ZN9S19968C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C15D0Ev,
  ABISELECT(1376,828),
  ABISELECT(1376,828),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
  0,
  0,
  ABISELECT(-992,-584),
  ABISELECT(-992,-584),
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern VTBL_ENTRY _ZTV9S19968C15[];
static  VTBL_ENTRY _tg__ZTV9S19968C16__9S19968C15[] = {
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C16__9S19968C15[] = {
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__A1__9S19968C15[] = {
  ABISELECT(1376,828),
  ABISELECT(1376,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTT_ENTRY vtt_S19968C15[] = {
  {&(_ZTV9S19968C15[5]),  5,20},
  {&(_tg__ZTV9S19968C16__9S19968C15[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C16__9S19968C15[4]),  4,4},
  {&(_tg__ZTV8S19968C8__A1__9S19968C15[4]),  4,4},
  {&(_ZTV9S19968C15[16]),  16,20},
  {&(_ZTV9S19968C15[11]),  11,20},
};
extern VTBL_ENTRY _ZTI9S19968C15[];
extern  VTBL_ENTRY _ZTV9S19968C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C15[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19968C15D0Ev,_ZThn584_N9S19968C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19968C15D1Ev,_ZThn584_N9S19968C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C15 = {  "S19968C15", // class name
  bases_S19968C15, 8,
  &(vtc_S19968C15[0]), // expected_vtbl_contents
  &(vtt_S19968C15[0]), // expected_vtt_contents
  ABISELECT(1968,1172), // object size
  NSPAIRA(_ZTI9S19968C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19968C15),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C15),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C14  : S19968C10 , S19968C15 , virtual S19968C11 , S19968C16 {
  int s19968c14f0;
  short s19968c14f1;
  void *s19968c14f2;
  int s19968c14f3;
  void *s19968c14f4;
  int s19968c14f5;
  long double s19968c14f6;
  __tsi64 s19968c14f7;
  virtual  ~S19968C14(); // _ZN9S19968C14D2Ev
  virtual void  v4(); // _ZN9S19968C142v4Ev
  S19968C14(); // tgen
};
//SIG(-1 S19968C14) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi} BC6{ VBC7{ vd v2 v3 Fp FC5 FC5 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC9{ BC5 BC3 Fi Fp Fi Fs Fi:1 FC4 FC10{} Fi} BC4 BC3 FC3 Fp FD Fp FU8 Fp Fs:4 Fc:0 Fi Fs Fi} VBC11{ VBC4 VBC3 BC2 BC12{ VBC7 VBC3 VBC2 BC5 v4} Fi Fi Fi Fs Fi FC13{ VBC5 VBC3 BC12 BC2 BC7 vd Fi} FL Fp Fi} BC9 vd v1 Fi Fs Fp Fi Fp Fi FD FL}


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

static void Test_S19968C14()
{
  extern Class_Descriptor cd_S19968C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(310,732)];
    init_test(&cd_S19968C14, buf);
    S19968C14 *dp, &lv = *(dp=new (buf) S19968C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4944,2924), "sizeof(S19968C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C14)");
    /*is_ambiguous_... S19968C14::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C14");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C16*)(S19968C15*), 0, "S19968C14");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C15*), 0, "S19968C14");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*), 0, "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C16*), 0, "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(1520,884), "S19968C14");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C16*)(S19968C15*), ABISELECT(1520,884), "S19968C14");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C15*), ABISELECT(1520,884), "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C16*), ABISELECT(1520,884), "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(1432,844), "S19968C14");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*), ABISELECT(1432,844), "S19968C14");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*), ABISELECT(1432,844), "S19968C14");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*), ABISELECT(1432,844), "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(1432,844), "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*), 0, "S19968C14");
    check_base_class_offset(lv, (S19968C2*)(S19968C15*), ABISELECT(1760,1024), "S19968C14");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*), ABISELECT(1760,1024), "S19968C14");
    /*is_ambiguous_... S19968C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C16*)(S19968C15*), ABISELECT(96,52), "S19968C14");
    check_base_class_offset(lv, (S19968C8*)(S19968C16*)(S19968C15*), ABISELECT(16,12), "S19968C14");
    check_base_class_offset(lv, (S19968C16*)(S19968C15*), ABISELECT(16,12), "S19968C14");
    /*is_ambiguous_... S19968C15::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C15*), ABISELECT(16,12), "S19968C14");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C15*), ABISELECT(368,216), "S19968C14");
    check_base_class_offset(lv, (S19968C15*), ABISELECT(16,12), "S19968C14");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*), ABISELECT(2496,1472), "S19968C14");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*), ABISELECT(4920,2912), "S19968C14");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*), ABISELECT(2528,1488), "S19968C14");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*), ABISELECT(2512,1484), "S19968C14");
    check_base_class_offset(lv, (S19968C11*), ABISELECT(2496,1472), "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C16*), ABISELECT(1088,636), "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C16*), ABISELECT(1008,596), "S19968C14");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C16*), ABISELECT(1008,596), "S19968C14");
    check_field_offset(lv, s19968c14f0, ABISELECT(1360,800), "S19968C14.s19968c14f0");
    check_field_offset(lv, s19968c14f1, ABISELECT(1364,804), "S19968C14.s19968c14f1");
    check_field_offset(lv, s19968c14f2, ABISELECT(1368,808), "S19968C14.s19968c14f2");
    check_field_offset(lv, s19968c14f3, ABISELECT(1376,812), "S19968C14.s19968c14f3");
    check_field_offset(lv, s19968c14f4, ABISELECT(1384,816), "S19968C14.s19968c14f4");
    check_field_offset(lv, s19968c14f5, ABISELECT(1392,820), "S19968C14.s19968c14f5");
    check_field_offset(lv, s19968c14f6, ABISELECT(1408,824), "S19968C14.s19968c14f6");
    check_field_offset(lv, s19968c14f7, ABISELECT(1424,836), "S19968C14.s19968c14f7");
    test_class_info(&lv, &cd_S19968C14);
    dp->~S19968C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C14(Test_S19968C14, "S19968C14", ABISELECT(4944,2924));

#else // __cplusplus

extern void _ZN9S19968C14C1Ev();
extern void _ZN9S19968C14D2Ev();
Name_Map name_map_S19968C14[] = {
  NSPAIR(_ZN9S19968C14C1Ev),
  NSPAIR(_ZN9S19968C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C16;
extern VTBL_ENTRY _ZTI9S19968C16[];
extern  VTBL_ENTRY _ZTV9S19968C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C16[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C15;
extern VTBL_ENTRY _ZTI9S19968C15[];
extern  VTBL_ENTRY _ZTV9S19968C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C15[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C16;
extern VTBL_ENTRY _ZTI9S19968C16[];
extern  VTBL_ENTRY _ZTV9S19968C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C16[];
static Base_Class bases_S19968C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(1520,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C8,    ABISELECT(1432,844), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C10,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C2,    ABISELECT(1760,1024), //bcp->offset
    30, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19968C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19968C16,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(16,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
    10, //immediately_derived
  0, 0},
  {&cd_S19968C8,    ABISELECT(368,216), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C15,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C10,    ABISELECT(2496,1472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(4920,2912), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(2528,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(2512,1484), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(2496,1472), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(1088,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19968C8,    ABISELECT(1008,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19968C16,    ABISELECT(1008,596), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C14[];
extern void _ZN9S19968C14D1Ev();
extern void _ZN9S19968C14D0Ev();
extern void _ZN9S19968C142v4Ev();
extern void ABISELECT(_ZThn16_N9S19968C14D1Ev,_ZThn12_N9S19968C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C14D0Ev,_ZThn12_N9S19968C14D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C14D1Ev,_ZTv0_n12_N9S19968C14D1Ev)();
extern void ABISELECT(_ZThn1760_N9S19968C14D1Ev,_ZThn1024_N9S19968C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C14D0Ev,_ZTv0_n12_N9S19968C14D0Ev)();
extern void ABISELECT(_ZThn1760_N9S19968C14D0Ev,_ZThn1024_N9S19968C14D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n64_N9S19968C14D1Ev,_ZTv0_n32_N9S19968C14D1Ev)();
extern void ABISELECT(_ZThn2496_N9S19968C14D1Ev,_ZThn1472_N9S19968C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19968C14D0Ev,_ZTv0_n32_N9S19968C14D0Ev)();
extern void ABISELECT(_ZThn2496_N9S19968C14D0Ev,_ZThn1472_N9S19968C14D0Ev)() __attribute__((weak));
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19968C14D1Ev,_ZTvn12_n32_N9S19968C14D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19968C14D0Ev,_ZTvn12_n32_N9S19968C14D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C14D1Ev,_ZTv0_n24_N9S19968C14D1Ev)();
extern void ABISELECT(_ZThn4920_N9S19968C14D1Ev,_ZThn2912_N9S19968C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C14D0Ev,_ZTv0_n24_N9S19968C14D0Ev)();
extern void ABISELECT(_ZThn4920_N9S19968C14D0Ev,_ZThn2912_N9S19968C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C14[] = {
  ABISELECT(4920,2912),
  ABISELECT(2496,1472),
  ABISELECT(1760,1024),
  ABISELECT(1520,884),
  0,
  ABISELECT(1432,844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&_ZN9S19968C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19968C142v4Ev,
  ABISELECT(1744,1012),
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C14D1Ev,_ZThn12_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C14D0Ev,_ZThn12_N9S19968C14D0Ev),
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  ABISELECT(-1008,-596),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(-1432,-844),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  0,
  0,
  ABISELECT(-1760,-1024),
  ABISELECT(-1760,-1024),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C14D1Ev,_ZTv0_n12_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C14D0Ev,_ZTv0_n12_N9S19968C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(16,12),
  ABISELECT(-2496,-1472),
  ABISELECT(2424,1440),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  ABISELECT(-2496,-1472),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C14D1Ev,_ZTv0_n32_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C14D0Ev,_ZTv0_n32_N9S19968C14D0Ev),
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-2512,-1484),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C14D1Ev,_ZTvn12_n32_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C14D0Ev,_ZTvn12_n32_N9S19968C14D0Ev),
  ABISELECT(-4920,-2912),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-4920,-2912),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C14D1Ev,_ZTv0_n24_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C14D0Ev,_ZTv0_n24_N9S19968C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19968C14[];
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C14[] = {
  ABISELECT(1520,884),
  0,
  ABISELECT(1432,844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__A__9S19968C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(-1432,-844),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN9S19968C15D1Ev();
extern void _ZN9S19968C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C15__9S19968C14[] = {
  ABISELECT(1744,1012),
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
  (VTBL_ENTRY)&_ZN9S19968C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19968C169S19968C15__9S19968C14[] = {
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C169S19968C15__A1__9S19968C14[] = {
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C15__A2__9S19968C14[] = {
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev)();
extern void ABISELECT(_ZThn1744_N9S19968C15D1Ev,_ZThn1012_N9S19968C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev)();
extern void ABISELECT(_ZThn1744_N9S19968C15D0Ev,_ZThn1012_N9S19968C15D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C15__9S19968C14[] = {
  0,
  0,
  ABISELECT(-1744,-1012),
  ABISELECT(-1744,-1012),
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__A1__9S19968C15__9S19968C14[] = {
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19968C16__A1__9S19968C14[] = {
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C16__A3__9S19968C14[] = {
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C11__9S19968C14[] = {
  ABISELECT(2424,1440),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C11__A1__9S19968C14[] = {
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C11__A1__9S19968C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C14[] = {
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C11__9S19968C14[] = {
  0,
  0,
  ABISELECT(752,460),
  ABISELECT(752,460),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C11__9S19968C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1080,640),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19968C7D1Ev,_ZThn1428_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2408_N8S19968C7D0Ev,_ZThn1428_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C11__9S19968C14[] = {
  ABISELECT(-2408,-1428),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C11__9S19968C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C11__9S19968C14[] = {
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C11__9S19968C14[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn2424_N9S19968C11D1Ev,_ZThn1440_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn2424_N9S19968C11D0Ev,_ZThn1440_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C11__9S19968C14[] = {
  ABISELECT(-2424,-1440),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A2__9S19968C14[] = {
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__A2__9S19968C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(3488,2068),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C14[] = {
  {&(_ZTV9S19968C14[8]),  8,68},
  {&(_tg__ZTV9S19968C10__A__9S19968C14[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__A__9S19968C14[4]),  4,4},
  {&(_tg__ZTV9S19968C15__9S19968C14[5]),  5,7},
  {&(_tg__ZTV9S19968C169S19968C15__9S19968C14[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C169S19968C15__A1__9S19968C14[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C15__A2__9S19968C14[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C15__9S19968C14[5]),  5,9},
  {&(_tg__ZTV8S19968C8__A1__9S19968C15__9S19968C14[4]),  4,4},
  {&(_tg__ZTV9S19968C16__A1__9S19968C14[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C16__A3__9S19968C14[4]),  4,4},
  {&(_ZTV9S19968C14[30]),  30,68},
  {&(_ZTV9S19968C14[16]),  16,68},
  {&(_ZTV9S19968C14[35]),  35,68},
  {&(_ZTV9S19968C14[22]),  22,68},
  {&(_ZTV9S19968C14[48]),  48,68},
  {&(_ZTV9S19968C14[57]),  57,68},
  {&(_ZTV9S19968C14[66]),  66,68},
  {&(_ZTV9S19968C14[26]),  26,68},
  {&(_tg__ZTV8S19968C8__9S19968C14[4]),  4,4},
  {&(_tg__ZTV9S19968C11__9S19968C14[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C11__A1__9S19968C14[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C11__A1__9S19968C14[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C14[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C11__9S19968C14[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C11__9S19968C14[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C11__9S19968C14[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C11__9S19968C14[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C11__9S19968C14[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C11__9S19968C14[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C11__9S19968C14[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A2__9S19968C14[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__A2__9S19968C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C14[];
extern  VTBL_ENTRY _ZTV9S19968C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C14[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2424_N9S19968C11D0Ev,_ZThn1440_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2424_N9S19968C11D1Ev,_ZThn1440_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2408_N8S19968C7D0Ev,_ZThn1428_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2408_N8S19968C7D1Ev,_ZThn1428_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N9S19968C15D0Ev,_ZThn1012_N9S19968C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N9S19968C15D1Ev,_ZThn1012_N9S19968C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C14D0Ev,_ZTv0_n24_N9S19968C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4920_N9S19968C14D0Ev,_ZThn2912_N9S19968C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C14D1Ev,_ZTv0_n24_N9S19968C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4920_N9S19968C14D1Ev,_ZThn2912_N9S19968C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C14D0Ev,_ZTv0_n32_N9S19968C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2496_N9S19968C14D0Ev,_ZThn1472_N9S19968C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C14D1Ev,_ZTv0_n32_N9S19968C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2496_N9S19968C14D1Ev,_ZThn1472_N9S19968C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C14D0Ev,_ZTv0_n12_N9S19968C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1760_N9S19968C14D0Ev,_ZThn1024_N9S19968C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C14D1Ev,_ZTv0_n12_N9S19968C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1760_N9S19968C14D1Ev,_ZThn1024_N9S19968C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C14 = {  "S19968C14", // class name
  bases_S19968C14, 19,
  &(vtc_S19968C14[0]), // expected_vtbl_contents
  &(vtt_S19968C14[0]), // expected_vtt_contents
  ABISELECT(4944,2924), // object size
  NSPAIRA(_ZTI9S19968C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19968C14),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C14),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C19  : S19968C8 {
  long double s19968c19f0[8];
  int s19968c19f1;
  short s19968c19f2;
  int s19968c19f3;
  short s19968c19f4;
  void *s19968c19f5;
  int s19968c19f6;
  int s19968c19f7;
  short s19968c19f8;
  int s19968c19f9[5];
  void *s19968c19f10;
  ~S19968C19(); // tgen
  S19968C19(); // tgen
};
//SIG(-1 S19968C19) C1{ BC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} FD[8] Fi Fs Fi Fs Fp Fi[2] Fs Fi[5] Fp}


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

static void Test_S19968C19()
{
  extern Class_Descriptor cd_S19968C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,84)];
    init_test(&cd_S19968C19, buf);
    S19968C19 *dp, &lv = *(dp=new (buf) S19968C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,332), "sizeof(S19968C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C19)");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C19");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(272,192), "S19968C19");
    check_base_class_offset(lv, (S19968C8*), 0, "S19968C19");
    check_field_offset(lv, s19968c19f0, ABISELECT(80,40), "S19968C19.s19968c19f0");
    check_field_offset(lv, s19968c19f1, ABISELECT(208,136), "S19968C19.s19968c19f1");
    check_field_offset(lv, s19968c19f2, ABISELECT(212,140), "S19968C19.s19968c19f2");
    check_field_offset(lv, s19968c19f3, ABISELECT(216,144), "S19968C19.s19968c19f3");
    check_field_offset(lv, s19968c19f4, ABISELECT(220,148), "S19968C19.s19968c19f4");
    check_field_offset(lv, s19968c19f5, ABISELECT(224,152), "S19968C19.s19968c19f5");
    check_field_offset(lv, s19968c19f6, ABISELECT(232,156), "S19968C19.s19968c19f6");
    check_field_offset(lv, s19968c19f7, ABISELECT(236,160), "S19968C19.s19968c19f7");
    check_field_offset(lv, s19968c19f8, ABISELECT(240,164), "S19968C19.s19968c19f8");
    check_field_offset(lv, s19968c19f9, ABISELECT(244,168), "S19968C19.s19968c19f9");
    check_field_offset(lv, s19968c19f10, ABISELECT(264,188), "S19968C19.s19968c19f10");
    test_class_info(&lv, &cd_S19968C19);
    dp->~S19968C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C19(Test_S19968C19, "S19968C19", ABISELECT(512,332));

#else // __cplusplus

extern void _ZN9S19968C19C1Ev();
extern void _ZN9S19968C19D1Ev();
Name_Map name_map_S19968C19[] = {
  NSPAIR(_ZN9S19968C19C1Ev),
  NSPAIR(_ZN9S19968C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
static Base_Class bases_S19968C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(272,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
    2, //immediately_derived
  0, 1},
  {&cd_S19968C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C19[];
static  VTBL_ENTRY vtc_S19968C19[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C19[0]),
};
extern VTBL_ENTRY _ZTV9S19968C19[];
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C19[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTT_ENTRY vtt_S19968C19[] = {
  {&(_ZTV9S19968C19[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C19[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C19[];
extern  VTBL_ENTRY _ZTV9S19968C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C19[];
Class_Descriptor cd_S19968C19 = {  "S19968C19", // class name
  bases_S19968C19, 3,
  &(vtc_S19968C19[0]), // expected_vtbl_contents
  &(vtt_S19968C19[0]), // expected_vtt_contents
  ABISELECT(512,332), // object size
  NSPAIRA(_ZTI9S19968C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19968C19),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C19),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  S19968C20  : S19968C5 {
  int s19968c20f0;
  short s19968c20f1;
  int s19968c20f2[8];
  ::S19968C12 s19968c20f3;
  int s19968c20f4;
  int s19968c20f5:9;
  virtual  ~S19968C20(); // _ZN9S19968C20D2Ev
  virtual void  v5(); // _ZN9S19968C202v5Ev
  virtual void  v6(); // _ZN9S19968C202v6Ev
  S19968C20(); // tgen
};
//SIG(-1 S19968C20) C1{ BC2{ VBC3{ VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC5{ VBC6{ vd v3 v4 Fp FC4 FC4 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC8{ VBC9{ m} VBC4 Fp[9]} VBC10{ VBC8 vd Fi:21 Fi} BC4 v5} BC11{ VBC9 VBC8 BC10 BC5 Fi Fi Fi Fs Fi FC12{ VBC4 VBC8 BC5 BC10 BC6 vd Fi} FL Fp Fi} vd Fi} BC12 BC4 BC13{ BC4 VBC6 BC11 BC10 vd Fs Fs[4] Fs FC6} vd Fc Fs FC4[6]} vd v1 v2 Fi Fs Fi[8] FC12 Fi Fi:9}


 S19968C20 ::~S19968C20(){ note_dtor("S19968C20", this);}
void  S19968C20 ::v5(){vfunc_called(this, "_ZN9S19968C202v5Ev");}
void  S19968C20 ::v6(){vfunc_called(this, "_ZN9S19968C202v6Ev");}
S19968C20 ::S19968C20(){ note_ctor("S19968C20", this);} // tgen

static void Test_S19968C20()
{
  extern Class_Descriptor cd_S19968C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,1793)];
    init_test(&cd_S19968C20, buf);
    S19968C20 *dp, &lv = *(dp=new (buf) S19968C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,7168), "sizeof(S19968C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C20)");
    /*is_ambiguous_... S19968C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C6*), ABISELECT(11008,6528), "S19968C20");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(11008,6528), "S19968C20");
    /*is_ambiguous_... S19968C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C12*)(S19968C5*), ABISELECT(11008,6528), "S19968C20");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C6*), ABISELECT(11248,6668), "S19968C20");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(11248,6668), "S19968C20");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(11248,6668), "S19968C20");
    check_base_class_offset(lv, (S19968C2*)(S19968C13*)(S19968C5*), ABISELECT(11248,6668), "S19968C20");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(11248,6668), "S19968C20");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C20");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C6*), 0, "S19968C20");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C13*)(S19968C5*), 0, "S19968C20");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C6*), ABISELECT(11984,7116), "S19968C20");
    /*is_ambiguous_... S19968C20::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(11984,7116), "S19968C20");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C6*), ABISELECT(11984,7116), "S19968C20");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(11984,7116), "S19968C20");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(11984,7116), "S19968C20");
    check_base_class_offset(lv, (S19968C8*)(S19968C12*)(S19968C5*), ABISELECT(11984,7116), "S19968C20");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(11984,7116), "S19968C20");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C12*)(S19968C5*), ABISELECT(11984,7116), "S19968C20");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(11984,7116), "S19968C20");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(11984,7116), "S19968C20");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(11984,7116), "S19968C20");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C13*)(S19968C5*), ABISELECT(11984,7116), "S19968C20");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C6*), ABISELECT(12064,7156), "S19968C20");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(12064,7156), "S19968C20");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(12064,7156), "S19968C20");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(12064,7156), "S19968C20");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C6*), ABISELECT(8336,4944), "S19968C20");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C7*)(S19968C6*), ABISELECT(8320,4940), "S19968C20");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(8576,5084), "S19968C20");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(8608,5100), "S19968C20");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(8592,5096), "S19968C20");
    check_base_class_offset(lv, (S19968C11*)(S19968C6*), ABISELECT(8576,5084), "S19968C20");
    check_base_class_offset(lv, (S19968C6*)(S19968C5*), ABISELECT(8320,4940), "S19968C20");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(16,4), "S19968C20");
    check_base_class_offset(lv, (S19968C7*)(S19968C12*)(S19968C5*), 0, "S19968C20");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C12*)(S19968C5*), ABISELECT(256,144), "S19968C20");
    /*is_ambiguous_... S19968C12::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C12*)(S19968C5*), ABISELECT(272,156), "S19968C20");
    check_base_class_offset(lv, (S19968C12*)(S19968C5*), 0, "S19968C20");
    /*is_ambiguous_... S19968C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C5*), ABISELECT(1024,608), "S19968C20");
    /*is_ambiguous_... S19968C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C13*)(S19968C5*), ABISELECT(3696,2188), "S19968C20");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(1264,748), "S19968C20");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(1296,764), "S19968C20");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(1280,760), "S19968C20");
    check_base_class_offset(lv, (S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(1264,748), "S19968C20");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C13*)(S19968C5*), ABISELECT(3936,2328), "S19968C20");
    check_base_class_offset(lv, (S19968C13*)(S19968C5*), ABISELECT(1264,748), "S19968C20");
    check_base_class_offset(lv, (S19968C5*), 0, "S19968C20");
    check_field_offset(lv, s19968c20f0, ABISELECT(6160,3644), "S19968C20.s19968c20f0");
    check_field_offset(lv, s19968c20f1, ABISELECT(6164,3648), "S19968C20.s19968c20f1");
    check_field_offset(lv, s19968c20f2, ABISELECT(6168,3652), "S19968C20.s19968c20f2");
    check_field_offset(lv, s19968c20f3, ABISELECT(6208,3684), "S19968C20.s19968c20f3");
    check_field_offset(lv, s19968c20f4, ABISELECT(8304,4932), "S19968C20.s19968c20f4");
    set_bf_and_test(lv, s19968c20f5, ABISELECT(8308,4936), 0, 9, 1, "S19968C20");
    set_bf_and_test(lv, s19968c20f5, ABISELECT(8308,4936), 0, 9, hide_sll(1LL<<8), "S19968C20");
    test_class_info(&lv, &cd_S19968C20);
    dp->~S19968C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C20(Test_S19968C20, "S19968C20", ABISELECT(12080,7168));

#else // __cplusplus

extern void _ZN9S19968C20C1Ev();
extern void _ZN9S19968C20D2Ev();
Name_Map name_map_S19968C20[] = {
  NSPAIR(_ZN9S19968C20C1Ev),
  NSPAIR(_ZN9S19968C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C6;
extern VTBL_ENTRY _ZTI8S19968C6[];
extern  VTBL_ENTRY _ZTV8S19968C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C12;
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C13;
extern VTBL_ENTRY _ZTI9S19968C13[];
extern  VTBL_ENTRY _ZTV9S19968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C13[];
extern Class_Descriptor cd_S19968C5;
extern VTBL_ENTRY _ZTI8S19968C5[];
extern  VTBL_ENTRY _ZTV8S19968C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C5[];
static Base_Class bases_S19968C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(11008,6528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C2,    ABISELECT(11248,6668), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(11984,7116), //bcp->offset
    92, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C10,    ABISELECT(12064,7156), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(8336,4944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19968C7,    ABISELECT(8320,4940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(8576,5084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(8608,5100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(8592,5096), //bcp->offset
    73, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(8576,5084), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19968C6,    ABISELECT(8320,4940), //bcp->offset
    52, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19968C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(256,144), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C2,    ABISELECT(272,156), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(3696,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1296,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(1280,760), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(3936,2328), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C13,    ABISELECT(1264,748), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C20[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C20D1Ev();
extern void _ZN9S19968C20D0Ev();
extern void _ZN9S19968C202v5Ev();
extern void _ZN9S19968C202v6Ev();
extern void ABISELECT(_ZThn256_N9S19968C20D1Ev,_ZThn144_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C20D0Ev,_ZThn144_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn272_N9S19968C20D1Ev,_ZThn156_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn272_N9S19968C20D0Ev,_ZThn156_N9S19968C20D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZThn1264_N9S19968C20D1Ev,_ZThn748_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn1264_N9S19968C20D0Ev,_ZThn748_N9S19968C20D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N9S19968C20D1Ev,_ZThn760_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn1280_N9S19968C20D0Ev,_ZThn760_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn3936_N9S19968C20D1Ev,_ZThn2328_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn3936_N9S19968C20D0Ev,_ZThn2328_N9S19968C20D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn8320_N9S19968C20D1Ev,_ZThn4940_N9S19968C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn8320_N9S19968C20D0Ev,_ZThn4940_N9S19968C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N9S19968C20D1Ev,_ZTvn144_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19968C20D0Ev,_ZTvn144_n36_N9S19968C20D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19968C20D1Ev,_ZTvn156_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19968C20D0Ev,_ZTvn156_n36_N9S19968C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn11248_N9S19968C20D1Ev,_ZThn6668_N9S19968C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn11248_N9S19968C20D0Ev,_ZThn6668_N9S19968C20D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn12064_N9S19968C20D1Ev,_ZThn7156_N9S19968C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn12064_N9S19968C20D0Ev,_ZThn7156_N9S19968C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19968C20[] = {
  ABISELECT(8320,4940),
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v6Ev,
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C20D1Ev,_ZThn144_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C20D0Ev,_ZThn144_N9S19968C20D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19968C20D1Ev,_ZThn156_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19968C20D0Ev,_ZThn156_N9S19968C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19968C20D1Ev,_ZThn748_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19968C20D0Ev,_ZThn748_N9S19968C20D0Ev),
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19968C20D1Ev,_ZThn760_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19968C20D0Ev,_ZThn760_N9S19968C20D0Ev),
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19968C20D1Ev,_ZThn2328_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19968C20D0Ev,_ZThn2328_N9S19968C20D0Ev),
  ABISELECT(-8320,-4940),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4940),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5084),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C20D1Ev,_ZTvn144_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C20D0Ev,_ZTvn144_n36_N9S19968C20D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5096),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C20D1Ev,_ZTvn156_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C20D0Ev,_ZTvn156_n36_N9S19968C20D0Ev),
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S19968C20[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C5D1Ev();
extern void _ZN8S19968C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C5__9S19968C20[] = {
  ABISELECT(8320,4940),
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C128S19968C5__9S19968C20[] = {
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C128S19968C5__A2__9S19968C20[] = {
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn11248_N8S19968C7D1Ev,_ZThn6668_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn11248_N8S19968C7D0Ev,_ZThn6668_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C128S19968C5__A2__9S19968C20[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C128S19968C5__A2__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn12064_N8S19968C7D1Ev,_ZThn7156_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn12064_N8S19968C7D0Ev,_ZThn7156_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C128S19968C5__A2__9S19968C20[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C128S19968C5__A2__9S19968C20[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C128S19968C5__A2__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11728,-6972),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C128S19968C5__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn11248_N9S19968C12D1Ev,_ZThn6668_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn11248_N9S19968C12D0Ev,_ZThn6668_N9S19968C12D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C128S19968C5__9S19968C20[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn12064_N9S19968C12D1Ev,_ZThn7156_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn12064_N9S19968C12D0Ev,_ZThn7156_N9S19968C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C128S19968C5__9S19968C20[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C128S19968C5__9S19968C20[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
};
extern void _ZN9S19968C13D1Ev();
extern void _ZN9S19968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C138S19968C5__9S19968C20[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN9S19968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C13D0Ev,
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C119S19968C138S19968C5__A1__9S19968C20[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C119S19968C138S19968C5__A3__9S19968C20[] = {
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C5__A3__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn9968_N8S19968C7D1Ev,_ZThn5908_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn9968_N8S19968C7D0Ev,_ZThn5908_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[] = {
  0,
  0,
  ABISELECT(-9968,-5908),
  ABISELECT(-9968,-5908),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10704,-6356),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn10784_N8S19968C7D1Ev,_ZThn6396_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn10784_N8S19968C7D0Ev,_ZThn6396_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[] = {
  ABISELECT(-10784,-6396),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10784,-6396),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C119S19968C138S19968C5__A1__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C119S19968C138S19968C5__A1__9S19968C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn9984_N9S19968C11D1Ev,_ZThn5920_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn9984_N9S19968C11D0Ev,_ZThn5920_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C119S19968C138S19968C5__A1__9S19968C20[] = {
  0,
  0,
  ABISELECT(-9984,-5920),
  ABISELECT(-9984,-5920),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn10800_N9S19968C11D1Ev,_ZThn6408_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn10800_N9S19968C11D0Ev,_ZThn6408_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C5__A1__9S19968C20[] = {
  ABISELECT(-10800,-6408),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6408),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C138S19968C5__A4__9S19968C20[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C138S19968C5__A4__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-8048,-4788),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn9984_N9S19968C13D1Ev,_ZThn5920_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn9984_N9S19968C13D0Ev,_ZThn5920_N9S19968C13D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C138S19968C5__9S19968C20[] = {
  0,
  0,
  ABISELECT(-9984,-5920),
  ABISELECT(-9984,-5920),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C138S19968C5__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C138S19968C5__9S19968C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn10800_N9S19968C13D1Ev,_ZThn6408_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn10800_N9S19968C13D0Ev,_ZThn6408_N9S19968C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C138S19968C5__9S19968C20[] = {
  ABISELECT(-10800,-6408),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6408),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C138S19968C5__9S19968C20[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn8320_N8S19968C5D1Ev,_ZThn4940_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn8320_N8S19968C5D0Ev,_ZThn4940_N8S19968C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19968C6__8S19968C5__9S19968C20[] = {
  ABISELECT(-8320,-4940),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4940),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn11248_N8S19968C5D1Ev,_ZThn6668_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn11248_N8S19968C5D0Ev,_ZThn6668_N8S19968C5D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C5__9S19968C20[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C5__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn12064_N8S19968C5D1Ev,_ZThn7156_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn12064_N8S19968C5D0Ev,_ZThn7156_N8S19968C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C5__9S19968C20[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__8S19968C5__9S19968C20[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5084),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C5__9S19968C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5096),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C12__A2__8S19968C5__9S19968C20[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C13__8S19968C5__9S19968C20[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C5__9S19968C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C13__A4__8S19968C5__9S19968C20[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C6D1Ev();
extern void _ZN8S19968C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C6__9S19968C20[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C78S19968C6__9S19968C20[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C7D1Ev,_ZThn1728_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C7D0Ev,_ZThn1728_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C78S19968C6__9S19968C20[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C78S19968C6__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C7D1Ev,_ZThn2216_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C7D0Ev,_ZThn2216_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C78S19968C6__9S19968C20[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__9S19968C20[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C118S19968C6__A1__9S19968C20[] = {
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2656_N8S19968C7D1Ev,_ZThn1572_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2656_N8S19968C7D0Ev,_ZThn1572_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__9S19968C20[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2060_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2060_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__9S19968C20[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C118S19968C6__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C118S19968C6__9S19968C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C11D1Ev,_ZThn1584_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C11D0Ev,_ZThn1584_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C118S19968C6__9S19968C20[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2072_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2072_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C118S19968C6__9S19968C20[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C6D1Ev,_ZThn1728_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19968C6D0Ev,_ZThn1728_N8S19968C6D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C6__9S19968C20[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C6__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C6D1Ev,_ZThn2216_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19968C6D0Ev,_ZThn2216_N8S19968C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C6__9S19968C20[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C11__8S19968C6__9S19968C20[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A1__8S19968C6__9S19968C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C20[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__9S19968C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTT_ENTRY vtt_S19968C20[] = {
  {&(_ZTV9S19968C20[8]),  8,104},
  {&(_tg__ZTV8S19968C5__9S19968C20[8]),  8,11},
  {&(_tg__ZTV9S19968C128S19968C5__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C79S19968C128S19968C5__A2__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C128S19968C5__A2__9S19968C20[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C128S19968C5__A2__9S19968C20[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C128S19968C5__A2__9S19968C20[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C128S19968C5__A2__9S19968C20[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C128S19968C5__A2__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C128S19968C5__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C128S19968C5__9S19968C20[5]),  5,9},
  {&(_tg__ZTV9S19968C10__9S19968C128S19968C5__9S19968C20[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C128S19968C5__9S19968C20[5]),  5,7},
  {&(_tg__ZTV9S19968C138S19968C5__9S19968C20[7]),  7,9},
  {&(_tg__ZTV9S19968C119S19968C138S19968C5__A1__9S19968C20[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C119S19968C138S19968C5__A3__9S19968C20[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C5__A3__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C119S19968C138S19968C5__A1__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C119S19968C138S19968C5__A1__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C119S19968C138S19968C5__A1__9S19968C20[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C5__A1__9S19968C20[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C138S19968C5__A4__9S19968C20[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C138S19968C5__A4__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C138S19968C5__9S19968C20[5]),  5,9},
  {&(_tg__ZTV8S19968C8__9S19968C138S19968C5__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C138S19968C5__9S19968C20[7]),  7,10},
  {&(_tg__ZTV9S19968C10__A1__9S19968C138S19968C5__9S19968C20[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C138S19968C5__9S19968C20[5]),  5,7},
  {&(_tg__ZTV8S19968C6__8S19968C5__9S19968C20[9]),  9,12},
  {&(_tg__ZTV8S19968C2__8S19968C5__9S19968C20[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C5__9S19968C20[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C5__9S19968C20[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__8S19968C5__9S19968C20[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C5__9S19968C20[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C12__A2__8S19968C5__9S19968C20[5]),  5,7},
  {&(_tg__ZTV9S19968C13__8S19968C5__9S19968C20[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C5__9S19968C20[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C13__A4__8S19968C5__9S19968C20[5]),  5,7},
  {&(_ZTV9S19968C20[61]),  61,104},
  {&(_ZTV9S19968C20[88]),  88,104},
  {&(_ZTV9S19968C20[96]),  96,104},
  {&(_ZTV9S19968C20[102]),  102,104},
  {&(_ZTV9S19968C20[71]),  71,104},
  {&(_ZTV9S19968C20[80]),  80,104},
  {&(_ZTV9S19968C20[18]),  18,104},
  {&(_ZTV9S19968C20[33]),  33,104},
  {&(_ZTV9S19968C20[42]),  42,104},
  {&(_ZTV9S19968C20[50]),  50,104},
  {&(_tg__ZTV8S19968C6__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C78S19968C6__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C78S19968C6__9S19968C20[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C78S19968C6__9S19968C20[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C78S19968C6__9S19968C20[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__9S19968C20[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C118S19968C6__A1__9S19968C20[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__9S19968C20[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__9S19968C20[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__9S19968C20[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C118S19968C6__9S19968C20[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C118S19968C6__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C118S19968C6__9S19968C20[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C118S19968C6__9S19968C20[6]),  6,8},
  {&(_tg__ZTV8S19968C2__8S19968C6__9S19968C20[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C6__9S19968C20[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C6__9S19968C20[6]),  6,8},
  {&(_tg__ZTV9S19968C11__8S19968C6__9S19968C20[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C11__A1__8S19968C6__9S19968C20[7]),  7,10},
  {&(_tg__ZTV8S19968C8__9S19968C20[4]),  4,4},
  {&(_tg__ZTV9S19968C10__9S19968C20[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__9S19968C20[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19968C20[];
extern  VTBL_ENTRY _ZTV9S19968C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C20[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C6D0Ev,_ZThn2216_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C6D1Ev,_ZThn2216_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C6D0Ev,_ZThn1728_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C6D1Ev,_ZThn1728_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19968C5D0Ev,_ZThn7156_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19968C5D1Ev,_ZThn7156_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19968C5D0Ev,_ZThn6668_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19968C5D1Ev,_ZThn6668_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S19968C5D0Ev,_ZThn4940_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S19968C5D1Ev,_ZThn4940_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19968C13D0Ev,_ZThn6408_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19968C13D1Ev,_ZThn6408_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19968C13D0Ev,_ZThn5920_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19968C13D1Ev,_ZThn5920_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D0Ev,_ZThn2072_N9S19968C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19968C11D0Ev,_ZThn6408_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19968C11D1Ev,_ZThn2072_N9S19968C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19968C11D1Ev,_ZThn6408_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19968C11D0Ev,_ZThn1584_N9S19968C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19968C11D0Ev,_ZThn5920_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19968C11D1Ev,_ZThn1584_N9S19968C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19968C11D1Ev,_ZThn5920_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19968C12D0Ev,_ZThn7156_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19968C12D1Ev,_ZThn7156_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19968C12D0Ev,_ZThn6668_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19968C12D1Ev,_ZThn6668_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D0Ev,_ZThn2060_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C7D0Ev,_ZThn2216_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N8S19968C7D0Ev,_ZThn6396_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19968C7D0Ev,_ZThn7156_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19968C7D1Ev,_ZThn2060_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19968C7D1Ev,_ZThn2216_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N8S19968C7D1Ev,_ZThn6396_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19968C7D1Ev,_ZThn7156_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19968C7D0Ev,_ZThn1572_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C7D0Ev,_ZThn1728_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N8S19968C7D0Ev,_ZThn5908_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19968C7D0Ev,_ZThn6668_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19968C7D1Ev,_ZThn1572_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19968C7D1Ev,_ZThn1728_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N8S19968C7D1Ev,_ZThn5908_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19968C7D1Ev,_ZThn6668_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19968C20D0Ev,_ZThn7156_N9S19968C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19968C20D1Ev,_ZThn7156_N9S19968C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19968C20D0Ev,_ZThn6668_N9S19968C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19968C20D1Ev,_ZThn6668_N9S19968C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N9S19968C20D0Ev,_ZThn4940_N9S19968C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N9S19968C20D1Ev,_ZThn4940_N9S19968C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C20 = {  "S19968C20", // class name
  bases_S19968C20, 26,
  &(vtc_S19968C20[0]), // expected_vtbl_contents
  &(vtt_S19968C20[0]), // expected_vtt_contents
  ABISELECT(12080,7168), // object size
  NSPAIRA(_ZTI9S19968C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19968C20),104, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C20),76, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C18  : S19968C2 , virtual S19968C8 , virtual S19968C19 , virtual S19968C10 , S19968C20 {
  short s19968c18f0[7];
  long double s19968c18f1;
  ::S22028C16 s19968c18f2;
  int s19968c18f3;
  void *s19968c18f4[8];
  int s19968c18f5;
  virtual void  v7(); // _ZN9S19968C182v7Ev
  virtual void  v8(); // _ZN9S19968C182v8Ev
  ~S19968C18(); // tgen
  S19968C18(); // tgen
};
//SIG(-1 S19968C18) C1{ BC2{ vd v3 v4 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ BC5 FD[8] Fi Fs Fi Fs Fp Fi Fi Fs Fi[5] Fp} VBC8{ VBC5 vd Fi:21 Fi} BC9{ BC10{ VBC11{ VBC3 BC12{ VBC2 VBC5 VBC8 BC3 v5} BC13{ VBC6 VBC5 BC8 BC12 Fi Fi Fi Fs Fi FC14{ VBC3 VBC5 BC12 BC8 BC2 vd Fi} FL Fp Fi} vd Fi} BC14 BC3 BC15{ BC3 VBC2 BC13 BC8 vd Fs Fs[4] Fs FC2} vd Fc Fs FC3[6]} vd v6 v7 Fi Fs Fi[8] FC14 Fi Fi:9} v1 v2 Fs[7] FD FC6 Fi Fp[8] Fi}


void  S19968C18 ::v7(){vfunc_called(this, "_ZN9S19968C182v7Ev");}
void  S19968C18 ::v8(){vfunc_called(this, "_ZN9S19968C182v8Ev");}
S19968C18 ::~S19968C18(){ note_dtor("S19968C18", this);} // tgen
S19968C18 ::S19968C18(){ note_ctor("S19968C18", this);} // tgen

static void Test_S19968C18()
{
  extern Class_Descriptor cd_S19968C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(826,1970)];
    init_test(&cd_S19968C18, buf);
    S19968C18 *dp, &lv = *(dp=new (buf) S19968C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13200,7876), "sizeof(S19968C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C18)");
    /*is_ambiguous_... S19968C18::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*), 0, "S19968C18");
    /*is_ambiguous_... S19968C18::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C18");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C19*), 0, "S19968C18");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C6*), 0, "S19968C18");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), 0, "S19968C18");
    /*is_ambiguous_... S19968C18::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(9248,5496), "S19968C18");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C19*), ABISELECT(9248,5496), "S19968C18");
    /*is_ambiguous_... S19968C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C6*), ABISELECT(9248,5496), "S19968C18");
    /*is_ambiguous_... S19968C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(9248,5496), "S19968C18");
    /*is_ambiguous_... S19968C18::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C8*), ABISELECT(9168,5456), "S19968C18");
    /*is_ambiguous_... S19968C18::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(9168,5456), "S19968C18");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C6*), ABISELECT(9168,5456), "S19968C18");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C6*), ABISELECT(9168,5456), "S19968C18");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(9168,5456), "S19968C18");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(9168,5456), "S19968C18");
    check_base_class_offset(lv, (S19968C8*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(9168,5456), "S19968C18");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(9168,5456), "S19968C18");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(9168,5456), "S19968C18");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(9168,5456), "S19968C18");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(9168,5456), "S19968C18");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(9168,5456), "S19968C18");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(9168,5456), "S19968C18");
    check_base_class_offset(lv, (S19968C8*)(S19968C19*), ABISELECT(9488,5636), "S19968C18");
    check_base_class_offset(lv, (S19968C19*), ABISELECT(9488,5636), "S19968C18");
    /*is_ambiguous_... S19968C18::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*), ABISELECT(9760,5828), "S19968C18");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C6*), ABISELECT(9760,5828), "S19968C18");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(9760,5828), "S19968C18");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(9760,5828), "S19968C18");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(9760,5828), "S19968C18");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C6*), ABISELECT(12464,7428), "S19968C18");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(12464,7428), "S19968C18");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(12464,7428), "S19968C18");
    check_base_class_offset(lv, (S19968C2*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(12464,7428), "S19968C18");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(12464,7428), "S19968C18");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C6*), ABISELECT(9792,5844), "S19968C18");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C7*)(S19968C6*), ABISELECT(9776,5840), "S19968C18");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(10032,5984), "S19968C18");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(10064,6000), "S19968C18");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(10048,5996), "S19968C18");
    check_base_class_offset(lv, (S19968C11*)(S19968C6*), ABISELECT(10032,5984), "S19968C18");
    check_base_class_offset(lv, (S19968C6*)(S19968C5*)(S19968C20*), ABISELECT(9776,5840), "S19968C18");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(752,452), "S19968C18");
    check_base_class_offset(lv, (S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(736,448), "S19968C18");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(992,592), "S19968C18");
    /*is_ambiguous_... S19968C12::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(1008,604), "S19968C18");
    check_base_class_offset(lv, (S19968C12*)(S19968C5*)(S19968C20*), ABISELECT(736,448), "S19968C18");
    /*is_ambiguous_... S19968C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C5*)(S19968C20*), ABISELECT(1760,1056), "S19968C18");
    /*is_ambiguous_... S19968C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(4432,2636), "S19968C18");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(2000,1196), "S19968C18");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(2032,1212), "S19968C18");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(2016,1208), "S19968C18");
    check_base_class_offset(lv, (S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(2000,1196), "S19968C18");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(4672,2776), "S19968C18");
    check_base_class_offset(lv, (S19968C13*)(S19968C5*)(S19968C20*), ABISELECT(2000,1196), "S19968C18");
    check_base_class_offset(lv, (S19968C5*)(S19968C20*), ABISELECT(736,448), "S19968C18");
    check_base_class_offset(lv, (S19968C20*), ABISELECT(736,448), "S19968C18");
    check_field_offset(lv, s19968c18f0, ABISELECT(9046,5386), "S19968C18.s19968c18f0");
    check_field_offset(lv, s19968c18f1, ABISELECT(9072,5400), "S19968C18.s19968c18f1");
    check_field_offset(lv, s19968c18f2, ABISELECT(9088,5412), "S19968C18.s19968c18f2");
    check_field_offset(lv, s19968c18f3, ABISELECT(9092,5416), "S19968C18.s19968c18f3");
    check_field_offset(lv, s19968c18f4, ABISELECT(9096,5420), "S19968C18.s19968c18f4");
    check_field_offset(lv, s19968c18f5, ABISELECT(9160,5452), "S19968C18.s19968c18f5");
    test_class_info(&lv, &cd_S19968C18);
    dp->~S19968C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C18(Test_S19968C18, "S19968C18", ABISELECT(13200,7876));

#else // __cplusplus

extern void _ZN9S19968C18C1Ev();
extern void _ZN9S19968C18D1Ev();
Name_Map name_map_S19968C18[] = {
  NSPAIR(_ZN9S19968C18C1Ev),
  NSPAIR(_ZN9S19968C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C19;
extern VTBL_ENTRY _ZTI9S19968C19[];
extern  VTBL_ENTRY _ZTV9S19968C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C19[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C6;
extern VTBL_ENTRY _ZTI8S19968C6[];
extern  VTBL_ENTRY _ZTV8S19968C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C12;
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C13;
extern VTBL_ENTRY _ZTI9S19968C13[];
extern  VTBL_ENTRY _ZTV9S19968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C13[];
extern Class_Descriptor cd_S19968C5;
extern VTBL_ENTRY _ZTI8S19968C5[];
extern  VTBL_ENTRY _ZTV8S19968C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C5[];
extern Class_Descriptor cd_S19968C20;
extern VTBL_ENTRY _ZTI9S19968C20[];
extern  VTBL_ENTRY _ZTV9S19968C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C20[];
static Base_Class bases_S19968C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(9248,5496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(9168,5456), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C8,    ABISELECT(9488,5636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19968C19,    ABISELECT(9488,5636), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C10,    ABISELECT(9760,5828), //bcp->offset
    75, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C2,    ABISELECT(12464,7428), //bcp->offset
    114, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(9792,5844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(9776,5840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(10032,5984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(10064,6000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19968C7,    ABISELECT(10048,5996), //bcp->offset
    104, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(10032,5984), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19968C6,    ABISELECT(9776,5840), //bcp->offset
    83, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(752,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19968C7,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(992,592), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19968C2,    ABISELECT(1008,604), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19968C12,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1760,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(4432,2636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(2000,1196), //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
    16, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(2032,1212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(2016,1208), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(2000,1196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(4672,2776), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19968C13,    ABISELECT(2000,1196), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19968C5,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19968C20,    ABISELECT(736,448), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C18[];
extern void _ZN9S19968C18D1Ev();
extern void _ZN9S19968C18D0Ev();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void _ZN9S19968C182v7Ev();
extern void _ZN9S19968C182v8Ev();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn736_N9S19968C18D1Ev,_ZThn448_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn736_N9S19968C18D0Ev,_ZThn448_N9S19968C18D0Ev)();
extern void _ZN9S19968C202v5Ev();
extern void _ZN9S19968C202v6Ev();
extern void ABISELECT(_ZThn992_N9S19968C18D1Ev,_ZThn592_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn992_N9S19968C18D0Ev,_ZThn592_N9S19968C18D0Ev)();
extern void ABISELECT(_ZThn1008_N9S19968C18D1Ev,_ZThn604_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn1008_N9S19968C18D0Ev,_ZThn604_N9S19968C18D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZThn2000_N9S19968C18D1Ev,_ZThn1196_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn2000_N9S19968C18D0Ev,_ZThn1196_N9S19968C18D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn2016_N9S19968C18D1Ev,_ZThn1208_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn2016_N9S19968C18D0Ev,_ZThn1208_N9S19968C18D0Ev)();
extern void ABISELECT(_ZThn4672_N9S19968C18D1Ev,_ZThn2776_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn4672_N9S19968C18D0Ev,_ZThn2776_N9S19968C18D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C18D1Ev,_ZTv0_n24_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn9760_N9S19968C18D1Ev,_ZThn5828_N9S19968C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C18D0Ev,_ZTv0_n24_N9S19968C18D0Ev)();
extern void ABISELECT(_ZThn9760_N9S19968C18D0Ev,_ZThn5828_N9S19968C18D0Ev)() __attribute__((weak));
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19968C18D1Ev,_ZTv0_n36_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn9776_N9S19968C18D1Ev,_ZThn5840_N9S19968C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19968C18D0Ev,_ZTv0_n36_N9S19968C18D0Ev)();
extern void ABISELECT(_ZThn9776_N9S19968C18D0Ev,_ZThn5840_N9S19968C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N9S19968C18D1Ev,_ZTvn144_n36_N9S19968C18D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19968C18D0Ev,_ZTvn144_n36_N9S19968C18D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19968C18D1Ev,_ZTvn156_n36_N9S19968C18D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19968C18D0Ev,_ZTvn156_n36_N9S19968C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C18D1Ev,_ZTv0_n12_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn12464_N9S19968C18D1Ev,_ZThn7428_N9S19968C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C18D0Ev,_ZTv0_n12_N9S19968C18D0Ev)();
extern void ABISELECT(_ZThn12464_N9S19968C18D0Ev,_ZThn7428_N9S19968C18D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY vtc_S19968C18[] = {
  ABISELECT(12464,7428),
  ABISELECT(9776,5840),
  ABISELECT(9760,5828),
  ABISELECT(9488,5636),
  ABISELECT(9248,5496),
  0,
  ABISELECT(9168,5456),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN9S19968C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C18D0Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  (VTBL_ENTRY)&_ZN9S19968C182v7Ev,
  (VTBL_ENTRY)&_ZN9S19968C182v8Ev,
  ABISELECT(9040,5392),
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  ABISELECT(-736,-448),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19968C18D1Ev,_ZThn448_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19968C18D0Ev,_ZThn448_N9S19968C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19968C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v6Ev,
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19968C18D1Ev,_ZThn592_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19968C18D0Ev,_ZThn592_N9S19968C18D0Ev),
  ABISELECT(-1008,-604),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1008_N9S19968C18D1Ev,_ZThn604_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1008_N9S19968C18D0Ev,_ZThn604_N9S19968C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  ABISELECT(-2000,-1196),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19968C18D1Ev,_ZThn1196_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19968C18D0Ev,_ZThn1196_N9S19968C18D0Ev),
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-2016,-1208),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19968C18D1Ev,_ZThn1208_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19968C18D0Ev,_ZThn1208_N9S19968C18D0Ev),
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-4672,-2776),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19968C18D1Ev,_ZThn2776_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19968C18D0Ev,_ZThn2776_N9S19968C18D0Ev),
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-9168,-5456),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  ABISELECT(-240,-140),
  ABISELECT(-9488,-5636),
  ABISELECT(-9488,-5636),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  ABISELECT(-9760,-5828),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9760,-5828),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C18D1Ev,_ZTv0_n24_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C18D0Ev,_ZTv0_n24_N9S19968C18D0Ev),
  ABISELECT(-9776,-5840),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  ABISELECT(-9776,-5840),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C18D1Ev,_ZTv0_n36_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C18D0Ev,_ZTv0_n36_N9S19968C18D0Ev),
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-10032,-5984),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C18D1Ev,_ZTvn144_n36_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C18D0Ev,_ZTvn144_n36_N9S19968C18D0Ev),
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-10048,-5996),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C18D1Ev,_ZTvn156_n36_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C18D0Ev,_ZTvn156_n36_N9S19968C18D0Ev),
  0,
  0,
  ABISELECT(-12464,-7428),
  ABISELECT(-12464,-7428),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C18D1Ev,_ZTv0_n12_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C18D0Ev,_ZTv0_n12_N9S19968C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern VTBL_ENTRY _ZTV9S19968C18[];
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C20D1Ev();
extern void _ZN9S19968C20D0Ev();
extern void _ZN9S19968C202v5Ev();
extern void _ZN9S19968C202v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C20__9S19968C18[] = {
  ABISELECT(9040,5392),
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v6Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C5D1Ev();
extern void _ZN8S19968C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(9040,5392),
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C128S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[] = {
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn11728_N8S19968C7D1Ev,_ZThn6980_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn11728_N8S19968C7D0Ev,_ZThn6980_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn9024_N8S19968C7D1Ev,_ZThn5380_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn9024_N8S19968C7D0Ev,_ZThn5380_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C128S19968C59S19968C20__A2__9S19968C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C128S19968C59S19968C20__A2__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8176,-4864),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C128S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn11728_N9S19968C12D1Ev,_ZThn6980_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn11728_N9S19968C12D0Ev,_ZThn6980_N9S19968C12D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C128S19968C59S19968C20__9S19968C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn9024_N9S19968C12D1Ev,_ZThn5380_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn9024_N9S19968C12D0Ev,_ZThn5380_N9S19968C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C128S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C128S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
};
extern void _ZN9S19968C13D1Ev();
extern void _ZN9S19968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C138S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN9S19968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C13D0Ev,
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[] = {
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7168,-4260),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn10448_N8S19968C7D1Ev,_ZThn6220_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn10448_N8S19968C7D0Ev,_ZThn6220_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[] = {
  0,
  0,
  ABISELECT(-10448,-6220),
  ABISELECT(-10448,-6220),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7152,-4248),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn7744_N8S19968C7D1Ev,_ZThn4620_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn7744_N8S19968C7D0Ev,_ZThn4620_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[] = {
  ABISELECT(-7744,-4620),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-7744,-4620),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7168,-4260),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn10464_N9S19968C11D1Ev,_ZThn6232_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn10464_N9S19968C11D0Ev,_ZThn6232_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[] = {
  0,
  0,
  ABISELECT(-10464,-6232),
  ABISELECT(-10464,-6232),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn7760_N9S19968C11D1Ev,_ZThn4632_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn7760_N9S19968C11D0Ev,_ZThn4632_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[] = {
  ABISELECT(-7760,-4632),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-7760,-4632),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C138S19968C59S19968C20__A4__9S19968C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C138S19968C59S19968C20__A4__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn10464_N9S19968C13D1Ev,_ZThn6232_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn10464_N9S19968C13D0Ev,_ZThn6232_N9S19968C13D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C138S19968C59S19968C20__9S19968C18[] = {
  0,
  0,
  ABISELECT(-10464,-6232),
  ABISELECT(-10464,-6232),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C138S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7168,-4260),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C138S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn7760_N9S19968C13D1Ev,_ZThn4632_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn7760_N9S19968C13D0Ev,_ZThn4632_N9S19968C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C138S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(-7760,-4632),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-7760,-4632),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C138S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn9040_N8S19968C5D1Ev,_ZThn5392_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn9040_N8S19968C5D0Ev,_ZThn5392_N8S19968C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19968C6__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(-9040,-5392),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  ABISELECT(-9040,-5392),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn11728_N8S19968C5D1Ev,_ZThn6980_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn11728_N8S19968C5D0Ev,_ZThn6980_N8S19968C5D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C59S19968C20__9S19968C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn9024_N8S19968C5D1Ev,_ZThn5380_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn9024_N8S19968C5D0Ev,_ZThn5380_N8S19968C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-9296,-5536),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-9312,-5548),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C12__A2__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C13__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C13__A4__8S19968C59S19968C20__9S19968C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn9040_N9S19968C20D1Ev,_ZThn5392_N9S19968C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn9040_N9S19968C20D0Ev,_ZThn5392_N9S19968C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19968C6__9S19968C20__9S19968C18[] = {
  ABISELECT(-9040,-5392),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  ABISELECT(-9040,-5392),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn11728_N9S19968C20D1Ev,_ZThn6980_N9S19968C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn11728_N9S19968C20D0Ev,_ZThn6980_N9S19968C20D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C20__9S19968C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C20__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn9024_N9S19968C20D1Ev,_ZThn5380_N9S19968C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev)();
extern void ABISELECT(_ZThn9024_N9S19968C20D0Ev,_ZThn5380_N9S19968C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C20__9S19968C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N9S19968C20D1Ev,_ZTvn144_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19968C20D0Ev,_ZTvn144_n36_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__9S19968C20__9S19968C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-9296,-5536),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C20D1Ev,_ZTvn144_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C20D0Ev,_ZTvn144_n36_N9S19968C20D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19968C20D1Ev,_ZTvn156_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19968C20D0Ev,_ZTvn156_n36_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C20__9S19968C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-9312,-5548),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C20D1Ev,_ZTvn156_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C20D0Ev,_ZTvn156_n36_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C20D1Ev,_ZThn144_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C20D0Ev,_ZThn144_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C128S19968C5__A2__9S19968C20__9S19968C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C20D1Ev,_ZThn144_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C20D0Ev,_ZThn144_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZThn1264_N9S19968C20D1Ev,_ZThn748_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn1264_N9S19968C20D0Ev,_ZThn748_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C138S19968C5__9S19968C20__9S19968C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19968C20D1Ev,_ZThn748_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19968C20D0Ev,_ZThn748_N9S19968C20D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N9S19968C20D1Ev,_ZThn760_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn1280_N9S19968C20D0Ev,_ZThn760_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20__9S19968C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19968C20D1Ev,_ZThn760_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19968C20D0Ev,_ZThn760_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZThn3936_N9S19968C20D1Ev,_ZThn2328_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn3936_N9S19968C20D0Ev,_ZThn2328_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C138S19968C5__A4__9S19968C20__9S19968C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19968C20D1Ev,_ZThn2328_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19968C20D0Ev,_ZThn2328_N9S19968C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19968C19__9S19968C18[] = {
  ABISELECT(-240,-140),
  ABISELECT(-9488,-5636),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C19__A1__9S19968C18[] = {
  ABISELECT(-240,-140),
  ABISELECT(-9488,-5636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C18[] = {
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(592,372),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C6D1Ev();
extern void _ZN8S19968C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C6__9S19968C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C78S19968C6__9S19968C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2688_N8S19968C7D1Ev,_ZThn1588_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2688_N8S19968C7D0Ev,_ZThn1588_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C78S19968C6__9S19968C18[] = {
  0,
  0,
  ABISELECT(-2688,-1588),
  ABISELECT(-2688,-1588),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C78S19968C6__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C78S19968C6__9S19968C18[] = {
  ABISELECT(16,12),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__9S19968C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C118S19968C6__A1__9S19968C18[] = {
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2416_N8S19968C7D1Ev,_ZThn1432_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2416_N8S19968C7D0Ev,_ZThn1432_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__9S19968C18[] = {
  0,
  0,
  ABISELECT(-2416,-1432),
  ABISELECT(-2416,-1432),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(880,540),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__9S19968C18[] = {
  ABISELECT(288,168),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(288,168),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C118S19968C6__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C118S19968C6__9S19968C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn2432_N9S19968C11D1Ev,_ZThn1444_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn2432_N9S19968C11D0Ev,_ZThn1444_N9S19968C11D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C118S19968C6__9S19968C18[] = {
  0,
  0,
  ABISELECT(-2432,-1444),
  ABISELECT(-2432,-1444),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C118S19968C6__9S19968C18[] = {
  ABISELECT(272,156),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn2688_N8S19968C6D1Ev,_ZThn1588_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn2688_N8S19968C6D0Ev,_ZThn1588_N8S19968C6D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C6__9S19968C18[] = {
  0,
  0,
  ABISELECT(-2688,-1588),
  ABISELECT(-2688,-1588),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C6__9S19968C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C6__9S19968C18[] = {
  ABISELECT(16,12),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C11__8S19968C6__9S19968C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A1__8S19968C6__9S19968C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev),
};
static  VTT_ENTRY vtt_S19968C18[] = {
  {&(_ZTV9S19968C18[9]),  9,123},
  {&(_tg__ZTV9S19968C20__9S19968C18[8]),  8,13},
  {&(_tg__ZTV8S19968C59S19968C20__9S19968C18[8]),  8,11},
  {&(_tg__ZTV9S19968C128S19968C59S19968C20__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C128S19968C59S19968C20__A2__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C128S19968C59S19968C20__A2__9S19968C18[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C128S19968C59S19968C20__A2__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C128S19968C59S19968C20__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C128S19968C59S19968C20__9S19968C18[5]),  5,9},
  {&(_tg__ZTV9S19968C10__9S19968C128S19968C59S19968C20__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C128S19968C59S19968C20__9S19968C18[5]),  5,7},
  {&(_tg__ZTV9S19968C138S19968C59S19968C20__9S19968C18[7]),  7,9},
  {&(_tg__ZTV9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C59S19968C20__A1__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C138S19968C59S19968C20__A4__9S19968C18[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C138S19968C59S19968C20__A4__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C138S19968C59S19968C20__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__9S19968C138S19968C59S19968C20__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C138S19968C59S19968C20__9S19968C18[7]),  7,10},
  {&(_tg__ZTV9S19968C10__A1__9S19968C138S19968C59S19968C20__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C138S19968C59S19968C20__9S19968C18[5]),  5,7},
  {&(_tg__ZTV8S19968C6__8S19968C59S19968C20__9S19968C18[9]),  9,12},
  {&(_tg__ZTV8S19968C2__8S19968C59S19968C20__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C59S19968C20__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C59S19968C20__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__8S19968C59S19968C20__9S19968C18[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C59S19968C20__9S19968C18[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C12__A2__8S19968C59S19968C20__9S19968C18[5]),  5,7},
  {&(_tg__ZTV9S19968C13__8S19968C59S19968C20__9S19968C18[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C59S19968C20__9S19968C18[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C13__A4__8S19968C59S19968C20__9S19968C18[5]),  5,7},
  {&(_tg__ZTV8S19968C6__9S19968C20__9S19968C18[9]),  9,12},
  {&(_tg__ZTV8S19968C2__9S19968C20__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__9S19968C20__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__9S19968C20__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__9S19968C20__9S19968C18[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C20__9S19968C18[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C128S19968C5__A2__9S19968C20__9S19968C18[5]),  5,7},
  {&(_tg__ZTV9S19968C138S19968C5__9S19968C20__9S19968C18[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C20__9S19968C18[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C138S19968C5__A4__9S19968C20__9S19968C18[5]),  5,7},
  {&(_ZTV9S19968C18[71]),  71,123},
  {&(_ZTV9S19968C18[75]),  75,123},
  {&(_ZTV9S19968C18[81]),  81,123},
  {&(_ZTV9S19968C18[23]),  23,123},
  {&(_ZTV9S19968C18[92]),  92,123},
  {&(_ZTV9S19968C18[119]),  119,123},
  {&(_ZTV9S19968C18[102]),  102,123},
  {&(_ZTV9S19968C18[111]),  111,123},
  {&(_ZTV9S19968C18[33]),  33,123},
  {&(_ZTV9S19968C18[48]),  48,123},
  {&(_ZTV9S19968C18[57]),  57,123},
  {&(_ZTV9S19968C18[65]),  65,123},
  {&(_tg__ZTV8S19968C8__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C19__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C19__A1__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__9S19968C18[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C6__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C78S19968C6__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C78S19968C6__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C78S19968C6__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C78S19968C6__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__9S19968C18[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C118S19968C6__A1__9S19968C18[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__9S19968C18[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C118S19968C6__9S19968C18[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C118S19968C6__9S19968C18[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C118S19968C6__9S19968C18[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C118S19968C6__9S19968C18[6]),  6,8},
  {&(_tg__ZTV8S19968C2__8S19968C6__9S19968C18[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C6__9S19968C18[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C6__9S19968C18[6]),  6,8},
  {&(_tg__ZTV9S19968C11__8S19968C6__9S19968C18[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C11__A1__8S19968C6__9S19968C18[7]),  7,10},
};
extern VTBL_ENTRY _ZTI9S19968C18[];
extern  VTBL_ENTRY _ZTV9S19968C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C18[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19968C6D0Ev,_ZThn1588_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19968C6D1Ev,_ZThn1588_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19968C20D0Ev,_ZThn5380_N9S19968C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19968C20D1Ev,_ZThn5380_N9S19968C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19968C20D0Ev,_ZThn6980_N9S19968C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19968C20D1Ev,_ZThn6980_N9S19968C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N9S19968C20D0Ev,_ZThn5392_N9S19968C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N9S19968C20D1Ev,_ZThn5392_N9S19968C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19968C5D0Ev,_ZThn5380_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19968C5D1Ev,_ZThn5380_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19968C5D0Ev,_ZThn6980_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19968C5D1Ev,_ZThn6980_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N8S19968C5D0Ev,_ZThn5392_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N8S19968C5D1Ev,_ZThn5392_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19968C13D0Ev,_ZThn4632_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19968C13D1Ev,_ZThn4632_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19968C13D0Ev,_ZThn6232_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19968C13D1Ev,_ZThn6232_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19968C11D0Ev,_ZThn4632_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19968C11D1Ev,_ZThn4632_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2432_N9S19968C11D0Ev,_ZThn1444_N9S19968C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19968C11D0Ev,_ZThn6232_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2432_N9S19968C11D1Ev,_ZThn1444_N9S19968C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19968C11D1Ev,_ZThn6232_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19968C12D0Ev,_ZThn5380_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19968C12D1Ev,_ZThn5380_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19968C12D0Ev,_ZThn6980_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19968C12D1Ev,_ZThn6980_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7744_N8S19968C7D0Ev,_ZThn4620_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19968C7D0Ev,_ZThn5380_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7744_N8S19968C7D1Ev,_ZThn4620_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19968C7D1Ev,_ZThn5380_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19968C7D0Ev,_ZThn1432_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19968C7D0Ev,_ZThn1588_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10448_N8S19968C7D0Ev,_ZThn6220_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19968C7D0Ev,_ZThn6980_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19968C7D1Ev,_ZThn1432_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19968C7D1Ev,_ZThn1588_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10448_N8S19968C7D1Ev,_ZThn6220_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19968C7D1Ev,_ZThn6980_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C18D0Ev,_ZTv0_n12_N9S19968C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S19968C18D0Ev,_ZThn7428_N9S19968C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C18D1Ev,_ZTv0_n12_N9S19968C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S19968C18D1Ev,_ZThn7428_N9S19968C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19968C18D0Ev,_ZTv0_n36_N9S19968C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9776_N9S19968C18D0Ev,_ZThn5840_N9S19968C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19968C18D1Ev,_ZTv0_n36_N9S19968C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9776_N9S19968C18D1Ev,_ZThn5840_N9S19968C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C18D0Ev,_ZTv0_n24_N9S19968C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9760_N9S19968C18D0Ev,_ZThn5828_N9S19968C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C18D1Ev,_ZTv0_n24_N9S19968C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9760_N9S19968C18D1Ev,_ZThn5828_N9S19968C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C18 = {  "S19968C18", // class name
  bases_S19968C18, 30,
  &(vtc_S19968C18[0]), // expected_vtbl_contents
  &(vtt_S19968C18[0]), // expected_vtt_contents
  ABISELECT(13200,7876), // object size
  NSPAIRA(_ZTI9S19968C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19968C18),123, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C18),91, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C21  : virtual S22028C16 , virtual S19968C10 , S19968C8 , S19968C12 , virtual S19968C11 {
  int s19968c21f0;
  unsigned int s19968c21f1:1;
  int s19968c21f2;
  long double s19968c21f3;
  char s19968c21f4;
  short s19968c21f5;
  virtual  ~S19968C21(); // _ZN9S19968C21D2Ev
  S19968C21(); // tgen
};
//SIG(-1 S19968C21) C1{ VBC2{ m} VBC3{ VBC4{ VBC2 VBC5{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi} BC4 BC6{ VBC5 VBC4 BC7{ VBC8{ vd v1 v2 Fp FC5 FC5 Fi[3] Fp[6] Fs FU9{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC4 VBC3 BC5 v3} BC3 BC8 vd Fi} VBC10{ VBC2 VBC4 BC3 BC7 Fi Fi Fi Fs Fi FC6 FL Fp Fi} vd Fi Fi:1 Fi FD Fc Fs}


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

static void Test_S19968C21()
{
  extern Class_Descriptor cd_S19968C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(291,690)];
    init_test(&cd_S19968C21, buf);
    S19968C21 *dp, &lv = *(dp=new (buf) S19968C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4640,2756), "sizeof(S19968C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C21)");
    check_base_class_offset(lv, (S22028C16*), 0, "S19968C21");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C21");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C21");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*), 0, "S19968C21");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(1232,728), "S19968C21");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(1232,728), "S19968C21");
    /*is_ambiguous_... S19968C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C12*), ABISELECT(1232,728), "S19968C21");
    /*is_ambiguous_... S19968C21::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(1144,688), "S19968C21");
    check_base_class_offset(lv, (S19968C8*)(S19968C12*), ABISELECT(1144,688), "S19968C21");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C12*), ABISELECT(1144,688), "S19968C21");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C12*), ABISELECT(1144,688), "S19968C21");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*), ABISELECT(1144,688), "S19968C21");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*), ABISELECT(1144,688), "S19968C21");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*), ABISELECT(1144,688), "S19968C21");
    /*is_ambiguous_... S19968C21::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*), ABISELECT(1128,676), "S19968C21");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C12*), ABISELECT(1128,676), "S19968C21");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*), ABISELECT(1128,676), "S19968C21");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C8*), 0, "S19968C21");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C12*), ABISELECT(1472,868), "S19968C21");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*), ABISELECT(1472,868), "S19968C21");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C12*), ABISELECT(96,44), "S19968C21");
    check_base_class_offset(lv, (S19968C7*)(S19968C12*), ABISELECT(80,40), "S19968C21");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C12*), ABISELECT(336,184), "S19968C21");
    /*is_ambiguous_... S19968C12::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C12*), ABISELECT(352,196), "S19968C21");
    check_base_class_offset(lv, (S19968C12*), ABISELECT(80,40), "S19968C21");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*), ABISELECT(2208,1316), "S19968C21");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*), ABISELECT(2240,1332), "S19968C21");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*), ABISELECT(2224,1328), "S19968C21");
    check_base_class_offset(lv, (S19968C11*), ABISELECT(2208,1316), "S19968C21");
    check_field_offset(lv, s19968c21f0, ABISELECT(1092,648), "S19968C21.s19968c21f0");
    set_bf_and_test(lv, s19968c21f1, ABISELECT(1096,652), 0, 1, 1, "S19968C21");
    check_field_offset(lv, s19968c21f2, ABISELECT(1100,656), "S19968C21.s19968c21f2");
    check_field_offset(lv, s19968c21f3, ABISELECT(1104,660), "S19968C21.s19968c21f3");
    check_field_offset(lv, s19968c21f4, ABISELECT(1120,672), "S19968C21.s19968c21f4");
    check_field_offset(lv, s19968c21f5, ABISELECT(1122,674), "S19968C21.s19968c21f5");
    test_class_info(&lv, &cd_S19968C21);
    dp->~S19968C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C21(Test_S19968C21, "S19968C21", ABISELECT(4640,2756));

#else // __cplusplus

extern void _ZN9S19968C21C1Ev();
extern void _ZN9S19968C21D2Ev();
Name_Map name_map_S19968C21[] = {
  NSPAIR(_ZN9S19968C21C1Ev),
  NSPAIR(_ZN9S19968C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C12;
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
static Base_Class bases_S19968C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(1232,728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C8,    ABISELECT(1144,688), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C10,    ABISELECT(1128,676), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C2,    ABISELECT(1472,868), //bcp->offset
    45, //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
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(336,184), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C2,    ABISELECT(352,196), //bcp->offset
    27, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19968C12,    ABISELECT(80,40), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C10,    ABISELECT(2208,1316), //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
    14, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(2240,1332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(2224,1328), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(2208,1316), //bcp->offset
    54, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19968C21[];
extern void _ZN9S19968C21D1Ev();
extern void _ZN9S19968C21D0Ev();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn80_N9S19968C21D1Ev,_ZThn40_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn80_N9S19968C21D0Ev,_ZThn40_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn336_N9S19968C21D1Ev,_ZThn184_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn336_N9S19968C21D0Ev,_ZThn184_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn352_N9S19968C21D1Ev,_ZThn196_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn352_N9S19968C21D0Ev,_ZThn196_N9S19968C21D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19968C21D1Ev,_ZTv0_n24_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn1128_N9S19968C21D1Ev,_ZThn676_N9S19968C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C21D0Ev,_ZTv0_n24_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn1128_N9S19968C21D0Ev,_ZThn676_N9S19968C21D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C21D1Ev,_ZTv0_n12_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn1472_N9S19968C21D1Ev,_ZThn868_N9S19968C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C21D0Ev,_ZTv0_n12_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn1472_N9S19968C21D0Ev,_ZThn868_N9S19968C21D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n64_N9S19968C21D1Ev,_ZTv0_n32_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn2208_N9S19968C21D1Ev,_ZThn1316_N9S19968C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19968C21D0Ev,_ZTv0_n32_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn2208_N9S19968C21D0Ev,_ZThn1316_N9S19968C21D0Ev)() __attribute__((weak));
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19968C21D1Ev,_ZTvn12_n32_N9S19968C21D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19968C21D0Ev,_ZTvn12_n32_N9S19968C21D0Ev)();
static  VTBL_ENTRY vtc_S19968C21[] = {
  ABISELECT(2208,1316),
  ABISELECT(1472,868),
  ABISELECT(1144,688),
  ABISELECT(1128,676),
  ABISELECT(1232,728),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&_ZN9S19968C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C21D0Ev,
  ABISELECT(1048,636),
  ABISELECT(1152,688),
  ABISELECT(-80,-40),
  ABISELECT(1064,648),
  ABISELECT(1392,828),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19968C21D1Ev,_ZThn40_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19968C21D0Ev,_ZThn40_N9S19968C21D0Ev),
  ABISELECT(896,544),
  ABISELECT(-336,-184),
  ABISELECT(808,504),
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19968C21D1Ev,_ZThn184_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19968C21D0Ev,_ZThn184_N9S19968C21D0Ev),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19968C21D1Ev,_ZThn196_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19968C21D0Ev,_ZThn196_N9S19968C21D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-1128,-676),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(-1128,-676),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C21D1Ev,_ZTv0_n24_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C21D0Ev,_ZTv0_n24_N9S19968C21D0Ev),
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-1144,-688),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  0,
  0,
  ABISELECT(-1472,-868),
  ABISELECT(-1472,-868),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C21D1Ev,_ZTv0_n12_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C21D0Ev,_ZTv0_n12_N9S19968C21D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(16,12),
  ABISELECT(-2208,-1316),
  ABISELECT(-1080,-640),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2208,-1316),
  ABISELECT(-1064,-628),
  ABISELECT(-2208,-1316),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C21D1Ev,_ZTv0_n32_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C21D0Ev,_ZTv0_n32_N9S19968C21D0Ev),
  ABISELECT(-1096,-652),
  ABISELECT(-992,-600),
  ABISELECT(-2224,-1328),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-2224,-1328),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C21D1Ev,_ZTvn12_n32_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C21D0Ev,_ZTvn12_n32_N9S19968C21D0Ev),
};
extern VTBL_ENTRY _ZTV9S19968C21[];
static  VTBL_ENTRY _tg__ZTV8S19968C8__A__9S19968C21[] = {
  ABISELECT(1232,728),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C12__9S19968C21[] = {
  ABISELECT(1048,636),
  ABISELECT(1152,688),
  ABISELECT(-80,-40),
  ABISELECT(1064,648),
  ABISELECT(1392,828),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C12__9S19968C21[] = {
  ABISELECT(1048,636),
  ABISELECT(1152,688),
  ABISELECT(-80,-40),
  ABISELECT(1064,648),
  ABISELECT(1392,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn1392_N8S19968C7D1Ev,_ZThn828_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn1392_N8S19968C7D0Ev,_ZThn828_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C12__9S19968C21[] = {
  0,
  0,
  ABISELECT(-1392,-828),
  ABISELECT(-1392,-828),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C12__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-1064,-648),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn1048_N8S19968C7D1Ev,_ZThn636_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn1048_N8S19968C7D0Ev,_ZThn636_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C12__9S19968C21[] = {
  ABISELECT(-1048,-636),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(-1048,-636),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C12__A1__9S19968C21[] = {
  ABISELECT(896,544),
  ABISELECT(-336,-184),
  ABISELECT(808,504),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C12__A1__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-808,-504),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C12__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-1064,-648),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn1392_N9S19968C12D1Ev,_ZThn828_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn1392_N9S19968C12D0Ev,_ZThn828_N9S19968C12D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C12__9S19968C21[] = {
  0,
  0,
  ABISELECT(-1392,-828),
  ABISELECT(-1392,-828),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn1048_N9S19968C12D1Ev,_ZThn636_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn1048_N9S19968C12D0Ev,_ZThn636_N9S19968C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C12__9S19968C21[] = {
  ABISELECT(-1048,-636),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(-1048,-636),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C12__9S19968C21[] = {
  ABISELECT(896,544),
  ABISELECT(-336,-184),
  ABISELECT(808,504),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C21[] = {
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C11__9S19968C21[] = {
  ABISELECT(-1080,-640),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2208,-1316),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C11__A2__9S19968C21[] = {
  ABISELECT(-976,-588),
  ABISELECT(-2208,-1316),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C11__A2__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A1__9S19968C21[] = {
  ABISELECT(-1096,-652),
  ABISELECT(-992,-600),
  ABISELECT(-2224,-1328),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C11__A1__9S19968C21[] = {
  0,
  0,
  ABISELECT(752,460),
  ABISELECT(752,460),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C11__A1__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(1080,640),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C11__A1__9S19968C21[] = {
  ABISELECT(1096,652),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(1096,652),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C11__9S19968C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C11__9S19968C21[] = {
  ABISELECT(-1096,-652),
  ABISELECT(-992,-600),
  ABISELECT(-2224,-1328),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C11__9S19968C21[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C11__9S19968C21[] = {
  ABISELECT(1080,640),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(1080,640),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
static  VTT_ENTRY vtt_S19968C21[] = {
  {&(_ZTV9S19968C21[8]),  8,75},
  {&(_tg__ZTV8S19968C8__A__9S19968C21[4]),  4,4},
  {&(_tg__ZTV9S19968C12__9S19968C21[7]),  7,10},
  {&(_tg__ZTV8S19968C79S19968C12__9S19968C21[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C12__9S19968C21[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C12__9S19968C21[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C12__9S19968C21[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C12__A1__9S19968C21[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C12__A1__9S19968C21[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C12__9S19968C21[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C12__9S19968C21[5]),  5,9},
  {&(_tg__ZTV9S19968C10__9S19968C12__9S19968C21[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C12__9S19968C21[5]),  5,7},
  {&(_ZTV9S19968C21[39]),  39,75},
  {&(_ZTV9S19968C21[45]),  45,75},
  {&(_ZTV9S19968C21[17]),  17,75},
  {&(_ZTV9S19968C21[50]),  50,75},
  {&(_ZTV9S19968C21[25]),  25,75},
  {&(_ZTV9S19968C21[63]),  63,75},
  {&(_ZTV9S19968C21[72]),  72,75},
  {&(_tg__ZTV9S19968C10__9S19968C21[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__9S19968C21[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C21[4]),  4,4},
  {&(_tg__ZTV9S19968C11__9S19968C21[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C11__A2__9S19968C21[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C11__A2__9S19968C21[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__A1__9S19968C21[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C11__A1__9S19968C21[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C11__A1__9S19968C21[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C11__A1__9S19968C21[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C11__9S19968C21[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C11__9S19968C21[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C11__9S19968C21[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C11__9S19968C21[6]),  6,8},
};
extern VTBL_ENTRY _ZTI9S19968C21[];
extern  VTBL_ENTRY _ZTV9S19968C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C21[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N9S19968C12D0Ev,_ZThn636_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N9S19968C12D1Ev,_ZThn636_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S19968C12D0Ev,_ZThn828_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S19968C12D1Ev,_ZThn828_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N8S19968C7D0Ev,_ZThn636_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N8S19968C7D1Ev,_ZThn636_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19968C7D0Ev,_ZThn828_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19968C7D1Ev,_ZThn828_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C21D0Ev,_ZTv0_n32_N9S19968C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S19968C21D0Ev,_ZThn1316_N9S19968C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C21D1Ev,_ZTv0_n32_N9S19968C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S19968C21D1Ev,_ZThn1316_N9S19968C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C21D0Ev,_ZTv0_n12_N9S19968C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N9S19968C21D0Ev,_ZThn868_N9S19968C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C21D1Ev,_ZTv0_n12_N9S19968C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N9S19968C21D1Ev,_ZThn868_N9S19968C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C21D0Ev,_ZTv0_n24_N9S19968C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1128_N9S19968C21D0Ev,_ZThn676_N9S19968C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C21D1Ev,_ZTv0_n24_N9S19968C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1128_N9S19968C21D1Ev,_ZThn676_N9S19968C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C21 = {  "S19968C21", // class name
  bases_S19968C21, 15,
  &(vtc_S19968C21[0]), // expected_vtbl_contents
  &(vtt_S19968C21[0]), // expected_vtt_contents
  ABISELECT(4640,2756), // object size
  NSPAIRA(_ZTI9S19968C21),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19968C21),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19968C21),34, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19968C1  : virtual S19968C2 , virtual S19968C5 , virtual S19968C14 , virtual S19968C18 , S19968C21 {
  __tsi64 s19968c1f0;
  int s19968c1f1;
  long s19968c1f2;
  ::S19968C11 s19968c1f3;
  virtual  ~S19968C1(); // _ZN8S19968C1D2Ev
  S19968C1(); // tgen
};
//SIG(1 S19968C1) C1{ VBC2{ vd v1 v2 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ VBC3 BC7{ VBC2 VBC8{ VBC9{ m} VBC3 Fp[9]} VBC10{ VBC8 vd Fi:21 Fi} BC3 v3} BC11{ VBC9 VBC8 BC10 BC7 Fi Fi Fi Fs Fi FC12{ VBC3 VBC8 BC7 BC10 BC2 vd Fi} FL Fp Fi} vd Fi} BC12 BC3 BC13{ BC3 VBC2 BC11 BC10 vd Fs Fs[4] Fs FC2} vd Fc Fs FC3[6]} VBC14{ BC10 BC15{ VBC2 BC16{ BC3 BC8 Fi Fp Fi Fs Fi:1 FC9 FC17{} Fi} BC9 BC8 FC8 Fp FD Fp FU4 Fp Fs:4 Fc:0 Fi Fs Fi} VBC11 BC16 vd v4 Fi Fs Fp Fi Fp Fi FD FL} VBC18{ BC2 VBC8 VBC19{ BC8 FD[8] Fi Fs Fi Fs Fp Fi Fi Fs Fi[5] Fp} VBC10 BC20{ BC5 vd v5 v6 Fi Fs Fi[8] FC12 Fi Fi:9} v7 v8 Fs[7] FD FC9 Fi Fp[8] Fi} BC21{ VBC9 VBC10 BC8 BC12 VBC11 vd Fi Fi:1 Fi FD Fc Fs} vd FL Fi Fl FC11}


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

static void Test_S19968C1()
{
  extern Class_Descriptor cd_S19968C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1744,4145)];
    init_test(&cd_S19968C1, buf);
    S19968C1 *dp, &lv = *(dp=new (buf) S19968C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(27888,16576), "sizeof(S19968C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19968C1)");
    /*is_ambiguous_... S19968C1::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*), ABISELECT(4656,2772), "S19968C1");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C6*), ABISELECT(4656,2772), "S19968C1");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(4656,2772), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(4656,2772), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C13*)(S19968C5*), ABISELECT(4656,2772), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(4656,2772), "S19968C1");
    check_base_class_offset(lv, (S19968C2*)(S19968C15*)(S19968C14*), ABISELECT(4656,2772), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*), ABISELECT(4656,2772), "S19968C1");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(4656,2772), "S19968C1");
    check_base_class_offset(lv, (S19968C2*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(4656,2772), "S19968C1");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(4656,2772), "S19968C1");
    check_base_class_offset(lv, (S19968C2*)(S19968C7*)(S19968C12*)(S19968C21*), ABISELECT(4656,2772), "S19968C1");
    /*is_ambiguous_... S19968C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C6*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C12*)(S19968C5*), ABISELECT(14240,8452), "S19968C1");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C16*)(S19968C15*)(S19968C14*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C15*)(S19968C14*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C16*)(S19968C14*), ABISELECT(14240,8452), "S19968C1");
    check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C19*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C8*)(S19968C21*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C12*)(S19968C21*), ABISELECT(14240,8452), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*), 0, "S19968C1");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C6*), 0, "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C13*)(S19968C5*), 0, "S19968C1");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C16*)(S19968C15*)(S19968C14*), 0, "S19968C1");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C15*)(S19968C14*), 0, "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C11*), 0, "S19968C1");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C16*)(S19968C14*), 0, "S19968C1");
    check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C19*), 0, "S19968C1");
    check_base_class_offset(lv, (S22028C16*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), 0, "S19968C1");
    check_base_class_offset(lv, (S22028C16*)(S19968C21*), 0, "S19968C1");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C8*)(S19968C21*), 0, "S19968C1");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C6*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C6*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C12*)(S19968C5*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C12*)(S19968C5*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C13*)(S19968C5*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C14::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C14*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C11*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C18::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C12*)(S19968C21*), ABISELECT(14480,8592), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C7*)(S19968C12*)(S19968C21*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C10*)(S19968C12*)(S19968C21*), ABISELECT(14480,8592), "S19968C1");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C6*), ABISELECT(14560,8632), "S19968C1");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(14560,8632), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(14560,8632), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(14560,8632), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*), ABISELECT(14560,8632), "S19968C1");
    /*is_ambiguous_... S19968C18::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C18*), ABISELECT(14560,8632), "S19968C1");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14560,8632), "S19968C1");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(14560,8632), "S19968C1");
    /*is_ambiguous_... S19968C21::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C21*), ABISELECT(14560,8632), "S19968C1");
    check_base_class_offset(lv, (S19968C10*)(S19968C7*)(S19968C12*)(S19968C21*), ABISELECT(14560,8632), "S19968C1");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C6*), ABISELECT(11568,6868), "S19968C1");
    /*is_ambiguous_... S19968C6::S19968C7 */ AMB_check_base_class_offset(lv, (S19968C7*)(S19968C6*), ABISELECT(11552,6864), "S19968C1");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C6*), ABISELECT(11808,7008), "S19968C1");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(11840,7024), "S19968C1");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C6*), ABISELECT(11824,7020), "S19968C1");
    check_base_class_offset(lv, (S19968C11*)(S19968C6*), ABISELECT(11808,7008), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C6*)(S19968C5*), ABISELECT(11552,6864), "S19968C1");
    check_base_class_offset(lv, (S19968C6*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(11552,6864), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(5408,3224), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C7*)(S19968C12*)(S19968C5*), ABISELECT(5392,3220), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C12*)(S19968C5*), ABISELECT(5648,3364), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C12*)(S19968C5*), ABISELECT(5664,3376), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C12*)(S19968C5*), ABISELECT(5392,3220), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C5*), ABISELECT(6416,3828), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C13*)(S19968C5*), ABISELECT(9088,5408), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(6656,3968), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(6688,3984), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(6672,3980), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C11*)(S19968C13*)(S19968C5*), ABISELECT(6656,3968), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C13*)(S19968C5*), ABISELECT(9328,5548), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C13*)(S19968C5*), ABISELECT(6656,3968), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C5 */ AMB_check_base_class_offset(lv, (S19968C5*), ABISELECT(5392,3220), "S19968C1");
    /*is_ambiguous_... S19968C14::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C14*), ABISELECT(14576,8644), "S19968C1");
    /*is_ambiguous_... S19968C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C16*)(S19968C15*)(S19968C14*), ABISELECT(14672,8696), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C16*)(S19968C15*)(S19968C14*), ABISELECT(14592,8656), "S19968C1");
    check_base_class_offset(lv, (S19968C16*)(S19968C15*)(S19968C14*), ABISELECT(14592,8656), "S19968C1");
    /*is_ambiguous_... S19968C15::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19968C15*)(S19968C14*), ABISELECT(14592,8656), "S19968C1");
    /*is_ambiguous_... S19968C15::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C15*)(S19968C14*), ABISELECT(14944,8860), "S19968C1");
    check_base_class_offset(lv, (S19968C15*)(S19968C14*), ABISELECT(14592,8656), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*), ABISELECT(16016,9488), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*), ABISELECT(16048,9504), "S19968C1");
    /*is_ambiguous_... S19968C1::S19968C11 */ AMB_check_base_class_offset(lv, (S19968C7*)(S19968C11*), ABISELECT(16032,9500), "S19968C1");
    check_base_class_offset(lv, (S19968C11*)(S19968C14*), ABISELECT(16016,9488), "S19968C1");
    check_base_class_offset(lv, (S19968C11*)(S19968C21*), ABISELECT(16016,9488), "S19968C1");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C16*)(S19968C14*), ABISELECT(15664,9280), "S19968C1");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C16*)(S19968C14*), ABISELECT(15584,9240), "S19968C1");
    /*is_ambiguous_... S19968C14::S19968C16 */ AMB_check_base_class_offset(lv, (S19968C16*)(S19968C14*), ABISELECT(15584,9240), "S19968C1");
    check_base_class_offset(lv, (S19968C14*), ABISELECT(14576,8644), "S19968C1");
    /*is_ambiguous_... S19968C18::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C18*), ABISELECT(18448,10928), "S19968C1");
    check_base_class_offset(lv, (S19968C8*)(S19968C19*), ABISELECT(27616,16384), "S19968C1");
    check_base_class_offset(lv, (S19968C19*)(S19968C18*), ABISELECT(27616,16384), "S19968C1");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(19200,11380), "S19968C1");
    check_base_class_offset(lv, (S19968C7*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(19184,11376), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(19440,11520), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(19456,11532), "S19968C1");
    check_base_class_offset(lv, (S19968C12*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(19184,11376), "S19968C1");
    /*is_ambiguous_... S19968C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(20208,11984), "S19968C1");
    /*is_ambiguous_... S19968C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(22880,13564), "S19968C1");
    /*is_ambiguous_... S19968C11::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(20448,12124), "S19968C1");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(20480,12140), "S19968C1");
    check_base_class_offset(lv, (S19968C7*)(S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(20464,12136), "S19968C1");
    check_base_class_offset(lv, (S19968C11*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(20448,12124), "S19968C1");
    /*is_ambiguous_... S19968C13::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(23120,13704), "S19968C1");
    check_base_class_offset(lv, (S19968C13*)(S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(20448,12124), "S19968C1");
    check_base_class_offset(lv, (S19968C5*)(S19968C20*)(S19968C18*), ABISELECT(19184,11376), "S19968C1");
    check_base_class_offset(lv, (S19968C20*)(S19968C18*), ABISELECT(19184,11376), "S19968C1");
    check_base_class_offset(lv, (S19968C18*), ABISELECT(18448,10928), "S19968C1");
    /*is_ambiguous_... S19968C21::S19968C8 */ AMB_check_base_class_offset(lv, (S19968C8*)(S19968C21*), 0, "S19968C1");
    /*is_ambiguous_... S19968C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19968C7*)(S19968C12*)(S19968C21*), ABISELECT(96,44), "S19968C1");
    check_base_class_offset(lv, (S19968C7*)(S19968C12*)(S19968C21*), ABISELECT(80,40), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C10 */ AMB_check_base_class_offset(lv, (S19968C10*)(S19968C12*)(S19968C21*), ABISELECT(336,184), "S19968C1");
    /*is_ambiguous_... S19968C12::S19968C2 */ AMB_check_base_class_offset(lv, (S19968C2*)(S19968C12*)(S19968C21*), ABISELECT(352,196), "S19968C1");
    check_base_class_offset(lv, (S19968C12*)(S19968C21*), ABISELECT(80,40), "S19968C1");
    check_base_class_offset(lv, (S19968C21*), 0, "S19968C1");
    check_field_offset(lv, s19968c1f0, ABISELECT(1128,676), "S19968C1.s19968c1f0");
    check_field_offset(lv, s19968c1f1, ABISELECT(1136,684), "S19968C1.s19968c1f1");
    check_field_offset(lv, s19968c1f2, ABISELECT(1144,688), "S19968C1.s19968c1f2");
    check_field_offset(lv, s19968c1f3, ABISELECT(1152,692), "S19968C1.s19968c1f3");
    test_class_info(&lv, &cd_S19968C1);
    dp->~S19968C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19968C1(Test_S19968C1, "S19968C1", ABISELECT(27888,16576));

#else // __cplusplus

extern void _ZN8S19968C1C1Ev();
extern void _ZN8S19968C1D2Ev();
Name_Map name_map_S19968C1[] = {
  NSPAIR(_ZN8S19968C1C1Ev),
  NSPAIR(_ZN8S19968C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C6;
extern VTBL_ENTRY _ZTI8S19968C6[];
extern  VTBL_ENTRY _ZTV8S19968C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C12;
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C13;
extern VTBL_ENTRY _ZTI9S19968C13[];
extern  VTBL_ENTRY _ZTV9S19968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C13[];
extern Class_Descriptor cd_S19968C5;
extern VTBL_ENTRY _ZTI8S19968C5[];
extern  VTBL_ENTRY _ZTV8S19968C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C5[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C16;
extern VTBL_ENTRY _ZTI9S19968C16[];
extern  VTBL_ENTRY _ZTV9S19968C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C16[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C15;
extern VTBL_ENTRY _ZTI9S19968C15[];
extern  VTBL_ENTRY _ZTV9S19968C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C15[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C16;
extern VTBL_ENTRY _ZTI9S19968C16[];
extern  VTBL_ENTRY _ZTV9S19968C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C16[];
extern Class_Descriptor cd_S19968C14;
extern VTBL_ENTRY _ZTI9S19968C14[];
extern  VTBL_ENTRY _ZTV9S19968C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C14[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C19;
extern VTBL_ENTRY _ZTI9S19968C19[];
extern  VTBL_ENTRY _ZTV9S19968C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C19[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C12;
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C11;
extern VTBL_ENTRY _ZTI9S19968C11[];
extern  VTBL_ENTRY _ZTV9S19968C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C11[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C13;
extern VTBL_ENTRY _ZTI9S19968C13[];
extern  VTBL_ENTRY _ZTV9S19968C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C13[];
extern Class_Descriptor cd_S19968C5;
extern VTBL_ENTRY _ZTI8S19968C5[];
extern  VTBL_ENTRY _ZTV8S19968C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C5[];
extern Class_Descriptor cd_S19968C20;
extern VTBL_ENTRY _ZTI9S19968C20[];
extern  VTBL_ENTRY _ZTV9S19968C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C20[];
extern Class_Descriptor cd_S19968C18;
extern VTBL_ENTRY _ZTI9S19968C18[];
extern  VTBL_ENTRY _ZTV9S19968C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C18[];
extern Class_Descriptor cd_S19968C8;
extern VTBL_ENTRY _ZTI8S19968C8[];
extern  VTBL_ENTRY _ZTV8S19968C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C7;
extern VTBL_ENTRY _ZTI8S19968C7[];
extern  VTBL_ENTRY _ZTV8S19968C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C7[];
extern Class_Descriptor cd_S19968C10;
extern VTBL_ENTRY _ZTI9S19968C10[];
extern  VTBL_ENTRY _ZTV9S19968C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C10[];
extern Class_Descriptor cd_S19968C2;
extern VTBL_ENTRY _ZTI8S19968C2[];
extern  VTBL_ENTRY _ZTV8S19968C2[];
extern Class_Descriptor cd_S19968C12;
extern VTBL_ENTRY _ZTI9S19968C12[];
extern  VTBL_ENTRY _ZTV9S19968C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C12[];
extern Class_Descriptor cd_S19968C21;
extern VTBL_ENTRY _ZTI9S19968C21[];
extern  VTBL_ENTRY _ZTV9S19968C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19968C21[];
static Base_Class bases_S19968C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C2,    ABISELECT(4656,2772), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(14240,8452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C8,    ABISELECT(14480,8592), //bcp->offset
    132, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C10,    ABISELECT(14560,8632), //bcp->offset
    136, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(11568,6868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19968C7,    ABISELECT(11552,6864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(11808,7008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(11840,7024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(11824,7020), //bcp->offset
    122, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(11808,7008), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19968C6,    ABISELECT(11552,6864), //bcp->offset
    101, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(5408,3224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(5392,3220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(5648,3364), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C2,    ABISELECT(5664,3376), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C12,    ABISELECT(5392,3220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6416,3828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(9088,5408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(6656,3968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6688,3984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(6672,3980), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(6656,3968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(9328,5548), //bcp->offset
    94, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19968C13,    ABISELECT(6656,3968), //bcp->offset
    75, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C5,    ABISELECT(5392,3220), //bcp->offset
    47, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C10,    ABISELECT(14576,8644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(14672,8696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19968C8,    ABISELECT(14592,8656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19968C16,    ABISELECT(14592,8656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(14592,8656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19968C8,    ABISELECT(14944,8860), //bcp->offset
    164, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    121, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19968C15,    ABISELECT(14592,8656), //bcp->offset
    157, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(16016,9488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    135, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(16048,9504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(16032,9500), //bcp->offset
    183, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(16016,9488), //bcp->offset
    172, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    134, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(15664,9280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19968C8,    ABISELECT(15584,9240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19968C16,    ABISELECT(15584,9240), //bcp->offset
    168, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19968C14,    ABISELECT(14576,8644), //bcp->offset
    144, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C2,    ABISELECT(18448,10928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S19968C8,    ABISELECT(27616,16384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    211, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19968C19,    ABISELECT(27616,16384), //bcp->offset
    268, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    210, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    59, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(19200,11380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(19184,11376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(19440,11520), //bcp->offset
    229, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19968C2,    ABISELECT(19456,11532), //bcp->offset
    236, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19968C12,    ABISELECT(19184,11376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(20208,11984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(22880,13564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(20448,12124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    161, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(20480,12140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(20464,12136), //bcp->offset
    251, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S19968C11,    ABISELECT(20448,12124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    160, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(23120,13704), //bcp->offset
    261, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    171, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S19968C13,    ABISELECT(20448,12124), //bcp->offset
    242, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    159, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19968C5,    ABISELECT(19184,11376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S19968C20,    ABISELECT(19184,11376), //bcp->offset
    216, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S19968C18,    ABISELECT(18448,10928), //bcp->offset
    193, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19968C3,    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
    62, //immediately_derived
  0, 0},
  {&cd_S19968C7,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19968C10,    ABISELECT(336,184), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19968C2,    ABISELECT(352,196), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19968C12,    ABISELECT(80,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19968C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19968C1[];
extern void _ZN8S19968C1D1Ev();
extern void _ZN8S19968C1D0Ev();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn80_N8S19968C1D1Ev,_ZThn40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S19968C1D0Ev,_ZThn40_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn336_N8S19968C1D1Ev,_ZThn184_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn336_N8S19968C1D0Ev,_ZThn184_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S19968C1D1Ev,_ZThn196_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S19968C1D0Ev,_ZThn196_N8S19968C1D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19968C1D1Ev,_ZTv0_n12_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn4656_N8S19968C1D1Ev,_ZThn2772_N8S19968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C1D0Ev,_ZTv0_n12_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn4656_N8S19968C1D0Ev,_ZThn2772_N8S19968C1D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n80_N8S19968C1D1Ev,_ZTv0_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn5392_N8S19968C1D1Ev,_ZThn3220_N8S19968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19968C1D0Ev,_ZTv0_n40_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn5392_N8S19968C1D0Ev,_ZThn3220_N8S19968C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n80_N8S19968C1D1Ev,_ZTvn144_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn256_n80_N8S19968C1D0Ev,_ZTvn144_n40_N8S19968C1D0Ev)();
extern void ABISELECT(_ZTvn272_n80_N8S19968C1D1Ev,_ZTvn156_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn272_n80_N8S19968C1D0Ev,_ZTvn156_n40_N8S19968C1D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTvn1264_n80_N8S19968C1D1Ev,_ZTvn748_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn1264_n80_N8S19968C1D0Ev,_ZTvn748_n40_N8S19968C1D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn1280_n80_N8S19968C1D1Ev,_ZTvn760_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn1280_n80_N8S19968C1D0Ev,_ZTvn760_n40_N8S19968C1D0Ev)();
extern void ABISELECT(_ZTvn3936_n80_N8S19968C1D1Ev,_ZTvn2328_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn3936_n80_N8S19968C1D0Ev,_ZTvn2328_n40_N8S19968C1D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19968C1D1Ev,_ZTv0_n36_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn11552_N8S19968C1D1Ev,_ZThn6864_N8S19968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19968C1D0Ev,_ZTv0_n36_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn11552_N8S19968C1D0Ev,_ZThn6864_N8S19968C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N8S19968C1D1Ev,_ZTvn144_n36_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19968C1D0Ev,_ZTvn144_n36_N8S19968C1D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19968C1D1Ev,_ZTvn156_n36_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19968C1D0Ev,_ZTvn156_n36_N8S19968C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C1D1Ev,_ZTv0_n24_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn14560_N8S19968C1D1Ev,_ZThn8632_N8S19968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C1D0Ev,_ZTv0_n24_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn14560_N8S19968C1D0Ev,_ZThn8632_N8S19968C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19968C1D1Ev,_ZTv0_n36_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn14576_N8S19968C1D1Ev,_ZThn8644_N8S19968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19968C1D0Ev,_ZTv0_n36_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn14576_N8S19968C1D0Ev,_ZThn8644_N8S19968C1D0Ev)() __attribute__((weak));
extern void _ZN9S19968C142v4Ev();
extern void ABISELECT(_ZTvn16_n72_N8S19968C1D1Ev,_ZTvn12_n36_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N8S19968C1D0Ev,_ZTvn12_n36_N8S19968C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19968C1D1Ev,_ZTv0_n32_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn16016_N8S19968C1D1Ev,_ZThn9488_N8S19968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19968C1D0Ev,_ZTv0_n32_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn16016_N8S19968C1D0Ev,_ZThn9488_N8S19968C1D0Ev)() __attribute__((weak));
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N8S19968C1D1Ev,_ZTvn12_n32_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N8S19968C1D0Ev,_ZTvn12_n32_N8S19968C1D0Ev)();
extern void ABISELECT(_ZTv0_n80_N8S19968C1D1Ev,_ZTv0_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZThn18448_N8S19968C1D1Ev,_ZThn10928_N8S19968C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19968C1D0Ev,_ZTv0_n40_N8S19968C1D0Ev)();
extern void ABISELECT(_ZThn18448_N8S19968C1D0Ev,_ZThn10928_N8S19968C1D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void _ZN9S19968C182v7Ev();
extern void _ZN9S19968C182v8Ev();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn736_n80_N8S19968C1D1Ev,_ZTvn448_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn736_n80_N8S19968C1D0Ev,_ZTvn448_n40_N8S19968C1D0Ev)();
extern void _ZN9S19968C202v5Ev();
extern void _ZN9S19968C202v6Ev();
extern void ABISELECT(_ZTvn992_n80_N8S19968C1D1Ev,_ZTvn592_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn992_n80_N8S19968C1D0Ev,_ZTvn592_n40_N8S19968C1D0Ev)();
extern void ABISELECT(_ZTvn1008_n80_N8S19968C1D1Ev,_ZTvn604_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn1008_n80_N8S19968C1D0Ev,_ZTvn604_n40_N8S19968C1D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void ABISELECT(_ZTvn2000_n80_N8S19968C1D1Ev,_ZTvn1196_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn2000_n80_N8S19968C1D0Ev,_ZTvn1196_n40_N8S19968C1D0Ev)();
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn2016_n80_N8S19968C1D1Ev,_ZTvn1208_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn2016_n80_N8S19968C1D0Ev,_ZTvn1208_n40_N8S19968C1D0Ev)();
extern void ABISELECT(_ZTvn4672_n80_N8S19968C1D1Ev,_ZTvn2776_n40_N8S19968C1D1Ev)();
extern void ABISELECT(_ZTvn4672_n80_N8S19968C1D0Ev,_ZTvn2776_n40_N8S19968C1D0Ev)();
static  VTBL_ENTRY vtc_S19968C1[] = {
  ABISELECT(27616,16384),
  ABISELECT(18448,10928),
  ABISELECT(14576,8644),
  ABISELECT(11552,6864),
  ABISELECT(5392,3220),
  ABISELECT(16016,9488),
  ABISELECT(4656,2772),
  ABISELECT(14480,8592),
  ABISELECT(14560,8632),
  ABISELECT(14240,8452),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C1D0Ev,
  ABISELECT(14480,8592),
  ABISELECT(14160,8412),
  ABISELECT(-80,-40),
  ABISELECT(14400,8552),
  ABISELECT(4576,2732),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19968C1D1Ev,_ZThn40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19968C1D0Ev,_ZThn40_N8S19968C1D0Ev),
  ABISELECT(13904,8268),
  ABISELECT(-336,-184),
  ABISELECT(14144,8408),
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N8S19968C1D1Ev,_ZThn184_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N8S19968C1D0Ev,_ZThn184_N8S19968C1D0Ev),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19968C1D1Ev,_ZThn196_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19968C1D0Ev,_ZThn196_N8S19968C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  0,
  0,
  ABISELECT(-4656,-2772),
  ABISELECT(-4656,-2772),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C1D1Ev,_ZTv0_n12_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C1D0Ev,_ZTv0_n12_N8S19968C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(272,156),
  ABISELECT(272,156),
  ABISELECT(-5392,-3220),
  0,
  ABISELECT(6160,3644),
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3220),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  ABISELECT(-5392,-3220),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19968C1D1Ev,_ZTv0_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19968C1D0Ev,_ZTv0_n40_N8S19968C1D0Ev),
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3364),
  ABISELECT(8832,5228),
  ABISELECT(-5648,-3364),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n80_N8S19968C1D1Ev,_ZTvn144_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n80_N8S19968C1D0Ev,_ZTvn144_n40_N8S19968C1D0Ev),
  ABISELECT(-5664,-3376),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N8S19968C1D1Ev,_ZTvn156_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N8S19968C1D0Ev,_ZTvn156_n40_N8S19968C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3968),
  ABISELECT(7824,4624),
  ABISELECT(-6656,-3968),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1264_n80_N8S19968C1D1Ev,_ZTvn748_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1264_n80_N8S19968C1D0Ev,_ZTvn748_n40_N8S19968C1D0Ev),
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3980),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-6672,-3980),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n80_N8S19968C1D1Ev,_ZTvn760_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n80_N8S19968C1D0Ev,_ZTvn760_n40_N8S19968C1D0Ev),
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5548),
  ABISELECT(5152,3044),
  ABISELECT(-9328,-5548),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3936_n80_N8S19968C1D1Ev,_ZTvn2328_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3936_n80_N8S19968C1D0Ev,_ZTvn2328_n40_N8S19968C1D0Ev),
  ABISELECT(-11552,-6864),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6864),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(-11552,-6864),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C1D1Ev,_ZTv0_n36_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C1D0Ev,_ZTv0_n36_N8S19968C1D0Ev),
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  ABISELECT(-11808,-7008),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C1D1Ev,_ZTvn144_n36_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C1D0Ev,_ZTvn144_n36_N8S19968C1D0Ev),
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-11824,-7020),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C1D1Ev,_ZTvn156_n36_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C1D0Ev,_ZTvn156_n36_N8S19968C1D0Ev),
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-14480,-8592),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  ABISELECT(-14560,-8632),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-14560,-8632),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C1D1Ev,_ZTv0_n24_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C1D0Ev,_ZTv0_n24_N8S19968C1D0Ev),
  0,
  ABISELECT(-14576,-8644),
  ABISELECT(-16,-12),
  ABISELECT(1440,844),
  ABISELECT(-9920,-5872),
  ABISELECT(-336,-192),
  ABISELECT(-14576,-8644),
  ABISELECT(-96,-52),
  ABISELECT(-14576,-8644),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C1D1Ev,_ZTv0_n36_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C1D0Ev,_ZTv0_n36_N8S19968C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19968C142v4Ev,
  ABISELECT(-9936,-5884),
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8656),
  ABISELECT(-14592,-8656),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S19968C1D1Ev,_ZTvn12_n36_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S19968C1D0Ev,_ZTvn12_n36_N8S19968C1D0Ev),
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8860),
  ABISELECT(-14944,-8860),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9240),
  ABISELECT(-15584,-9240),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  ABISELECT(16,12),
  ABISELECT(-16016,-9488),
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9488),
  ABISELECT(-1536,-896),
  ABISELECT(-16016,-9488),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19968C1D1Ev,_ZTv0_n32_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19968C1D0Ev,_ZTv0_n32_N8S19968C1D0Ev),
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9500),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-16032,-9500),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S19968C1D1Ev,_ZTvn12_n32_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S19968C1D0Ev,_ZTvn12_n32_N8S19968C1D0Ev),
  ABISELECT(736,448),
  ABISELECT(736,448),
  ABISELECT(736,448),
  0,
  0,
  0,
  0,
  ABISELECT(-18448,-10928),
  ABISELECT(-13792,-8156),
  ABISELECT(-6896,-4064),
  ABISELECT(-3888,-2296),
  ABISELECT(9168,5456),
  ABISELECT(-4208,-2476),
  ABISELECT(-18448,-10928),
  ABISELECT(-3968,-2336),
  ABISELECT(-18448,-10928),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19968C1D1Ev,_ZTv0_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19968C1D0Ev,_ZTv0_n40_N8S19968C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  (VTBL_ENTRY)&_ZN9S19968C182v7Ev,
  (VTBL_ENTRY)&_ZN9S19968C182v8Ev,
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11376),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  ABISELECT(-19184,-11376),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn736_n80_N8S19968C1D1Ev,_ZTvn448_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn736_n80_N8S19968C1D0Ev,_ZTvn448_n40_N8S19968C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19968C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v6Ev,
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11520),
  ABISELECT(-4960,-2928),
  ABISELECT(-19440,-11520),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn992_n80_N8S19968C1D1Ev,_ZTvn592_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn992_n80_N8S19968C1D0Ev,_ZTvn592_n40_N8S19968C1D0Ev),
  ABISELECT(-19456,-11532),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1008_n80_N8S19968C1D1Ev,_ZTvn604_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1008_n80_N8S19968C1D0Ev,_ZTvn604_n40_N8S19968C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12124),
  ABISELECT(-5968,-3532),
  ABISELECT(-20448,-12124),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2000_n80_N8S19968C1D1Ev,_ZTvn1196_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2000_n80_N8S19968C1D0Ev,_ZTvn1196_n40_N8S19968C1D0Ev),
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12136),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-20464,-12136),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2016_n80_N8S19968C1D1Ev,_ZTvn1208_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2016_n80_N8S19968C1D0Ev,_ZTvn1208_n40_N8S19968C1D0Ev),
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13704),
  ABISELECT(-8640,-5112),
  ABISELECT(-23120,-13704),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4672_n80_N8S19968C1D1Ev,_ZTvn2776_n40_N8S19968C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4672_n80_N8S19968C1D0Ev,_ZTvn2776_n40_N8S19968C1D0Ev),
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16384),
  ABISELECT(-27616,-16384),
  (VTBL_ENTRY)&(_ZTI8S19968C1[0]),
};
extern VTBL_ENTRY _ZTV8S19968C1[];
extern void _ZN9S19968C21D1Ev();
extern void _ZN9S19968C21D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C21__8S19968C1[] = {
  ABISELECT(16016,9488),
  ABISELECT(4656,2772),
  ABISELECT(14480,8592),
  ABISELECT(14560,8632),
  ABISELECT(14240,8452),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&_ZN9S19968C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C21__A5__8S19968C1[] = {
  ABISELECT(14240,8452),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C129S19968C21__A2__8S19968C1[] = {
  ABISELECT(14480,8592),
  ABISELECT(14160,8412),
  ABISELECT(-80,-40),
  ABISELECT(14400,8552),
  ABISELECT(4576,2732),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C129S19968C21__A7__8S19968C1[] = {
  ABISELECT(14480,8592),
  ABISELECT(14160,8412),
  ABISELECT(-80,-40),
  ABISELECT(14400,8552),
  ABISELECT(4576,2732),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn4576_N8S19968C7D1Ev,_ZThn2732_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn4576_N8S19968C7D0Ev,_ZThn2732_N8S19968C7D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C129S19968C21__A7__8S19968C1[] = {
  0,
  0,
  ABISELECT(-4576,-2732),
  ABISELECT(-4576,-2732),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C129S19968C21__A7__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-14400,-8552),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn14480_N8S19968C7D1Ev,_ZThn8592_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn14480_N8S19968C7D0Ev,_ZThn8592_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C129S19968C21__A7__8S19968C1[] = {
  ABISELECT(-14480,-8592),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-14480,-8592),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C129S19968C21__A10__8S19968C1[] = {
  ABISELECT(13904,8268),
  ABISELECT(-336,-184),
  ABISELECT(14144,8408),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C129S19968C21__A10__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-14144,-8408),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C129S19968C21__A2__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-14400,-8552),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn4576_N9S19968C12D1Ev,_ZThn2732_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn4576_N9S19968C12D0Ev,_ZThn2732_N9S19968C12D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C129S19968C21__A2__8S19968C1[] = {
  0,
  0,
  ABISELECT(-4576,-2732),
  ABISELECT(-4576,-2732),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn14480_N9S19968C12D1Ev,_ZThn8592_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn14480_N9S19968C12D0Ev,_ZThn8592_N9S19968C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C129S19968C21__A2__8S19968C1[] = {
  ABISELECT(-14480,-8592),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-14480,-8592),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C129S19968C21__A2__8S19968C1[] = {
  ABISELECT(13904,8268),
  ABISELECT(-336,-184),
  ABISELECT(14144,8408),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C21D1Ev,_ZTv0_n24_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn14560_N9S19968C21D1Ev,_ZThn8632_N9S19968C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C21D0Ev,_ZTv0_n24_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn14560_N9S19968C21D0Ev,_ZThn8632_N9S19968C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C21__8S19968C1[] = {
  ABISELECT(-14560,-8632),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-14560,-8632),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C21D1Ev,_ZTv0_n24_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C21D0Ev,_ZTv0_n24_N9S19968C21D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C21__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-14480,-8592),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn80_N9S19968C21D1Ev,_ZThn40_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn80_N9S19968C21D0Ev,_ZThn40_N9S19968C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C12__9S19968C21__8S19968C1[] = {
  ABISELECT(14480,8592),
  ABISELECT(14160,8412),
  ABISELECT(-80,-40),
  ABISELECT(14400,8552),
  ABISELECT(4576,2732),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19968C21D1Ev,_ZThn40_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19968C21D0Ev,_ZThn40_N9S19968C21D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C21D1Ev,_ZTv0_n12_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn4656_N9S19968C21D1Ev,_ZThn2772_N9S19968C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19968C21D0Ev,_ZTv0_n12_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn4656_N9S19968C21D0Ev,_ZThn2772_N9S19968C21D0Ev)() __attribute__((weak));
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C21__8S19968C1[] = {
  0,
  0,
  ABISELECT(-4656,-2772),
  ABISELECT(-4656,-2772),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C21D1Ev,_ZTv0_n12_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C21D0Ev,_ZTv0_n12_N9S19968C21D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZThn336_N9S19968C21D1Ev,_ZThn184_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn336_N9S19968C21D0Ev,_ZThn184_N9S19968C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C12__A1__9S19968C21__8S19968C1[] = {
  ABISELECT(13904,8268),
  ABISELECT(-336,-184),
  ABISELECT(14144,8408),
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19968C21D1Ev,_ZThn184_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19968C21D0Ev,_ZThn184_N9S19968C21D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19968C21D1Ev,_ZTv0_n32_N9S19968C21D1Ev)();
extern void ABISELECT(_ZThn16016_N9S19968C21D1Ev,_ZThn9488_N9S19968C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19968C21D0Ev,_ZTv0_n32_N9S19968C21D0Ev)();
extern void ABISELECT(_ZThn16016_N9S19968C21D0Ev,_ZThn9488_N9S19968C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C11__9S19968C21__8S19968C1[] = {
  ABISELECT(16,12),
  ABISELECT(-16016,-9488),
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9488),
  ABISELECT(-1536,-896),
  ABISELECT(-16016,-9488),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C21D1Ev,_ZTv0_n32_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C21D0Ev,_ZTv0_n32_N9S19968C21D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19968C21D1Ev,_ZTvn12_n32_N9S19968C21D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19968C21D0Ev,_ZTvn12_n32_N9S19968C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A1__9S19968C21__8S19968C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9500),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-16032,-9500),
  (VTBL_ENTRY)&(_ZTI9S19968C21[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C21D1Ev,_ZTvn12_n32_N9S19968C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C21D0Ev,_ZTvn12_n32_N9S19968C21D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C5D1Ev();
extern void _ZN8S19968C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C5__8S19968C1[] = {
  ABISELECT(6160,3644),
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3220),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C128S19968C5__8S19968C1[] = {
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3220),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C128S19968C5__A2__8S19968C1[] = {
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3220),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C128S19968C5__A2__8S19968C1[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C128S19968C5__A2__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn9168_N8S19968C7D1Ev,_ZThn5412_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn9168_N8S19968C7D0Ev,_ZThn5412_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C128S19968C5__A2__8S19968C1[] = {
  ABISELECT(-9168,-5412),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-9168,-5412),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C128S19968C5__A2__8S19968C1[] = {
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3364),
  ABISELECT(8832,5228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C128S19968C5__A2__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-8832,-5228),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C128S19968C5__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C128S19968C5__8S19968C1[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn9168_N9S19968C12D1Ev,_ZThn5412_N9S19968C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
extern void ABISELECT(_ZThn9168_N9S19968C12D0Ev,_ZThn5412_N9S19968C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C128S19968C5__8S19968C1[] = {
  ABISELECT(-9168,-5412),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-9168,-5412),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C128S19968C5__8S19968C1[] = {
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3364),
  ABISELECT(8832,5228),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
};
extern void _ZN9S19968C13D1Ev();
extern void _ZN9S19968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C138S19968C5__8S19968C1[] = {
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3968),
  ABISELECT(7824,4624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN9S19968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C13D0Ev,
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C119S19968C138S19968C5__A1__8S19968C1[] = {
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3968),
  ABISELECT(7824,4624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C119S19968C138S19968C5__A3__8S19968C1[] = {
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3968),
  ABISELECT(7824,4624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C5__A3__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3980),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[] = {
  0,
  0,
  ABISELECT(2016,1208),
  ABISELECT(2016,1208),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-7808,-4612),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn7888_N8S19968C7D1Ev,_ZThn4652_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn7888_N8S19968C7D0Ev,_ZThn4652_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[] = {
  ABISELECT(-7888,-4652),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-7888,-4652),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C119S19968C138S19968C5__A1__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C119S19968C138S19968C5__A1__8S19968C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3980),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C119S19968C138S19968C5__A1__8S19968C1[] = {
  0,
  0,
  ABISELECT(2000,1196),
  ABISELECT(2000,1196),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn7904_N9S19968C11D1Ev,_ZThn4664_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn7904_N9S19968C11D0Ev,_ZThn4664_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C5__A1__8S19968C1[] = {
  ABISELECT(-7904,-4664),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-7904,-4664),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C138S19968C5__A4__8S19968C1[] = {
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5548),
  ABISELECT(5152,3044),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C138S19968C5__A4__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-5152,-3044),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C138S19968C5__8S19968C1[] = {
  0,
  0,
  ABISELECT(2000,1196),
  ABISELECT(2000,1196),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C138S19968C5__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C138S19968C5__8S19968C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3980),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn7904_N9S19968C13D1Ev,_ZThn4664_N9S19968C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev)();
extern void ABISELECT(_ZThn7904_N9S19968C13D0Ev,_ZThn4664_N9S19968C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C138S19968C5__8S19968C1[] = {
  ABISELECT(-7904,-4664),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-7904,-4664),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C138S19968C5__8S19968C1[] = {
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5548),
  ABISELECT(5152,3044),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn6160_N8S19968C5D1Ev,_ZThn3644_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn6160_N8S19968C5D0Ev,_ZThn3644_N8S19968C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19968C6__8S19968C5__8S19968C1[] = {
  ABISELECT(-6160,-3644),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6864),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(-6160,-3644),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C5__8S19968C1[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C5__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn9168_N8S19968C5D1Ev,_ZThn5412_N8S19968C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev)();
extern void ABISELECT(_ZThn9168_N8S19968C5D0Ev,_ZThn5412_N8S19968C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C5__8S19968C1[] = {
  ABISELECT(-9168,-5412),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-9168,-5412),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__8S19968C5__8S19968C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  ABISELECT(-6416,-3788),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C5__8S19968C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-6432,-3800),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C12__A2__8S19968C5__8S19968C1[] = {
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3364),
  ABISELECT(8832,5228),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C13__8S19968C5__8S19968C1[] = {
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3968),
  ABISELECT(7824,4624),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C5__8S19968C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3980),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C13__A4__8S19968C5__8S19968C1[] = {
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5548),
  ABISELECT(5152,3044),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C6D1Ev();
extern void _ZN8S19968C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C6__8S19968C1[] = {
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6864),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C6D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C78S19968C6__8S19968C1[] = {
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6864),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C78S19968C6__8S19968C1[] = {
  0,
  0,
  ABISELECT(6896,4092),
  ABISELECT(6896,4092),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C78S19968C6__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn3008_N8S19968C7D1Ev,_ZThn1768_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn3008_N8S19968C7D0Ev,_ZThn1768_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C78S19968C6__8S19968C1[] = {
  ABISELECT(-3008,-1768),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-3008,-1768),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__8S19968C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C118S19968C6__A1__8S19968C1[] = {
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__8S19968C1[] = {
  0,
  0,
  ABISELECT(7168,4248),
  ABISELECT(7168,4248),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZThn2736_N8S19968C7D1Ev,_ZThn1612_N8S19968C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
extern void ABISELECT(_ZThn2736_N8S19968C7D0Ev,_ZThn1612_N8S19968C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__8S19968C1[] = {
  ABISELECT(-2736,-1612),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-2736,-1612),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C118S19968C6__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C118S19968C6__8S19968C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C118S19968C6__8S19968C1[] = {
  0,
  0,
  ABISELECT(7152,4236),
  ABISELECT(7152,4236),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn2752_N9S19968C11D1Ev,_ZThn1624_N9S19968C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
extern void ABISELECT(_ZThn2752_N9S19968C11D0Ev,_ZThn1624_N9S19968C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C118S19968C6__8S19968C1[] = {
  ABISELECT(-2752,-1624),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-2752,-1624),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C6__8S19968C1[] = {
  0,
  0,
  ABISELECT(6896,4092),
  ABISELECT(6896,4092),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D1Ev,_ZTv0_n12_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C6D0Ev,_ZTv0_n12_N8S19968C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C6__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn3008_N8S19968C6D1Ev,_ZThn1768_N8S19968C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev)();
extern void ABISELECT(_ZThn3008_N8S19968C6D0Ev,_ZThn1768_N8S19968C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C6__8S19968C1[] = {
  ABISELECT(-3008,-1768),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(-3008,-1768),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C11__8S19968C6__8S19968C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D1Ev,_ZThn144_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C6D0Ev,_ZThn144_N8S19968C6D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A1__8S19968C6__8S19968C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19968C6[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D1Ev,_ZThn156_N8S19968C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19968C6D0Ev,_ZThn156_N8S19968C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C1[] = {
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C10__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN9S19968C14D1Ev();
extern void _ZN9S19968C14D0Ev();
extern void _ZN9S19968C142v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C14__8S19968C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(1440,844),
  ABISELECT(-9920,-5872),
  ABISELECT(-336,-192),
  ABISELECT(-14576,-8644),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&_ZN9S19968C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19968C142v4Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C14__A5__8S19968C1[] = {
  ABISELECT(-336,-192),
  ABISELECT(-14576,-8644),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C14__A5__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN9S19968C15D1Ev();
extern void _ZN9S19968C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C159S19968C14__8S19968C1[] = {
  ABISELECT(-9936,-5884),
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8656),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
  (VTBL_ENTRY)&_ZN9S19968C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19968C169S19968C159S19968C14__8S19968C1[] = {
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8656),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C169S19968C159S19968C14__A1__8S19968C1[] = {
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8656),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C159S19968C14__A2__8S19968C1[] = {
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8860),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C159S19968C14__8S19968C1[] = {
  0,
  0,
  ABISELECT(9936,5884),
  ABISELECT(9936,5884),
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C15D1Ev,_ZTv0_n12_N9S19968C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C15D0Ev,_ZTv0_n12_N9S19968C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__A1__9S19968C159S19968C14__8S19968C1[] = {
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8860),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI9S19968C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19968C169S19968C14__A1__8S19968C1[] = {
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9240),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C169S19968C14__A3__8S19968C1[] = {
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9240),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C14__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
};
extern void ABISELECT(_ZThn16_N9S19968C14D1Ev,_ZThn12_N9S19968C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C14D0Ev,_ZThn12_N9S19968C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C15__9S19968C14__8S19968C1[] = {
  ABISELECT(-9936,-5884),
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8656),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C14D1Ev,_ZThn12_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C14D0Ev,_ZThn12_N9S19968C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C14D1Ev,_ZTv0_n12_N9S19968C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C14D0Ev,_ZTv0_n12_N9S19968C14D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C14__8S19968C1[] = {
  0,
  0,
  ABISELECT(9920,5872),
  ABISELECT(9920,5872),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C14D1Ev,_ZTv0_n12_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C14D0Ev,_ZTv0_n12_N9S19968C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C15__A2__9S19968C14__8S19968C1[] = {
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8860),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
};
extern void ABISELECT(_ZTv0_n64_N9S19968C14D1Ev,_ZTv0_n32_N9S19968C14D1Ev)();
extern void ABISELECT(_ZThn1440_N9S19968C14D1Ev,_ZThn844_N9S19968C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19968C14D0Ev,_ZTv0_n32_N9S19968C14D0Ev)();
extern void ABISELECT(_ZThn1440_N9S19968C14D0Ev,_ZThn844_N9S19968C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19968C11__9S19968C14__8S19968C1[] = {
  ABISELECT(16,12),
  ABISELECT(-1440,-844),
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9488),
  ABISELECT(-1536,-896),
  ABISELECT(-1440,-844),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C14D1Ev,_ZTv0_n32_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19968C14D0Ev,_ZTv0_n32_N9S19968C14D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19968C14D1Ev,_ZTvn12_n32_N9S19968C14D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19968C14D0Ev,_ZTvn12_n32_N9S19968C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C14__8S19968C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9500),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-1456,-856),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C14D1Ev,_ZTvn12_n32_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19968C14D0Ev,_ZTvn12_n32_N9S19968C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C14D1Ev,_ZTv0_n24_N9S19968C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C14D0Ev,_ZTv0_n24_N9S19968C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A2__9S19968C14__8S19968C1[] = {
  ABISELECT(16,12),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C14D1Ev,_ZTv0_n24_N9S19968C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C14D0Ev,_ZTv0_n24_N9S19968C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19968C16__A1__9S19968C14__8S19968C1[] = {
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9240),
  ABISELECT(-1008,-596),
  (VTBL_ENTRY)&(_ZTI9S19968C14[0]),
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C11__A2__8S19968C1[] = {
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9488),
  ABISELECT(-1536,-896),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C11__A6__8S19968C1[] = {
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9488),
  ABISELECT(-1536,-896),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C11__A6__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(1536,896),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__A4__8S19968C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9500),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C11__A4__8S19968C1[] = {
  0,
  0,
  ABISELECT(11376,6728),
  ABISELECT(11376,6728),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C11__A4__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(1552,908),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C11__A4__8S19968C1[] = {
  ABISELECT(1472,868),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(1472,868),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C11__A2__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(1536,896),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C11__A2__8S19968C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9500),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C11__A2__8S19968C1[] = {
  0,
  0,
  ABISELECT(11360,6716),
  ABISELECT(11360,6716),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C11__A2__8S19968C1[] = {
  ABISELECT(1456,856),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(1456,856),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C18D1Ev();
extern void _ZN9S19968C18D0Ev();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
extern void _ZN9S19968C182v7Ev();
extern void _ZN9S19968C182v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C18__8S19968C1[] = {
  ABISELECT(-13792,-8156),
  ABISELECT(-6896,-4064),
  ABISELECT(-3888,-2296),
  ABISELECT(9168,5456),
  ABISELECT(-4208,-2476),
  ABISELECT(-18448,-10928),
  ABISELECT(-3968,-2336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN9S19968C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C18D0Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
  (VTBL_ENTRY)&_ZN9S19968C182v7Ev,
  (VTBL_ENTRY)&_ZN9S19968C182v8Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C20D1Ev();
extern void _ZN9S19968C20D0Ev();
extern void _ZN9S19968C202v5Ev();
extern void _ZN9S19968C202v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11376),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v6Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C5D1Ev();
extern void _ZN8S19968C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11376),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C5D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN9S19968C12D1Ev();
extern void _ZN9S19968C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11376),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C12D0Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[] = {
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11376),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C128S19968C59S19968C209S19968C18__A7__8S19968C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11520),
  ABISELECT(-4960,-2928),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C128S19968C59S19968C209S19968C18__A7__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(4960,2928),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11520),
  ABISELECT(-4960,-2928),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D1Ev,_ZThn144_N9S19968C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C12D0Ev,_ZThn144_N9S19968C12D0Ev),
};
extern void _ZN9S19968C13D1Ev();
extern void _ZN9S19968C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12124),
  ABISELECT(-5968,-3532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN9S19968C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C13D0Ev,
};
extern void _ZN9S19968C11D1Ev();
extern void _ZN9S19968C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12124),
  ABISELECT(-5968,-3532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN9S19968C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C11D0Ev,
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C119S19968C138S19968C59S19968C209S19968C18__A8__8S19968C1[] = {
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12124),
  ABISELECT(-5968,-3532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C59S19968C209S19968C18__A8__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(5968,3532),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void _ZN8S19968C7D1Ev();
extern void _ZN8S19968C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12136),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19968C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[] = {
  0,
  0,
  ABISELECT(15808,9364),
  ABISELECT(15808,9364),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(5984,3544),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[] = {
  ABISELECT(5904,3504),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(5904,3504),
  (VTBL_ENTRY)&(_ZTI8S19968C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(5968,3532),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C7__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12136),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D1Ev,_ZThn12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C11D0Ev,_ZThn12_N9S19968C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[] = {
  0,
  0,
  ABISELECT(15792,9352),
  ABISELECT(15792,9352),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D1Ev,_ZTv0_n12_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C11D0Ev,_ZTv0_n12_N9S19968C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[] = {
  ABISELECT(5888,3492),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(5888,3492),
  (VTBL_ENTRY)&(_ZTI9S19968C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev),
};
extern void _ZN9S19968C10D1Ev();
extern void _ZN9S19968C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C138S19968C59S19968C209S19968C18__A9__8S19968C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13704),
  ABISELECT(-8640,-5112),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
  (VTBL_ENTRY)&_ZN9S19968C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19968C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C109S19968C138S19968C59S19968C209S19968C18__A9__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(8640,5112),
  (VTBL_ENTRY)&(_ZTI9S19968C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  0,
  0,
  ABISELECT(15792,9352),
  ABISELECT(15792,9352),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D1Ev,_ZTv0_n12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C13D0Ev,_ZTv0_n12_N9S19968C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(5968,3532),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C11__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12136),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D1Ev,_ZThn12_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19968C13D0Ev,_ZThn12_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A1__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(5888,3492),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(5888,3492),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__A__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13704),
  ABISELECT(-8640,-5112),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19968C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D1Ev,_ZThn1580_N9S19968C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19968C13D0Ev,_ZThn1580_N9S19968C13D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C6__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(7632,4512),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6864),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(7632,4512),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D1Ev,_ZTv0_n12_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19968C5D0Ev,_ZTv0_n12_N8S19968C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  ABISELECT(7376,4368),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D1Ev,_ZTvn144_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19968C5D0Ev,_ZTvn144_n36_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(7360,4356),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D1Ev,_ZTvn156_n36_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19968C5D0Ev,_ZTvn156_n36_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C12__A2__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11520),
  ABISELECT(-4960,-2928),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D1Ev,_ZThn144_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19968C5D0Ev,_ZThn144_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C13__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12124),
  ABISELECT(-5968,-3532),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D1Ev,_ZThn748_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19968C5D0Ev,_ZThn748_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12136),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D1Ev,_ZThn760_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19968C5D0Ev,_ZThn760_N8S19968C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C13__A4__8S19968C59S19968C209S19968C18__A1__8S19968C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13704),
  ABISELECT(-8640,-5112),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19968C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D1Ev,_ZThn2328_N8S19968C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19968C5D0Ev,_ZThn2328_N8S19968C5D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C6__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(7632,4512),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6864),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(7632,4512),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C20D1Ev,_ZTv0_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C20D0Ev,_ZTv0_n36_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__9S19968C209S19968C18__8S19968C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C20D1Ev,_ZTv0_n12_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C20D0Ev,_ZTv0_n12_N9S19968C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C20D1Ev,_ZTv0_n24_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C20D0Ev,_ZTv0_n24_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N9S19968C20D1Ev,_ZTvn144_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19968C20D0Ev,_ZTvn144_n36_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  ABISELECT(7376,4368),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C20D1Ev,_ZTvn144_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C20D0Ev,_ZTvn144_n36_N9S19968C20D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19968C20D1Ev,_ZTvn156_n36_N9S19968C20D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19968C20D0Ev,_ZTvn156_n36_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(7360,4356),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C20D1Ev,_ZTvn156_n36_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C20D0Ev,_ZTvn156_n36_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19968C20D1Ev,_ZThn144_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn256_N9S19968C20D0Ev,_ZThn144_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C128S19968C5__A2__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11520),
  ABISELECT(-4960,-2928),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C20D1Ev,_ZThn144_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19968C20D0Ev,_ZThn144_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZThn1264_N9S19968C20D1Ev,_ZThn748_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn1264_N9S19968C20D0Ev,_ZThn748_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C138S19968C5__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12124),
  ABISELECT(-5968,-3532),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19968C20D1Ev,_ZThn748_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19968C20D0Ev,_ZThn748_N9S19968C20D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn1280_N9S19968C20D1Ev,_ZThn760_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn1280_N9S19968C20D0Ev,_ZThn760_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12136),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19968C20D1Ev,_ZThn760_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19968C20D0Ev,_ZThn760_N9S19968C20D0Ev),
};
extern void ABISELECT(_ZThn3936_N9S19968C20D1Ev,_ZThn2328_N9S19968C20D1Ev)();
extern void ABISELECT(_ZThn3936_N9S19968C20D0Ev,_ZThn2328_N9S19968C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C138S19968C5__A4__9S19968C209S19968C18__8S19968C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13704),
  ABISELECT(-8640,-5112),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI9S19968C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19968C20D1Ev,_ZThn2328_N9S19968C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19968C20D0Ev,_ZThn2328_N9S19968C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19968C8__9S19968C18__8S19968C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8592),
  ABISELECT(3968,2336),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19968C19__9S19968C18__8S19968C1[] = {
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16384),
  ABISELECT(-9168,-5456),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19968C18D1Ev,_ZTv0_n24_N9S19968C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19968C18D0Ev,_ZTv0_n24_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C10__9S19968C18__8S19968C1[] = {
  ABISELECT(3888,2296),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8632),
  ABISELECT(-80,-40),
  ABISELECT(3888,2296),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C18D1Ev,_ZTv0_n24_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19968C18D0Ev,_ZTv0_n24_N9S19968C18D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn736_N9S19968C18D1Ev,_ZThn448_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn736_N9S19968C18D0Ev,_ZThn448_N9S19968C18D0Ev)();
extern void _ZN9S19968C202v5Ev();
extern void _ZN9S19968C202v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19968C20__9S19968C18__8S19968C1[] = {
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11376),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  ABISELECT(-736,-448),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19968C18D1Ev,_ZThn448_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19968C18D0Ev,_ZThn448_N9S19968C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19968C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19968C202v6Ev,
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19968C18D1Ev,_ZTv0_n36_N9S19968C18D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S19968C18D0Ev,_ZTv0_n36_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C6__9S19968C18__8S19968C1[] = {
  ABISELECT(6896,4064),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6864),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(6896,4064),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C18D1Ev,_ZTv0_n36_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19968C18D0Ev,_ZTv0_n36_N9S19968C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19968C18D1Ev,_ZTv0_n12_N9S19968C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19968C18D0Ev,_ZTv0_n12_N9S19968C18D0Ev)();
extern void _ZN8S19968C22v1Ev();
extern void _ZN8S19968C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19968C2__A1__9S19968C18__8S19968C1[] = {
  0,
  0,
  ABISELECT(13792,8156),
  ABISELECT(13792,8156),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C18D1Ev,_ZTv0_n12_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19968C18D0Ev,_ZTv0_n12_N9S19968C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19968C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19968C22v2Ev,
};
extern void ABISELECT(_ZTvn256_n72_N9S19968C18D1Ev,_ZTvn144_n36_N9S19968C18D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19968C18D0Ev,_ZTvn144_n36_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C118S19968C6__9S19968C18__8S19968C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7008),
  ABISELECT(2672,1584),
  ABISELECT(6640,3920),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C18D1Ev,_ZTvn144_n36_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19968C18D0Ev,_ZTvn144_n36_N9S19968C18D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19968C18D1Ev,_ZTvn156_n36_N9S19968C18D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19968C18D0Ev,_ZTvn156_n36_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C18__8S19968C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7020),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(6624,3908),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C18D1Ev,_ZTvn156_n36_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19968C18D0Ev,_ZTvn156_n36_N9S19968C18D0Ev),
};
extern void ABISELECT(_ZThn992_N9S19968C18D1Ev,_ZThn592_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn992_N9S19968C18D0Ev,_ZThn592_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C128S19968C59S19968C20__A2__9S19968C18__8S19968C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11520),
  ABISELECT(-4960,-2928),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19968C18D1Ev,_ZThn592_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19968C18D0Ev,_ZThn592_N9S19968C18D0Ev),
};
extern void ABISELECT(_ZThn2000_N9S19968C18D1Ev,_ZThn1196_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn2000_N9S19968C18D0Ev,_ZThn1196_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C138S19968C59S19968C20__9S19968C18__8S19968C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12124),
  ABISELECT(-5968,-3532),
  ABISELECT(-2000,-1196),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19968C18D1Ev,_ZThn1196_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19968C18D0Ev,_ZThn1196_N9S19968C18D0Ev),
};
extern void _ZN8S19968C72v3Ev();
extern void ABISELECT(_ZThn2016_N9S19968C18D1Ev,_ZThn1208_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn2016_N9S19968C18D0Ev,_ZThn1208_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18__8S19968C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12136),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-2016,-1208),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&_ZN8S19968C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19968C18D1Ev,_ZThn1208_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19968C18D0Ev,_ZThn1208_N9S19968C18D0Ev),
};
extern void ABISELECT(_ZThn4672_N9S19968C18D1Ev,_ZThn2776_N9S19968C18D1Ev)();
extern void ABISELECT(_ZThn4672_N9S19968C18D0Ev,_ZThn2776_N9S19968C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19968C109S19968C138S19968C59S19968C20__A4__9S19968C18__8S19968C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13704),
  ABISELECT(-8640,-5112),
  ABISELECT(-4672,-2776),
  (VTBL_ENTRY)&(_ZTI9S19968C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19968C18D1Ev,_ZThn2776_N9S19968C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19968C18D0Ev,_ZThn2776_N9S19968C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19968C19__8S19968C1[] = {
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16384),
  0,
  (VTBL_ENTRY)&(_ZTI9S19968C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19968C89S19968C19__A4__8S19968C1[] = {
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16384),
  0,
  (VTBL_ENTRY)&(_ZTI8S19968C8[0]),
};
static  VTT_ENTRY vtt_S19968C1[] = {
  {&(_ZTV8S19968C1[13]),  13,272},
  {&(_tg__ZTV9S19968C21__8S19968C1[8]),  8,10},
  {&(_tg__ZTV8S19968C89S19968C21__A5__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C129S19968C21__A2__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C79S19968C129S19968C21__A7__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C129S19968C21__A7__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C129S19968C21__A7__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C129S19968C21__A7__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C129S19968C21__A10__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C129S19968C21__A10__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C129S19968C21__A2__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C129S19968C21__A2__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C10__9S19968C129S19968C21__A2__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C129S19968C21__A2__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C10__9S19968C21__8S19968C1[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C21__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C12__9S19968C21__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C21__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C109S19968C12__A1__9S19968C21__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C11__9S19968C21__8S19968C1[9]),  9,11},
  {&(_tg__ZTV8S19968C79S19968C11__A1__9S19968C21__8S19968C1[7]),  7,10},
  {&(_ZTV8S19968C1[43]),  43,272},
  {&(_ZTV8S19968C1[59]),  59,272},
  {&(_ZTV8S19968C1[110]),  110,272},
  {&(_ZTV8S19968C1[136]),  136,272},
  {&(_ZTV8S19968C1[142]),  142,272},
  {&(_ZTV8S19968C1[120]),  120,272},
  {&(_ZTV8S19968C1[129]),  129,272},
  {&(_ZTV8S19968C1[67]),  67,272},
  {&(_ZTV8S19968C1[71]),  71,272},
  {&(_ZTV8S19968C1[82]),  82,272},
  {&(_ZTV8S19968C1[91]),  91,272},
  {&(_ZTV8S19968C1[99]),  99,272},
  {&(_ZTV8S19968C1[154]),  154,272},
  {&(_ZTV8S19968C1[162]),  162,272},
  {&(_ZTV8S19968C1[168]),  168,272},
  {&(_ZTV8S19968C1[181]),  181,272},
  {&(_ZTV8S19968C1[190]),  190,272},
  {&(_ZTV8S19968C1[172]),  172,272},
  {&(_ZTV8S19968C1[210]),  210,272},
  {&(_ZTV8S19968C1[272]),  272,272},
  {&(_ZTV8S19968C1[224]),  224,272},
  {&(_ZTV8S19968C1[234]),  234,272},
  {&(_ZTV8S19968C1[238]),  238,272},
  {&(_ZTV8S19968C1[249]),  249,272},
  {&(_ZTV8S19968C1[258]),  258,272},
  {&(_ZTV8S19968C1[266]),  266,272},
  {&(_ZTV8S19968C1[22]),  22,272},
  {&(_ZTV8S19968C1[30]),  30,272},
  {&(_tg__ZTV8S19968C5__8S19968C1[8]),  8,11},
  {&(_tg__ZTV9S19968C128S19968C5__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C79S19968C128S19968C5__A2__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C128S19968C5__A2__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C128S19968C5__A2__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C128S19968C5__A2__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C128S19968C5__A2__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C128S19968C5__A2__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C128S19968C5__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C128S19968C5__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C10__9S19968C128S19968C5__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C128S19968C5__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C138S19968C5__8S19968C1[7]),  7,9},
  {&(_tg__ZTV9S19968C119S19968C138S19968C5__A1__8S19968C1[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C119S19968C138S19968C5__A3__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C5__A3__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C5__A3__8S19968C1[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C119S19968C138S19968C5__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C119S19968C138S19968C5__A1__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C119S19968C138S19968C5__A1__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C5__A1__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C138S19968C5__A4__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C138S19968C5__A4__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C138S19968C5__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__9S19968C138S19968C5__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C138S19968C5__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C10__A1__9S19968C138S19968C5__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C138S19968C5__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C6__8S19968C5__8S19968C1[9]),  9,12},
  {&(_tg__ZTV8S19968C2__8S19968C5__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C5__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C5__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__8S19968C5__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C5__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C12__A2__8S19968C5__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C13__8S19968C5__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C5__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C13__A4__8S19968C5__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C6__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C78S19968C6__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C78S19968C6__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C78S19968C6__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C78S19968C6__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__8S19968C1[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C118S19968C6__A1__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C118S19968C6__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C118S19968C6__A1__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C118S19968C6__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C118S19968C6__A1__8S19968C1[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C118S19968C6__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C118S19968C6__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C118S19968C6__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C118S19968C6__8S19968C1[6]),  6,8},
  {&(_tg__ZTV8S19968C2__8S19968C6__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C6__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C6__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C11__8S19968C6__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C11__A1__8S19968C6__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C8__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C10__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C14__8S19968C1[8]),  8,11},
  {&(_tg__ZTV9S19968C109S19968C14__A5__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C14__A5__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C159S19968C14__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C169S19968C159S19968C14__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C169S19968C159S19968C14__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C159S19968C14__A2__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C159S19968C14__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__A1__9S19968C159S19968C14__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C169S19968C14__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C169S19968C14__A3__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C14__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C15__9S19968C14__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C2__9S19968C14__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C89S19968C15__A2__9S19968C14__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C11__9S19968C14__8S19968C1[9]),  9,11},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C14__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C10__A2__9S19968C14__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C16__A1__9S19968C14__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C11__A2__8S19968C1[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C11__A6__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C11__A6__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__A4__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C11__A4__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C11__A4__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C11__A4__8S19968C1[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C11__A2__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C11__A2__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C11__A2__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C11__A2__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C18__8S19968C1[9]),  9,15},
  {&(_tg__ZTV9S19968C209S19968C18__8S19968C1[8]),  8,13},
  {&(_tg__ZTV8S19968C59S19968C209S19968C18__A1__8S19968C1[8]),  8,11},
  {&(_tg__ZTV9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C128S19968C59S19968C209S19968C18__A5__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C128S19968C59S19968C209S19968C18__A7__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C128S19968C59S19968C209S19968C18__A7__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C8__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C10__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C128S19968C59S19968C209S19968C18__A1__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[7]),  7,9},
  {&(_tg__ZTV9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[7]),  7,9},
  {&(_tg__ZTV9S19968C109S19968C119S19968C138S19968C59S19968C209S19968C18__A8__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C119S19968C138S19968C59S19968C209S19968C18__A8__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C79S19968C119S19968C138S19968C59S19968C209S19968C18__A6__8S19968C1[6]),  6,8},
  {&(_tg__ZTV8S19968C8__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C7__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[7]),  7,10},
  {&(_tg__ZTV8S19968C2__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C10__A1__9S19968C119S19968C138S19968C59S19968C209S19968C18__A3__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C109S19968C138S19968C59S19968C209S19968C18__A9__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C109S19968C138S19968C59S19968C209S19968C18__A9__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C2__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C79S19968C11__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C10__A1__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C10__A__9S19968C138S19968C59S19968C209S19968C18__A1__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C6__8S19968C59S19968C209S19968C18__A1__8S19968C1[9]),  9,12},
  {&(_tg__ZTV8S19968C2__8S19968C59S19968C209S19968C18__A1__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__8S19968C59S19968C209S19968C18__A1__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__8S19968C59S19968C209S19968C18__A1__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__8S19968C59S19968C209S19968C18__A1__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__8S19968C59S19968C209S19968C18__A1__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C12__A2__8S19968C59S19968C209S19968C18__A1__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C13__8S19968C59S19968C209S19968C18__A1__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C119S19968C13__A3__8S19968C59S19968C209S19968C18__A1__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C13__A4__8S19968C59S19968C209S19968C18__A1__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C6__9S19968C209S19968C18__8S19968C1[9]),  9,12},
  {&(_tg__ZTV8S19968C2__9S19968C209S19968C18__8S19968C1[5]),  5,9},
  {&(_tg__ZTV8S19968C8__9S19968C209S19968C18__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__9S19968C209S19968C18__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C118S19968C6__9S19968C209S19968C18__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C209S19968C18__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C128S19968C5__A2__9S19968C209S19968C18__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C138S19968C5__9S19968C209S19968C18__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C119S19968C138S19968C5__A3__9S19968C209S19968C18__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C138S19968C5__A4__9S19968C209S19968C18__8S19968C1[5]),  5,7},
  {&(_tg__ZTV8S19968C8__9S19968C18__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C19__9S19968C18__8S19968C1[4]),  4,4},
  {&(_tg__ZTV9S19968C10__9S19968C18__8S19968C1[6]),  6,8},
  {&(_tg__ZTV9S19968C20__9S19968C18__8S19968C1[8]),  8,13},
  {&(_tg__ZTV8S19968C6__9S19968C18__8S19968C1[9]),  9,12},
  {&(_tg__ZTV8S19968C2__A1__9S19968C18__8S19968C1[5]),  5,9},
  {&(_tg__ZTV9S19968C118S19968C6__9S19968C18__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C118S19968C6__A1__9S19968C18__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C128S19968C59S19968C20__A2__9S19968C18__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C138S19968C59S19968C20__9S19968C18__8S19968C1[7]),  7,9},
  {&(_tg__ZTV8S19968C79S19968C119S19968C138S19968C59S19968C20__A3__9S19968C18__8S19968C1[7]),  7,10},
  {&(_tg__ZTV9S19968C109S19968C138S19968C59S19968C20__A4__9S19968C18__8S19968C1[5]),  5,7},
  {&(_tg__ZTV9S19968C19__8S19968C1[4]),  4,4},
  {&(_tg__ZTV8S19968C89S19968C19__A4__8S19968C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19968C1[];
extern  VTBL_ENTRY _ZTV8S19968C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19968C1[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C14D0Ev,_ZTv0_n32_N9S19968C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N9S19968C14D0Ev,_ZThn844_N9S19968C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C14D1Ev,_ZTv0_n32_N9S19968C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N9S19968C14D1Ev,_ZThn844_N9S19968C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D0Ev,_ZTv0_n24_N8S19968C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19968C6D0Ev,_ZThn1768_N8S19968C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C6D1Ev,_ZTv0_n24_N8S19968C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19968C6D1Ev,_ZThn1768_N8S19968C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D0Ev,_ZTv0_n24_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19968C5D0Ev,_ZThn5412_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C5D1Ev,_ZTv0_n24_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19968C5D1Ev,_ZThn5412_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D0Ev,_ZTv0_n36_N8S19968C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19968C5D0Ev,_ZThn3644_N8S19968C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C5D1Ev,_ZTv0_n36_N8S19968C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19968C5D1Ev,_ZThn3644_N8S19968C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D0Ev,_ZTv0_n24_N9S19968C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19968C13D0Ev,_ZThn4664_N9S19968C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C13D1Ev,_ZTv0_n24_N9S19968C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19968C13D1Ev,_ZThn4664_N9S19968C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D0Ev,_ZTv0_n24_N9S19968C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19968C11D0Ev,_ZThn1624_N9S19968C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19968C11D0Ev,_ZThn4664_N9S19968C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C11D1Ev,_ZTv0_n24_N9S19968C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19968C11D1Ev,_ZThn1624_N9S19968C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19968C11D1Ev,_ZThn4664_N9S19968C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C21D0Ev,_ZTv0_n32_N9S19968C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N9S19968C21D0Ev,_ZThn9488_N9S19968C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19968C21D1Ev,_ZTv0_n32_N9S19968C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N9S19968C21D1Ev,_ZThn9488_N9S19968C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C21D0Ev,_ZTv0_n12_N9S19968C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S19968C21D0Ev,_ZThn2772_N9S19968C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C21D1Ev,_ZTv0_n12_N9S19968C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S19968C21D1Ev,_ZThn2772_N9S19968C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C21D0Ev,_ZTv0_n24_N9S19968C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N9S19968C21D0Ev,_ZThn8632_N9S19968C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C21D1Ev,_ZTv0_n24_N9S19968C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N9S19968C21D1Ev,_ZThn8632_N9S19968C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D0Ev,_ZTv0_n24_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N9S19968C12D0Ev,_ZThn5412_N9S19968C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N9S19968C12D0Ev,_ZThn8592_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19968C12D1Ev,_ZTv0_n24_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N9S19968C12D1Ev,_ZThn5412_N9S19968C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N9S19968C12D1Ev,_ZThn8592_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D0Ev,_ZTv0_n12_N9S19968C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N9S19968C12D0Ev,_ZThn2732_N9S19968C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19968C12D1Ev,_ZTv0_n12_N9S19968C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N9S19968C12D1Ev,_ZThn2732_N9S19968C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D0Ev,_ZTv0_n24_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19968C7D0Ev,_ZThn1612_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19968C7D0Ev,_ZThn1768_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7888_N8S19968C7D0Ev,_ZThn4652_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19968C7D0Ev,_ZThn5412_N8S19968C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N8S19968C7D0Ev,_ZThn8592_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C7D1Ev,_ZTv0_n24_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19968C7D1Ev,_ZThn1612_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19968C7D1Ev,_ZThn1768_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7888_N8S19968C7D1Ev,_ZThn4652_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19968C7D1Ev,_ZThn5412_N8S19968C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N8S19968C7D1Ev,_ZThn8592_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D0Ev,_ZTv0_n12_N8S19968C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N8S19968C7D0Ev,_ZThn2732_N8S19968C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C7D1Ev,_ZTv0_n12_N8S19968C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N8S19968C7D1Ev,_ZThn2732_N8S19968C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19968C1D0Ev,_ZTv0_n32_N8S19968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N8S19968C1D0Ev,_ZThn9488_N8S19968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19968C1D1Ev,_ZTv0_n32_N8S19968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N8S19968C1D1Ev,_ZThn9488_N8S19968C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C1D0Ev,_ZTv0_n24_N8S19968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N8S19968C1D0Ev,_ZThn8632_N8S19968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19968C1D1Ev,_ZTv0_n24_N8S19968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N8S19968C1D1Ev,_ZThn8632_N8S19968C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C1D0Ev,_ZTv0_n36_N8S19968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14576_N8S19968C1D0Ev,_ZThn8644_N8S19968C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11552_N8S19968C1D0Ev,_ZThn6864_N8S19968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19968C1D1Ev,_ZTv0_n36_N8S19968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14576_N8S19968C1D1Ev,_ZThn8644_N8S19968C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11552_N8S19968C1D1Ev,_ZThn6864_N8S19968C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19968C1D0Ev,_ZTv0_n40_N8S19968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18448_N8S19968C1D0Ev,_ZThn10928_N8S19968C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5392_N8S19968C1D0Ev,_ZThn3220_N8S19968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19968C1D1Ev,_ZTv0_n40_N8S19968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18448_N8S19968C1D1Ev,_ZThn10928_N8S19968C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5392_N8S19968C1D1Ev,_ZThn3220_N8S19968C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C1D0Ev,_ZTv0_n12_N8S19968C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19968C1D0Ev,_ZThn2772_N8S19968C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19968C1D1Ev,_ZTv0_n12_N8S19968C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19968C1D1Ev,_ZThn2772_N8S19968C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19968C1 = {  "S19968C1", // class name
  bases_S19968C1, 67,
  &(vtc_S19968C1[0]), // expected_vtbl_contents
  &(vtt_S19968C1[0]), // expected_vtt_contents
  ABISELECT(27888,16576), // object size
  NSPAIRA(_ZTI8S19968C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19968C1),272, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19968C1),211, //virtual table table var
  50, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C2  {
  void *s19967c2f0;
  ::S19968C3 s19967c2f1;
  ::S19968C3 s19967c2f2;
  int s19967c2f3[3];
  void *s19967c2f4[6];
  short s19967c2f5;
  ::S19968C4 s19967c2f6;
  virtual  ~S19967C2(); // _ZN8S19967C2D1Ev
  virtual void  v1(); // _ZN8S19967C22v1Ev
  virtual void  v2(); // _ZN8S19967C22v2Ev
  S19967C2(); // tgen
};
//SIG(-1 S19967C2) C1{ vd v1 v2 Fp FC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC2 Fi[3] Fp[6] Fs FU3{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}}


 S19967C2 ::~S19967C2(){ note_dtor("S19967C2", this);}
void  S19967C2 ::v1(){vfunc_called(this, "_ZN8S19967C22v1Ev");}
void  S19967C2 ::v2(){vfunc_called(this, "_ZN8S19967C22v2Ev");}
S19967C2 ::S19967C2(){ note_ctor("S19967C2", this);} // tgen

static void Test_S19967C2()
{
  extern Class_Descriptor cd_S19967C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,113)];
    init_test(&cd_S19967C2, buf);
    S19967C2 *dp, &lv = *(dp=new (buf) S19967C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,448), "sizeof(S19967C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C2)");
    check_field_offset(lv, s19967c2f0, ABISELECT(8,4), "S19967C2.s19967c2f0");
    check_field_offset(lv, s19967c2f1, ABISELECT(16,8), "S19967C2.s19967c2f1");
    check_field_offset(lv, s19967c2f2, ABISELECT(256,148), "S19967C2.s19967c2f2");
    check_field_offset(lv, s19967c2f3, ABISELECT(496,288), "S19967C2.s19967c2f3");
    check_field_offset(lv, s19967c2f4, ABISELECT(512,300), "S19967C2.s19967c2f4");
    check_field_offset(lv, s19967c2f5, ABISELECT(560,324), "S19967C2.s19967c2f5");
    check_field_offset(lv, s19967c2f6, ABISELECT(576,328), "S19967C2.s19967c2f6");
    test_class_info(&lv, &cd_S19967C2);
    dp->~S19967C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C2(Test_S19967C2, "S19967C2", ABISELECT(736,448));

#else // __cplusplus

extern void _ZN8S19967C2C1Ev();
extern void _ZN8S19967C2D1Ev();
Name_Map name_map_S19967C2[] = {
  NSPAIR(_ZN8S19967C2C1Ev),
  NSPAIR(_ZN8S19967C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19967C2[];
extern void _ZN8S19967C2D1Ev();
extern void _ZN8S19967C2D0Ev();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY vtc_S19967C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C2[0]),
  (VTBL_ENTRY)&_ZN8S19967C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
Class_Descriptor cd_S19967C2 = {  "S19967C2", // class name
  0,0,//no base classes
  &(vtc_S19967C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,448), // object size
  NSPAIRA(_ZTI8S19967C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19967C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C8  : virtual S22028C16 , virtual S19968C3 {
  void *s19967c8f0[9];
  ~S19967C8(); // tgen
  S19967C8(); // tgen
};
//SIG(-1 S19967C8) C1{ VBC2{ m} VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]}


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

static void Test_S19967C8()
{
  extern Class_Descriptor cd_S19967C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,46)];
    init_test(&cd_S19967C8, buf);
    S19967C8 *dp, &lv = *(dp=new (buf) S19967C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,180), "sizeof(S19967C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C8)");
    check_base_class_offset(lv, (S22028C16*), 0, "S19967C8");
    check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S19967C8");
    check_field_offset(lv, s19967c8f0, ABISELECT(8,4), "S19967C8.s19967c8f0");
    test_class_info(&lv, &cd_S19967C8);
    dp->~S19967C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C8(Test_S19967C8, "S19967C8", ABISELECT(320,180));

#else // __cplusplus

extern void _ZN8S19967C8C1Ev();
extern void _ZN8S19967C8D1Ev();
Name_Map name_map_S19967C8[] = {
  NSPAIR(_ZN8S19967C8C1Ev),
  NSPAIR(_ZN8S19967C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S19967C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19967C8[];
static  VTBL_ENTRY vtc_S19967C8[] = {
  ABISELECT(80,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern VTBL_ENTRY _ZTV8S19967C8[];
static  VTT_ENTRY vtt_S19967C8[] = {
  {&(_ZTV8S19967C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
Class_Descriptor cd_S19967C8 = {  "S19967C8", // class name
  bases_S19967C8, 2,
  &(vtc_S19967C8[0]), // expected_vtbl_contents
  &(vtt_S19967C8[0]), // expected_vtt_contents
  ABISELECT(320,180), // object size
  NSPAIRA(_ZTI8S19967C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19967C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19967C8),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  S19967C10  : virtual S19967C8 {
  int s19967c10f0:21;
  int s19967c10f1;
  virtual  ~S19967C10(); // _ZN9S19967C10D2Ev
  S19967C10(); // tgen
};
//SIG(-1 S19967C10) C1{ VBC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi}


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

static void Test_S19967C10()
{
  extern Class_Descriptor cd_S19967C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S19967C10, buf);
    S19967C10 *dp, &lv = *(dp=new (buf) S19967C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S19967C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C10)");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C10");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(96,52), "S19967C10");
    check_base_class_offset(lv, (S19967C8*), ABISELECT(16,12), "S19967C10");
    set_bf_and_test(lv, s19967c10f0, ABISELECT(8,4), 0, 21, 1, "S19967C10");
    set_bf_and_test(lv, s19967c10f0, ABISELECT(8,4), 0, 21, hide_sll(1LL<<20), "S19967C10");
    check_field_offset(lv, s19967c10f1, ABISELECT(12,8), "S19967C10.s19967c10f1");
    test_class_info(&lv, &cd_S19967C10);
    dp->~S19967C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C10(Test_S19967C10, "S19967C10", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN9S19967C10C1Ev();
extern void _ZN9S19967C10D2Ev();
Name_Map name_map_S19967C10[] = {
  NSPAIR(_ZN9S19967C10C1Ev),
  NSPAIR(_ZN9S19967C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
static Base_Class bases_S19967C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(96,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
    2, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C10[];
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY vtc_S19967C10[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern VTBL_ENTRY _ZTV9S19967C10[];
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10[] = {
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTT_ENTRY vtt_S19967C10[] = {
  {&(_ZTV9S19967C10[5]),  5,11},
  {&(_ZTV9S19967C10[11]),  11,11},
  {&(_tg__ZTV8S19967C8__9S19967C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
Class_Descriptor cd_S19967C10 = {  "S19967C10", // class name
  bases_S19967C10, 3,
  &(vtc_S19967C10[0]), // expected_vtbl_contents
  &(vtt_S19967C10[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI9S19967C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19967C10),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C10),3, //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  S19967C7  : virtual S19967C2 , virtual S19967C8 , virtual S19967C10 , S19968C3 {
  virtual void  v3(); // _ZN8S19967C72v3Ev
  ~S19967C7(); // tgen
  S19967C7(); // tgen
};
//SIG(-1 S19967C7) C1{ VBC2{ vd v2 v3 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ VBC5 vd Fi:21 Fi} BC3 v1}


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

static void Test_S19967C7()
{
  extern Class_Descriptor cd_S19967C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(84,197)];
    init_test(&cd_S19967C7, buf);
    S19967C7 *dp, &lv = *(dp=new (buf) S19967C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,784), "sizeof(S19967C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C7)");
    check_base_class_offset(lv, (S19967C2*), ABISELECT(256,144), "S19967C7");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C7");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(1072,632), "S19967C7");
    check_base_class_offset(lv, (S19967C8*), ABISELECT(992,592), "S19967C7");
    check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(992,592), "S19967C7");
    check_base_class_offset(lv, (S19967C10*), ABISELECT(1312,772), "S19967C7");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(16,4), "S19967C7");
    test_class_info(&lv, &cd_S19967C7);
    dp->~S19967C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C7(Test_S19967C7, "S19967C7", ABISELECT(1328,784));

#else // __cplusplus

extern void _ZN8S19967C7C1Ev();
extern void _ZN8S19967C7D1Ev();
Name_Map name_map_S19967C7[] = {
  NSPAIR(_ZN8S19967C7C1Ev),
  NSPAIR(_ZN8S19967C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S19967C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19967C2,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1072,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(992,592), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C10,    ABISELECT(1312,772), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19967C7[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C7D1Ev,_ZThn144_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn256_N8S19967C7D0Ev,_ZThn144_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn1312_N8S19967C7D1Ev,_ZThn772_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn1312_N8S19967C7D0Ev,_ZThn772_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C7[] = {
  ABISELECT(1312,772),
  ABISELECT(1072,632),
  0,
  ABISELECT(992,592),
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
  0,
  0,
  ABISELECT(-256,-144),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  ABISELECT(-1312,-772),
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  ABISELECT(-1312,-772),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S19967C7[];
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C7[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C7[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__8S19967C7[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C7[] = {
  {&(_ZTV8S19967C7[7]),  7,31},
  {&(_ZTV8S19967C7[15]),  15,31},
  {&(_ZTV8S19967C7[23]),  23,31},
  {&(_ZTV8S19967C7[29]),  29,31},
  {&(_tg__ZTV8S19967C8__8S19967C7[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C7[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__8S19967C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S19967C7D0Ev,_ZThn772_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S19967C7D1Ev,_ZThn772_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19967C7D0Ev,_ZThn144_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19967C7D1Ev,_ZThn144_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C7 = {  "S19967C7", // class name
  bases_S19967C7, 6,
  &(vtc_S19967C7[0]), // expected_vtbl_contents
  &(vtt_S19967C7[0]), // expected_vtt_contents
  ABISELECT(1328,784), // object size
  NSPAIRA(_ZTI8S19967C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19967C7),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19967C7),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C12  : virtual S19968C3 , virtual S19967C8 , S19967C7 , S19967C10 , S19967C2 {
  int s19967c12f0;
  virtual  ~S19967C12(); // _ZN9S19967C12D2Ev
  S19967C12(); // tgen
};
//SIG(-1 S19967C12) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ VBC4{ m} VBC2 Fp[9]} BC5{ VBC6{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC8{ VBC3 vd Fi:21 Fi} BC2 v3} BC8 BC6 vd Fi}


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

static void Test_S19967C12()
{
  extern Class_Descriptor cd_S19967C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,313)];
    init_test(&cd_S19967C12, buf);
    S19967C12 *dp, &lv = *(dp=new (buf) S19967C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1248), "sizeof(S19967C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C12)");
    /*is_ambiguous_... S19967C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S19967C12");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(1024,608), "S19967C12");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C12");
    check_base_class_offset(lv, (S19967C8*), ABISELECT(1264,748), "S19967C12");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*), ABISELECT(1264,748), "S19967C12");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(1264,748), "S19967C12");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(1264,748), "S19967C12");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*), ABISELECT(1344,788), "S19967C12");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*), ABISELECT(2080,1236), "S19967C12");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*), ABISELECT(16,4), "S19967C12");
    check_base_class_offset(lv, (S19967C7*), 0, "S19967C12");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*), ABISELECT(256,144), "S19967C12");
    /*is_ambiguous_... S19967C12::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*), ABISELECT(272,156), "S19967C12");
    check_field_offset(lv, s19967c12f0, ABISELECT(1008,604), "S19967C12.s19967c12f0");
    test_class_info(&lv, &cd_S19967C12);
    dp->~S19967C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C12(Test_S19967C12, "S19967C12", ABISELECT(2096,1248));

#else // __cplusplus

extern void _ZN9S19967C12C1Ev();
extern void _ZN9S19967C12D2Ev();
Name_Map name_map_S19967C12[] = {
  NSPAIR(_ZN9S19967C12C1Ev),
  NSPAIR(_ZN9S19967C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
static Base_Class bases_S19967C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19967C8,    ABISELECT(1264,748), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C2,    ABISELECT(1344,788), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19967C10,    ABISELECT(2080,1236), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19967C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C10,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C2,    ABISELECT(272,156), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C12[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn272_N9S19967C12D1Ev,_ZThn156_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn272_N9S19967C12D0Ev,_ZThn156_N9S19967C12D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn1344_N9S19967C12D1Ev,_ZThn788_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn1344_N9S19967C12D0Ev,_ZThn788_N9S19967C12D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn2080_N9S19967C12D1Ev,_ZThn1236_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn2080_N9S19967C12D0Ev,_ZThn1236_N9S19967C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C12[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19967C12D1Ev,_ZThn156_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19967C12D0Ev,_ZThn156_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19967C12[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C12[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn1344_N8S19967C7D1Ev,_ZThn788_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn1344_N8S19967C7D0Ev,_ZThn788_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C7__9S19967C12[] = {
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C7__9S19967C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2080_N8S19967C7D1Ev,_ZThn1236_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2080_N8S19967C7D0Ev,_ZThn1236_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C7__9S19967C12[] = {
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C12[] = {
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__A__9S19967C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1008,-604),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C12[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__9S19967C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(816,488),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C12[] = {
  {&(_ZTV9S19967C12[7]),  7,44},
  {&(_tg__ZTV8S19967C7__9S19967C12[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C7__9S19967C12[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C7__9S19967C12[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C7__9S19967C12[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C12[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__A__9S19967C12[4]),  4,4},
  {&(_ZTV9S19967C12[27]),  27,44},
  {&(_ZTV9S19967C12[32]),  32,44},
  {&(_ZTV9S19967C12[42]),  42,44},
  {&(_ZTV9S19967C12[15]),  15,44},
  {&(_tg__ZTV8S19967C8__9S19967C12[4]),  4,4},
  {&(_tg__ZTV9S19967C10__9S19967C12[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__9S19967C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S19967C7D0Ev,_ZThn1236_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S19967C7D1Ev,_ZThn1236_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S19967C7D0Ev,_ZThn788_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S19967C7D1Ev,_ZThn788_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N9S19967C12D0Ev,_ZThn1236_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N9S19967C12D1Ev,_ZThn1236_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N9S19967C12D0Ev,_ZThn788_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N9S19967C12D1Ev,_ZThn788_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C12 = {  "S19967C12", // class name
  bases_S19967C12, 9,
  &(vtc_S19967C12[0]), // expected_vtbl_contents
  &(vtt_S19967C12[0]), // expected_vtt_contents
  ABISELECT(2096,1248), // object size
  NSPAIRA(_ZTI9S19967C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19967C12),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C12),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C11  : virtual S22028C16 , virtual S19967C8 , S19967C10 , S19967C7 {
  int s19967c11f0;
  int s19967c11f1;
  int s19967c11f2;
  short s19967c11f3;
  int s19967c11f4;
  ::S19967C12 s19967c11f5;
  __tsi64 s19967c11f6;
  void *s19967c11f7;
  int s19967c11f8;
  ~S19967C11(); // tgen
  S19967C11(); // tgen
};
//SIG(-1 S19967C11) C1{ VBC2{ m} VBC3{ VBC2 VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} BC5{ VBC3 vd Fi:21 Fi} BC6{ VBC7{ vd v1 v2 Fp FC4 FC4 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC5 BC4 v3} Fi Fi Fi Fs Fi FC9{ VBC4 VBC3 BC6 BC5 BC7 vd Fi} FL Fp Fi}


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

static void Test_S19967C11()
{
  extern Class_Descriptor cd_S19967C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(220,521)];
    init_test(&cd_S19967C11, buf);
    S19967C11 *dp, &lv = *(dp=new (buf) S19967C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3504,2080), "sizeof(S19967C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C11)");
    check_base_class_offset(lv, (S22028C16*), 0, "S19967C11");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C11");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(2512,1480), "S19967C11");
    check_base_class_offset(lv, (S19967C8*), ABISELECT(2424,1440), "S19967C11");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(2424,1440), "S19967C11");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*), ABISELECT(2424,1440), "S19967C11");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(2424,1440), "S19967C11");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*), 0, "S19967C11");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*), ABISELECT(2752,1620), "S19967C11");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*), ABISELECT(3488,2068), "S19967C11");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*), ABISELECT(32,16), "S19967C11");
    check_base_class_offset(lv, (S19967C7*), ABISELECT(16,12), "S19967C11");
    check_field_offset(lv, s19967c11f0, ABISELECT(272,156), "S19967C11.s19967c11f0");
    check_field_offset(lv, s19967c11f1, ABISELECT(276,160), "S19967C11.s19967c11f1");
    check_field_offset(lv, s19967c11f2, ABISELECT(280,164), "S19967C11.s19967c11f2");
    check_field_offset(lv, s19967c11f3, ABISELECT(284,168), "S19967C11.s19967c11f3");
    check_field_offset(lv, s19967c11f4, ABISELECT(288,172), "S19967C11.s19967c11f4");
    check_field_offset(lv, s19967c11f5, ABISELECT(304,176), "S19967C11.s19967c11f5");
    check_field_offset(lv, s19967c11f6, ABISELECT(2400,1424), "S19967C11.s19967c11f6");
    check_field_offset(lv, s19967c11f7, ABISELECT(2408,1432), "S19967C11.s19967c11f7");
    check_field_offset(lv, s19967c11f8, ABISELECT(2416,1436), "S19967C11.s19967c11f8");
    test_class_info(&lv, &cd_S19967C11);
    dp->~S19967C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C11(Test_S19967C11, "S19967C11", ABISELECT(3504,2080));

#else // __cplusplus

extern void _ZN9S19967C11C1Ev();
extern void _ZN9S19967C11D1Ev();
Name_Map name_map_S19967C11[] = {
  NSPAIR(_ZN9S19967C11C1Ev),
  NSPAIR(_ZN9S19967C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
static Base_Class bases_S19967C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(2512,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19967C8,    ABISELECT(2424,1440), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C10,    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_S19967C2,    ABISELECT(2752,1620), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19967C10,    ABISELECT(3488,2068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C11[];
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn2752_N9S19967C11D1Ev,_ZThn1620_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn2752_N9S19967C11D0Ev,_ZThn1620_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2068_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2068_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C11[] = {
  ABISELECT(3488,2068),
  ABISELECT(2752,1620),
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  0,
  0,
  ABISELECT(-2752,-1620),
  ABISELECT(-2752,-1620),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-3488,-2068),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3488,-2068),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19967C11[];
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C11[] = {
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__A__9S19967C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C11[] = {
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2736_N8S19967C7D1Ev,_ZThn1608_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2736_N8S19967C7D0Ev,_ZThn1608_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C7__9S19967C11[] = {
  0,
  0,
  ABISELECT(-2736,-1608),
  ABISELECT(-2736,-1608),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C7__9S19967C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2056_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2056_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C7__9S19967C11[] = {
  ABISELECT(-3472,-2056),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3472,-2056),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__A1__9S19967C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C11[] = {
  {&(_ZTV9S19967C11[7]),  7,40},
  {&(_tg__ZTV9S19967C10__A__9S19967C11[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__A__9S19967C11[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C11[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C7__9S19967C11[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C7__9S19967C11[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C7__9S19967C11[6]),  6,8},
  {&(_ZTV9S19967C11[23]),  23,40},
  {&(_ZTV9S19967C11[16]),  16,40},
  {&(_ZTV9S19967C11[28]),  28,40},
  {&(_ZTV9S19967C11[38]),  38,40},
  {&(_tg__ZTV8S19967C8__9S19967C11[4]),  4,4},
  {&(_tg__ZTV9S19967C10__A1__9S19967C11[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__A1__9S19967C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2056_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2056_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19967C7D0Ev,_ZThn1608_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19967C7D1Ev,_ZThn1608_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2068_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2068_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19967C11D0Ev,_ZThn1620_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19967C11D1Ev,_ZThn1620_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C11 = {  "S19967C11", // class name
  bases_S19967C11, 8,
  &(vtc_S19967C11[0]), // expected_vtbl_contents
  &(vtt_S19967C11[0]), // expected_vtt_contents
  ABISELECT(3504,2080), // object size
  NSPAIRA(_ZTI9S19967C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19967C11),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C6  : virtual S19968C3 , S19967C7 , S19967C11 {
  int s19967c6f0;
  virtual  ~S19967C6(); // _ZN8S19967C6D2Ev
  S19967C6(); // tgen
};
//SIG(-1 S19967C6) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC3{ VBC4{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU5{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC6{ VBC7{ m} VBC2 Fp[9]} VBC8{ VBC6 vd Fi:21 Fi} BC2 v3} BC9{ VBC7 VBC6 BC8 BC3 Fi Fi Fi Fs Fi FC10{ VBC2 VBC6 BC3 BC8 BC4 vd Fi} FL Fp Fi} vd Fi}


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

static void Test_S19967C6()
{
  extern Class_Descriptor cd_S19967C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(236,558)];
    init_test(&cd_S19967C6, buf);
    S19967C6 *dp, &lv = *(dp=new (buf) S19967C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3760,2228), "sizeof(S19967C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C6)");
    /*is_ambiguous_... S19967C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2688,1588), "S19967C6");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(2688,1588), "S19967C6");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*), ABISELECT(2928,1728), "S19967C6");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*), ABISELECT(2928,1728), "S19967C6");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C6");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*), 0, "S19967C6");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*), ABISELECT(3664,2176), "S19967C6");
    /*is_ambiguous_... S19967C6::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(3664,2176), "S19967C6");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*), ABISELECT(3664,2176), "S19967C6");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*), ABISELECT(3664,2176), "S19967C6");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*), ABISELECT(3664,2176), "S19967C6");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*), ABISELECT(3744,2216), "S19967C6");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*), ABISELECT(3744,2216), "S19967C6");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*), ABISELECT(16,4), "S19967C6");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C7*), 0, "S19967C6");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*), ABISELECT(256,144), "S19967C6");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*), ABISELECT(288,160), "S19967C6");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*), ABISELECT(272,156), "S19967C6");
    check_base_class_offset(lv, (S19967C11*), ABISELECT(256,144), "S19967C6");
    check_field_offset(lv, s19967c6f0, ABISELECT(2676,1584), "S19967C6.s19967c6f0");
    test_class_info(&lv, &cd_S19967C6);
    dp->~S19967C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C6(Test_S19967C6, "S19967C6", ABISELECT(3760,2228));

#else // __cplusplus

extern void _ZN8S19967C6C1Ev();
extern void _ZN8S19967C6D2Ev();
Name_Map name_map_S19967C6[] = {
  NSPAIR(_ZN8S19967C6C1Ev),
  NSPAIR(_ZN8S19967C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
static Base_Class bases_S19967C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2688,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C2,    ABISELECT(2928,1728), //bcp->offset
    29, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(3664,2176), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19967C10,    ABISELECT(3744,2216), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19967C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C10,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(272,156), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19967C6[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C6D1Ev();
extern void _ZN8S19967C6D0Ev();
extern void ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C6D1Ev,_ZThn1728_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C6D0Ev,_ZThn1728_N8S19967C6D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C6D1Ev,_ZThn2216_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C6D0Ev,_ZThn2216_N8S19967C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C6[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D0Ev,
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev),
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19967C6[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C7__8S19967C6[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C7D1Ev,_ZThn1728_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C7D0Ev,_ZThn1728_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C7__8S19967C6[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C7__8S19967C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C7D1Ev,_ZThn2216_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C7D0Ev,_ZThn2216_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C7__8S19967C6[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C11__8S19967C6[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C11__A1__8S19967C6[] = {
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C11__A1__8S19967C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A1__8S19967C6[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2656_N8S19967C7D1Ev,_ZThn1572_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2656_N8S19967C7D0Ev,_ZThn1572_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C11__A1__8S19967C6[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C11__A1__8S19967C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2060_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2060_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C11__A1__8S19967C6[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C11__8S19967C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C11__8S19967C6[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C11D1Ev,_ZThn1584_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C11D0Ev,_ZThn1584_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C11__8S19967C6[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2072_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2072_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C11__8S19967C6[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C6[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__8S19967C6[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C6[] = {
  {&(_ZTV8S19967C6[7]),  7,50},
  {&(_tg__ZTV8S19967C7__8S19967C6[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C7__8S19967C6[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C7__8S19967C6[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C7__8S19967C6[6]),  6,8},
  {&(_tg__ZTV9S19967C11__8S19967C6[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C11__A1__8S19967C6[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C11__A1__8S19967C6[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__A1__8S19967C6[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C11__A1__8S19967C6[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C11__A1__8S19967C6[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C11__A1__8S19967C6[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C11__8S19967C6[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C11__8S19967C6[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C11__8S19967C6[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C11__8S19967C6[6]),  6,8},
  {&(_ZTV8S19967C6[34]),  34,50},
  {&(_ZTV8S19967C6[42]),  42,50},
  {&(_ZTV8S19967C6[48]),  48,50},
  {&(_ZTV8S19967C6[17]),  17,50},
  {&(_ZTV8S19967C6[26]),  26,50},
  {&(_tg__ZTV8S19967C8__8S19967C6[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C6[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__8S19967C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19967C6[];
extern  VTBL_ENTRY _ZTV8S19967C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C6[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2072_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2072_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19967C11D0Ev,_ZThn1584_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19967C11D1Ev,_ZThn1584_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2060_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C7D0Ev,_ZThn2216_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2060_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C7D1Ev,_ZThn2216_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19967C7D0Ev,_ZThn1572_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C7D0Ev,_ZThn1728_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19967C7D1Ev,_ZThn1572_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C7D1Ev,_ZThn1728_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C6D0Ev,_ZThn2216_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C6D1Ev,_ZThn2216_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C6D0Ev,_ZThn1728_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C6D1Ev,_ZThn1728_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C6 = {  "S19967C6", // class name
  bases_S19967C6, 11,
  &(vtc_S19967C6[0]), // expected_vtbl_contents
  &(vtt_S19967C6[0]), // expected_vtt_contents
  ABISELECT(3760,2228), // object size
  NSPAIRA(_ZTI8S19967C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19967C6),50, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19967C6),24, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C13  : S19968C3 , virtual S19967C2 , S19967C11 , S19967C10 {
  short s19967c13f0;
  short s19967c13f1[4];
  short s19967c13f2;
  ::S19967C2 s19967c13f3;
  virtual  ~S19967C13(); // _ZN9S19967C13D2Ev
  S19967C13(); // tgen
};
//SIG(-1 S19967C13) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ VBC6{ m} VBC7{ VBC6 VBC2 Fp[9]} BC8{ VBC7 vd Fi:21 Fi} BC9{ VBC3 VBC7 VBC8 BC2 v3} Fi Fi Fi Fs Fi FC10{ VBC2 VBC7 BC9 BC8 BC3 vd Fi} FL Fp Fi} BC8 vd Fs Fs[4] Fs FC3}


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

static void Test_S19967C13()
{
  extern Class_Descriptor cd_S19967C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(283,674)];
    init_test(&cd_S19967C13, buf);
    S19967C13 *dp, &lv = *(dp=new (buf) S19967C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4512,2692), "sizeof(S19967C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C13)");
    /*is_ambiguous_... S19967C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2432,1440), "S19967C13");
    check_base_class_offset(lv, (S19967C2*), ABISELECT(3440,2052), "S19967C13");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*), ABISELECT(3440,2052), "S19967C13");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*), 0, "S19967C13");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C13");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(4256,2540), "S19967C13");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*), ABISELECT(4176,2500), "S19967C13");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*), ABISELECT(4176,2500), "S19967C13");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*), ABISELECT(4176,2500), "S19967C13");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(4176,2500), "S19967C13");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(4176,2500), "S19967C13");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*), 0, "S19967C13");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*), ABISELECT(4496,2680), "S19967C13");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*), ABISELECT(32,16), "S19967C13");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*), ABISELECT(16,12), "S19967C13");
    check_base_class_offset(lv, (S19967C11*), 0, "S19967C13");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*), ABISELECT(2672,1580), "S19967C13");
    check_field_offset(lv, s19967c13f0, ABISELECT(2688,1592), "S19967C13.s19967c13f0");
    check_field_offset(lv, s19967c13f1, ABISELECT(2690,1594), "S19967C13.s19967c13f1");
    check_field_offset(lv, s19967c13f2, ABISELECT(2698,1602), "S19967C13.s19967c13f2");
    check_field_offset(lv, s19967c13f3, ABISELECT(2704,1604), "S19967C13.s19967c13f3");
    test_class_info(&lv, &cd_S19967C13);
    dp->~S19967C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C13(Test_S19967C13, "S19967C13", ABISELECT(4512,2692));

#else // __cplusplus

extern void _ZN9S19967C13C1Ev();
extern void _ZN9S19967C13D2Ev();
Name_Map name_map_S19967C13[] = {
  NSPAIR(_ZN9S19967C13C1Ev),
  NSPAIR(_ZN9S19967C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
static Base_Class bases_S19967C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2432,1440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19967C2,    ABISELECT(3440,2052), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //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_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(4256,2540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(4176,2500), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19967C10,    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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(4496,2680), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19967C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C10,    ABISELECT(2672,1580), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C13[];
extern void _ZN9S19967C13D1Ev();
extern void _ZN9S19967C13D0Ev();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn3440_N9S19967C13D1Ev,_ZThn2052_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn3440_N9S19967C13D0Ev,_ZThn2052_N9S19967C13D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn4496_N9S19967C13D1Ev,_ZThn2680_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn4496_N9S19967C13D0Ev,_ZThn2680_N9S19967C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C13[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN9S19967C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C13D0Ev,
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev),
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev),
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S19967C13[];
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C11__9S19967C13[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C11__9S19967C13[] = {
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C11__9S19967C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C13[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3424_N8S19967C7D1Ev,_ZThn2040_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3424_N8S19967C7D0Ev,_ZThn2040_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C11__9S19967C13[] = {
  0,
  0,
  ABISELECT(-3424,-2040),
  ABISELECT(-3424,-2040),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C11__9S19967C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4160,-2488),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn4480_N8S19967C7D1Ev,_ZThn2668_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn4480_N8S19967C7D0Ev,_ZThn2668_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C11__9S19967C13[] = {
  ABISELECT(-4480,-2668),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4480,-2668),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C11__9S19967C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C11__9S19967C13[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn3440_N9S19967C11D1Ev,_ZThn2052_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn3440_N9S19967C11D0Ev,_ZThn2052_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C11__9S19967C13[] = {
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn4496_N9S19967C11D1Ev,_ZThn2680_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn4496_N9S19967C11D0Ev,_ZThn2680_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C11__9S19967C13[] = {
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C13[] = {
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__A__9S19967C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-1504,-920),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C13[] = {
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__A1__9S19967C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C13[] = {
  {&(_ZTV9S19967C13[7]),  7,47},
  {&(_tg__ZTV9S19967C11__9S19967C13[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C11__9S19967C13[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C11__9S19967C13[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C13[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C11__9S19967C13[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C11__9S19967C13[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C11__9S19967C13[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C11__9S19967C13[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C11__9S19967C13[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C11__9S19967C13[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C11__9S19967C13[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C13[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__A__9S19967C13[4]),  4,4},
  {&(_ZTV9S19967C13[31]),  31,47},
  {&(_ZTV9S19967C13[39]),  39,47},
  {&(_ZTV9S19967C13[16]),  16,47},
  {&(_ZTV9S19967C13[45]),  45,47},
  {&(_ZTV9S19967C13[24]),  24,47},
  {&(_tg__ZTV8S19967C8__9S19967C13[4]),  4,4},
  {&(_tg__ZTV9S19967C10__A1__9S19967C13[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__A1__9S19967C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C13[];
extern  VTBL_ENTRY _ZTV9S19967C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C13[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19967C11D0Ev,_ZThn2680_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19967C11D1Ev,_ZThn2680_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19967C11D0Ev,_ZThn2052_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19967C11D1Ev,_ZThn2052_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N8S19967C7D0Ev,_ZThn2668_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N8S19967C7D1Ev,_ZThn2668_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N8S19967C7D0Ev,_ZThn2040_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N8S19967C7D1Ev,_ZThn2040_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19967C13D0Ev,_ZThn2680_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N9S19967C13D1Ev,_ZThn2680_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19967C13D0Ev,_ZThn2052_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N9S19967C13D1Ev,_ZThn2052_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C13 = {  "S19967C13", // class name
  bases_S19967C13, 11,
  &(vtc_S19967C13[0]), // expected_vtbl_contents
  &(vtt_S19967C13[0]), // expected_vtt_contents
  ABISELECT(4512,2692), // object size
  NSPAIRA(_ZTI9S19967C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19967C13),47, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C13),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C5  : virtual S19967C6 , S19967C12 , S19968C3 , S19967C13 {
  char s19967c5f0;
  short s19967c5f1;
  ::S19968C3 s19967c5f2[6];
  virtual  ~S19967C5(); // _ZN8S19967C5D2Ev
  S19967C5(); // tgen
};
//SIG(-1 S19967C5) C1{ VBC2{ VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC4{ VBC5{ vd v1 v2 Fp FC3 FC3 Fi[3] Fp[6] Fs FU6{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC7{ VBC8{ m} VBC3 Fp[9]} VBC9{ VBC7 vd Fi:21 Fi} BC3 v3} BC10{ VBC8 VBC7 BC9 BC4 Fi Fi Fi Fs Fi FC11{ VBC3 VBC7 BC4 BC9 BC5 vd Fi} FL Fp Fi} vd Fi} BC11 BC3 BC12{ BC3 VBC5 BC10 BC9 vd Fs Fs[4] Fs FC5} vd Fc Fs FC3[6]}


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

static void Test_S19967C5()
{
  extern Class_Descriptor cd_S19967C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(621,1469)];
    init_test(&cd_S19967C5, buf);
    S19967C5 *dp, &lv = *(dp=new (buf) S19967C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9920,5872), "sizeof(S19967C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C5)");
    /*is_ambiguous_... S19967C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C6*), ABISELECT(8848,5232), "S19967C5");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(8848,5232), "S19967C5");
    /*is_ambiguous_... S19967C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C12*), ABISELECT(8848,5232), "S19967C5");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C6*), ABISELECT(9088,5372), "S19967C5");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(9088,5372), "S19967C5");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C12*), ABISELECT(9088,5372), "S19967C5");
    check_base_class_offset(lv, (S19967C2*)(S19967C13*), ABISELECT(9088,5372), "S19967C5");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C13*), ABISELECT(9088,5372), "S19967C5");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C5");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C6*), 0, "S19967C5");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C13*), 0, "S19967C5");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C6*), ABISELECT(9824,5820), "S19967C5");
    /*is_ambiguous_... S19967C5::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(9824,5820), "S19967C5");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C6*), ABISELECT(9824,5820), "S19967C5");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(9824,5820), "S19967C5");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(9824,5820), "S19967C5");
    check_base_class_offset(lv, (S19967C8*)(S19967C12*), ABISELECT(9824,5820), "S19967C5");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C12*), ABISELECT(9824,5820), "S19967C5");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C12*), ABISELECT(9824,5820), "S19967C5");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C13*), ABISELECT(9824,5820), "S19967C5");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C13*), ABISELECT(9824,5820), "S19967C5");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C13*), ABISELECT(9824,5820), "S19967C5");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C13*), ABISELECT(9824,5820), "S19967C5");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C6*), ABISELECT(9904,5860), "S19967C5");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(9904,5860), "S19967C5");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C12*), ABISELECT(9904,5860), "S19967C5");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C13*), ABISELECT(9904,5860), "S19967C5");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C6*), ABISELECT(6176,3648), "S19967C5");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C7*)(S19967C6*), ABISELECT(6160,3644), "S19967C5");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(6416,3788), "S19967C5");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(6448,3804), "S19967C5");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(6432,3800), "S19967C5");
    check_base_class_offset(lv, (S19967C11*)(S19967C6*), ABISELECT(6416,3788), "S19967C5");
    check_base_class_offset(lv, (S19967C6*), ABISELECT(6160,3644), "S19967C5");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C12*), ABISELECT(16,4), "S19967C5");
    check_base_class_offset(lv, (S19967C7*)(S19967C12*), 0, "S19967C5");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C12*), ABISELECT(256,144), "S19967C5");
    /*is_ambiguous_... S19967C12::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C12*), ABISELECT(272,156), "S19967C5");
    check_base_class_offset(lv, (S19967C12*), 0, "S19967C5");
    /*is_ambiguous_... S19967C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S19967C5");
    /*is_ambiguous_... S19967C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C13*), ABISELECT(3696,2188), "S19967C5");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C13*), ABISELECT(1264,748), "S19967C5");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C13*), ABISELECT(1296,764), "S19967C5");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C13*), ABISELECT(1280,760), "S19967C5");
    check_base_class_offset(lv, (S19967C11*)(S19967C13*), ABISELECT(1264,748), "S19967C5");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C13*), ABISELECT(3936,2328), "S19967C5");
    check_base_class_offset(lv, (S19967C13*), ABISELECT(1264,748), "S19967C5");
    check_field_offset(lv, s19967c5f0, ABISELECT(4704,2800), "S19967C5.s19967c5f0");
    check_field_offset(lv, s19967c5f1, ABISELECT(4706,2802), "S19967C5.s19967c5f1");
    check_field_offset(lv, s19967c5f2, ABISELECT(4720,2804), "S19967C5.s19967c5f2");
    test_class_info(&lv, &cd_S19967C5);
    dp->~S19967C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C5(Test_S19967C5, "S19967C5", ABISELECT(9920,5872));

#else // __cplusplus

extern void _ZN8S19967C5C1Ev();
extern void _ZN8S19967C5D2Ev();
Name_Map name_map_S19967C5[] = {
  NSPAIR(_ZN8S19967C5C1Ev),
  NSPAIR(_ZN8S19967C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C6;
extern VTBL_ENTRY _ZTI8S19967C6[];
extern  VTBL_ENTRY _ZTV8S19967C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C12;
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C13;
extern VTBL_ENTRY _ZTI9S19967C13[];
extern  VTBL_ENTRY _ZTV9S19967C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C13[];
static Base_Class bases_S19967C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(8848,5232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C2,    ABISELECT(9088,5372), //bcp->offset
    81, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(9824,5820), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19967C10,    ABISELECT(9904,5860), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(6176,3648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19967C7,    ABISELECT(6160,3644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(6416,3788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6448,3804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(6432,3800), //bcp->offset
    71, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(6416,3788), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19967C6,    ABISELECT(6160,3644), //bcp->offset
    50, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19967C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(256,144), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C2,    ABISELECT(272,156), //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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C12,    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_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19968C3,    ABISELECT(3696,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1296,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(1280,760), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(3936,2328), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C13,    ABISELECT(1264,748), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19967C5[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C5D1Ev();
extern void _ZN8S19967C5D0Ev();
extern void ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn272_N8S19967C5D1Ev,_ZThn156_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn272_N8S19967C5D0Ev,_ZThn156_N8S19967C5D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn6160_N8S19967C5D1Ev,_ZThn3644_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn6160_N8S19967C5D0Ev,_ZThn3644_N8S19967C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn9088_N8S19967C5D1Ev,_ZThn5372_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn9088_N8S19967C5D0Ev,_ZThn5372_N8S19967C5D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn9904_N8S19967C5D1Ev,_ZThn5860_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn9904_N8S19967C5D0Ev,_ZThn5860_N8S19967C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C5[] = {
  ABISELECT(6160,3644),
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D0Ev,
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C5D1Ev,_ZThn156_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C5D0Ev,_ZThn156_N8S19967C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev),
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev),
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev),
  ABISELECT(-6160,-3644),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-6160,-3644),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-6416,-3788),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-6432,-3800),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev),
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19967C5[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C12__8S19967C5[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C12__A2__8S19967C5[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn9088_N8S19967C7D1Ev,_ZThn5372_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn9088_N8S19967C7D0Ev,_ZThn5372_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C12__A2__8S19967C5[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C12__A2__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn9904_N8S19967C7D1Ev,_ZThn5860_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn9904_N8S19967C7D0Ev,_ZThn5860_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C12__A2__8S19967C5[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C12__A2__8S19967C5[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C12__A2__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9568,-5676),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C12__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn9088_N9S19967C12D1Ev,_ZThn5372_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn9088_N9S19967C12D0Ev,_ZThn5372_N9S19967C12D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C12__8S19967C5[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn9904_N9S19967C12D1Ev,_ZThn5860_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn9904_N9S19967C12D0Ev,_ZThn5860_N9S19967C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C12__8S19967C5[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C12__8S19967C5[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
};
extern void _ZN9S19967C13D1Ev();
extern void _ZN9S19967C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C13__8S19967C5[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN9S19967C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C13D0Ev,
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C119S19967C13__A1__8S19967C5[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C119S19967C13__A3__8S19967C5[] = {
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C119S19967C13__A3__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C5[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn7808_N8S19967C7D1Ev,_ZThn4612_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn7808_N8S19967C7D0Ev,_ZThn4612_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C119S19967C13__A3__8S19967C5[] = {
  0,
  0,
  ABISELECT(-7808,-4612),
  ABISELECT(-7808,-4612),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C119S19967C13__A3__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8544,-5060),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn8624_N8S19967C7D1Ev,_ZThn5100_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn8624_N8S19967C7D0Ev,_ZThn5100_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C119S19967C13__A3__8S19967C5[] = {
  ABISELECT(-8624,-5100),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8624,-5100),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C119S19967C13__A1__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C119S19967C13__A1__8S19967C5[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn7824_N9S19967C11D1Ev,_ZThn4624_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn7824_N9S19967C11D0Ev,_ZThn4624_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C119S19967C13__A1__8S19967C5[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn8640_N9S19967C11D1Ev,_ZThn5112_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn8640_N9S19967C11D0Ev,_ZThn5112_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C119S19967C13__A1__8S19967C5[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C13__A4__8S19967C5[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C13__A4__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-5888,-3492),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn7824_N9S19967C13D1Ev,_ZThn4624_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn7824_N9S19967C13D0Ev,_ZThn4624_N9S19967C13D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C13__8S19967C5[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C13__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C13__8S19967C5[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn8640_N9S19967C13D1Ev,_ZThn5112_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn8640_N9S19967C13D0Ev,_ZThn5112_N9S19967C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C13__8S19967C5[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C13__8S19967C5[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C6D1Ev();
extern void _ZN8S19967C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C6__8S19967C5[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C78S19967C6__8S19967C5[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C7D1Ev,_ZThn1728_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C7D0Ev,_ZThn1728_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C78S19967C6__8S19967C5[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C78S19967C6__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C7D1Ev,_ZThn2216_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C7D0Ev,_ZThn2216_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C78S19967C6__8S19967C5[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__8S19967C5[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C118S19967C6__A1__8S19967C5[] = {
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C5[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2656_N8S19967C7D1Ev,_ZThn1572_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2656_N8S19967C7D0Ev,_ZThn1572_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__8S19967C5[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2060_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2060_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__8S19967C5[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C118S19967C6__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C118S19967C6__8S19967C5[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C11D1Ev,_ZThn1584_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C11D0Ev,_ZThn1584_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C118S19967C6__8S19967C5[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2072_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2072_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C118S19967C6__8S19967C5[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C6D1Ev,_ZThn1728_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C6D0Ev,_ZThn1728_N8S19967C6D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C6__8S19967C5[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C6__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C6D1Ev,_ZThn2216_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C6D0Ev,_ZThn2216_N8S19967C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C6__8S19967C5[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C11__8S19967C6__8S19967C5[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A1__8S19967C6__8S19967C5[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C5[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__8S19967C5[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C5[] = {
  {&(_ZTV8S19967C5[8]),  8,102},
  {&(_tg__ZTV9S19967C12__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C79S19967C12__A2__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C12__A2__8S19967C5[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C12__A2__8S19967C5[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C12__A2__8S19967C5[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C12__A2__8S19967C5[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C12__A2__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C12__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C12__8S19967C5[5]),  5,9},
  {&(_tg__ZTV9S19967C10__9S19967C12__8S19967C5[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C12__8S19967C5[5]),  5,7},
  {&(_tg__ZTV9S19967C13__8S19967C5[7]),  7,9},
  {&(_tg__ZTV9S19967C119S19967C13__A1__8S19967C5[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C119S19967C13__A3__8S19967C5[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C119S19967C13__A3__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C119S19967C13__A3__8S19967C5[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C119S19967C13__A3__8S19967C5[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C119S19967C13__A3__8S19967C5[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C119S19967C13__A1__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C119S19967C13__A1__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C119S19967C13__A1__8S19967C5[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C119S19967C13__A1__8S19967C5[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C13__A4__8S19967C5[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C13__A4__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C13__8S19967C5[5]),  5,9},
  {&(_tg__ZTV8S19967C8__9S19967C13__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C13__8S19967C5[7]),  7,10},
  {&(_tg__ZTV9S19967C10__A1__9S19967C13__8S19967C5[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C13__8S19967C5[5]),  5,7},
  {&(_ZTV8S19967C5[59]),  59,102},
  {&(_ZTV8S19967C5[86]),  86,102},
  {&(_ZTV8S19967C5[94]),  94,102},
  {&(_ZTV8S19967C5[100]),  100,102},
  {&(_ZTV8S19967C5[69]),  69,102},
  {&(_ZTV8S19967C5[78]),  78,102},
  {&(_ZTV8S19967C5[16]),  16,102},
  {&(_ZTV8S19967C5[31]),  31,102},
  {&(_ZTV8S19967C5[40]),  40,102},
  {&(_ZTV8S19967C5[48]),  48,102},
  {&(_tg__ZTV8S19967C6__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C78S19967C6__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C78S19967C6__8S19967C5[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C78S19967C6__8S19967C5[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C78S19967C6__8S19967C5[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__8S19967C5[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C118S19967C6__A1__8S19967C5[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__8S19967C5[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__8S19967C5[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__8S19967C5[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C118S19967C6__8S19967C5[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C118S19967C6__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C118S19967C6__8S19967C5[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C118S19967C6__8S19967C5[6]),  6,8},
  {&(_tg__ZTV8S19967C2__8S19967C6__8S19967C5[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C6__8S19967C5[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C6__8S19967C5[6]),  6,8},
  {&(_tg__ZTV9S19967C11__8S19967C6__8S19967C5[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C11__A1__8S19967C6__8S19967C5[7]),  7,10},
  {&(_tg__ZTV8S19967C8__8S19967C5[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C5[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__8S19967C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19967C5[];
extern  VTBL_ENTRY _ZTV8S19967C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C5[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C6D0Ev,_ZThn2216_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C6D1Ev,_ZThn2216_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C6D0Ev,_ZThn1728_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C6D1Ev,_ZThn1728_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19967C13D0Ev,_ZThn5112_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19967C13D1Ev,_ZThn5112_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19967C13D0Ev,_ZThn4624_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19967C13D1Ev,_ZThn4624_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2072_N9S19967C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19967C11D0Ev,_ZThn5112_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2072_N9S19967C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N9S19967C11D1Ev,_ZThn5112_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19967C11D0Ev,_ZThn1584_N9S19967C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19967C11D0Ev,_ZThn4624_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19967C11D1Ev,_ZThn1584_N9S19967C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N9S19967C11D1Ev,_ZThn4624_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N9S19967C12D0Ev,_ZThn5860_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N9S19967C12D1Ev,_ZThn5860_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N9S19967C12D0Ev,_ZThn5372_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N9S19967C12D1Ev,_ZThn5372_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2060_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C7D0Ev,_ZThn2216_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N8S19967C7D0Ev,_ZThn5100_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19967C7D0Ev,_ZThn5860_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2060_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C7D1Ev,_ZThn2216_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N8S19967C7D1Ev,_ZThn5100_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19967C7D1Ev,_ZThn5860_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19967C7D0Ev,_ZThn1572_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C7D0Ev,_ZThn1728_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N8S19967C7D0Ev,_ZThn4612_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19967C7D0Ev,_ZThn5372_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19967C7D1Ev,_ZThn1572_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C7D1Ev,_ZThn1728_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N8S19967C7D1Ev,_ZThn4612_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19967C7D1Ev,_ZThn5372_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19967C5D0Ev,_ZThn5860_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S19967C5D1Ev,_ZThn5860_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19967C5D0Ev,_ZThn5372_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S19967C5D1Ev,_ZThn5372_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19967C5D0Ev,_ZThn3644_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19967C5D1Ev,_ZThn3644_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C5 = {  "S19967C5", // class name
  bases_S19967C5, 25,
  &(vtc_S19967C5[0]), // expected_vtbl_contents
  &(vtt_S19967C5[0]), // expected_vtt_contents
  ABISELECT(9920,5872), // object size
  NSPAIRA(_ZTI8S19967C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19967C5),102, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19967C5),65, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C16  : S19968C3 , S19967C8 {
  int s19967c16f0;
  void *s19967c16f1;
  int s19967c16f2;
  short s19967c16f3;
  unsigned int s19967c16f4:1;
  ::S22028C16 s19967c16f5;
  ::S3465C9_nt s19967c16f6;
  int s19967c16f7;
  ~S19967C16(); // tgen
  S19967C16(); // tgen
};
//SIG(-1 S19967C16) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC3{ VBC4{ m} VBC2 Fp[9]} Fi Fp Fi Fs Fi:1 FC4 FC5{} Fi}


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

static void Test_S19967C16()
{
  extern Class_Descriptor cd_S19967C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,87)];
    init_test(&cd_S19967C16, buf);
    S19967C16 *dp, &lv = *(dp=new (buf) S19967C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,344), "sizeof(S19967C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C16)");
    /*is_ambiguous_... S19967C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S19967C16");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C16");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(352,204), "S19967C16");
    check_base_class_offset(lv, (S19967C8*), 0, "S19967C16");
    check_field_offset(lv, s19967c16f0, ABISELECT(320,180), "S19967C16.s19967c16f0");
    check_field_offset(lv, s19967c16f1, ABISELECT(328,184), "S19967C16.s19967c16f1");
    check_field_offset(lv, s19967c16f2, ABISELECT(336,188), "S19967C16.s19967c16f2");
    check_field_offset(lv, s19967c16f3, ABISELECT(340,192), "S19967C16.s19967c16f3");
    set_bf_and_test(lv, s19967c16f4, ABISELECT(342,194), 0, 1, 1, "S19967C16");
    check_field_offset(lv, s19967c16f5, ABISELECT(343,195), "S19967C16.s19967c16f5");
    check_field_offset(lv, s19967c16f6, ABISELECT(344,196), "S19967C16.s19967c16f6");
    check_field_offset(lv, s19967c16f7, ABISELECT(348,200), "S19967C16.s19967c16f7");
    test_class_info(&lv, &cd_S19967C16);
    dp->~S19967C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C16(Test_S19967C16, "S19967C16", ABISELECT(592,344));

#else // __cplusplus

extern void _ZN9S19967C16C1Ev();
extern void _ZN9S19967C16D1Ev();
Name_Map name_map_S19967C16[] = {
  NSPAIR(_ZN9S19967C16C1Ev),
  NSPAIR(_ZN9S19967C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
static Base_Class bases_S19967C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(352,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C16[];
static  VTBL_ENTRY vtc_S19967C16[] = {
  ABISELECT(352,204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C16[0]),
};
extern VTBL_ENTRY _ZTV9S19967C16[];
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C16[] = {
  ABISELECT(352,204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTT_ENTRY vtt_S19967C16[] = {
  {&(_ZTV9S19967C16[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C16[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C16[];
extern  VTBL_ENTRY _ZTV9S19967C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C16[];
Class_Descriptor cd_S19967C16 = {  "S19967C16", // class name
  bases_S19967C16, 4,
  &(vtc_S19967C16[0]), // expected_vtbl_contents
  &(vtt_S19967C16[0]), // expected_vtt_contents
  ABISELECT(592,344), // object size
  NSPAIRA(_ZTI9S19967C16),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19967C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C16),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C15  : virtual S19967C2 , S19967C16 , S22028C16 , S19967C8 {
  ::S19967C8 s19967c15f0;
  void *s19967c15f1;
  long double s19967c15f2;
  void *s19967c15f3;
  ::S19968C4 s19967c15f4;
  void *s19967c15f5;
  short s19967c15f6:4;
  char  :0;
  int s19967c15f8;
  short s19967c15f9;
  int s19967c15f10;
  ~S19967C15(); // tgen
  S19967C15(); // tgen
};
//SIG(-1 S19967C15) C1{ VBC2{ vd v1 v2 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ BC3 BC6{ VBC7{ m} VBC3 Fp[9]} Fi Fp Fi Fs Fi:1 FC7 FC8{} Fi} BC7 BC6 FC6 Fp FD Fp FU4 Fp Fs:4 Fc:0 Fi Fs Fi}


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

static void Test_S19967C15()
{
  extern Class_Descriptor cd_S19967C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(124,294)];
    init_test(&cd_S19967C15, buf);
    S19967C15 *dp, &lv = *(dp=new (buf) S19967C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1968,1172), "sizeof(S19967C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C15)");
    check_base_class_offset(lv, (S19967C2*), ABISELECT(992,584), "S19967C15");
    /*is_ambiguous_... S19967C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C16*), ABISELECT(80,40), "S19967C15");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C16*), ABISELECT(1728,1032), "S19967C15");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*), ABISELECT(1728,1032), "S19967C15");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C16*), ABISELECT(1728,1032), "S19967C15");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(1728,1032), "S19967C15");
    check_base_class_offset(lv, (S19967C8*)(S19967C16*), 0, "S19967C15");
    check_base_class_offset(lv, (S19967C16*), 0, "S19967C15");
    /*is_ambiguous_... S19967C15::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*), 0, "S19967C15");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S19967C8*), ABISELECT(352,204), "S19967C15");
    check_field_offset(lv, s19967c15f0, ABISELECT(432,244), "S19967C15.s19967c15f0");
    check_field_offset(lv, s19967c15f1, ABISELECT(752,424), "S19967C15.s19967c15f1");
    check_field_offset(lv, s19967c15f2, ABISELECT(768,428), "S19967C15.s19967c15f2");
    check_field_offset(lv, s19967c15f3, ABISELECT(784,440), "S19967C15.s19967c15f3");
    check_field_offset(lv, s19967c15f4, ABISELECT(800,444), "S19967C15.s19967c15f4");
    check_field_offset(lv, s19967c15f5, ABISELECT(960,564), "S19967C15.s19967c15f5");
    set_bf_and_test(lv, s19967c15f6, ABISELECT(968,568), 0, 4, 1, "S19967C15");
    set_bf_and_test(lv, s19967c15f6, ABISELECT(968,568), 0, 4, hide_sll(1LL<<3), "S19967C15");
    check_field_offset(lv, s19967c15f8, ABISELECT(972,572), "S19967C15.s19967c15f8");
    check_field_offset(lv, s19967c15f9, ABISELECT(976,576), "S19967C15.s19967c15f9");
    check_field_offset(lv, s19967c15f10, ABISELECT(980,580), "S19967C15.s19967c15f10");
    test_class_info(&lv, &cd_S19967C15);
    dp->~S19967C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C15(Test_S19967C15, "S19967C15", ABISELECT(1968,1172));

#else // __cplusplus

extern void _ZN9S19967C15C1Ev();
extern void _ZN9S19967C15D1Ev();
Name_Map name_map_S19967C15[] = {
  NSPAIR(_ZN9S19967C15C1Ev),
  NSPAIR(_ZN9S19967C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C16;
extern VTBL_ENTRY _ZTI9S19967C16[];
extern  VTBL_ENTRY _ZTV9S19967C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C16[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
static Base_Class bases_S19967C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19967C2,    ABISELECT(992,584), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //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_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(1728,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1728,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19967C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19967C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19967C8,    ABISELECT(352,204), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C15[];
extern void _ZN9S19967C15D1Ev();
extern void _ZN9S19967C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev)();
extern void ABISELECT(_ZThn992_N9S19967C15D1Ev,_ZThn584_N9S19967C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev)();
extern void ABISELECT(_ZThn992_N9S19967C15D0Ev,_ZThn584_N9S19967C15D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY vtc_S19967C15[] = {
  ABISELECT(992,584),
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
  (VTBL_ENTRY)&_ZN9S19967C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C15D0Ev,
  ABISELECT(1376,828),
  ABISELECT(1376,828),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
  0,
  0,
  ABISELECT(-992,-584),
  ABISELECT(-992,-584),
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern VTBL_ENTRY _ZTV9S19967C15[];
static  VTBL_ENTRY _tg__ZTV9S19967C16__9S19967C15[] = {
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C16__9S19967C15[] = {
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__A1__9S19967C15[] = {
  ABISELECT(1376,828),
  ABISELECT(1376,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTT_ENTRY vtt_S19967C15[] = {
  {&(_ZTV9S19967C15[5]),  5,20},
  {&(_tg__ZTV9S19967C16__9S19967C15[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C16__9S19967C15[4]),  4,4},
  {&(_tg__ZTV8S19967C8__A1__9S19967C15[4]),  4,4},
  {&(_ZTV9S19967C15[16]),  16,20},
  {&(_ZTV9S19967C15[11]),  11,20},
};
extern VTBL_ENTRY _ZTI9S19967C15[];
extern  VTBL_ENTRY _ZTV9S19967C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C15[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19967C15D0Ev,_ZThn584_N9S19967C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N9S19967C15D1Ev,_ZThn584_N9S19967C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C15 = {  "S19967C15", // class name
  bases_S19967C15, 8,
  &(vtc_S19967C15[0]), // expected_vtbl_contents
  &(vtt_S19967C15[0]), // expected_vtt_contents
  ABISELECT(1968,1172), // object size
  NSPAIRA(_ZTI9S19967C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19967C15),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C15),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C14  : S19967C10 , S19967C15 , virtual S19967C11 , S19967C16 {
  int s19967c14f0;
  short s19967c14f1;
  void *s19967c14f2;
  int s19967c14f3;
  void *s19967c14f4;
  int s19967c14f5;
  long double s19967c14f6;
  __tsi64 s19967c14f7;
  virtual  ~S19967C14(); // _ZN9S19967C14D2Ev
  virtual void  v4(); // _ZN9S19967C142v4Ev
  S19967C14(); // tgen
};
//SIG(-1 S19967C14) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi} BC6{ VBC7{ vd v2 v3 Fp FC5 FC5 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC9{ BC5 BC3 Fi Fp Fi Fs Fi:1 FC4 FC10{} Fi} BC4 BC3 FC3 Fp FD Fp FU8 Fp Fs:4 Fc:0 Fi Fs Fi} VBC11{ VBC4 VBC3 BC2 BC12{ VBC7 VBC3 VBC2 BC5 v4} Fi Fi Fi Fs Fi FC13{ VBC5 VBC3 BC12 BC2 BC7 vd Fi} FL Fp Fi} BC9 vd v1 Fi Fs Fp Fi Fp Fi FD FL}


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

static void Test_S19967C14()
{
  extern Class_Descriptor cd_S19967C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(310,732)];
    init_test(&cd_S19967C14, buf);
    S19967C14 *dp, &lv = *(dp=new (buf) S19967C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4944,2924), "sizeof(S19967C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C14)");
    /*is_ambiguous_... S19967C14::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C14");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C16*)(S19967C15*), 0, "S19967C14");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C15*), 0, "S19967C14");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*), 0, "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C16*), 0, "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(1520,884), "S19967C14");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C16*)(S19967C15*), ABISELECT(1520,884), "S19967C14");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C15*), ABISELECT(1520,884), "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C16*), ABISELECT(1520,884), "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(1432,844), "S19967C14");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*), ABISELECT(1432,844), "S19967C14");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*), ABISELECT(1432,844), "S19967C14");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*), ABISELECT(1432,844), "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(1432,844), "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*), 0, "S19967C14");
    check_base_class_offset(lv, (S19967C2*)(S19967C15*), ABISELECT(1760,1024), "S19967C14");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*), ABISELECT(1760,1024), "S19967C14");
    /*is_ambiguous_... S19967C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C16*)(S19967C15*), ABISELECT(96,52), "S19967C14");
    check_base_class_offset(lv, (S19967C8*)(S19967C16*)(S19967C15*), ABISELECT(16,12), "S19967C14");
    check_base_class_offset(lv, (S19967C16*)(S19967C15*), ABISELECT(16,12), "S19967C14");
    /*is_ambiguous_... S19967C15::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C15*), ABISELECT(16,12), "S19967C14");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C15*), ABISELECT(368,216), "S19967C14");
    check_base_class_offset(lv, (S19967C15*), ABISELECT(16,12), "S19967C14");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*), ABISELECT(2496,1472), "S19967C14");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*), ABISELECT(4920,2912), "S19967C14");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*), ABISELECT(2528,1488), "S19967C14");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*), ABISELECT(2512,1484), "S19967C14");
    check_base_class_offset(lv, (S19967C11*), ABISELECT(2496,1472), "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C16*), ABISELECT(1088,636), "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C16*), ABISELECT(1008,596), "S19967C14");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19967C16*), ABISELECT(1008,596), "S19967C14");
    check_field_offset(lv, s19967c14f0, ABISELECT(1360,800), "S19967C14.s19967c14f0");
    check_field_offset(lv, s19967c14f1, ABISELECT(1364,804), "S19967C14.s19967c14f1");
    check_field_offset(lv, s19967c14f2, ABISELECT(1368,808), "S19967C14.s19967c14f2");
    check_field_offset(lv, s19967c14f3, ABISELECT(1376,812), "S19967C14.s19967c14f3");
    check_field_offset(lv, s19967c14f4, ABISELECT(1384,816), "S19967C14.s19967c14f4");
    check_field_offset(lv, s19967c14f5, ABISELECT(1392,820), "S19967C14.s19967c14f5");
    check_field_offset(lv, s19967c14f6, ABISELECT(1408,824), "S19967C14.s19967c14f6");
    check_field_offset(lv, s19967c14f7, ABISELECT(1424,836), "S19967C14.s19967c14f7");
    test_class_info(&lv, &cd_S19967C14);
    dp->~S19967C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C14(Test_S19967C14, "S19967C14", ABISELECT(4944,2924));

#else // __cplusplus

extern void _ZN9S19967C14C1Ev();
extern void _ZN9S19967C14D2Ev();
Name_Map name_map_S19967C14[] = {
  NSPAIR(_ZN9S19967C14C1Ev),
  NSPAIR(_ZN9S19967C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C16;
extern VTBL_ENTRY _ZTI9S19967C16[];
extern  VTBL_ENTRY _ZTV9S19967C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C16[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C15;
extern VTBL_ENTRY _ZTI9S19967C15[];
extern  VTBL_ENTRY _ZTV9S19967C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C15[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C16;
extern VTBL_ENTRY _ZTI9S19967C16[];
extern  VTBL_ENTRY _ZTV9S19967C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C16[];
static Base_Class bases_S19967C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(1520,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19967C8,    ABISELECT(1432,844), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C10,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C2,    ABISELECT(1760,1024), //bcp->offset
    30, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19967C8,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19967C16,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(16,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
    10, //immediately_derived
  0, 0},
  {&cd_S19967C8,    ABISELECT(368,216), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19967C15,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C10,    ABISELECT(2496,1472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(4920,2912), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(2528,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(2512,1484), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(2496,1472), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(1088,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19967C8,    ABISELECT(1008,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19967C16,    ABISELECT(1008,596), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C14[];
extern void _ZN9S19967C14D1Ev();
extern void _ZN9S19967C14D0Ev();
extern void _ZN9S19967C142v4Ev();
extern void ABISELECT(_ZThn16_N9S19967C14D1Ev,_ZThn12_N9S19967C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C14D0Ev,_ZThn12_N9S19967C14D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C14D1Ev,_ZTv0_n12_N9S19967C14D1Ev)();
extern void ABISELECT(_ZThn1760_N9S19967C14D1Ev,_ZThn1024_N9S19967C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C14D0Ev,_ZTv0_n12_N9S19967C14D0Ev)();
extern void ABISELECT(_ZThn1760_N9S19967C14D0Ev,_ZThn1024_N9S19967C14D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n64_N9S19967C14D1Ev,_ZTv0_n32_N9S19967C14D1Ev)();
extern void ABISELECT(_ZThn2496_N9S19967C14D1Ev,_ZThn1472_N9S19967C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19967C14D0Ev,_ZTv0_n32_N9S19967C14D0Ev)();
extern void ABISELECT(_ZThn2496_N9S19967C14D0Ev,_ZThn1472_N9S19967C14D0Ev)() __attribute__((weak));
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19967C14D1Ev,_ZTvn12_n32_N9S19967C14D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19967C14D0Ev,_ZTvn12_n32_N9S19967C14D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C14D1Ev,_ZTv0_n24_N9S19967C14D1Ev)();
extern void ABISELECT(_ZThn4920_N9S19967C14D1Ev,_ZThn2912_N9S19967C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C14D0Ev,_ZTv0_n24_N9S19967C14D0Ev)();
extern void ABISELECT(_ZThn4920_N9S19967C14D0Ev,_ZThn2912_N9S19967C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C14[] = {
  ABISELECT(4920,2912),
  ABISELECT(2496,1472),
  ABISELECT(1760,1024),
  ABISELECT(1520,884),
  0,
  ABISELECT(1432,844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&_ZN9S19967C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19967C142v4Ev,
  ABISELECT(1744,1012),
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C14D1Ev,_ZThn12_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C14D0Ev,_ZThn12_N9S19967C14D0Ev),
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  ABISELECT(-1008,-596),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(-1432,-844),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  0,
  0,
  ABISELECT(-1760,-1024),
  ABISELECT(-1760,-1024),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C14D1Ev,_ZTv0_n12_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C14D0Ev,_ZTv0_n12_N9S19967C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(16,12),
  ABISELECT(-2496,-1472),
  ABISELECT(2424,1440),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  ABISELECT(-2496,-1472),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C14D1Ev,_ZTv0_n32_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C14D0Ev,_ZTv0_n32_N9S19967C14D0Ev),
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-2512,-1484),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C14D1Ev,_ZTvn12_n32_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C14D0Ev,_ZTvn12_n32_N9S19967C14D0Ev),
  ABISELECT(-4920,-2912),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-4920,-2912),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C14D1Ev,_ZTv0_n24_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C14D0Ev,_ZTv0_n24_N9S19967C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S19967C14[];
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C14[] = {
  ABISELECT(1520,884),
  0,
  ABISELECT(1432,844),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__A__9S19967C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(-1432,-844),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN9S19967C15D1Ev();
extern void _ZN9S19967C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C15__9S19967C14[] = {
  ABISELECT(1744,1012),
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
  (VTBL_ENTRY)&_ZN9S19967C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19967C169S19967C15__9S19967C14[] = {
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C169S19967C15__A1__9S19967C14[] = {
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C15__A2__9S19967C14[] = {
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev)();
extern void ABISELECT(_ZThn1744_N9S19967C15D1Ev,_ZThn1012_N9S19967C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev)();
extern void ABISELECT(_ZThn1744_N9S19967C15D0Ev,_ZThn1012_N9S19967C15D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C15__9S19967C14[] = {
  0,
  0,
  ABISELECT(-1744,-1012),
  ABISELECT(-1744,-1012),
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__A1__9S19967C15__9S19967C14[] = {
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19967C16__A1__9S19967C14[] = {
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C16__A3__9S19967C14[] = {
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C11__9S19967C14[] = {
  ABISELECT(2424,1440),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C11__A1__9S19967C14[] = {
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C11__A1__9S19967C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C14[] = {
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C11__9S19967C14[] = {
  0,
  0,
  ABISELECT(752,460),
  ABISELECT(752,460),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C11__9S19967C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1080,640),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19967C7D1Ev,_ZThn1428_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2408_N8S19967C7D0Ev,_ZThn1428_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C11__9S19967C14[] = {
  ABISELECT(-2408,-1428),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C11__9S19967C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C11__9S19967C14[] = {
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C11__9S19967C14[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn2424_N9S19967C11D1Ev,_ZThn1440_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn2424_N9S19967C11D0Ev,_ZThn1440_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C11__9S19967C14[] = {
  ABISELECT(-2424,-1440),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A2__9S19967C14[] = {
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__A2__9S19967C14[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(3488,2068),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C14[] = {
  {&(_ZTV9S19967C14[8]),  8,68},
  {&(_tg__ZTV9S19967C10__A__9S19967C14[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__A__9S19967C14[4]),  4,4},
  {&(_tg__ZTV9S19967C15__9S19967C14[5]),  5,7},
  {&(_tg__ZTV9S19967C169S19967C15__9S19967C14[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C169S19967C15__A1__9S19967C14[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C15__A2__9S19967C14[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C15__9S19967C14[5]),  5,9},
  {&(_tg__ZTV8S19967C8__A1__9S19967C15__9S19967C14[4]),  4,4},
  {&(_tg__ZTV9S19967C16__A1__9S19967C14[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C16__A3__9S19967C14[4]),  4,4},
  {&(_ZTV9S19967C14[30]),  30,68},
  {&(_ZTV9S19967C14[16]),  16,68},
  {&(_ZTV9S19967C14[35]),  35,68},
  {&(_ZTV9S19967C14[22]),  22,68},
  {&(_ZTV9S19967C14[48]),  48,68},
  {&(_ZTV9S19967C14[57]),  57,68},
  {&(_ZTV9S19967C14[66]),  66,68},
  {&(_ZTV9S19967C14[26]),  26,68},
  {&(_tg__ZTV8S19967C8__9S19967C14[4]),  4,4},
  {&(_tg__ZTV9S19967C11__9S19967C14[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C11__A1__9S19967C14[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C11__A1__9S19967C14[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C14[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C11__9S19967C14[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C11__9S19967C14[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C11__9S19967C14[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C11__9S19967C14[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C11__9S19967C14[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C11__9S19967C14[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C11__9S19967C14[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A2__9S19967C14[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__A2__9S19967C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C14[];
extern  VTBL_ENTRY _ZTV9S19967C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C14[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2424_N9S19967C11D0Ev,_ZThn1440_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2424_N9S19967C11D1Ev,_ZThn1440_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2408_N8S19967C7D0Ev,_ZThn1428_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2408_N8S19967C7D1Ev,_ZThn1428_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N9S19967C15D0Ev,_ZThn1012_N9S19967C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N9S19967C15D1Ev,_ZThn1012_N9S19967C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C14D0Ev,_ZTv0_n24_N9S19967C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4920_N9S19967C14D0Ev,_ZThn2912_N9S19967C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C14D1Ev,_ZTv0_n24_N9S19967C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4920_N9S19967C14D1Ev,_ZThn2912_N9S19967C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C14D0Ev,_ZTv0_n32_N9S19967C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2496_N9S19967C14D0Ev,_ZThn1472_N9S19967C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C14D1Ev,_ZTv0_n32_N9S19967C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2496_N9S19967C14D1Ev,_ZThn1472_N9S19967C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C14D0Ev,_ZTv0_n12_N9S19967C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1760_N9S19967C14D0Ev,_ZThn1024_N9S19967C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C14D1Ev,_ZTv0_n12_N9S19967C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1760_N9S19967C14D1Ev,_ZThn1024_N9S19967C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C14 = {  "S19967C14", // class name
  bases_S19967C14, 19,
  &(vtc_S19967C14[0]), // expected_vtbl_contents
  &(vtt_S19967C14[0]), // expected_vtt_contents
  ABISELECT(4944,2924), // object size
  NSPAIRA(_ZTI9S19967C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19967C14),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C14),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C19  : S19967C8 {
  long double s19967c19f0[8];
  int s19967c19f1;
  short s19967c19f2;
  int s19967c19f3;
  short s19967c19f4;
  void *s19967c19f5;
  int s19967c19f6;
  int s19967c19f7;
  short s19967c19f8;
  int s19967c19f9[5];
  void *s19967c19f10;
  ~S19967C19(); // tgen
  S19967C19(); // tgen
};
//SIG(-1 S19967C19) C1{ BC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} FD[8] Fi Fs Fi Fs Fp Fi[2] Fs Fi[5] Fp}


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

static void Test_S19967C19()
{
  extern Class_Descriptor cd_S19967C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,84)];
    init_test(&cd_S19967C19, buf);
    S19967C19 *dp, &lv = *(dp=new (buf) S19967C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,332), "sizeof(S19967C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C19)");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C19");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(272,192), "S19967C19");
    check_base_class_offset(lv, (S19967C8*), 0, "S19967C19");
    check_field_offset(lv, s19967c19f0, ABISELECT(80,40), "S19967C19.s19967c19f0");
    check_field_offset(lv, s19967c19f1, ABISELECT(208,136), "S19967C19.s19967c19f1");
    check_field_offset(lv, s19967c19f2, ABISELECT(212,140), "S19967C19.s19967c19f2");
    check_field_offset(lv, s19967c19f3, ABISELECT(216,144), "S19967C19.s19967c19f3");
    check_field_offset(lv, s19967c19f4, ABISELECT(220,148), "S19967C19.s19967c19f4");
    check_field_offset(lv, s19967c19f5, ABISELECT(224,152), "S19967C19.s19967c19f5");
    check_field_offset(lv, s19967c19f6, ABISELECT(232,156), "S19967C19.s19967c19f6");
    check_field_offset(lv, s19967c19f7, ABISELECT(236,160), "S19967C19.s19967c19f7");
    check_field_offset(lv, s19967c19f8, ABISELECT(240,164), "S19967C19.s19967c19f8");
    check_field_offset(lv, s19967c19f9, ABISELECT(244,168), "S19967C19.s19967c19f9");
    check_field_offset(lv, s19967c19f10, ABISELECT(264,188), "S19967C19.s19967c19f10");
    test_class_info(&lv, &cd_S19967C19);
    dp->~S19967C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C19(Test_S19967C19, "S19967C19", ABISELECT(512,332));

#else // __cplusplus

extern void _ZN9S19967C19C1Ev();
extern void _ZN9S19967C19D1Ev();
Name_Map name_map_S19967C19[] = {
  NSPAIR(_ZN9S19967C19C1Ev),
  NSPAIR(_ZN9S19967C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
static Base_Class bases_S19967C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(272,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
    2, //immediately_derived
  0, 1},
  {&cd_S19967C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C19[];
static  VTBL_ENTRY vtc_S19967C19[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C19[0]),
};
extern VTBL_ENTRY _ZTV9S19967C19[];
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C19[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTT_ENTRY vtt_S19967C19[] = {
  {&(_ZTV9S19967C19[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C19[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C19[];
extern  VTBL_ENTRY _ZTV9S19967C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C19[];
Class_Descriptor cd_S19967C19 = {  "S19967C19", // class name
  bases_S19967C19, 3,
  &(vtc_S19967C19[0]), // expected_vtbl_contents
  &(vtt_S19967C19[0]), // expected_vtt_contents
  ABISELECT(512,332), // object size
  NSPAIRA(_ZTI9S19967C19),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19967C19),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C19),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  S19967C20  : S19967C5 {
  int s19967c20f0;
  short s19967c20f1;
  int s19967c20f2[8];
  ::S19967C12 s19967c20f3;
  int s19967c20f4;
  int s19967c20f5:9;
  virtual  ~S19967C20(); // _ZN9S19967C20D2Ev
  virtual void  v5(); // _ZN9S19967C202v5Ev
  virtual void  v6(); // _ZN9S19967C202v6Ev
  S19967C20(); // tgen
};
//SIG(-1 S19967C20) C1{ BC2{ VBC3{ VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC5{ VBC6{ vd v3 v4 Fp FC4 FC4 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC8{ VBC9{ m} VBC4 Fp[9]} VBC10{ VBC8 vd Fi:21 Fi} BC4 v5} BC11{ VBC9 VBC8 BC10 BC5 Fi Fi Fi Fs Fi FC12{ VBC4 VBC8 BC5 BC10 BC6 vd Fi} FL Fp Fi} vd Fi} BC12 BC4 BC13{ BC4 VBC6 BC11 BC10 vd Fs Fs[4] Fs FC6} vd Fc Fs FC4[6]} vd v1 v2 Fi Fs Fi[8] FC12 Fi Fi:9}


 S19967C20 ::~S19967C20(){ note_dtor("S19967C20", this);}
void  S19967C20 ::v5(){vfunc_called(this, "_ZN9S19967C202v5Ev");}
void  S19967C20 ::v6(){vfunc_called(this, "_ZN9S19967C202v6Ev");}
S19967C20 ::S19967C20(){ note_ctor("S19967C20", this);} // tgen

static void Test_S19967C20()
{
  extern Class_Descriptor cd_S19967C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,1793)];
    init_test(&cd_S19967C20, buf);
    S19967C20 *dp, &lv = *(dp=new (buf) S19967C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,7168), "sizeof(S19967C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C20)");
    /*is_ambiguous_... S19967C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C6*), ABISELECT(11008,6528), "S19967C20");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(11008,6528), "S19967C20");
    /*is_ambiguous_... S19967C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C12*)(S19967C5*), ABISELECT(11008,6528), "S19967C20");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C6*), ABISELECT(11248,6668), "S19967C20");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(11248,6668), "S19967C20");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(11248,6668), "S19967C20");
    check_base_class_offset(lv, (S19967C2*)(S19967C13*)(S19967C5*), ABISELECT(11248,6668), "S19967C20");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(11248,6668), "S19967C20");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C20");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C6*), 0, "S19967C20");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C13*)(S19967C5*), 0, "S19967C20");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C6*), ABISELECT(11984,7116), "S19967C20");
    /*is_ambiguous_... S19967C20::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(11984,7116), "S19967C20");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C6*), ABISELECT(11984,7116), "S19967C20");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(11984,7116), "S19967C20");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(11984,7116), "S19967C20");
    check_base_class_offset(lv, (S19967C8*)(S19967C12*)(S19967C5*), ABISELECT(11984,7116), "S19967C20");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(11984,7116), "S19967C20");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C12*)(S19967C5*), ABISELECT(11984,7116), "S19967C20");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(11984,7116), "S19967C20");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(11984,7116), "S19967C20");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(11984,7116), "S19967C20");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C13*)(S19967C5*), ABISELECT(11984,7116), "S19967C20");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C6*), ABISELECT(12064,7156), "S19967C20");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(12064,7156), "S19967C20");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(12064,7156), "S19967C20");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(12064,7156), "S19967C20");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C6*), ABISELECT(8336,4944), "S19967C20");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C7*)(S19967C6*), ABISELECT(8320,4940), "S19967C20");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(8576,5084), "S19967C20");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(8608,5100), "S19967C20");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(8592,5096), "S19967C20");
    check_base_class_offset(lv, (S19967C11*)(S19967C6*), ABISELECT(8576,5084), "S19967C20");
    check_base_class_offset(lv, (S19967C6*)(S19967C5*), ABISELECT(8320,4940), "S19967C20");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(16,4), "S19967C20");
    check_base_class_offset(lv, (S19967C7*)(S19967C12*)(S19967C5*), 0, "S19967C20");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C12*)(S19967C5*), ABISELECT(256,144), "S19967C20");
    /*is_ambiguous_... S19967C12::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C12*)(S19967C5*), ABISELECT(272,156), "S19967C20");
    check_base_class_offset(lv, (S19967C12*)(S19967C5*), 0, "S19967C20");
    /*is_ambiguous_... S19967C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C5*), ABISELECT(1024,608), "S19967C20");
    /*is_ambiguous_... S19967C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C13*)(S19967C5*), ABISELECT(3696,2188), "S19967C20");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(1264,748), "S19967C20");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(1296,764), "S19967C20");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(1280,760), "S19967C20");
    check_base_class_offset(lv, (S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(1264,748), "S19967C20");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C13*)(S19967C5*), ABISELECT(3936,2328), "S19967C20");
    check_base_class_offset(lv, (S19967C13*)(S19967C5*), ABISELECT(1264,748), "S19967C20");
    check_base_class_offset(lv, (S19967C5*), 0, "S19967C20");
    check_field_offset(lv, s19967c20f0, ABISELECT(6160,3644), "S19967C20.s19967c20f0");
    check_field_offset(lv, s19967c20f1, ABISELECT(6164,3648), "S19967C20.s19967c20f1");
    check_field_offset(lv, s19967c20f2, ABISELECT(6168,3652), "S19967C20.s19967c20f2");
    check_field_offset(lv, s19967c20f3, ABISELECT(6208,3684), "S19967C20.s19967c20f3");
    check_field_offset(lv, s19967c20f4, ABISELECT(8304,4932), "S19967C20.s19967c20f4");
    set_bf_and_test(lv, s19967c20f5, ABISELECT(8308,4936), 0, 9, 1, "S19967C20");
    set_bf_and_test(lv, s19967c20f5, ABISELECT(8308,4936), 0, 9, hide_sll(1LL<<8), "S19967C20");
    test_class_info(&lv, &cd_S19967C20);
    dp->~S19967C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C20(Test_S19967C20, "S19967C20", ABISELECT(12080,7168));

#else // __cplusplus

extern void _ZN9S19967C20C1Ev();
extern void _ZN9S19967C20D2Ev();
Name_Map name_map_S19967C20[] = {
  NSPAIR(_ZN9S19967C20C1Ev),
  NSPAIR(_ZN9S19967C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C6;
extern VTBL_ENTRY _ZTI8S19967C6[];
extern  VTBL_ENTRY _ZTV8S19967C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C12;
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C13;
extern VTBL_ENTRY _ZTI9S19967C13[];
extern  VTBL_ENTRY _ZTV9S19967C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C13[];
extern Class_Descriptor cd_S19967C5;
extern VTBL_ENTRY _ZTI8S19967C5[];
extern  VTBL_ENTRY _ZTV8S19967C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C5[];
static Base_Class bases_S19967C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(11008,6528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C2,    ABISELECT(11248,6668), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(11984,7116), //bcp->offset
    92, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19967C10,    ABISELECT(12064,7156), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(8336,4944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19967C7,    ABISELECT(8320,4940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(8576,5084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(8608,5100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(8592,5096), //bcp->offset
    73, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(8576,5084), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19967C6,    ABISELECT(8320,4940), //bcp->offset
    52, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19967C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(256,144), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C2,    ABISELECT(272,156), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(3696,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1296,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(1280,760), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(3936,2328), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C13,    ABISELECT(1264,748), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19967C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C20[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C20D1Ev();
extern void _ZN9S19967C20D0Ev();
extern void _ZN9S19967C202v5Ev();
extern void _ZN9S19967C202v6Ev();
extern void ABISELECT(_ZThn256_N9S19967C20D1Ev,_ZThn144_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C20D0Ev,_ZThn144_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn272_N9S19967C20D1Ev,_ZThn156_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn272_N9S19967C20D0Ev,_ZThn156_N9S19967C20D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZThn1264_N9S19967C20D1Ev,_ZThn748_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn1264_N9S19967C20D0Ev,_ZThn748_N9S19967C20D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N9S19967C20D1Ev,_ZThn760_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn1280_N9S19967C20D0Ev,_ZThn760_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn3936_N9S19967C20D1Ev,_ZThn2328_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn3936_N9S19967C20D0Ev,_ZThn2328_N9S19967C20D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn8320_N9S19967C20D1Ev,_ZThn4940_N9S19967C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn8320_N9S19967C20D0Ev,_ZThn4940_N9S19967C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N9S19967C20D1Ev,_ZTvn144_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19967C20D0Ev,_ZTvn144_n36_N9S19967C20D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19967C20D1Ev,_ZTvn156_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19967C20D0Ev,_ZTvn156_n36_N9S19967C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn11248_N9S19967C20D1Ev,_ZThn6668_N9S19967C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn11248_N9S19967C20D0Ev,_ZThn6668_N9S19967C20D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn12064_N9S19967C20D1Ev,_ZThn7156_N9S19967C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn12064_N9S19967C20D0Ev,_ZThn7156_N9S19967C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19967C20[] = {
  ABISELECT(8320,4940),
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v6Ev,
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C20D1Ev,_ZThn144_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C20D0Ev,_ZThn144_N9S19967C20D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19967C20D1Ev,_ZThn156_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N9S19967C20D0Ev,_ZThn156_N9S19967C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19967C20D1Ev,_ZThn748_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19967C20D0Ev,_ZThn748_N9S19967C20D0Ev),
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19967C20D1Ev,_ZThn760_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19967C20D0Ev,_ZThn760_N9S19967C20D0Ev),
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19967C20D1Ev,_ZThn2328_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19967C20D0Ev,_ZThn2328_N9S19967C20D0Ev),
  ABISELECT(-8320,-4940),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4940),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5084),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C20D1Ev,_ZTvn144_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C20D0Ev,_ZTvn144_n36_N9S19967C20D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5096),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C20D1Ev,_ZTvn156_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C20D0Ev,_ZTvn156_n36_N9S19967C20D0Ev),
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S19967C20[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C5D1Ev();
extern void _ZN8S19967C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C5__9S19967C20[] = {
  ABISELECT(8320,4940),
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C128S19967C5__9S19967C20[] = {
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C128S19967C5__A2__9S19967C20[] = {
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn11248_N8S19967C7D1Ev,_ZThn6668_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn11248_N8S19967C7D0Ev,_ZThn6668_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C128S19967C5__A2__9S19967C20[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C128S19967C5__A2__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn12064_N8S19967C7D1Ev,_ZThn7156_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn12064_N8S19967C7D0Ev,_ZThn7156_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C128S19967C5__A2__9S19967C20[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C128S19967C5__A2__9S19967C20[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C128S19967C5__A2__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11728,-6972),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C128S19967C5__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn11248_N9S19967C12D1Ev,_ZThn6668_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn11248_N9S19967C12D0Ev,_ZThn6668_N9S19967C12D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C128S19967C5__9S19967C20[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn12064_N9S19967C12D1Ev,_ZThn7156_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn12064_N9S19967C12D0Ev,_ZThn7156_N9S19967C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C128S19967C5__9S19967C20[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C128S19967C5__9S19967C20[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
};
extern void _ZN9S19967C13D1Ev();
extern void _ZN9S19967C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C138S19967C5__9S19967C20[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN9S19967C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C13D0Ev,
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C119S19967C138S19967C5__A1__9S19967C20[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C119S19967C138S19967C5__A3__9S19967C20[] = {
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C5__A3__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn9968_N8S19967C7D1Ev,_ZThn5908_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn9968_N8S19967C7D0Ev,_ZThn5908_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[] = {
  0,
  0,
  ABISELECT(-9968,-5908),
  ABISELECT(-9968,-5908),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10704,-6356),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn10784_N8S19967C7D1Ev,_ZThn6396_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn10784_N8S19967C7D0Ev,_ZThn6396_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[] = {
  ABISELECT(-10784,-6396),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10784,-6396),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C119S19967C138S19967C5__A1__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C119S19967C138S19967C5__A1__9S19967C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn9984_N9S19967C11D1Ev,_ZThn5920_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn9984_N9S19967C11D0Ev,_ZThn5920_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C119S19967C138S19967C5__A1__9S19967C20[] = {
  0,
  0,
  ABISELECT(-9984,-5920),
  ABISELECT(-9984,-5920),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn10800_N9S19967C11D1Ev,_ZThn6408_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn10800_N9S19967C11D0Ev,_ZThn6408_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C5__A1__9S19967C20[] = {
  ABISELECT(-10800,-6408),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6408),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C138S19967C5__A4__9S19967C20[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C138S19967C5__A4__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-8048,-4788),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn9984_N9S19967C13D1Ev,_ZThn5920_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn9984_N9S19967C13D0Ev,_ZThn5920_N9S19967C13D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C138S19967C5__9S19967C20[] = {
  0,
  0,
  ABISELECT(-9984,-5920),
  ABISELECT(-9984,-5920),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C138S19967C5__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C138S19967C5__9S19967C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn10800_N9S19967C13D1Ev,_ZThn6408_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn10800_N9S19967C13D0Ev,_ZThn6408_N9S19967C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C138S19967C5__9S19967C20[] = {
  ABISELECT(-10800,-6408),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6408),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C138S19967C5__9S19967C20[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn8320_N8S19967C5D1Ev,_ZThn4940_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn8320_N8S19967C5D0Ev,_ZThn4940_N8S19967C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19967C6__8S19967C5__9S19967C20[] = {
  ABISELECT(-8320,-4940),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4940),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn11248_N8S19967C5D1Ev,_ZThn6668_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn11248_N8S19967C5D0Ev,_ZThn6668_N8S19967C5D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C5__9S19967C20[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C5__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn12064_N8S19967C5D1Ev,_ZThn7156_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn12064_N8S19967C5D0Ev,_ZThn7156_N8S19967C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C5__9S19967C20[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__8S19967C5__9S19967C20[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5084),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C5__9S19967C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5096),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C12__A2__8S19967C5__9S19967C20[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C13__8S19967C5__9S19967C20[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C5__9S19967C20[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C13__A4__8S19967C5__9S19967C20[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C6D1Ev();
extern void _ZN8S19967C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C6__9S19967C20[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C78S19967C6__9S19967C20[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C7D1Ev,_ZThn1728_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C7D0Ev,_ZThn1728_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C78S19967C6__9S19967C20[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C78S19967C6__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C7D1Ev,_ZThn2216_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C7D0Ev,_ZThn2216_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C78S19967C6__9S19967C20[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__9S19967C20[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C118S19967C6__A1__9S19967C20[] = {
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2656_N8S19967C7D1Ev,_ZThn1572_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2656_N8S19967C7D0Ev,_ZThn1572_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__9S19967C20[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2060_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2060_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__9S19967C20[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C118S19967C6__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C118S19967C6__9S19967C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C11D1Ev,_ZThn1584_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C11D0Ev,_ZThn1584_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C118S19967C6__9S19967C20[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2072_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2072_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C118S19967C6__9S19967C20[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C6D1Ev,_ZThn1728_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn2928_N8S19967C6D0Ev,_ZThn1728_N8S19967C6D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C6__9S19967C20[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C6__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C6D1Ev,_ZThn2216_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn3744_N8S19967C6D0Ev,_ZThn2216_N8S19967C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C6__9S19967C20[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C11__8S19967C6__9S19967C20[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A1__8S19967C6__9S19967C20[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C20[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__9S19967C20[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTT_ENTRY vtt_S19967C20[] = {
  {&(_ZTV9S19967C20[8]),  8,104},
  {&(_tg__ZTV8S19967C5__9S19967C20[8]),  8,11},
  {&(_tg__ZTV9S19967C128S19967C5__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C79S19967C128S19967C5__A2__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C128S19967C5__A2__9S19967C20[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C128S19967C5__A2__9S19967C20[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C128S19967C5__A2__9S19967C20[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C128S19967C5__A2__9S19967C20[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C128S19967C5__A2__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C128S19967C5__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C128S19967C5__9S19967C20[5]),  5,9},
  {&(_tg__ZTV9S19967C10__9S19967C128S19967C5__9S19967C20[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C128S19967C5__9S19967C20[5]),  5,7},
  {&(_tg__ZTV9S19967C138S19967C5__9S19967C20[7]),  7,9},
  {&(_tg__ZTV9S19967C119S19967C138S19967C5__A1__9S19967C20[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C119S19967C138S19967C5__A3__9S19967C20[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C5__A3__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C119S19967C138S19967C5__A1__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C119S19967C138S19967C5__A1__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C119S19967C138S19967C5__A1__9S19967C20[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C5__A1__9S19967C20[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C138S19967C5__A4__9S19967C20[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C138S19967C5__A4__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C138S19967C5__9S19967C20[5]),  5,9},
  {&(_tg__ZTV8S19967C8__9S19967C138S19967C5__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C138S19967C5__9S19967C20[7]),  7,10},
  {&(_tg__ZTV9S19967C10__A1__9S19967C138S19967C5__9S19967C20[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C138S19967C5__9S19967C20[5]),  5,7},
  {&(_tg__ZTV8S19967C6__8S19967C5__9S19967C20[9]),  9,12},
  {&(_tg__ZTV8S19967C2__8S19967C5__9S19967C20[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C5__9S19967C20[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C5__9S19967C20[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__8S19967C5__9S19967C20[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C5__9S19967C20[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C12__A2__8S19967C5__9S19967C20[5]),  5,7},
  {&(_tg__ZTV9S19967C13__8S19967C5__9S19967C20[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C5__9S19967C20[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C13__A4__8S19967C5__9S19967C20[5]),  5,7},
  {&(_ZTV9S19967C20[61]),  61,104},
  {&(_ZTV9S19967C20[88]),  88,104},
  {&(_ZTV9S19967C20[96]),  96,104},
  {&(_ZTV9S19967C20[102]),  102,104},
  {&(_ZTV9S19967C20[71]),  71,104},
  {&(_ZTV9S19967C20[80]),  80,104},
  {&(_ZTV9S19967C20[18]),  18,104},
  {&(_ZTV9S19967C20[33]),  33,104},
  {&(_ZTV9S19967C20[42]),  42,104},
  {&(_ZTV9S19967C20[50]),  50,104},
  {&(_tg__ZTV8S19967C6__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C78S19967C6__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C78S19967C6__9S19967C20[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C78S19967C6__9S19967C20[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C78S19967C6__9S19967C20[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__9S19967C20[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C118S19967C6__A1__9S19967C20[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__9S19967C20[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__9S19967C20[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__9S19967C20[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C118S19967C6__9S19967C20[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C118S19967C6__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C118S19967C6__9S19967C20[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C118S19967C6__9S19967C20[6]),  6,8},
  {&(_tg__ZTV8S19967C2__8S19967C6__9S19967C20[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C6__9S19967C20[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C6__9S19967C20[6]),  6,8},
  {&(_tg__ZTV9S19967C11__8S19967C6__9S19967C20[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C11__A1__8S19967C6__9S19967C20[7]),  7,10},
  {&(_tg__ZTV8S19967C8__9S19967C20[4]),  4,4},
  {&(_tg__ZTV9S19967C10__9S19967C20[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__9S19967C20[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19967C20[];
extern  VTBL_ENTRY _ZTV9S19967C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C20[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C6D0Ev,_ZThn2216_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C6D1Ev,_ZThn2216_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C6D0Ev,_ZThn1728_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C6D1Ev,_ZThn1728_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19967C5D0Ev,_ZThn7156_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19967C5D1Ev,_ZThn7156_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19967C5D0Ev,_ZThn6668_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19967C5D1Ev,_ZThn6668_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S19967C5D0Ev,_ZThn4940_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S19967C5D1Ev,_ZThn4940_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19967C13D0Ev,_ZThn6408_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19967C13D1Ev,_ZThn6408_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19967C13D0Ev,_ZThn5920_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19967C13D1Ev,_ZThn5920_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D0Ev,_ZThn2072_N9S19967C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19967C11D0Ev,_ZThn6408_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N9S19967C11D1Ev,_ZThn2072_N9S19967C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N9S19967C11D1Ev,_ZThn6408_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19967C11D0Ev,_ZThn1584_N9S19967C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19967C11D0Ev,_ZThn5920_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N9S19967C11D1Ev,_ZThn1584_N9S19967C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N9S19967C11D1Ev,_ZThn5920_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19967C12D0Ev,_ZThn7156_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19967C12D1Ev,_ZThn7156_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19967C12D0Ev,_ZThn6668_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19967C12D1Ev,_ZThn6668_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D0Ev,_ZThn2060_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C7D0Ev,_ZThn2216_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N8S19967C7D0Ev,_ZThn6396_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19967C7D0Ev,_ZThn7156_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N8S19967C7D1Ev,_ZThn2060_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S19967C7D1Ev,_ZThn2216_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N8S19967C7D1Ev,_ZThn6396_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S19967C7D1Ev,_ZThn7156_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19967C7D0Ev,_ZThn1572_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C7D0Ev,_ZThn1728_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N8S19967C7D0Ev,_ZThn5908_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19967C7D0Ev,_ZThn6668_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N8S19967C7D1Ev,_ZThn1572_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S19967C7D1Ev,_ZThn1728_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N8S19967C7D1Ev,_ZThn5908_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S19967C7D1Ev,_ZThn6668_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19967C20D0Ev,_ZThn7156_N9S19967C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N9S19967C20D1Ev,_ZThn7156_N9S19967C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19967C20D0Ev,_ZThn6668_N9S19967C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N9S19967C20D1Ev,_ZThn6668_N9S19967C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N9S19967C20D0Ev,_ZThn4940_N9S19967C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N9S19967C20D1Ev,_ZThn4940_N9S19967C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C20 = {  "S19967C20", // class name
  bases_S19967C20, 26,
  &(vtc_S19967C20[0]), // expected_vtbl_contents
  &(vtt_S19967C20[0]), // expected_vtt_contents
  ABISELECT(12080,7168), // object size
  NSPAIRA(_ZTI9S19967C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S19967C20),104, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C20),76, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C18  : S19967C2 , virtual S19967C8 , virtual S19967C19 , virtual S19967C10 , S19967C20 {
  short s19967c18f0[7];
  long double s19967c18f1;
  ::S22028C16 s19967c18f2;
  int s19967c18f3;
  void *s19967c18f4[8];
  int s19967c18f5;
  virtual void  v7(); // _ZN9S19967C182v7Ev
  virtual void  v8(); // _ZN9S19967C182v8Ev
  ~S19967C18(); // tgen
  S19967C18(); // tgen
};
//SIG(-1 S19967C18) C1{ BC2{ vd v3 v4 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ BC5 FD[8] Fi Fs Fi Fs Fp Fi Fi Fs Fi[5] Fp} VBC8{ VBC5 vd Fi:21 Fi} BC9{ BC10{ VBC11{ VBC3 BC12{ VBC2 VBC5 VBC8 BC3 v5} BC13{ VBC6 VBC5 BC8 BC12 Fi Fi Fi Fs Fi FC14{ VBC3 VBC5 BC12 BC8 BC2 vd Fi} FL Fp Fi} vd Fi} BC14 BC3 BC15{ BC3 VBC2 BC13 BC8 vd Fs Fs[4] Fs FC2} vd Fc Fs FC3[6]} vd v6 v7 Fi Fs Fi[8] FC14 Fi Fi:9} v1 v2 Fs[7] FD FC6 Fi Fp[8] Fi}


void  S19967C18 ::v7(){vfunc_called(this, "_ZN9S19967C182v7Ev");}
void  S19967C18 ::v8(){vfunc_called(this, "_ZN9S19967C182v8Ev");}
S19967C18 ::~S19967C18(){ note_dtor("S19967C18", this);} // tgen
S19967C18 ::S19967C18(){ note_ctor("S19967C18", this);} // tgen

static void Test_S19967C18()
{
  extern Class_Descriptor cd_S19967C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(826,1970)];
    init_test(&cd_S19967C18, buf);
    S19967C18 *dp, &lv = *(dp=new (buf) S19967C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13200,7876), "sizeof(S19967C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C18)");
    /*is_ambiguous_... S19967C18::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*), 0, "S19967C18");
    /*is_ambiguous_... S19967C18::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C18");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C19*), 0, "S19967C18");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C6*), 0, "S19967C18");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), 0, "S19967C18");
    /*is_ambiguous_... S19967C18::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(9248,5496), "S19967C18");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C19*), ABISELECT(9248,5496), "S19967C18");
    /*is_ambiguous_... S19967C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C6*), ABISELECT(9248,5496), "S19967C18");
    /*is_ambiguous_... S19967C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(9248,5496), "S19967C18");
    /*is_ambiguous_... S19967C18::S19967C8 */ AMB_check_base_class_offset(lv, (S19967C8*), ABISELECT(9168,5456), "S19967C18");
    /*is_ambiguous_... S19967C18::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(9168,5456), "S19967C18");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C6*), ABISELECT(9168,5456), "S19967C18");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C6*), ABISELECT(9168,5456), "S19967C18");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(9168,5456), "S19967C18");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(9168,5456), "S19967C18");
    check_base_class_offset(lv, (S19967C8*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(9168,5456), "S19967C18");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(9168,5456), "S19967C18");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(9168,5456), "S19967C18");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(9168,5456), "S19967C18");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(9168,5456), "S19967C18");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(9168,5456), "S19967C18");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(9168,5456), "S19967C18");
    check_base_class_offset(lv, (S19967C8*)(S19967C19*), ABISELECT(9488,5636), "S19967C18");
    check_base_class_offset(lv, (S19967C19*), ABISELECT(9488,5636), "S19967C18");
    /*is_ambiguous_... S19967C18::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*), ABISELECT(9760,5828), "S19967C18");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C6*), ABISELECT(9760,5828), "S19967C18");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(9760,5828), "S19967C18");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(9760,5828), "S19967C18");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(9760,5828), "S19967C18");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C6*), ABISELECT(12464,7428), "S19967C18");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(12464,7428), "S19967C18");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(12464,7428), "S19967C18");
    check_base_class_offset(lv, (S19967C2*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(12464,7428), "S19967C18");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(12464,7428), "S19967C18");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C6*), ABISELECT(9792,5844), "S19967C18");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C7*)(S19967C6*), ABISELECT(9776,5840), "S19967C18");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(10032,5984), "S19967C18");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(10064,6000), "S19967C18");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(10048,5996), "S19967C18");
    check_base_class_offset(lv, (S19967C11*)(S19967C6*), ABISELECT(10032,5984), "S19967C18");
    check_base_class_offset(lv, (S19967C6*)(S19967C5*)(S19967C20*), ABISELECT(9776,5840), "S19967C18");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(752,452), "S19967C18");
    check_base_class_offset(lv, (S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(736,448), "S19967C18");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(992,592), "S19967C18");
    /*is_ambiguous_... S19967C12::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(1008,604), "S19967C18");
    check_base_class_offset(lv, (S19967C12*)(S19967C5*)(S19967C20*), ABISELECT(736,448), "S19967C18");
    /*is_ambiguous_... S19967C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C5*)(S19967C20*), ABISELECT(1760,1056), "S19967C18");
    /*is_ambiguous_... S19967C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(4432,2636), "S19967C18");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(2000,1196), "S19967C18");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(2032,1212), "S19967C18");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(2016,1208), "S19967C18");
    check_base_class_offset(lv, (S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(2000,1196), "S19967C18");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(4672,2776), "S19967C18");
    check_base_class_offset(lv, (S19967C13*)(S19967C5*)(S19967C20*), ABISELECT(2000,1196), "S19967C18");
    check_base_class_offset(lv, (S19967C5*)(S19967C20*), ABISELECT(736,448), "S19967C18");
    check_base_class_offset(lv, (S19967C20*), ABISELECT(736,448), "S19967C18");
    check_field_offset(lv, s19967c18f0, ABISELECT(9046,5386), "S19967C18.s19967c18f0");
    check_field_offset(lv, s19967c18f1, ABISELECT(9072,5400), "S19967C18.s19967c18f1");
    check_field_offset(lv, s19967c18f2, ABISELECT(9088,5412), "S19967C18.s19967c18f2");
    check_field_offset(lv, s19967c18f3, ABISELECT(9092,5416), "S19967C18.s19967c18f3");
    check_field_offset(lv, s19967c18f4, ABISELECT(9096,5420), "S19967C18.s19967c18f4");
    check_field_offset(lv, s19967c18f5, ABISELECT(9160,5452), "S19967C18.s19967c18f5");
    test_class_info(&lv, &cd_S19967C18);
    dp->~S19967C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C18(Test_S19967C18, "S19967C18", ABISELECT(13200,7876));

#else // __cplusplus

extern void _ZN9S19967C18C1Ev();
extern void _ZN9S19967C18D1Ev();
Name_Map name_map_S19967C18[] = {
  NSPAIR(_ZN9S19967C18C1Ev),
  NSPAIR(_ZN9S19967C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C19;
extern VTBL_ENTRY _ZTI9S19967C19[];
extern  VTBL_ENTRY _ZTV9S19967C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C19[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C6;
extern VTBL_ENTRY _ZTI8S19967C6[];
extern  VTBL_ENTRY _ZTV8S19967C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C12;
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C13;
extern VTBL_ENTRY _ZTI9S19967C13[];
extern  VTBL_ENTRY _ZTV9S19967C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C13[];
extern Class_Descriptor cd_S19967C5;
extern VTBL_ENTRY _ZTI8S19967C5[];
extern  VTBL_ENTRY _ZTV8S19967C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C5[];
extern Class_Descriptor cd_S19967C20;
extern VTBL_ENTRY _ZTI9S19967C20[];
extern  VTBL_ENTRY _ZTV9S19967C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C20[];
static Base_Class bases_S19967C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19967C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(9248,5496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(9168,5456), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C8,    ABISELECT(9488,5636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19967C19,    ABISELECT(9488,5636), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C10,    ABISELECT(9760,5828), //bcp->offset
    75, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C2,    ABISELECT(12464,7428), //bcp->offset
    114, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(9792,5844), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(9776,5840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(10032,5984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(10064,6000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19967C7,    ABISELECT(10048,5996), //bcp->offset
    104, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(10032,5984), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19967C6,    ABISELECT(9776,5840), //bcp->offset
    83, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(752,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19967C7,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(992,592), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19967C2,    ABISELECT(1008,604), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19967C12,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1760,1056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(4432,2636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(2000,1196), //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
    16, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(2032,1212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(2016,1208), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(2000,1196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(4672,2776), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19967C13,    ABISELECT(2000,1196), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19967C5,    ABISELECT(736,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19967C20,    ABISELECT(736,448), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C18[];
extern void _ZN9S19967C18D1Ev();
extern void _ZN9S19967C18D0Ev();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void _ZN9S19967C182v7Ev();
extern void _ZN9S19967C182v8Ev();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn736_N9S19967C18D1Ev,_ZThn448_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn736_N9S19967C18D0Ev,_ZThn448_N9S19967C18D0Ev)();
extern void _ZN9S19967C202v5Ev();
extern void _ZN9S19967C202v6Ev();
extern void ABISELECT(_ZThn992_N9S19967C18D1Ev,_ZThn592_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn992_N9S19967C18D0Ev,_ZThn592_N9S19967C18D0Ev)();
extern void ABISELECT(_ZThn1008_N9S19967C18D1Ev,_ZThn604_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn1008_N9S19967C18D0Ev,_ZThn604_N9S19967C18D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZThn2000_N9S19967C18D1Ev,_ZThn1196_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn2000_N9S19967C18D0Ev,_ZThn1196_N9S19967C18D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn2016_N9S19967C18D1Ev,_ZThn1208_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn2016_N9S19967C18D0Ev,_ZThn1208_N9S19967C18D0Ev)();
extern void ABISELECT(_ZThn4672_N9S19967C18D1Ev,_ZThn2776_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn4672_N9S19967C18D0Ev,_ZThn2776_N9S19967C18D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C18D1Ev,_ZTv0_n24_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn9760_N9S19967C18D1Ev,_ZThn5828_N9S19967C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C18D0Ev,_ZTv0_n24_N9S19967C18D0Ev)();
extern void ABISELECT(_ZThn9760_N9S19967C18D0Ev,_ZThn5828_N9S19967C18D0Ev)() __attribute__((weak));
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19967C18D1Ev,_ZTv0_n36_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn9776_N9S19967C18D1Ev,_ZThn5840_N9S19967C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19967C18D0Ev,_ZTv0_n36_N9S19967C18D0Ev)();
extern void ABISELECT(_ZThn9776_N9S19967C18D0Ev,_ZThn5840_N9S19967C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N9S19967C18D1Ev,_ZTvn144_n36_N9S19967C18D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19967C18D0Ev,_ZTvn144_n36_N9S19967C18D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19967C18D1Ev,_ZTvn156_n36_N9S19967C18D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19967C18D0Ev,_ZTvn156_n36_N9S19967C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C18D1Ev,_ZTv0_n12_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn12464_N9S19967C18D1Ev,_ZThn7428_N9S19967C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C18D0Ev,_ZTv0_n12_N9S19967C18D0Ev)();
extern void ABISELECT(_ZThn12464_N9S19967C18D0Ev,_ZThn7428_N9S19967C18D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY vtc_S19967C18[] = {
  ABISELECT(12464,7428),
  ABISELECT(9776,5840),
  ABISELECT(9760,5828),
  ABISELECT(9488,5636),
  ABISELECT(9248,5496),
  0,
  ABISELECT(9168,5456),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN9S19967C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C18D0Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  (VTBL_ENTRY)&_ZN9S19967C182v7Ev,
  (VTBL_ENTRY)&_ZN9S19967C182v8Ev,
  ABISELECT(9040,5392),
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  ABISELECT(-736,-448),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19967C18D1Ev,_ZThn448_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19967C18D0Ev,_ZThn448_N9S19967C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19967C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v6Ev,
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19967C18D1Ev,_ZThn592_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19967C18D0Ev,_ZThn592_N9S19967C18D0Ev),
  ABISELECT(-1008,-604),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1008_N9S19967C18D1Ev,_ZThn604_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1008_N9S19967C18D0Ev,_ZThn604_N9S19967C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  ABISELECT(-2000,-1196),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19967C18D1Ev,_ZThn1196_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19967C18D0Ev,_ZThn1196_N9S19967C18D0Ev),
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-2016,-1208),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19967C18D1Ev,_ZThn1208_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19967C18D0Ev,_ZThn1208_N9S19967C18D0Ev),
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-4672,-2776),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19967C18D1Ev,_ZThn2776_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19967C18D0Ev,_ZThn2776_N9S19967C18D0Ev),
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-9168,-5456),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  ABISELECT(-240,-140),
  ABISELECT(-9488,-5636),
  ABISELECT(-9488,-5636),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  ABISELECT(-9760,-5828),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9760,-5828),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C18D1Ev,_ZTv0_n24_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C18D0Ev,_ZTv0_n24_N9S19967C18D0Ev),
  ABISELECT(-9776,-5840),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  ABISELECT(-9776,-5840),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C18D1Ev,_ZTv0_n36_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C18D0Ev,_ZTv0_n36_N9S19967C18D0Ev),
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-10032,-5984),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C18D1Ev,_ZTvn144_n36_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C18D0Ev,_ZTvn144_n36_N9S19967C18D0Ev),
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-10048,-5996),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C18D1Ev,_ZTvn156_n36_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C18D0Ev,_ZTvn156_n36_N9S19967C18D0Ev),
  0,
  0,
  ABISELECT(-12464,-7428),
  ABISELECT(-12464,-7428),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C18D1Ev,_ZTv0_n12_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C18D0Ev,_ZTv0_n12_N9S19967C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern VTBL_ENTRY _ZTV9S19967C18[];
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C20D1Ev();
extern void _ZN9S19967C20D0Ev();
extern void _ZN9S19967C202v5Ev();
extern void _ZN9S19967C202v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C20__9S19967C18[] = {
  ABISELECT(9040,5392),
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v6Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C5D1Ev();
extern void _ZN8S19967C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(9040,5392),
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C128S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[] = {
  ABISELECT(9024,5380),
  ABISELECT(8512,5048),
  ABISELECT(-736,-448),
  ABISELECT(8432,5008),
  ABISELECT(11728,6980),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn11728_N8S19967C7D1Ev,_ZThn6980_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn11728_N8S19967C7D0Ev,_ZThn6980_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn9024_N8S19967C7D1Ev,_ZThn5380_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn9024_N8S19967C7D0Ev,_ZThn5380_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C128S19967C59S19967C20__A2__9S19967C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C128S19967C59S19967C20__A2__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8176,-4864),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C128S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn11728_N9S19967C12D1Ev,_ZThn6980_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn11728_N9S19967C12D0Ev,_ZThn6980_N9S19967C12D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C128S19967C59S19967C20__9S19967C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn9024_N9S19967C12D1Ev,_ZThn5380_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn9024_N9S19967C12D0Ev,_ZThn5380_N9S19967C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C128S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C128S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
};
extern void _ZN9S19967C13D1Ev();
extern void _ZN9S19967C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C138S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN9S19967C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C13D0Ev,
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[] = {
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7168,-4260),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn10448_N8S19967C7D1Ev,_ZThn6220_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn10448_N8S19967C7D0Ev,_ZThn6220_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[] = {
  0,
  0,
  ABISELECT(-10448,-6220),
  ABISELECT(-10448,-6220),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7152,-4248),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn7744_N8S19967C7D1Ev,_ZThn4620_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn7744_N8S19967C7D0Ev,_ZThn4620_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[] = {
  ABISELECT(-7744,-4620),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-7744,-4620),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7168,-4260),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn10464_N9S19967C11D1Ev,_ZThn6232_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn10464_N9S19967C11D0Ev,_ZThn6232_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[] = {
  0,
  0,
  ABISELECT(-10464,-6232),
  ABISELECT(-10464,-6232),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn7760_N9S19967C11D1Ev,_ZThn4632_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn7760_N9S19967C11D0Ev,_ZThn4632_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[] = {
  ABISELECT(-7760,-4632),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-7760,-4632),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C138S19967C59S19967C20__A4__9S19967C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C138S19967C59S19967C20__A4__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn10464_N9S19967C13D1Ev,_ZThn6232_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn10464_N9S19967C13D0Ev,_ZThn6232_N9S19967C13D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C138S19967C59S19967C20__9S19967C18[] = {
  0,
  0,
  ABISELECT(-10464,-6232),
  ABISELECT(-10464,-6232),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C138S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-7168,-4260),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C138S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn7760_N9S19967C13D1Ev,_ZThn4632_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn7760_N9S19967C13D0Ev,_ZThn4632_N9S19967C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C138S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(-7760,-4632),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-7760,-4632),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C138S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn9040_N8S19967C5D1Ev,_ZThn5392_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn9040_N8S19967C5D0Ev,_ZThn5392_N8S19967C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19967C6__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(-9040,-5392),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  ABISELECT(-9040,-5392),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn11728_N8S19967C5D1Ev,_ZThn6980_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn11728_N8S19967C5D0Ev,_ZThn6980_N8S19967C5D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C59S19967C20__9S19967C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn9024_N8S19967C5D1Ev,_ZThn5380_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn9024_N8S19967C5D0Ev,_ZThn5380_N8S19967C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-9296,-5536),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-9312,-5548),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C12__A2__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C13__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C13__A4__8S19967C59S19967C20__9S19967C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn9040_N9S19967C20D1Ev,_ZThn5392_N9S19967C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn9040_N9S19967C20D0Ev,_ZThn5392_N9S19967C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19967C6__9S19967C20__9S19967C18[] = {
  ABISELECT(-9040,-5392),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  ABISELECT(-9040,-5392),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn11728_N9S19967C20D1Ev,_ZThn6980_N9S19967C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn11728_N9S19967C20D0Ev,_ZThn6980_N9S19967C20D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C20__9S19967C18[] = {
  0,
  0,
  ABISELECT(-11728,-6980),
  ABISELECT(-11728,-6980),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C20__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(-8432,-5008),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn9024_N9S19967C20D1Ev,_ZThn5380_N9S19967C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev)();
extern void ABISELECT(_ZThn9024_N9S19967C20D0Ev,_ZThn5380_N9S19967C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C20__9S19967C18[] = {
  ABISELECT(-9024,-5380),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(-9024,-5380),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N9S19967C20D1Ev,_ZTvn144_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19967C20D0Ev,_ZTvn144_n36_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__9S19967C20__9S19967C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-9296,-5536),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C20D1Ev,_ZTvn144_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C20D0Ev,_ZTvn144_n36_N9S19967C20D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19967C20D1Ev,_ZTvn156_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19967C20D0Ev,_ZTvn156_n36_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C20__9S19967C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-9312,-5548),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C20D1Ev,_ZTvn156_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C20D0Ev,_ZTvn156_n36_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C20D1Ev,_ZThn144_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C20D0Ev,_ZThn144_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C128S19967C5__A2__9S19967C20__9S19967C18[] = {
  ABISELECT(8256,4904),
  ABISELECT(-992,-592),
  ABISELECT(8176,4864),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C20D1Ev,_ZThn144_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C20D0Ev,_ZThn144_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZThn1264_N9S19967C20D1Ev,_ZThn748_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn1264_N9S19967C20D0Ev,_ZThn748_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C138S19967C5__9S19967C20__9S19967C18[] = {
  ABISELECT(7760,4632),
  ABISELECT(10464,6232),
  ABISELECT(7248,4300),
  ABISELECT(-2000,-1196),
  ABISELECT(7168,4260),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19967C20D1Ev,_ZThn748_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19967C20D0Ev,_ZThn748_N9S19967C20D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N9S19967C20D1Ev,_ZThn760_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn1280_N9S19967C20D0Ev,_ZThn760_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20__9S19967C18[] = {
  ABISELECT(7744,4620),
  ABISELECT(7232,4288),
  ABISELECT(-2016,-1208),
  ABISELECT(7152,4248),
  ABISELECT(10448,6220),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19967C20D1Ev,_ZThn760_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19967C20D0Ev,_ZThn760_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZThn3936_N9S19967C20D1Ev,_ZThn2328_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn3936_N9S19967C20D0Ev,_ZThn2328_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C138S19967C5__A4__9S19967C20__9S19967C18[] = {
  ABISELECT(4576,2720),
  ABISELECT(-4672,-2776),
  ABISELECT(4496,2680),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19967C20D1Ev,_ZThn2328_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19967C20D0Ev,_ZThn2328_N9S19967C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19967C19__9S19967C18[] = {
  ABISELECT(-240,-140),
  ABISELECT(-9488,-5636),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C19__A1__9S19967C18[] = {
  ABISELECT(-240,-140),
  ABISELECT(-9488,-5636),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C18[] = {
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(592,372),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C6D1Ev();
extern void _ZN8S19967C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C6__9S19967C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C78S19967C6__9S19967C18[] = {
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  ABISELECT(-9776,-5840),
  ABISELECT(-608,-384),
  ABISELECT(2688,1588),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2688_N8S19967C7D1Ev,_ZThn1588_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2688_N8S19967C7D0Ev,_ZThn1588_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C78S19967C6__9S19967C18[] = {
  0,
  0,
  ABISELECT(-2688,-1588),
  ABISELECT(-2688,-1588),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C78S19967C6__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C78S19967C6__9S19967C18[] = {
  ABISELECT(16,12),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__9S19967C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C118S19967C6__A1__9S19967C18[] = {
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2416_N8S19967C7D1Ev,_ZThn1432_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2416_N8S19967C7D0Ev,_ZThn1432_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__9S19967C18[] = {
  0,
  0,
  ABISELECT(-2416,-1432),
  ABISELECT(-2416,-1432),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(880,540),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__9S19967C18[] = {
  ABISELECT(288,168),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(288,168),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C118S19967C6__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(864,528),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C118S19967C6__9S19967C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn2432_N9S19967C11D1Ev,_ZThn1444_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn2432_N9S19967C11D0Ev,_ZThn1444_N9S19967C11D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C118S19967C6__9S19967C18[] = {
  0,
  0,
  ABISELECT(-2432,-1444),
  ABISELECT(-2432,-1444),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C118S19967C6__9S19967C18[] = {
  ABISELECT(272,156),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn2688_N8S19967C6D1Ev,_ZThn1588_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn2688_N8S19967C6D0Ev,_ZThn1588_N8S19967C6D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C6__9S19967C18[] = {
  0,
  0,
  ABISELECT(-2688,-1588),
  ABISELECT(-2688,-1588),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C6__9S19967C18[] = {
  ABISELECT(80,40),
  ABISELECT(-9168,-5456),
  ABISELECT(608,384),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C6__9S19967C18[] = {
  ABISELECT(16,12),
  ABISELECT(-512,-332),
  ABISELECT(-9760,-5828),
  ABISELECT(-592,-372),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C11__8S19967C6__9S19967C18[] = {
  ABISELECT(-272,-156),
  ABISELECT(2432,1444),
  ABISELECT(-784,-488),
  ABISELECT(-10032,-5984),
  ABISELECT(-864,-528),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A1__8S19967C6__9S19967C18[] = {
  ABISELECT(-288,-168),
  ABISELECT(-800,-500),
  ABISELECT(-10048,-5996),
  ABISELECT(-880,-540),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev),
};
static  VTT_ENTRY vtt_S19967C18[] = {
  {&(_ZTV9S19967C18[9]),  9,123},
  {&(_tg__ZTV9S19967C20__9S19967C18[8]),  8,13},
  {&(_tg__ZTV8S19967C59S19967C20__9S19967C18[8]),  8,11},
  {&(_tg__ZTV9S19967C128S19967C59S19967C20__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C128S19967C59S19967C20__A2__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C128S19967C59S19967C20__A2__9S19967C18[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C128S19967C59S19967C20__A2__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C128S19967C59S19967C20__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C128S19967C59S19967C20__9S19967C18[5]),  5,9},
  {&(_tg__ZTV9S19967C10__9S19967C128S19967C59S19967C20__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C128S19967C59S19967C20__9S19967C18[5]),  5,7},
  {&(_tg__ZTV9S19967C138S19967C59S19967C20__9S19967C18[7]),  7,9},
  {&(_tg__ZTV9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C59S19967C20__A1__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C138S19967C59S19967C20__A4__9S19967C18[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C138S19967C59S19967C20__A4__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C138S19967C59S19967C20__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__9S19967C138S19967C59S19967C20__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C138S19967C59S19967C20__9S19967C18[7]),  7,10},
  {&(_tg__ZTV9S19967C10__A1__9S19967C138S19967C59S19967C20__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C138S19967C59S19967C20__9S19967C18[5]),  5,7},
  {&(_tg__ZTV8S19967C6__8S19967C59S19967C20__9S19967C18[9]),  9,12},
  {&(_tg__ZTV8S19967C2__8S19967C59S19967C20__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C59S19967C20__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C59S19967C20__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__8S19967C59S19967C20__9S19967C18[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C59S19967C20__9S19967C18[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C12__A2__8S19967C59S19967C20__9S19967C18[5]),  5,7},
  {&(_tg__ZTV9S19967C13__8S19967C59S19967C20__9S19967C18[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C59S19967C20__9S19967C18[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C13__A4__8S19967C59S19967C20__9S19967C18[5]),  5,7},
  {&(_tg__ZTV8S19967C6__9S19967C20__9S19967C18[9]),  9,12},
  {&(_tg__ZTV8S19967C2__9S19967C20__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__9S19967C20__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__9S19967C20__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__9S19967C20__9S19967C18[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C20__9S19967C18[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C128S19967C5__A2__9S19967C20__9S19967C18[5]),  5,7},
  {&(_tg__ZTV9S19967C138S19967C5__9S19967C20__9S19967C18[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C20__9S19967C18[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C138S19967C5__A4__9S19967C20__9S19967C18[5]),  5,7},
  {&(_ZTV9S19967C18[71]),  71,123},
  {&(_ZTV9S19967C18[75]),  75,123},
  {&(_ZTV9S19967C18[81]),  81,123},
  {&(_ZTV9S19967C18[23]),  23,123},
  {&(_ZTV9S19967C18[92]),  92,123},
  {&(_ZTV9S19967C18[119]),  119,123},
  {&(_ZTV9S19967C18[102]),  102,123},
  {&(_ZTV9S19967C18[111]),  111,123},
  {&(_ZTV9S19967C18[33]),  33,123},
  {&(_ZTV9S19967C18[48]),  48,123},
  {&(_ZTV9S19967C18[57]),  57,123},
  {&(_ZTV9S19967C18[65]),  65,123},
  {&(_tg__ZTV8S19967C8__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C19__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C19__A1__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__9S19967C18[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C6__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C78S19967C6__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C78S19967C6__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C78S19967C6__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C78S19967C6__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__9S19967C18[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C118S19967C6__A1__9S19967C18[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__9S19967C18[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C118S19967C6__9S19967C18[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C118S19967C6__9S19967C18[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C118S19967C6__9S19967C18[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C118S19967C6__9S19967C18[6]),  6,8},
  {&(_tg__ZTV8S19967C2__8S19967C6__9S19967C18[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C6__9S19967C18[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C6__9S19967C18[6]),  6,8},
  {&(_tg__ZTV9S19967C11__8S19967C6__9S19967C18[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C11__A1__8S19967C6__9S19967C18[7]),  7,10},
};
extern VTBL_ENTRY _ZTI9S19967C18[];
extern  VTBL_ENTRY _ZTV9S19967C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C18[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19967C6D0Ev,_ZThn1588_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19967C6D1Ev,_ZThn1588_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19967C20D0Ev,_ZThn5380_N9S19967C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19967C20D1Ev,_ZThn5380_N9S19967C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19967C20D0Ev,_ZThn6980_N9S19967C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19967C20D1Ev,_ZThn6980_N9S19967C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N9S19967C20D0Ev,_ZThn5392_N9S19967C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N9S19967C20D1Ev,_ZThn5392_N9S19967C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19967C5D0Ev,_ZThn5380_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19967C5D1Ev,_ZThn5380_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19967C5D0Ev,_ZThn6980_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19967C5D1Ev,_ZThn6980_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N8S19967C5D0Ev,_ZThn5392_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9040_N8S19967C5D1Ev,_ZThn5392_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19967C13D0Ev,_ZThn4632_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19967C13D1Ev,_ZThn4632_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19967C13D0Ev,_ZThn6232_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19967C13D1Ev,_ZThn6232_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19967C11D0Ev,_ZThn4632_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7760_N9S19967C11D1Ev,_ZThn4632_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2432_N9S19967C11D0Ev,_ZThn1444_N9S19967C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19967C11D0Ev,_ZThn6232_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2432_N9S19967C11D1Ev,_ZThn1444_N9S19967C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10464_N9S19967C11D1Ev,_ZThn6232_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19967C12D0Ev,_ZThn5380_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N9S19967C12D1Ev,_ZThn5380_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19967C12D0Ev,_ZThn6980_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N9S19967C12D1Ev,_ZThn6980_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7744_N8S19967C7D0Ev,_ZThn4620_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19967C7D0Ev,_ZThn5380_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7744_N8S19967C7D1Ev,_ZThn4620_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9024_N8S19967C7D1Ev,_ZThn5380_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19967C7D0Ev,_ZThn1432_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19967C7D0Ev,_ZThn1588_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10448_N8S19967C7D0Ev,_ZThn6220_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19967C7D0Ev,_ZThn6980_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2416_N8S19967C7D1Ev,_ZThn1432_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2688_N8S19967C7D1Ev,_ZThn1588_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10448_N8S19967C7D1Ev,_ZThn6220_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11728_N8S19967C7D1Ev,_ZThn6980_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C18D0Ev,_ZTv0_n12_N9S19967C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S19967C18D0Ev,_ZThn7428_N9S19967C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C18D1Ev,_ZTv0_n12_N9S19967C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S19967C18D1Ev,_ZThn7428_N9S19967C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19967C18D0Ev,_ZTv0_n36_N9S19967C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9776_N9S19967C18D0Ev,_ZThn5840_N9S19967C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19967C18D1Ev,_ZTv0_n36_N9S19967C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9776_N9S19967C18D1Ev,_ZThn5840_N9S19967C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C18D0Ev,_ZTv0_n24_N9S19967C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9760_N9S19967C18D0Ev,_ZThn5828_N9S19967C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C18D1Ev,_ZTv0_n24_N9S19967C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9760_N9S19967C18D1Ev,_ZThn5828_N9S19967C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C18 = {  "S19967C18", // class name
  bases_S19967C18, 30,
  &(vtc_S19967C18[0]), // expected_vtbl_contents
  &(vtt_S19967C18[0]), // expected_vtt_contents
  ABISELECT(13200,7876), // object size
  NSPAIRA(_ZTI9S19967C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19967C18),123, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C18),91, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C21  : virtual S22028C16 , virtual S19967C10 , S19967C8 , S19967C12 , virtual S19967C11 {
  int s19967c21f0;
  unsigned int s19967c21f1:1;
  int s19967c21f2;
  long double s19967c21f3;
  char s19967c21f4;
  short s19967c21f5;
  virtual  ~S19967C21(); // _ZN9S19967C21D2Ev
  S19967C21(); // tgen
};
//SIG(-1 S19967C21) C1{ VBC2{ m} VBC3{ VBC4{ VBC2 VBC5{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi} BC4 BC6{ VBC5 VBC4 BC7{ VBC8{ vd v1 v2 Fp FC5 FC5 Fi[3] Fp[6] Fs FU9{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC4 VBC3 BC5 v3} BC3 BC8 vd Fi} VBC10{ VBC2 VBC4 BC3 BC7 Fi Fi Fi Fs Fi FC6 FL Fp Fi} vd Fi Fi:1 Fi FD Fc Fs}


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

static void Test_S19967C21()
{
  extern Class_Descriptor cd_S19967C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(291,690)];
    init_test(&cd_S19967C21, buf);
    S19967C21 *dp, &lv = *(dp=new (buf) S19967C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4640,2756), "sizeof(S19967C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C21)");
    check_base_class_offset(lv, (S22028C16*), 0, "S19967C21");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C21");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C21");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*), 0, "S19967C21");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(1232,728), "S19967C21");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(1232,728), "S19967C21");
    /*is_ambiguous_... S19967C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C12*), ABISELECT(1232,728), "S19967C21");
    /*is_ambiguous_... S19967C21::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(1144,688), "S19967C21");
    check_base_class_offset(lv, (S19967C8*)(S19967C12*), ABISELECT(1144,688), "S19967C21");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C12*), ABISELECT(1144,688), "S19967C21");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C12*), ABISELECT(1144,688), "S19967C21");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*), ABISELECT(1144,688), "S19967C21");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*), ABISELECT(1144,688), "S19967C21");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*), ABISELECT(1144,688), "S19967C21");
    /*is_ambiguous_... S19967C21::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*), ABISELECT(1128,676), "S19967C21");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C12*), ABISELECT(1128,676), "S19967C21");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*), ABISELECT(1128,676), "S19967C21");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S19967C8*), 0, "S19967C21");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C12*), ABISELECT(1472,868), "S19967C21");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*), ABISELECT(1472,868), "S19967C21");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C12*), ABISELECT(96,44), "S19967C21");
    check_base_class_offset(lv, (S19967C7*)(S19967C12*), ABISELECT(80,40), "S19967C21");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C12*), ABISELECT(336,184), "S19967C21");
    /*is_ambiguous_... S19967C12::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C12*), ABISELECT(352,196), "S19967C21");
    check_base_class_offset(lv, (S19967C12*), ABISELECT(80,40), "S19967C21");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*), ABISELECT(2208,1316), "S19967C21");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*), ABISELECT(2240,1332), "S19967C21");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*), ABISELECT(2224,1328), "S19967C21");
    check_base_class_offset(lv, (S19967C11*), ABISELECT(2208,1316), "S19967C21");
    check_field_offset(lv, s19967c21f0, ABISELECT(1092,648), "S19967C21.s19967c21f0");
    set_bf_and_test(lv, s19967c21f1, ABISELECT(1096,652), 0, 1, 1, "S19967C21");
    check_field_offset(lv, s19967c21f2, ABISELECT(1100,656), "S19967C21.s19967c21f2");
    check_field_offset(lv, s19967c21f3, ABISELECT(1104,660), "S19967C21.s19967c21f3");
    check_field_offset(lv, s19967c21f4, ABISELECT(1120,672), "S19967C21.s19967c21f4");
    check_field_offset(lv, s19967c21f5, ABISELECT(1122,674), "S19967C21.s19967c21f5");
    test_class_info(&lv, &cd_S19967C21);
    dp->~S19967C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C21(Test_S19967C21, "S19967C21", ABISELECT(4640,2756));

#else // __cplusplus

extern void _ZN9S19967C21C1Ev();
extern void _ZN9S19967C21D2Ev();
Name_Map name_map_S19967C21[] = {
  NSPAIR(_ZN9S19967C21C1Ev),
  NSPAIR(_ZN9S19967C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C12;
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
static Base_Class bases_S19967C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(1232,728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19967C8,    ABISELECT(1144,688), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C10,    ABISELECT(1128,676), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C2,    ABISELECT(1472,868), //bcp->offset
    45, //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
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(336,184), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19967C2,    ABISELECT(352,196), //bcp->offset
    27, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19967C12,    ABISELECT(80,40), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19967C10,    ABISELECT(2208,1316), //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
    14, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(2240,1332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(2224,1328), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(2208,1316), //bcp->offset
    54, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19967C21[];
extern void _ZN9S19967C21D1Ev();
extern void _ZN9S19967C21D0Ev();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn80_N9S19967C21D1Ev,_ZThn40_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn80_N9S19967C21D0Ev,_ZThn40_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn336_N9S19967C21D1Ev,_ZThn184_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn336_N9S19967C21D0Ev,_ZThn184_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn352_N9S19967C21D1Ev,_ZThn196_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn352_N9S19967C21D0Ev,_ZThn196_N9S19967C21D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N9S19967C21D1Ev,_ZTv0_n24_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn1128_N9S19967C21D1Ev,_ZThn676_N9S19967C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C21D0Ev,_ZTv0_n24_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn1128_N9S19967C21D0Ev,_ZThn676_N9S19967C21D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C21D1Ev,_ZTv0_n12_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn1472_N9S19967C21D1Ev,_ZThn868_N9S19967C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C21D0Ev,_ZTv0_n12_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn1472_N9S19967C21D0Ev,_ZThn868_N9S19967C21D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n64_N9S19967C21D1Ev,_ZTv0_n32_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn2208_N9S19967C21D1Ev,_ZThn1316_N9S19967C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19967C21D0Ev,_ZTv0_n32_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn2208_N9S19967C21D0Ev,_ZThn1316_N9S19967C21D0Ev)() __attribute__((weak));
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19967C21D1Ev,_ZTvn12_n32_N9S19967C21D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19967C21D0Ev,_ZTvn12_n32_N9S19967C21D0Ev)();
static  VTBL_ENTRY vtc_S19967C21[] = {
  ABISELECT(2208,1316),
  ABISELECT(1472,868),
  ABISELECT(1144,688),
  ABISELECT(1128,676),
  ABISELECT(1232,728),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&_ZN9S19967C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C21D0Ev,
  ABISELECT(1048,636),
  ABISELECT(1152,688),
  ABISELECT(-80,-40),
  ABISELECT(1064,648),
  ABISELECT(1392,828),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19967C21D1Ev,_ZThn40_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19967C21D0Ev,_ZThn40_N9S19967C21D0Ev),
  ABISELECT(896,544),
  ABISELECT(-336,-184),
  ABISELECT(808,504),
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19967C21D1Ev,_ZThn184_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19967C21D0Ev,_ZThn184_N9S19967C21D0Ev),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19967C21D1Ev,_ZThn196_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N9S19967C21D0Ev,_ZThn196_N9S19967C21D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-1128,-676),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(-1128,-676),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C21D1Ev,_ZTv0_n24_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C21D0Ev,_ZTv0_n24_N9S19967C21D0Ev),
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-1144,-688),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  0,
  0,
  ABISELECT(-1472,-868),
  ABISELECT(-1472,-868),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C21D1Ev,_ZTv0_n12_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C21D0Ev,_ZTv0_n12_N9S19967C21D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(16,12),
  ABISELECT(-2208,-1316),
  ABISELECT(-1080,-640),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2208,-1316),
  ABISELECT(-1064,-628),
  ABISELECT(-2208,-1316),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C21D1Ev,_ZTv0_n32_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C21D0Ev,_ZTv0_n32_N9S19967C21D0Ev),
  ABISELECT(-1096,-652),
  ABISELECT(-992,-600),
  ABISELECT(-2224,-1328),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-2224,-1328),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C21D1Ev,_ZTvn12_n32_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C21D0Ev,_ZTvn12_n32_N9S19967C21D0Ev),
};
extern VTBL_ENTRY _ZTV9S19967C21[];
static  VTBL_ENTRY _tg__ZTV8S19967C8__A__9S19967C21[] = {
  ABISELECT(1232,728),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C12__9S19967C21[] = {
  ABISELECT(1048,636),
  ABISELECT(1152,688),
  ABISELECT(-80,-40),
  ABISELECT(1064,648),
  ABISELECT(1392,828),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C12__9S19967C21[] = {
  ABISELECT(1048,636),
  ABISELECT(1152,688),
  ABISELECT(-80,-40),
  ABISELECT(1064,648),
  ABISELECT(1392,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn1392_N8S19967C7D1Ev,_ZThn828_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn1392_N8S19967C7D0Ev,_ZThn828_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C12__9S19967C21[] = {
  0,
  0,
  ABISELECT(-1392,-828),
  ABISELECT(-1392,-828),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C12__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-1064,-648),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn1048_N8S19967C7D1Ev,_ZThn636_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn1048_N8S19967C7D0Ev,_ZThn636_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C12__9S19967C21[] = {
  ABISELECT(-1048,-636),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(-1048,-636),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C12__A1__9S19967C21[] = {
  ABISELECT(896,544),
  ABISELECT(-336,-184),
  ABISELECT(808,504),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C12__A1__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-808,-504),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C12__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-1064,-648),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn1392_N9S19967C12D1Ev,_ZThn828_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn1392_N9S19967C12D0Ev,_ZThn828_N9S19967C12D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C12__9S19967C21[] = {
  0,
  0,
  ABISELECT(-1392,-828),
  ABISELECT(-1392,-828),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn1048_N9S19967C12D1Ev,_ZThn636_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn1048_N9S19967C12D0Ev,_ZThn636_N9S19967C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C12__9S19967C21[] = {
  ABISELECT(-1048,-636),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(-1048,-636),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C12__9S19967C21[] = {
  ABISELECT(896,544),
  ABISELECT(-336,-184),
  ABISELECT(808,504),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C21[] = {
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C11__9S19967C21[] = {
  ABISELECT(-1080,-640),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2208,-1316),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C11__A2__9S19967C21[] = {
  ABISELECT(-976,-588),
  ABISELECT(-2208,-1316),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C11__A2__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A1__9S19967C21[] = {
  ABISELECT(-1096,-652),
  ABISELECT(-992,-600),
  ABISELECT(-2224,-1328),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C11__A1__9S19967C21[] = {
  0,
  0,
  ABISELECT(752,460),
  ABISELECT(752,460),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C11__A1__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(1080,640),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C11__A1__9S19967C21[] = {
  ABISELECT(1096,652),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(1096,652),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C11__9S19967C21[] = {
  ABISELECT(88,40),
  ABISELECT(-1144,-688),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C11__9S19967C21[] = {
  ABISELECT(-1096,-652),
  ABISELECT(-992,-600),
  ABISELECT(-2224,-1328),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C11__9S19967C21[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C11__9S19967C21[] = {
  ABISELECT(1080,640),
  ABISELECT(104,52),
  ABISELECT(-1128,-676),
  ABISELECT(16,12),
  ABISELECT(1080,640),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
static  VTT_ENTRY vtt_S19967C21[] = {
  {&(_ZTV9S19967C21[8]),  8,75},
  {&(_tg__ZTV8S19967C8__A__9S19967C21[4]),  4,4},
  {&(_tg__ZTV9S19967C12__9S19967C21[7]),  7,10},
  {&(_tg__ZTV8S19967C79S19967C12__9S19967C21[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C12__9S19967C21[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C12__9S19967C21[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C12__9S19967C21[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C12__A1__9S19967C21[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C12__A1__9S19967C21[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C12__9S19967C21[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C12__9S19967C21[5]),  5,9},
  {&(_tg__ZTV9S19967C10__9S19967C12__9S19967C21[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C12__9S19967C21[5]),  5,7},
  {&(_ZTV9S19967C21[39]),  39,75},
  {&(_ZTV9S19967C21[45]),  45,75},
  {&(_ZTV9S19967C21[17]),  17,75},
  {&(_ZTV9S19967C21[50]),  50,75},
  {&(_ZTV9S19967C21[25]),  25,75},
  {&(_ZTV9S19967C21[63]),  63,75},
  {&(_ZTV9S19967C21[72]),  72,75},
  {&(_tg__ZTV9S19967C10__9S19967C21[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__9S19967C21[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C21[4]),  4,4},
  {&(_tg__ZTV9S19967C11__9S19967C21[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C11__A2__9S19967C21[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C11__A2__9S19967C21[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__A1__9S19967C21[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C11__A1__9S19967C21[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C11__A1__9S19967C21[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C11__A1__9S19967C21[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C11__9S19967C21[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C11__9S19967C21[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C11__9S19967C21[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C11__9S19967C21[6]),  6,8},
};
extern VTBL_ENTRY _ZTI9S19967C21[];
extern  VTBL_ENTRY _ZTV9S19967C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C21[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N9S19967C12D0Ev,_ZThn636_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N9S19967C12D1Ev,_ZThn636_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S19967C12D0Ev,_ZThn828_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S19967C12D1Ev,_ZThn828_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N8S19967C7D0Ev,_ZThn636_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1048_N8S19967C7D1Ev,_ZThn636_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19967C7D0Ev,_ZThn828_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19967C7D1Ev,_ZThn828_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C21D0Ev,_ZTv0_n32_N9S19967C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S19967C21D0Ev,_ZThn1316_N9S19967C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C21D1Ev,_ZTv0_n32_N9S19967C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2208_N9S19967C21D1Ev,_ZThn1316_N9S19967C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C21D0Ev,_ZTv0_n12_N9S19967C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N9S19967C21D0Ev,_ZThn868_N9S19967C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C21D1Ev,_ZTv0_n12_N9S19967C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1472_N9S19967C21D1Ev,_ZThn868_N9S19967C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C21D0Ev,_ZTv0_n24_N9S19967C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1128_N9S19967C21D0Ev,_ZThn676_N9S19967C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C21D1Ev,_ZTv0_n24_N9S19967C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1128_N9S19967C21D1Ev,_ZThn676_N9S19967C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C21 = {  "S19967C21", // class name
  bases_S19967C21, 15,
  &(vtc_S19967C21[0]), // expected_vtbl_contents
  &(vtt_S19967C21[0]), // expected_vtt_contents
  ABISELECT(4640,2756), // object size
  NSPAIRA(_ZTI9S19967C21),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19967C21),75, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19967C21),34, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19967C1  : virtual S19967C2 , virtual S19967C5 , virtual S19967C14 , virtual S19967C18 , S19967C21 {
  long s19967c1f0;
  int s19967c1f1;
  long s19967c1f2;
  ::S19967C11 s19967c1f3;
  virtual  ~S19967C1(); // _ZN8S19967C1D2Ev
  S19967C1(); // tgen
};
//SIG(1 S19967C1) C1{ VBC2{ vd v1 v2 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ VBC3 BC7{ VBC2 VBC8{ VBC9{ m} VBC3 Fp[9]} VBC10{ VBC8 vd Fi:21 Fi} BC3 v3} BC11{ VBC9 VBC8 BC10 BC7 Fi Fi Fi Fs Fi FC12{ VBC3 VBC8 BC7 BC10 BC2 vd Fi} FL Fp Fi} vd Fi} BC12 BC3 BC13{ BC3 VBC2 BC11 BC10 vd Fs Fs[4] Fs FC2} vd Fc Fs FC3[6]} VBC14{ BC10 BC15{ VBC2 BC16{ BC3 BC8 Fi Fp Fi Fs Fi:1 FC9 FC17{} Fi} BC9 BC8 FC8 Fp FD Fp FU4 Fp Fs:4 Fc:0 Fi Fs Fi} VBC11 BC16 vd v4 Fi Fs Fp Fi Fp Fi FD FL} VBC18{ BC2 VBC8 VBC19{ BC8 FD[8] Fi Fs Fi Fs Fp Fi Fi Fs Fi[5] Fp} VBC10 BC20{ BC5 vd v5 v6 Fi Fs Fi[8] FC12 Fi Fi:9} v7 v8 Fs[7] FD FC9 Fi Fp[8] Fi} BC21{ VBC9 VBC10 BC8 BC12 VBC11 vd Fi Fi:1 Fi FD Fc Fs} vd Fl Fi Fl FC11}


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

static void Test_S19967C1()
{
  extern Class_Descriptor cd_S19967C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1744,4144)];
    init_test(&cd_S19967C1, buf);
    S19967C1 *dp, &lv = *(dp=new (buf) S19967C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(27888,16572), "sizeof(S19967C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19967C1)");
    /*is_ambiguous_... S19967C1::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*), ABISELECT(4656,2768), "S19967C1");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C6*), ABISELECT(4656,2768), "S19967C1");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(4656,2768), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(4656,2768), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C13*)(S19967C5*), ABISELECT(4656,2768), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(4656,2768), "S19967C1");
    check_base_class_offset(lv, (S19967C2*)(S19967C15*)(S19967C14*), ABISELECT(4656,2768), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*), ABISELECT(4656,2768), "S19967C1");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(4656,2768), "S19967C1");
    check_base_class_offset(lv, (S19967C2*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(4656,2768), "S19967C1");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(4656,2768), "S19967C1");
    check_base_class_offset(lv, (S19967C2*)(S19967C7*)(S19967C12*)(S19967C21*), ABISELECT(4656,2768), "S19967C1");
    /*is_ambiguous_... S19967C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C6*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C12*)(S19967C5*), ABISELECT(14240,8448), "S19967C1");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C16*)(S19967C15*)(S19967C14*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C15*)(S19967C14*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C16*)(S19967C14*), ABISELECT(14240,8448), "S19967C1");
    check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C19*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C8*)(S19967C21*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C12*)(S19967C21*), ABISELECT(14240,8448), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*), 0, "S19967C1");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C6*), 0, "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C13*)(S19967C5*), 0, "S19967C1");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C16*)(S19967C15*)(S19967C14*), 0, "S19967C1");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C15*)(S19967C14*), 0, "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C11*), 0, "S19967C1");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C16*)(S19967C14*), 0, "S19967C1");
    check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C19*), 0, "S19967C1");
    check_base_class_offset(lv, (S22028C16*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), 0, "S19967C1");
    check_base_class_offset(lv, (S22028C16*)(S19967C21*), 0, "S19967C1");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C8*)(S19967C21*), 0, "S19967C1");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C6*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C6*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C12*)(S19967C5*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C12*)(S19967C5*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C13*)(S19967C5*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C14::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C14*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C11*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C18::S19967C8 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C12*)(S19967C21*), ABISELECT(14480,8588), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C7*)(S19967C12*)(S19967C21*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C10*)(S19967C12*)(S19967C21*), ABISELECT(14480,8588), "S19967C1");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C6*), ABISELECT(14560,8628), "S19967C1");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(14560,8628), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(14560,8628), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(14560,8628), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*), ABISELECT(14560,8628), "S19967C1");
    /*is_ambiguous_... S19967C18::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C18*), ABISELECT(14560,8628), "S19967C1");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14560,8628), "S19967C1");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(14560,8628), "S19967C1");
    /*is_ambiguous_... S19967C21::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C21*), ABISELECT(14560,8628), "S19967C1");
    check_base_class_offset(lv, (S19967C10*)(S19967C7*)(S19967C12*)(S19967C21*), ABISELECT(14560,8628), "S19967C1");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C6*), ABISELECT(11568,6864), "S19967C1");
    /*is_ambiguous_... S19967C6::S19967C7 */ AMB_check_base_class_offset(lv, (S19967C7*)(S19967C6*), ABISELECT(11552,6860), "S19967C1");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C6*), ABISELECT(11808,7004), "S19967C1");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(11840,7020), "S19967C1");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C6*), ABISELECT(11824,7016), "S19967C1");
    check_base_class_offset(lv, (S19967C11*)(S19967C6*), ABISELECT(11808,7004), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C6*)(S19967C5*), ABISELECT(11552,6860), "S19967C1");
    check_base_class_offset(lv, (S19967C6*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(11552,6860), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(5408,3220), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C7*)(S19967C12*)(S19967C5*), ABISELECT(5392,3216), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C12*)(S19967C5*), ABISELECT(5648,3360), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C12*)(S19967C5*), ABISELECT(5664,3372), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C12*)(S19967C5*), ABISELECT(5392,3216), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C5*), ABISELECT(6416,3824), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C13*)(S19967C5*), ABISELECT(9088,5404), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(6656,3964), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(6688,3980), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(6672,3976), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C11*)(S19967C13*)(S19967C5*), ABISELECT(6656,3964), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C13*)(S19967C5*), ABISELECT(9328,5544), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C13*)(S19967C5*), ABISELECT(6656,3964), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C5 */ AMB_check_base_class_offset(lv, (S19967C5*), ABISELECT(5392,3216), "S19967C1");
    /*is_ambiguous_... S19967C14::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C14*), ABISELECT(14576,8640), "S19967C1");
    /*is_ambiguous_... S19967C16::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C16*)(S19967C15*)(S19967C14*), ABISELECT(14672,8692), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C16*)(S19967C15*)(S19967C14*), ABISELECT(14592,8652), "S19967C1");
    check_base_class_offset(lv, (S19967C16*)(S19967C15*)(S19967C14*), ABISELECT(14592,8652), "S19967C1");
    /*is_ambiguous_... S19967C15::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S19967C15*)(S19967C14*), ABISELECT(14592,8652), "S19967C1");
    /*is_ambiguous_... S19967C15::S19967C8 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C15*)(S19967C14*), ABISELECT(14944,8856), "S19967C1");
    check_base_class_offset(lv, (S19967C15*)(S19967C14*), ABISELECT(14592,8652), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*), ABISELECT(16016,9484), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*), ABISELECT(16048,9500), "S19967C1");
    /*is_ambiguous_... S19967C1::S19967C11 */ AMB_check_base_class_offset(lv, (S19967C7*)(S19967C11*), ABISELECT(16032,9496), "S19967C1");
    check_base_class_offset(lv, (S19967C11*)(S19967C14*), ABISELECT(16016,9484), "S19967C1");
    check_base_class_offset(lv, (S19967C11*)(S19967C21*), ABISELECT(16016,9484), "S19967C1");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C16*)(S19967C14*), ABISELECT(15664,9276), "S19967C1");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C16*)(S19967C14*), ABISELECT(15584,9236), "S19967C1");
    /*is_ambiguous_... S19967C14::S19967C16 */ AMB_check_base_class_offset(lv, (S19967C16*)(S19967C14*), ABISELECT(15584,9236), "S19967C1");
    check_base_class_offset(lv, (S19967C14*), ABISELECT(14576,8640), "S19967C1");
    /*is_ambiguous_... S19967C18::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C18*), ABISELECT(18448,10924), "S19967C1");
    check_base_class_offset(lv, (S19967C8*)(S19967C19*), ABISELECT(27616,16380), "S19967C1");
    check_base_class_offset(lv, (S19967C19*)(S19967C18*), ABISELECT(27616,16380), "S19967C1");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(19200,11376), "S19967C1");
    check_base_class_offset(lv, (S19967C7*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(19184,11372), "S19967C1");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(19440,11516), "S19967C1");
    /*is_ambiguous_... S19967C12::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(19456,11528), "S19967C1");
    check_base_class_offset(lv, (S19967C12*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(19184,11372), "S19967C1");
    /*is_ambiguous_... S19967C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(20208,11980), "S19967C1");
    /*is_ambiguous_... S19967C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(22880,13560), "S19967C1");
    /*is_ambiguous_... S19967C11::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(20448,12120), "S19967C1");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(20480,12136), "S19967C1");
    check_base_class_offset(lv, (S19967C7*)(S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(20464,12132), "S19967C1");
    check_base_class_offset(lv, (S19967C11*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(20448,12120), "S19967C1");
    /*is_ambiguous_... S19967C13::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(23120,13700), "S19967C1");
    check_base_class_offset(lv, (S19967C13*)(S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(20448,12120), "S19967C1");
    check_base_class_offset(lv, (S19967C5*)(S19967C20*)(S19967C18*), ABISELECT(19184,11372), "S19967C1");
    check_base_class_offset(lv, (S19967C20*)(S19967C18*), ABISELECT(19184,11372), "S19967C1");
    check_base_class_offset(lv, (S19967C18*), ABISELECT(18448,10924), "S19967C1");
    /*is_ambiguous_... S19967C21::S19967C8 */ AMB_check_base_class_offset(lv, (S19967C8*)(S19967C21*), 0, "S19967C1");
    /*is_ambiguous_... S19967C7::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S19967C7*)(S19967C12*)(S19967C21*), ABISELECT(96,44), "S19967C1");
    check_base_class_offset(lv, (S19967C7*)(S19967C12*)(S19967C21*), ABISELECT(80,40), "S19967C1");
    /*is_ambiguous_... S19967C12::S19967C10 */ AMB_check_base_class_offset(lv, (S19967C10*)(S19967C12*)(S19967C21*), ABISELECT(336,184), "S19967C1");
    /*is_ambiguous_... S19967C12::S19967C2 */ AMB_check_base_class_offset(lv, (S19967C2*)(S19967C12*)(S19967C21*), ABISELECT(352,196), "S19967C1");
    check_base_class_offset(lv, (S19967C12*)(S19967C21*), ABISELECT(80,40), "S19967C1");
    check_base_class_offset(lv, (S19967C21*), 0, "S19967C1");
    check_field_offset(lv, s19967c1f0, ABISELECT(1128,676), "S19967C1.s19967c1f0");
    check_field_offset(lv, s19967c1f1, ABISELECT(1136,680), "S19967C1.s19967c1f1");
    check_field_offset(lv, s19967c1f2, ABISELECT(1144,684), "S19967C1.s19967c1f2");
    check_field_offset(lv, s19967c1f3, ABISELECT(1152,688), "S19967C1.s19967c1f3");
    test_class_info(&lv, &cd_S19967C1);
    dp->~S19967C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19967C1(Test_S19967C1, "S19967C1", ABISELECT(27888,16572));

#else // __cplusplus

extern void _ZN8S19967C1C1Ev();
extern void _ZN8S19967C1D2Ev();
Name_Map name_map_S19967C1[] = {
  NSPAIR(_ZN8S19967C1C1Ev),
  NSPAIR(_ZN8S19967C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C6;
extern VTBL_ENTRY _ZTI8S19967C6[];
extern  VTBL_ENTRY _ZTV8S19967C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C6[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C12;
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C13;
extern VTBL_ENTRY _ZTI9S19967C13[];
extern  VTBL_ENTRY _ZTV9S19967C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C13[];
extern Class_Descriptor cd_S19967C5;
extern VTBL_ENTRY _ZTI8S19967C5[];
extern  VTBL_ENTRY _ZTV8S19967C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C5[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C16;
extern VTBL_ENTRY _ZTI9S19967C16[];
extern  VTBL_ENTRY _ZTV9S19967C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C16[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C15;
extern VTBL_ENTRY _ZTI9S19967C15[];
extern  VTBL_ENTRY _ZTV9S19967C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C15[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C16;
extern VTBL_ENTRY _ZTI9S19967C16[];
extern  VTBL_ENTRY _ZTV9S19967C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C16[];
extern Class_Descriptor cd_S19967C14;
extern VTBL_ENTRY _ZTI9S19967C14[];
extern  VTBL_ENTRY _ZTV9S19967C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C14[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19967C19;
extern VTBL_ENTRY _ZTI9S19967C19[];
extern  VTBL_ENTRY _ZTV9S19967C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C19[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C12;
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C11;
extern VTBL_ENTRY _ZTI9S19967C11[];
extern  VTBL_ENTRY _ZTV9S19967C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C11[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C13;
extern VTBL_ENTRY _ZTI9S19967C13[];
extern  VTBL_ENTRY _ZTV9S19967C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C13[];
extern Class_Descriptor cd_S19967C5;
extern VTBL_ENTRY _ZTI8S19967C5[];
extern  VTBL_ENTRY _ZTV8S19967C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C5[];
extern Class_Descriptor cd_S19967C20;
extern VTBL_ENTRY _ZTI9S19967C20[];
extern  VTBL_ENTRY _ZTV9S19967C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C20[];
extern Class_Descriptor cd_S19967C18;
extern VTBL_ENTRY _ZTI9S19967C18[];
extern  VTBL_ENTRY _ZTV9S19967C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C18[];
extern Class_Descriptor cd_S19967C8;
extern VTBL_ENTRY _ZTI8S19967C8[];
extern  VTBL_ENTRY _ZTV8S19967C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19967C7;
extern VTBL_ENTRY _ZTI8S19967C7[];
extern  VTBL_ENTRY _ZTV8S19967C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C7[];
extern Class_Descriptor cd_S19967C10;
extern VTBL_ENTRY _ZTI9S19967C10[];
extern  VTBL_ENTRY _ZTV9S19967C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C10[];
extern Class_Descriptor cd_S19967C2;
extern VTBL_ENTRY _ZTI8S19967C2[];
extern  VTBL_ENTRY _ZTV8S19967C2[];
extern Class_Descriptor cd_S19967C12;
extern VTBL_ENTRY _ZTI9S19967C12[];
extern  VTBL_ENTRY _ZTV9S19967C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C12[];
extern Class_Descriptor cd_S19967C21;
extern VTBL_ENTRY _ZTI9S19967C21[];
extern  VTBL_ENTRY _ZTV9S19967C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19967C21[];
static Base_Class bases_S19967C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19967C2,    ABISELECT(4656,2768), //bcp->offset
    38, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(14240,8448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19967C8,    ABISELECT(14480,8588), //bcp->offset
    132, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19967C10,    ABISELECT(14560,8628), //bcp->offset
    136, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(11568,6864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(11552,6860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(11808,7004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(11840,7020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(11824,7016), //bcp->offset
    122, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(11808,7004), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19967C6,    ABISELECT(11552,6860), //bcp->offset
    101, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(5408,3220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(5392,3216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(5648,3360), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C2,    ABISELECT(5664,3372), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19967C12,    ABISELECT(5392,3216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6416,3824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(9088,5404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(6656,3964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6688,3980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(6672,3976), //bcp->offset
    84, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(6656,3964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(9328,5544), //bcp->offset
    94, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19967C13,    ABISELECT(6656,3964), //bcp->offset
    75, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19967C5,    ABISELECT(5392,3216), //bcp->offset
    47, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C10,    ABISELECT(14576,8640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(14672,8692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19967C8,    ABISELECT(14592,8652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    120, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19967C16,    ABISELECT(14592,8652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(14592,8652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19967C8,    ABISELECT(14944,8856), //bcp->offset
    164, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    121, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19967C15,    ABISELECT(14592,8652), //bcp->offset
    157, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    118, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(16016,9484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    135, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(16048,9500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(16032,9496), //bcp->offset
    183, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    137, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(16016,9484), //bcp->offset
    172, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    134, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(15664,9276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19967C8,    ABISELECT(15584,9236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19967C16,    ABISELECT(15584,9236), //bcp->offset
    168, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S19967C14,    ABISELECT(14576,8640), //bcp->offset
    144, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C2,    ABISELECT(18448,10924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S19967C8,    ABISELECT(27616,16380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    211, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19967C19,    ABISELECT(27616,16380), //bcp->offset
    268, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    210, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    59, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(19200,11376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(19184,11372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(19440,11516), //bcp->offset
    229, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19967C2,    ABISELECT(19456,11528), //bcp->offset
    236, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19967C12,    ABISELECT(19184,11372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(20208,11980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(22880,13560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(20448,12120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    161, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(20480,12136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(20464,12132), //bcp->offset
    251, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S19967C11,    ABISELECT(20448,12120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    160, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(23120,13700), //bcp->offset
    261, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    171, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S19967C13,    ABISELECT(20448,12120), //bcp->offset
    242, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    159, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S19967C5,    ABISELECT(19184,11372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S19967C20,    ABISELECT(19184,11372), //bcp->offset
    216, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S19967C18,    ABISELECT(18448,10924), //bcp->offset
    193, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19967C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19968C3,    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
    62, //immediately_derived
  0, 0},
  {&cd_S19967C7,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19967C10,    ABISELECT(336,184), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19967C2,    ABISELECT(352,196), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S19967C12,    ABISELECT(80,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S19967C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19967C1[];
extern void _ZN8S19967C1D1Ev();
extern void _ZN8S19967C1D0Ev();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn80_N8S19967C1D1Ev,_ZThn40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S19967C1D0Ev,_ZThn40_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn336_N8S19967C1D1Ev,_ZThn184_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn336_N8S19967C1D0Ev,_ZThn184_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S19967C1D1Ev,_ZThn196_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S19967C1D0Ev,_ZThn196_N8S19967C1D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S19967C1D1Ev,_ZTv0_n12_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn4656_N8S19967C1D1Ev,_ZThn2768_N8S19967C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C1D0Ev,_ZTv0_n12_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn4656_N8S19967C1D0Ev,_ZThn2768_N8S19967C1D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n80_N8S19967C1D1Ev,_ZTv0_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn5392_N8S19967C1D1Ev,_ZThn3216_N8S19967C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19967C1D0Ev,_ZTv0_n40_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn5392_N8S19967C1D0Ev,_ZThn3216_N8S19967C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n80_N8S19967C1D1Ev,_ZTvn144_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn256_n80_N8S19967C1D0Ev,_ZTvn144_n40_N8S19967C1D0Ev)();
extern void ABISELECT(_ZTvn272_n80_N8S19967C1D1Ev,_ZTvn156_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn272_n80_N8S19967C1D0Ev,_ZTvn156_n40_N8S19967C1D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTvn1264_n80_N8S19967C1D1Ev,_ZTvn748_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn1264_n80_N8S19967C1D0Ev,_ZTvn748_n40_N8S19967C1D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn1280_n80_N8S19967C1D1Ev,_ZTvn760_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn1280_n80_N8S19967C1D0Ev,_ZTvn760_n40_N8S19967C1D0Ev)();
extern void ABISELECT(_ZTvn3936_n80_N8S19967C1D1Ev,_ZTvn2328_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn3936_n80_N8S19967C1D0Ev,_ZTvn2328_n40_N8S19967C1D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19967C1D1Ev,_ZTv0_n36_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn11552_N8S19967C1D1Ev,_ZThn6860_N8S19967C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19967C1D0Ev,_ZTv0_n36_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn11552_N8S19967C1D0Ev,_ZThn6860_N8S19967C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N8S19967C1D1Ev,_ZTvn144_n36_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19967C1D0Ev,_ZTvn144_n36_N8S19967C1D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19967C1D1Ev,_ZTvn156_n36_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19967C1D0Ev,_ZTvn156_n36_N8S19967C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C1D1Ev,_ZTv0_n24_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn14560_N8S19967C1D1Ev,_ZThn8628_N8S19967C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C1D0Ev,_ZTv0_n24_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn14560_N8S19967C1D0Ev,_ZThn8628_N8S19967C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19967C1D1Ev,_ZTv0_n36_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn14576_N8S19967C1D1Ev,_ZThn8640_N8S19967C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19967C1D0Ev,_ZTv0_n36_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn14576_N8S19967C1D0Ev,_ZThn8640_N8S19967C1D0Ev)() __attribute__((weak));
extern void _ZN9S19967C142v4Ev();
extern void ABISELECT(_ZTvn16_n72_N8S19967C1D1Ev,_ZTvn12_n36_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N8S19967C1D0Ev,_ZTvn12_n36_N8S19967C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19967C1D1Ev,_ZTv0_n32_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn16016_N8S19967C1D1Ev,_ZThn9484_N8S19967C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19967C1D0Ev,_ZTv0_n32_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn16016_N8S19967C1D0Ev,_ZThn9484_N8S19967C1D0Ev)() __attribute__((weak));
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N8S19967C1D1Ev,_ZTvn12_n32_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N8S19967C1D0Ev,_ZTvn12_n32_N8S19967C1D0Ev)();
extern void ABISELECT(_ZTv0_n80_N8S19967C1D1Ev,_ZTv0_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZThn18448_N8S19967C1D1Ev,_ZThn10924_N8S19967C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19967C1D0Ev,_ZTv0_n40_N8S19967C1D0Ev)();
extern void ABISELECT(_ZThn18448_N8S19967C1D0Ev,_ZThn10924_N8S19967C1D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void _ZN9S19967C182v7Ev();
extern void _ZN9S19967C182v8Ev();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn736_n80_N8S19967C1D1Ev,_ZTvn448_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn736_n80_N8S19967C1D0Ev,_ZTvn448_n40_N8S19967C1D0Ev)();
extern void _ZN9S19967C202v5Ev();
extern void _ZN9S19967C202v6Ev();
extern void ABISELECT(_ZTvn992_n80_N8S19967C1D1Ev,_ZTvn592_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn992_n80_N8S19967C1D0Ev,_ZTvn592_n40_N8S19967C1D0Ev)();
extern void ABISELECT(_ZTvn1008_n80_N8S19967C1D1Ev,_ZTvn604_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn1008_n80_N8S19967C1D0Ev,_ZTvn604_n40_N8S19967C1D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void ABISELECT(_ZTvn2000_n80_N8S19967C1D1Ev,_ZTvn1196_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn2000_n80_N8S19967C1D0Ev,_ZTvn1196_n40_N8S19967C1D0Ev)();
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn2016_n80_N8S19967C1D1Ev,_ZTvn1208_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn2016_n80_N8S19967C1D0Ev,_ZTvn1208_n40_N8S19967C1D0Ev)();
extern void ABISELECT(_ZTvn4672_n80_N8S19967C1D1Ev,_ZTvn2776_n40_N8S19967C1D1Ev)();
extern void ABISELECT(_ZTvn4672_n80_N8S19967C1D0Ev,_ZTvn2776_n40_N8S19967C1D0Ev)();
static  VTBL_ENTRY vtc_S19967C1[] = {
  ABISELECT(27616,16380),
  ABISELECT(18448,10924),
  ABISELECT(14576,8640),
  ABISELECT(11552,6860),
  ABISELECT(5392,3216),
  ABISELECT(16016,9484),
  ABISELECT(4656,2768),
  ABISELECT(14480,8588),
  ABISELECT(14560,8628),
  ABISELECT(14240,8448),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C1D0Ev,
  ABISELECT(14480,8588),
  ABISELECT(14160,8408),
  ABISELECT(-80,-40),
  ABISELECT(14400,8548),
  ABISELECT(4576,2728),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19967C1D1Ev,_ZThn40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N8S19967C1D0Ev,_ZThn40_N8S19967C1D0Ev),
  ABISELECT(13904,8264),
  ABISELECT(-336,-184),
  ABISELECT(14144,8404),
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N8S19967C1D1Ev,_ZThn184_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N8S19967C1D0Ev,_ZThn184_N8S19967C1D0Ev),
  ABISELECT(-352,-196),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19967C1D1Ev,_ZThn196_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19967C1D0Ev,_ZThn196_N8S19967C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  0,
  0,
  ABISELECT(-4656,-2768),
  ABISELECT(-4656,-2768),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C1D1Ev,_ZTv0_n12_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C1D0Ev,_ZTv0_n12_N8S19967C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(272,156),
  ABISELECT(272,156),
  ABISELECT(-5392,-3216),
  0,
  ABISELECT(6160,3644),
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3216),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  ABISELECT(-5392,-3216),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19967C1D1Ev,_ZTv0_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19967C1D0Ev,_ZTv0_n40_N8S19967C1D0Ev),
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3360),
  ABISELECT(8832,5228),
  ABISELECT(-5648,-3360),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n80_N8S19967C1D1Ev,_ZTvn144_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n80_N8S19967C1D0Ev,_ZTvn144_n40_N8S19967C1D0Ev),
  ABISELECT(-5664,-3372),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N8S19967C1D1Ev,_ZTvn156_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n80_N8S19967C1D0Ev,_ZTvn156_n40_N8S19967C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3964),
  ABISELECT(7824,4624),
  ABISELECT(-6656,-3964),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1264_n80_N8S19967C1D1Ev,_ZTvn748_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1264_n80_N8S19967C1D0Ev,_ZTvn748_n40_N8S19967C1D0Ev),
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3976),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-6672,-3976),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n80_N8S19967C1D1Ev,_ZTvn760_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1280_n80_N8S19967C1D0Ev,_ZTvn760_n40_N8S19967C1D0Ev),
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5544),
  ABISELECT(5152,3044),
  ABISELECT(-9328,-5544),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3936_n80_N8S19967C1D1Ev,_ZTvn2328_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3936_n80_N8S19967C1D0Ev,_ZTvn2328_n40_N8S19967C1D0Ev),
  ABISELECT(-11552,-6860),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6860),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(-11552,-6860),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C1D1Ev,_ZTv0_n36_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C1D0Ev,_ZTv0_n36_N8S19967C1D0Ev),
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  ABISELECT(-11808,-7004),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C1D1Ev,_ZTvn144_n36_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C1D0Ev,_ZTvn144_n36_N8S19967C1D0Ev),
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-11824,-7016),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C1D1Ev,_ZTvn156_n36_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C1D0Ev,_ZTvn156_n36_N8S19967C1D0Ev),
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-14480,-8588),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  ABISELECT(-14560,-8628),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-14560,-8628),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C1D1Ev,_ZTv0_n24_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C1D0Ev,_ZTv0_n24_N8S19967C1D0Ev),
  0,
  ABISELECT(-14576,-8640),
  ABISELECT(-16,-12),
  ABISELECT(1440,844),
  ABISELECT(-9920,-5872),
  ABISELECT(-336,-192),
  ABISELECT(-14576,-8640),
  ABISELECT(-96,-52),
  ABISELECT(-14576,-8640),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C1D1Ev,_ZTv0_n36_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C1D0Ev,_ZTv0_n36_N8S19967C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19967C142v4Ev,
  ABISELECT(-9936,-5884),
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8652),
  ABISELECT(-14592,-8652),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S19967C1D1Ev,_ZTvn12_n36_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S19967C1D0Ev,_ZTvn12_n36_N8S19967C1D0Ev),
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8856),
  ABISELECT(-14944,-8856),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9236),
  ABISELECT(-15584,-9236),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  ABISELECT(16,12),
  ABISELECT(-16016,-9484),
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9484),
  ABISELECT(-1536,-896),
  ABISELECT(-16016,-9484),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19967C1D1Ev,_ZTv0_n32_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19967C1D0Ev,_ZTv0_n32_N8S19967C1D0Ev),
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9496),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-16032,-9496),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S19967C1D1Ev,_ZTvn12_n32_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S19967C1D0Ev,_ZTvn12_n32_N8S19967C1D0Ev),
  ABISELECT(736,448),
  ABISELECT(736,448),
  ABISELECT(736,448),
  0,
  0,
  0,
  0,
  ABISELECT(-18448,-10924),
  ABISELECT(-13792,-8156),
  ABISELECT(-6896,-4064),
  ABISELECT(-3888,-2296),
  ABISELECT(9168,5456),
  ABISELECT(-4208,-2476),
  ABISELECT(-18448,-10924),
  ABISELECT(-3968,-2336),
  ABISELECT(-18448,-10924),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19967C1D1Ev,_ZTv0_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19967C1D0Ev,_ZTv0_n40_N8S19967C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  (VTBL_ENTRY)&_ZN9S19967C182v7Ev,
  (VTBL_ENTRY)&_ZN9S19967C182v8Ev,
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11372),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  ABISELECT(-19184,-11372),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn736_n80_N8S19967C1D1Ev,_ZTvn448_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn736_n80_N8S19967C1D0Ev,_ZTvn448_n40_N8S19967C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19967C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v6Ev,
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11516),
  ABISELECT(-4960,-2928),
  ABISELECT(-19440,-11516),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn992_n80_N8S19967C1D1Ev,_ZTvn592_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn992_n80_N8S19967C1D0Ev,_ZTvn592_n40_N8S19967C1D0Ev),
  ABISELECT(-19456,-11528),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1008_n80_N8S19967C1D1Ev,_ZTvn604_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1008_n80_N8S19967C1D0Ev,_ZTvn604_n40_N8S19967C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12120),
  ABISELECT(-5968,-3532),
  ABISELECT(-20448,-12120),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2000_n80_N8S19967C1D1Ev,_ZTvn1196_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2000_n80_N8S19967C1D0Ev,_ZTvn1196_n40_N8S19967C1D0Ev),
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12132),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-20464,-12132),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2016_n80_N8S19967C1D1Ev,_ZTvn1208_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2016_n80_N8S19967C1D0Ev,_ZTvn1208_n40_N8S19967C1D0Ev),
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13700),
  ABISELECT(-8640,-5112),
  ABISELECT(-23120,-13700),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4672_n80_N8S19967C1D1Ev,_ZTvn2776_n40_N8S19967C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn4672_n80_N8S19967C1D0Ev,_ZTvn2776_n40_N8S19967C1D0Ev),
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16380),
  ABISELECT(-27616,-16380),
  (VTBL_ENTRY)&(_ZTI8S19967C1[0]),
};
extern VTBL_ENTRY _ZTV8S19967C1[];
extern void _ZN9S19967C21D1Ev();
extern void _ZN9S19967C21D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C21__8S19967C1[] = {
  ABISELECT(16016,9484),
  ABISELECT(4656,2768),
  ABISELECT(14480,8588),
  ABISELECT(14560,8628),
  ABISELECT(14240,8448),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&_ZN9S19967C21D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C21__A5__8S19967C1[] = {
  ABISELECT(14240,8448),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C129S19967C21__A2__8S19967C1[] = {
  ABISELECT(14480,8588),
  ABISELECT(14160,8408),
  ABISELECT(-80,-40),
  ABISELECT(14400,8548),
  ABISELECT(4576,2728),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C129S19967C21__A7__8S19967C1[] = {
  ABISELECT(14480,8588),
  ABISELECT(14160,8408),
  ABISELECT(-80,-40),
  ABISELECT(14400,8548),
  ABISELECT(4576,2728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn4576_N8S19967C7D1Ev,_ZThn2728_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn4576_N8S19967C7D0Ev,_ZThn2728_N8S19967C7D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C129S19967C21__A7__8S19967C1[] = {
  0,
  0,
  ABISELECT(-4576,-2728),
  ABISELECT(-4576,-2728),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C129S19967C21__A7__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-14400,-8548),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn14480_N8S19967C7D1Ev,_ZThn8588_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn14480_N8S19967C7D0Ev,_ZThn8588_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C129S19967C21__A7__8S19967C1[] = {
  ABISELECT(-14480,-8588),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-14480,-8588),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C129S19967C21__A10__8S19967C1[] = {
  ABISELECT(13904,8264),
  ABISELECT(-336,-184),
  ABISELECT(14144,8404),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C129S19967C21__A10__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-14144,-8404),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C129S19967C21__A2__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-14400,-8548),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn4576_N9S19967C12D1Ev,_ZThn2728_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn4576_N9S19967C12D0Ev,_ZThn2728_N9S19967C12D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C129S19967C21__A2__8S19967C1[] = {
  0,
  0,
  ABISELECT(-4576,-2728),
  ABISELECT(-4576,-2728),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn14480_N9S19967C12D1Ev,_ZThn8588_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn14480_N9S19967C12D0Ev,_ZThn8588_N9S19967C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C129S19967C21__A2__8S19967C1[] = {
  ABISELECT(-14480,-8588),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-14480,-8588),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C129S19967C21__A2__8S19967C1[] = {
  ABISELECT(13904,8264),
  ABISELECT(-336,-184),
  ABISELECT(14144,8404),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C21D1Ev,_ZTv0_n24_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn14560_N9S19967C21D1Ev,_ZThn8628_N9S19967C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C21D0Ev,_ZTv0_n24_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn14560_N9S19967C21D0Ev,_ZThn8628_N9S19967C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C21__8S19967C1[] = {
  ABISELECT(-14560,-8628),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-14560,-8628),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C21D1Ev,_ZTv0_n24_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C21D0Ev,_ZTv0_n24_N9S19967C21D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C21__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-14480,-8588),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn80_N9S19967C21D1Ev,_ZThn40_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn80_N9S19967C21D0Ev,_ZThn40_N9S19967C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C12__9S19967C21__8S19967C1[] = {
  ABISELECT(14480,8588),
  ABISELECT(14160,8408),
  ABISELECT(-80,-40),
  ABISELECT(14400,8548),
  ABISELECT(4576,2728),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19967C21D1Ev,_ZThn40_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N9S19967C21D0Ev,_ZThn40_N9S19967C21D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C21D1Ev,_ZTv0_n12_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn4656_N9S19967C21D1Ev,_ZThn2768_N9S19967C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19967C21D0Ev,_ZTv0_n12_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn4656_N9S19967C21D0Ev,_ZThn2768_N9S19967C21D0Ev)() __attribute__((weak));
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C21__8S19967C1[] = {
  0,
  0,
  ABISELECT(-4656,-2768),
  ABISELECT(-4656,-2768),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C21D1Ev,_ZTv0_n12_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C21D0Ev,_ZTv0_n12_N9S19967C21D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZThn336_N9S19967C21D1Ev,_ZThn184_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn336_N9S19967C21D0Ev,_ZThn184_N9S19967C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C12__A1__9S19967C21__8S19967C1[] = {
  ABISELECT(13904,8264),
  ABISELECT(-336,-184),
  ABISELECT(14144,8404),
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19967C21D1Ev,_ZThn184_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N9S19967C21D0Ev,_ZThn184_N9S19967C21D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19967C21D1Ev,_ZTv0_n32_N9S19967C21D1Ev)();
extern void ABISELECT(_ZThn16016_N9S19967C21D1Ev,_ZThn9484_N9S19967C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19967C21D0Ev,_ZTv0_n32_N9S19967C21D0Ev)();
extern void ABISELECT(_ZThn16016_N9S19967C21D0Ev,_ZThn9484_N9S19967C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C11__9S19967C21__8S19967C1[] = {
  ABISELECT(16,12),
  ABISELECT(-16016,-9484),
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9484),
  ABISELECT(-1536,-896),
  ABISELECT(-16016,-9484),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C21D1Ev,_ZTv0_n32_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C21D0Ev,_ZTv0_n32_N9S19967C21D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19967C21D1Ev,_ZTvn12_n32_N9S19967C21D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19967C21D0Ev,_ZTvn12_n32_N9S19967C21D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A1__9S19967C21__8S19967C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9496),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-16032,-9496),
  (VTBL_ENTRY)&(_ZTI9S19967C21[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C21D1Ev,_ZTvn12_n32_N9S19967C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C21D0Ev,_ZTvn12_n32_N9S19967C21D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C5D1Ev();
extern void _ZN8S19967C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C5__8S19967C1[] = {
  ABISELECT(6160,3644),
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3216),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C128S19967C5__8S19967C1[] = {
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3216),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C128S19967C5__A2__8S19967C1[] = {
  ABISELECT(9168,5412),
  ABISELECT(8848,5232),
  ABISELECT(-5392,-3216),
  ABISELECT(9088,5372),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C128S19967C5__A2__8S19967C1[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C128S19967C5__A2__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn9168_N8S19967C7D1Ev,_ZThn5412_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn9168_N8S19967C7D0Ev,_ZThn5412_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C128S19967C5__A2__8S19967C1[] = {
  ABISELECT(-9168,-5412),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-9168,-5412),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C128S19967C5__A2__8S19967C1[] = {
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3360),
  ABISELECT(8832,5228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C128S19967C5__A2__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-8832,-5228),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C128S19967C5__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C128S19967C5__8S19967C1[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn9168_N9S19967C12D1Ev,_ZThn5412_N9S19967C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
extern void ABISELECT(_ZThn9168_N9S19967C12D0Ev,_ZThn5412_N9S19967C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C128S19967C5__8S19967C1[] = {
  ABISELECT(-9168,-5412),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-9168,-5412),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C128S19967C5__8S19967C1[] = {
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3360),
  ABISELECT(8832,5228),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
};
extern void _ZN9S19967C13D1Ev();
extern void _ZN9S19967C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C138S19967C5__8S19967C1[] = {
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3964),
  ABISELECT(7824,4624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN9S19967C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C13D0Ev,
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C119S19967C138S19967C5__A1__8S19967C1[] = {
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3964),
  ABISELECT(7824,4624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C119S19967C138S19967C5__A3__8S19967C1[] = {
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3964),
  ABISELECT(7824,4624),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C5__A3__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3976),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[] = {
  0,
  0,
  ABISELECT(2016,1208),
  ABISELECT(2016,1208),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-7808,-4612),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn7888_N8S19967C7D1Ev,_ZThn4652_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn7888_N8S19967C7D0Ev,_ZThn4652_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[] = {
  ABISELECT(-7888,-4652),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-7888,-4652),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C119S19967C138S19967C5__A1__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C119S19967C138S19967C5__A1__8S19967C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3976),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C119S19967C138S19967C5__A1__8S19967C1[] = {
  0,
  0,
  ABISELECT(2000,1196),
  ABISELECT(2000,1196),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn7904_N9S19967C11D1Ev,_ZThn4664_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn7904_N9S19967C11D0Ev,_ZThn4664_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C5__A1__8S19967C1[] = {
  ABISELECT(-7904,-4664),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-7904,-4664),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C138S19967C5__A4__8S19967C1[] = {
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5544),
  ABISELECT(5152,3044),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C138S19967C5__A4__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-5152,-3044),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C138S19967C5__8S19967C1[] = {
  0,
  0,
  ABISELECT(2000,1196),
  ABISELECT(2000,1196),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C138S19967C5__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C138S19967C5__8S19967C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3976),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn7904_N9S19967C13D1Ev,_ZThn4664_N9S19967C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev)();
extern void ABISELECT(_ZThn7904_N9S19967C13D0Ev,_ZThn4664_N9S19967C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C138S19967C5__8S19967C1[] = {
  ABISELECT(-7904,-4664),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-7904,-4664),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C138S19967C5__8S19967C1[] = {
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5544),
  ABISELECT(5152,3044),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn6160_N8S19967C5D1Ev,_ZThn3644_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn6160_N8S19967C5D0Ev,_ZThn3644_N8S19967C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19967C6__8S19967C5__8S19967C1[] = {
  ABISELECT(-6160,-3644),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6860),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(-6160,-3644),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C5__8S19967C1[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C5__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn9168_N8S19967C5D1Ev,_ZThn5412_N8S19967C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev)();
extern void ABISELECT(_ZThn9168_N8S19967C5D0Ev,_ZThn5412_N8S19967C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C5__8S19967C1[] = {
  ABISELECT(-9168,-5412),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-9168,-5412),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__8S19967C5__8S19967C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  ABISELECT(-6416,-3788),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C5__8S19967C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-6432,-3800),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C12__A2__8S19967C5__8S19967C1[] = {
  ABISELECT(8592,5088),
  ABISELECT(-5648,-3360),
  ABISELECT(8832,5228),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C13__8S19967C5__8S19967C1[] = {
  ABISELECT(7904,4664),
  ABISELECT(-2000,-1196),
  ABISELECT(7584,4484),
  ABISELECT(-6656,-3964),
  ABISELECT(7824,4624),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C5__8S19967C1[] = {
  ABISELECT(7888,4652),
  ABISELECT(7568,4472),
  ABISELECT(-6672,-3976),
  ABISELECT(7808,4612),
  ABISELECT(-2016,-1208),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C13__A4__8S19967C5__8S19967C1[] = {
  ABISELECT(4912,2904),
  ABISELECT(-9328,-5544),
  ABISELECT(5152,3044),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C6D1Ev();
extern void _ZN8S19967C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C6__8S19967C1[] = {
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6860),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C6D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C78S19967C6__8S19967C1[] = {
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6860),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C78S19967C6__8S19967C1[] = {
  0,
  0,
  ABISELECT(6896,4092),
  ABISELECT(6896,4092),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C78S19967C6__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn3008_N8S19967C7D1Ev,_ZThn1768_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn3008_N8S19967C7D0Ev,_ZThn1768_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C78S19967C6__8S19967C1[] = {
  ABISELECT(-3008,-1768),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-3008,-1768),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__8S19967C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C118S19967C6__A1__8S19967C1[] = {
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__8S19967C1[] = {
  0,
  0,
  ABISELECT(7168,4248),
  ABISELECT(7168,4248),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZThn2736_N8S19967C7D1Ev,_ZThn1612_N8S19967C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
extern void ABISELECT(_ZThn2736_N8S19967C7D0Ev,_ZThn1612_N8S19967C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__8S19967C1[] = {
  ABISELECT(-2736,-1612),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-2736,-1612),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C118S19967C6__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C118S19967C6__8S19967C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C118S19967C6__8S19967C1[] = {
  0,
  0,
  ABISELECT(7152,4236),
  ABISELECT(7152,4236),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn2752_N9S19967C11D1Ev,_ZThn1624_N9S19967C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
extern void ABISELECT(_ZThn2752_N9S19967C11D0Ev,_ZThn1624_N9S19967C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C118S19967C6__8S19967C1[] = {
  ABISELECT(-2752,-1624),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-2752,-1624),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C6__8S19967C1[] = {
  0,
  0,
  ABISELECT(6896,4092),
  ABISELECT(6896,4092),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D1Ev,_ZTv0_n12_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C6D0Ev,_ZTv0_n12_N8S19967C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C6__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn3008_N8S19967C6D1Ev,_ZThn1768_N8S19967C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev)();
extern void ABISELECT(_ZThn3008_N8S19967C6D0Ev,_ZThn1768_N8S19967C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C6__8S19967C1[] = {
  ABISELECT(-3008,-1768),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(-3008,-1768),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C11__8S19967C6__8S19967C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D1Ev,_ZThn144_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C6D0Ev,_ZThn144_N8S19967C6D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev)();
extern void ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A1__8S19967C6__8S19967C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S19967C6[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D1Ev,_ZThn156_N8S19967C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S19967C6D0Ev,_ZThn156_N8S19967C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C1[] = {
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C10__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN9S19967C14D1Ev();
extern void _ZN9S19967C14D0Ev();
extern void _ZN9S19967C142v4Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C14__8S19967C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(1440,844),
  ABISELECT(-9920,-5872),
  ABISELECT(-336,-192),
  ABISELECT(-14576,-8640),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&_ZN9S19967C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C14D0Ev,
  (VTBL_ENTRY)&_ZN9S19967C142v4Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C14__A5__8S19967C1[] = {
  ABISELECT(-336,-192),
  ABISELECT(-14576,-8640),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C14__A5__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN9S19967C15D1Ev();
extern void _ZN9S19967C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C159S19967C14__8S19967C1[] = {
  ABISELECT(-9936,-5884),
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8652),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
  (VTBL_ENTRY)&_ZN9S19967C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19967C169S19967C159S19967C14__8S19967C1[] = {
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8652),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C169S19967C159S19967C14__A1__8S19967C1[] = {
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8652),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C159S19967C14__A2__8S19967C1[] = {
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8856),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C159S19967C14__8S19967C1[] = {
  0,
  0,
  ABISELECT(9936,5884),
  ABISELECT(9936,5884),
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C15D1Ev,_ZTv0_n12_N9S19967C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C15D0Ev,_ZTv0_n12_N9S19967C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__A1__9S19967C159S19967C14__8S19967C1[] = {
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8856),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI9S19967C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19967C169S19967C14__A1__8S19967C1[] = {
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9236),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C169S19967C14__A3__8S19967C1[] = {
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9236),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C14__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
};
extern void ABISELECT(_ZThn16_N9S19967C14D1Ev,_ZThn12_N9S19967C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C14D0Ev,_ZThn12_N9S19967C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C15__9S19967C14__8S19967C1[] = {
  ABISELECT(-9936,-5884),
  ABISELECT(-352,-204),
  ABISELECT(-14592,-8652),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C14D1Ev,_ZThn12_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C14D0Ev,_ZThn12_N9S19967C14D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C14D1Ev,_ZTv0_n12_N9S19967C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C14D0Ev,_ZTv0_n12_N9S19967C14D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C14__8S19967C1[] = {
  0,
  0,
  ABISELECT(9920,5872),
  ABISELECT(9920,5872),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C14D1Ev,_ZTv0_n12_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C14D0Ev,_ZTv0_n12_N9S19967C14D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C15__A2__9S19967C14__8S19967C1[] = {
  ABISELECT(-704,-408),
  ABISELECT(-14944,-8856),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
};
extern void ABISELECT(_ZTv0_n64_N9S19967C14D1Ev,_ZTv0_n32_N9S19967C14D1Ev)();
extern void ABISELECT(_ZThn1440_N9S19967C14D1Ev,_ZThn844_N9S19967C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19967C14D0Ev,_ZTv0_n32_N9S19967C14D0Ev)();
extern void ABISELECT(_ZThn1440_N9S19967C14D0Ev,_ZThn844_N9S19967C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19967C11__9S19967C14__8S19967C1[] = {
  ABISELECT(16,12),
  ABISELECT(-1440,-844),
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9484),
  ABISELECT(-1536,-896),
  ABISELECT(-1440,-844),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C14D1Ev,_ZTv0_n32_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19967C14D0Ev,_ZTv0_n32_N9S19967C14D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn16_n64_N9S19967C14D1Ev,_ZTvn12_n32_N9S19967C14D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N9S19967C14D0Ev,_ZTvn12_n32_N9S19967C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C14__8S19967C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9496),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-1456,-856),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C14D1Ev,_ZTvn12_n32_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N9S19967C14D0Ev,_ZTvn12_n32_N9S19967C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C14D1Ev,_ZTv0_n24_N9S19967C14D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C14D0Ev,_ZTv0_n24_N9S19967C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A2__9S19967C14__8S19967C1[] = {
  ABISELECT(16,12),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C14D1Ev,_ZTv0_n24_N9S19967C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C14D0Ev,_ZTv0_n24_N9S19967C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19967C16__A1__9S19967C14__8S19967C1[] = {
  ABISELECT(-1344,-788),
  ABISELECT(-15584,-9236),
  ABISELECT(-1008,-596),
  (VTBL_ENTRY)&(_ZTI9S19967C14[0]),
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C11__A2__8S19967C1[] = {
  ABISELECT(-1456,-856),
  ABISELECT(-11360,-6716),
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9484),
  ABISELECT(-1536,-896),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C11__A6__8S19967C1[] = {
  ABISELECT(-1776,-1036),
  ABISELECT(-16016,-9484),
  ABISELECT(-1536,-896),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C11__A6__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(1536,896),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__A4__8S19967C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9496),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C11__A4__8S19967C1[] = {
  0,
  0,
  ABISELECT(11376,6728),
  ABISELECT(11376,6728),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C11__A4__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(1552,908),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C11__A4__8S19967C1[] = {
  ABISELECT(1472,868),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(1472,868),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C11__A2__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(1536,896),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C11__A2__8S19967C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1792,-1048),
  ABISELECT(-16032,-9496),
  ABISELECT(-1552,-908),
  ABISELECT(-11376,-6728),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C11__A2__8S19967C1[] = {
  0,
  0,
  ABISELECT(11360,6716),
  ABISELECT(11360,6716),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C11__A2__8S19967C1[] = {
  ABISELECT(1456,856),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(1456,856),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C18D1Ev();
extern void _ZN9S19967C18D0Ev();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
extern void _ZN9S19967C182v7Ev();
extern void _ZN9S19967C182v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C18__8S19967C1[] = {
  ABISELECT(-13792,-8156),
  ABISELECT(-6896,-4064),
  ABISELECT(-3888,-2296),
  ABISELECT(9168,5456),
  ABISELECT(-4208,-2476),
  ABISELECT(-18448,-10924),
  ABISELECT(-3968,-2336),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN9S19967C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C18D0Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
  (VTBL_ENTRY)&_ZN9S19967C182v7Ev,
  (VTBL_ENTRY)&_ZN9S19967C182v8Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C20D1Ev();
extern void _ZN9S19967C20D0Ev();
extern void _ZN9S19967C202v5Ev();
extern void _ZN9S19967C202v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11372),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C20D0Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v6Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C5D1Ev();
extern void _ZN8S19967C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11372),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C5D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN9S19967C12D1Ev();
extern void _ZN9S19967C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11372),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C12D0Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[] = {
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11372),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C128S19967C59S19967C209S19967C18__A7__8S19967C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11516),
  ABISELECT(-4960,-2928),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C128S19967C59S19967C209S19967C18__A7__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(4960,2928),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11516),
  ABISELECT(-4960,-2928),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D1Ev,_ZThn144_N9S19967C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C12D0Ev,_ZThn144_N9S19967C12D0Ev),
};
extern void _ZN9S19967C13D1Ev();
extern void _ZN9S19967C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12120),
  ABISELECT(-5968,-3532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN9S19967C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C13D0Ev,
};
extern void _ZN9S19967C11D1Ev();
extern void _ZN9S19967C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12120),
  ABISELECT(-5968,-3532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN9S19967C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C11D0Ev,
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C119S19967C138S19967C59S19967C209S19967C18__A8__8S19967C1[] = {
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12120),
  ABISELECT(-5968,-3532),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C59S19967C209S19967C18__A8__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(5968,3532),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void _ZN8S19967C7D1Ev();
extern void _ZN8S19967C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12132),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19967C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[] = {
  0,
  0,
  ABISELECT(15808,9364),
  ABISELECT(15808,9364),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(5984,3544),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[] = {
  ABISELECT(5904,3504),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(5904,3504),
  (VTBL_ENTRY)&(_ZTI8S19967C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(5968,3532),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C7__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12132),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D1Ev,_ZThn12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C11D0Ev,_ZThn12_N9S19967C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[] = {
  0,
  0,
  ABISELECT(15792,9352),
  ABISELECT(15792,9352),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D1Ev,_ZTv0_n12_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C11D0Ev,_ZTv0_n12_N9S19967C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[] = {
  ABISELECT(5888,3492),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(5888,3492),
  (VTBL_ENTRY)&(_ZTI9S19967C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev),
};
extern void _ZN9S19967C10D1Ev();
extern void _ZN9S19967C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C138S19967C59S19967C209S19967C18__A9__8S19967C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13700),
  ABISELECT(-8640,-5112),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
  (VTBL_ENTRY)&_ZN9S19967C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19967C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C109S19967C138S19967C59S19967C209S19967C18__A9__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(8640,5112),
  (VTBL_ENTRY)&(_ZTI9S19967C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  0,
  0,
  ABISELECT(15792,9352),
  ABISELECT(15792,9352),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D1Ev,_ZTv0_n12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C13D0Ev,_ZTv0_n12_N9S19967C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(5968,3532),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C11__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12132),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D1Ev,_ZThn12_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S19967C13D0Ev,_ZThn12_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A1__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(5888,3492),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(5888,3492),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev)();
extern void ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__A__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13700),
  ABISELECT(-8640,-5112),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI9S19967C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D1Ev,_ZThn1580_N9S19967C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N9S19967C13D0Ev,_ZThn1580_N9S19967C13D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C6__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(7632,4512),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6860),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(7632,4512),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D1Ev,_ZTv0_n12_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19967C5D0Ev,_ZTv0_n12_N8S19967C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  ABISELECT(7376,4368),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D1Ev,_ZTvn144_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S19967C5D0Ev,_ZTvn144_n36_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(7360,4356),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D1Ev,_ZTvn156_n36_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S19967C5D0Ev,_ZTvn156_n36_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C12__A2__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11516),
  ABISELECT(-4960,-2928),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D1Ev,_ZThn144_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S19967C5D0Ev,_ZThn144_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C13__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12120),
  ABISELECT(-5968,-3532),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D1Ev,_ZThn748_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S19967C5D0Ev,_ZThn748_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12132),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D1Ev,_ZThn760_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S19967C5D0Ev,_ZThn760_N8S19967C5D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev)();
extern void ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C13__A4__8S19967C59S19967C209S19967C18__A1__8S19967C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13700),
  ABISELECT(-8640,-5112),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S19967C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D1Ev,_ZThn2328_N8S19967C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S19967C5D0Ev,_ZThn2328_N8S19967C5D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C6__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(7632,4512),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6860),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(7632,4512),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C20D1Ev,_ZTv0_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C20D0Ev,_ZTv0_n36_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__9S19967C209S19967C18__8S19967C1[] = {
  0,
  0,
  ABISELECT(14528,8604),
  ABISELECT(14528,8604),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C20D1Ev,_ZTv0_n12_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C20D0Ev,_ZTv0_n12_N9S19967C20D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(4704,2784),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(4624,2744),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(4624,2744),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C20D1Ev,_ZTv0_n24_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C20D0Ev,_ZTv0_n24_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N9S19967C20D1Ev,_ZTvn144_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19967C20D0Ev,_ZTvn144_n36_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  ABISELECT(7376,4368),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C20D1Ev,_ZTvn144_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C20D0Ev,_ZTvn144_n36_N9S19967C20D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19967C20D1Ev,_ZTvn156_n36_N9S19967C20D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19967C20D0Ev,_ZTvn156_n36_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(7360,4356),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C20D1Ev,_ZTvn156_n36_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C20D0Ev,_ZTvn156_n36_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZThn256_N9S19967C20D1Ev,_ZThn144_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn256_N9S19967C20D0Ev,_ZThn144_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C128S19967C5__A2__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11516),
  ABISELECT(-4960,-2928),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C20D1Ev,_ZThn144_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N9S19967C20D0Ev,_ZThn144_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZThn1264_N9S19967C20D1Ev,_ZThn748_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn1264_N9S19967C20D0Ev,_ZThn748_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C138S19967C5__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12120),
  ABISELECT(-5968,-3532),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19967C20D1Ev,_ZThn748_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N9S19967C20D0Ev,_ZThn748_N9S19967C20D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn1280_N9S19967C20D1Ev,_ZThn760_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn1280_N9S19967C20D0Ev,_ZThn760_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12132),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19967C20D1Ev,_ZThn760_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N9S19967C20D0Ev,_ZThn760_N9S19967C20D0Ev),
};
extern void ABISELECT(_ZThn3936_N9S19967C20D1Ev,_ZThn2328_N9S19967C20D1Ev)();
extern void ABISELECT(_ZThn3936_N9S19967C20D0Ev,_ZThn2328_N9S19967C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C138S19967C5__A4__9S19967C209S19967C18__8S19967C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13700),
  ABISELECT(-8640,-5112),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI9S19967C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19967C20D1Ev,_ZThn2328_N9S19967C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N9S19967C20D0Ev,_ZThn2328_N9S19967C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19967C8__9S19967C18__8S19967C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-14480,-8588),
  ABISELECT(3968,2336),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19967C19__9S19967C18__8S19967C1[] = {
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16380),
  ABISELECT(-9168,-5456),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19967C18D1Ev,_ZTv0_n24_N9S19967C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S19967C18D0Ev,_ZTv0_n24_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C10__9S19967C18__8S19967C1[] = {
  ABISELECT(3888,2296),
  ABISELECT(-320,-180),
  ABISELECT(-14560,-8628),
  ABISELECT(-80,-40),
  ABISELECT(3888,2296),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C18D1Ev,_ZTv0_n24_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19967C18D0Ev,_ZTv0_n24_N9S19967C18D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn736_N9S19967C18D1Ev,_ZThn448_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn736_N9S19967C18D0Ev,_ZThn448_N9S19967C18D0Ev)();
extern void _ZN9S19967C202v5Ev();
extern void _ZN9S19967C202v6Ev();
static  VTBL_ENTRY _tg__ZTV9S19967C20__9S19967C18__8S19967C1[] = {
  ABISELECT(-7632,-4512),
  ABISELECT(-4624,-2744),
  ABISELECT(-4944,-2924),
  ABISELECT(-19184,-11372),
  ABISELECT(-4704,-2784),
  ABISELECT(-14528,-8604),
  ABISELECT(-736,-448),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19967C18D1Ev,_ZThn448_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N9S19967C18D0Ev,_ZThn448_N9S19967C18D0Ev),
  (VTBL_ENTRY)&_ZN9S19967C202v5Ev,
  (VTBL_ENTRY)&_ZN9S19967C202v6Ev,
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTv0_n72_N9S19967C18D1Ev,_ZTv0_n36_N9S19967C18D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S19967C18D0Ev,_ZTv0_n36_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C6__9S19967C18__8S19967C1[] = {
  ABISELECT(6896,4064),
  0,
  ABISELECT(3008,1768),
  ABISELECT(2688,1588),
  ABISELECT(-11552,-6860),
  ABISELECT(2928,1728),
  ABISELECT(-6896,-4092),
  ABISELECT(6896,4064),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C18D1Ev,_ZTv0_n36_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19967C18D0Ev,_ZTv0_n36_N9S19967C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S19967C18D1Ev,_ZTv0_n12_N9S19967C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19967C18D0Ev,_ZTv0_n12_N9S19967C18D0Ev)();
extern void _ZN8S19967C22v1Ev();
extern void _ZN8S19967C22v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19967C2__A1__9S19967C18__8S19967C1[] = {
  0,
  0,
  ABISELECT(13792,8156),
  ABISELECT(13792,8156),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C18D1Ev,_ZTv0_n12_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19967C18D0Ev,_ZTv0_n12_N9S19967C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19967C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19967C22v2Ev,
};
extern void ABISELECT(_ZTvn256_n72_N9S19967C18D1Ev,_ZTvn144_n36_N9S19967C18D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N9S19967C18D0Ev,_ZTvn144_n36_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C118S19967C6__9S19967C18__8S19967C1[] = {
  ABISELECT(2752,1624),
  ABISELECT(-7152,-4236),
  ABISELECT(2432,1444),
  ABISELECT(-11808,-7004),
  ABISELECT(2672,1584),
  ABISELECT(6640,3920),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C18D1Ev,_ZTvn144_n36_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N9S19967C18D0Ev,_ZTvn144_n36_N9S19967C18D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZTvn272_n72_N9S19967C18D1Ev,_ZTvn156_n36_N9S19967C18D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N9S19967C18D0Ev,_ZTvn156_n36_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C18__8S19967C1[] = {
  ABISELECT(2736,1612),
  ABISELECT(2416,1432),
  ABISELECT(-11824,-7016),
  ABISELECT(2656,1572),
  ABISELECT(-7168,-4248),
  ABISELECT(6624,3908),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C18D1Ev,_ZTvn156_n36_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N9S19967C18D0Ev,_ZTvn156_n36_N9S19967C18D0Ev),
};
extern void ABISELECT(_ZThn992_N9S19967C18D1Ev,_ZThn592_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn992_N9S19967C18D0Ev,_ZThn592_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C128S19967C59S19967C20__A2__9S19967C18__8S19967C1[] = {
  ABISELECT(-5200,-3068),
  ABISELECT(-19440,-11516),
  ABISELECT(-4960,-2928),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19967C18D1Ev,_ZThn592_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N9S19967C18D0Ev,_ZThn592_N9S19967C18D0Ev),
};
extern void ABISELECT(_ZThn2000_N9S19967C18D1Ev,_ZThn1196_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn2000_N9S19967C18D0Ev,_ZThn1196_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C138S19967C59S19967C20__9S19967C18__8S19967C1[] = {
  ABISELECT(-5888,-3492),
  ABISELECT(-15792,-9352),
  ABISELECT(-6208,-3672),
  ABISELECT(-20448,-12120),
  ABISELECT(-5968,-3532),
  ABISELECT(-2000,-1196),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19967C18D1Ev,_ZThn1196_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2000_N9S19967C18D0Ev,_ZThn1196_N9S19967C18D0Ev),
};
extern void _ZN8S19967C72v3Ev();
extern void ABISELECT(_ZThn2016_N9S19967C18D1Ev,_ZThn1208_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn2016_N9S19967C18D0Ev,_ZThn1208_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18__8S19967C1[] = {
  ABISELECT(-5904,-3504),
  ABISELECT(-6224,-3684),
  ABISELECT(-20464,-12132),
  ABISELECT(-5984,-3544),
  ABISELECT(-15808,-9364),
  ABISELECT(-2016,-1208),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&_ZN8S19967C72v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19967C18D1Ev,_ZThn1208_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2016_N9S19967C18D0Ev,_ZThn1208_N9S19967C18D0Ev),
};
extern void ABISELECT(_ZThn4672_N9S19967C18D1Ev,_ZThn2776_N9S19967C18D1Ev)();
extern void ABISELECT(_ZThn4672_N9S19967C18D0Ev,_ZThn2776_N9S19967C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19967C109S19967C138S19967C59S19967C20__A4__9S19967C18__8S19967C1[] = {
  ABISELECT(-8880,-5252),
  ABISELECT(-23120,-13700),
  ABISELECT(-8640,-5112),
  ABISELECT(-4672,-2776),
  (VTBL_ENTRY)&(_ZTI9S19967C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19967C18D1Ev,_ZThn2776_N9S19967C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4672_N9S19967C18D0Ev,_ZThn2776_N9S19967C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19967C19__8S19967C1[] = {
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16380),
  0,
  (VTBL_ENTRY)&(_ZTI9S19967C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19967C89S19967C19__A4__8S19967C1[] = {
  ABISELECT(-13376,-7932),
  ABISELECT(-27616,-16380),
  0,
  (VTBL_ENTRY)&(_ZTI8S19967C8[0]),
};
static  VTT_ENTRY vtt_S19967C1[] = {
  {&(_ZTV8S19967C1[13]),  13,272},
  {&(_tg__ZTV9S19967C21__8S19967C1[8]),  8,10},
  {&(_tg__ZTV8S19967C89S19967C21__A5__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C129S19967C21__A2__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C79S19967C129S19967C21__A7__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C129S19967C21__A7__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C129S19967C21__A7__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C129S19967C21__A7__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C129S19967C21__A10__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C129S19967C21__A10__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C129S19967C21__A2__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C129S19967C21__A2__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C10__9S19967C129S19967C21__A2__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C129S19967C21__A2__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C10__9S19967C21__8S19967C1[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C21__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C12__9S19967C21__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C21__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C109S19967C12__A1__9S19967C21__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C11__9S19967C21__8S19967C1[9]),  9,11},
  {&(_tg__ZTV8S19967C79S19967C11__A1__9S19967C21__8S19967C1[7]),  7,10},
  {&(_ZTV8S19967C1[43]),  43,272},
  {&(_ZTV8S19967C1[59]),  59,272},
  {&(_ZTV8S19967C1[110]),  110,272},
  {&(_ZTV8S19967C1[136]),  136,272},
  {&(_ZTV8S19967C1[142]),  142,272},
  {&(_ZTV8S19967C1[120]),  120,272},
  {&(_ZTV8S19967C1[129]),  129,272},
  {&(_ZTV8S19967C1[67]),  67,272},
  {&(_ZTV8S19967C1[71]),  71,272},
  {&(_ZTV8S19967C1[82]),  82,272},
  {&(_ZTV8S19967C1[91]),  91,272},
  {&(_ZTV8S19967C1[99]),  99,272},
  {&(_ZTV8S19967C1[154]),  154,272},
  {&(_ZTV8S19967C1[162]),  162,272},
  {&(_ZTV8S19967C1[168]),  168,272},
  {&(_ZTV8S19967C1[181]),  181,272},
  {&(_ZTV8S19967C1[190]),  190,272},
  {&(_ZTV8S19967C1[172]),  172,272},
  {&(_ZTV8S19967C1[210]),  210,272},
  {&(_ZTV8S19967C1[272]),  272,272},
  {&(_ZTV8S19967C1[224]),  224,272},
  {&(_ZTV8S19967C1[234]),  234,272},
  {&(_ZTV8S19967C1[238]),  238,272},
  {&(_ZTV8S19967C1[249]),  249,272},
  {&(_ZTV8S19967C1[258]),  258,272},
  {&(_ZTV8S19967C1[266]),  266,272},
  {&(_ZTV8S19967C1[22]),  22,272},
  {&(_ZTV8S19967C1[30]),  30,272},
  {&(_tg__ZTV8S19967C5__8S19967C1[8]),  8,11},
  {&(_tg__ZTV9S19967C128S19967C5__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C79S19967C128S19967C5__A2__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C128S19967C5__A2__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C128S19967C5__A2__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C128S19967C5__A2__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C128S19967C5__A2__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C128S19967C5__A2__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C128S19967C5__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C128S19967C5__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C10__9S19967C128S19967C5__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C128S19967C5__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C138S19967C5__8S19967C1[7]),  7,9},
  {&(_tg__ZTV9S19967C119S19967C138S19967C5__A1__8S19967C1[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C119S19967C138S19967C5__A3__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C5__A3__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C5__A3__8S19967C1[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C119S19967C138S19967C5__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C119S19967C138S19967C5__A1__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C119S19967C138S19967C5__A1__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C5__A1__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C138S19967C5__A4__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C138S19967C5__A4__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C138S19967C5__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__9S19967C138S19967C5__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C138S19967C5__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C10__A1__9S19967C138S19967C5__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C138S19967C5__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C6__8S19967C5__8S19967C1[9]),  9,12},
  {&(_tg__ZTV8S19967C2__8S19967C5__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C5__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C5__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__8S19967C5__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C5__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C12__A2__8S19967C5__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C13__8S19967C5__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C5__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C13__A4__8S19967C5__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C6__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C78S19967C6__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C78S19967C6__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C78S19967C6__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C78S19967C6__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__8S19967C1[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C118S19967C6__A1__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C118S19967C6__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C118S19967C6__A1__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C118S19967C6__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C118S19967C6__A1__8S19967C1[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C118S19967C6__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C118S19967C6__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C118S19967C6__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C118S19967C6__8S19967C1[6]),  6,8},
  {&(_tg__ZTV8S19967C2__8S19967C6__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C6__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C6__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C11__8S19967C6__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C11__A1__8S19967C6__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C8__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C10__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C14__8S19967C1[8]),  8,11},
  {&(_tg__ZTV9S19967C109S19967C14__A5__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C14__A5__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C159S19967C14__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C169S19967C159S19967C14__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C169S19967C159S19967C14__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C159S19967C14__A2__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C159S19967C14__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__A1__9S19967C159S19967C14__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C169S19967C14__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C169S19967C14__A3__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C14__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C15__9S19967C14__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C2__9S19967C14__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C89S19967C15__A2__9S19967C14__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C11__9S19967C14__8S19967C1[9]),  9,11},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C14__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C10__A2__9S19967C14__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C16__A1__9S19967C14__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C11__A2__8S19967C1[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C11__A6__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C11__A6__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__A4__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C11__A4__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C11__A4__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C11__A4__8S19967C1[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C11__A2__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C11__A2__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C11__A2__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C11__A2__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C18__8S19967C1[9]),  9,15},
  {&(_tg__ZTV9S19967C209S19967C18__8S19967C1[8]),  8,13},
  {&(_tg__ZTV8S19967C59S19967C209S19967C18__A1__8S19967C1[8]),  8,11},
  {&(_tg__ZTV9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C128S19967C59S19967C209S19967C18__A5__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C128S19967C59S19967C209S19967C18__A7__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C128S19967C59S19967C209S19967C18__A7__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C8__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C10__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C128S19967C59S19967C209S19967C18__A1__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[7]),  7,9},
  {&(_tg__ZTV9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[7]),  7,9},
  {&(_tg__ZTV9S19967C109S19967C119S19967C138S19967C59S19967C209S19967C18__A8__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C119S19967C138S19967C59S19967C209S19967C18__A8__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C79S19967C119S19967C138S19967C59S19967C209S19967C18__A6__8S19967C1[6]),  6,8},
  {&(_tg__ZTV8S19967C8__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C7__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[7]),  7,10},
  {&(_tg__ZTV8S19967C2__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C10__A1__9S19967C119S19967C138S19967C59S19967C209S19967C18__A3__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C109S19967C138S19967C59S19967C209S19967C18__A9__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C109S19967C138S19967C59S19967C209S19967C18__A9__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C2__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C79S19967C11__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C10__A1__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C10__A__9S19967C138S19967C59S19967C209S19967C18__A1__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C6__8S19967C59S19967C209S19967C18__A1__8S19967C1[9]),  9,12},
  {&(_tg__ZTV8S19967C2__8S19967C59S19967C209S19967C18__A1__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__8S19967C59S19967C209S19967C18__A1__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__8S19967C59S19967C209S19967C18__A1__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__8S19967C59S19967C209S19967C18__A1__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__8S19967C59S19967C209S19967C18__A1__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C12__A2__8S19967C59S19967C209S19967C18__A1__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C13__8S19967C59S19967C209S19967C18__A1__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C119S19967C13__A3__8S19967C59S19967C209S19967C18__A1__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C13__A4__8S19967C59S19967C209S19967C18__A1__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C6__9S19967C209S19967C18__8S19967C1[9]),  9,12},
  {&(_tg__ZTV8S19967C2__9S19967C209S19967C18__8S19967C1[5]),  5,9},
  {&(_tg__ZTV8S19967C8__9S19967C209S19967C18__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__9S19967C209S19967C18__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C118S19967C6__9S19967C209S19967C18__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C209S19967C18__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C128S19967C5__A2__9S19967C209S19967C18__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C138S19967C5__9S19967C209S19967C18__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C119S19967C138S19967C5__A3__9S19967C209S19967C18__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C138S19967C5__A4__9S19967C209S19967C18__8S19967C1[5]),  5,7},
  {&(_tg__ZTV8S19967C8__9S19967C18__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C19__9S19967C18__8S19967C1[4]),  4,4},
  {&(_tg__ZTV9S19967C10__9S19967C18__8S19967C1[6]),  6,8},
  {&(_tg__ZTV9S19967C20__9S19967C18__8S19967C1[8]),  8,13},
  {&(_tg__ZTV8S19967C6__9S19967C18__8S19967C1[9]),  9,12},
  {&(_tg__ZTV8S19967C2__A1__9S19967C18__8S19967C1[5]),  5,9},
  {&(_tg__ZTV9S19967C118S19967C6__9S19967C18__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C118S19967C6__A1__9S19967C18__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C128S19967C59S19967C20__A2__9S19967C18__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C138S19967C59S19967C20__9S19967C18__8S19967C1[7]),  7,9},
  {&(_tg__ZTV8S19967C79S19967C119S19967C138S19967C59S19967C20__A3__9S19967C18__8S19967C1[7]),  7,10},
  {&(_tg__ZTV9S19967C109S19967C138S19967C59S19967C20__A4__9S19967C18__8S19967C1[5]),  5,7},
  {&(_tg__ZTV9S19967C19__8S19967C1[4]),  4,4},
  {&(_tg__ZTV8S19967C89S19967C19__A4__8S19967C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19967C1[];
extern  VTBL_ENTRY _ZTV8S19967C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19967C1[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C14D0Ev,_ZTv0_n32_N9S19967C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N9S19967C14D0Ev,_ZThn844_N9S19967C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C14D1Ev,_ZTv0_n32_N9S19967C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N9S19967C14D1Ev,_ZThn844_N9S19967C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D0Ev,_ZTv0_n24_N8S19967C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19967C6D0Ev,_ZThn1768_N8S19967C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C6D1Ev,_ZTv0_n24_N8S19967C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19967C6D1Ev,_ZThn1768_N8S19967C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D0Ev,_ZTv0_n24_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19967C5D0Ev,_ZThn5412_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C5D1Ev,_ZTv0_n24_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19967C5D1Ev,_ZThn5412_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D0Ev,_ZTv0_n36_N8S19967C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19967C5D0Ev,_ZThn3644_N8S19967C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C5D1Ev,_ZTv0_n36_N8S19967C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S19967C5D1Ev,_ZThn3644_N8S19967C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D0Ev,_ZTv0_n24_N9S19967C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19967C13D0Ev,_ZThn4664_N9S19967C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C13D1Ev,_ZTv0_n24_N9S19967C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19967C13D1Ev,_ZThn4664_N9S19967C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D0Ev,_ZTv0_n24_N9S19967C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19967C11D0Ev,_ZThn1624_N9S19967C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19967C11D0Ev,_ZThn4664_N9S19967C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C11D1Ev,_ZTv0_n24_N9S19967C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N9S19967C11D1Ev,_ZThn1624_N9S19967C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7904_N9S19967C11D1Ev,_ZThn4664_N9S19967C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C21D0Ev,_ZTv0_n32_N9S19967C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N9S19967C21D0Ev,_ZThn9484_N9S19967C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19967C21D1Ev,_ZTv0_n32_N9S19967C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N9S19967C21D1Ev,_ZThn9484_N9S19967C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C21D0Ev,_ZTv0_n12_N9S19967C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S19967C21D0Ev,_ZThn2768_N9S19967C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C21D1Ev,_ZTv0_n12_N9S19967C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N9S19967C21D1Ev,_ZThn2768_N9S19967C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C21D0Ev,_ZTv0_n24_N9S19967C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N9S19967C21D0Ev,_ZThn8628_N9S19967C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C21D1Ev,_ZTv0_n24_N9S19967C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N9S19967C21D1Ev,_ZThn8628_N9S19967C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D0Ev,_ZTv0_n24_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N9S19967C12D0Ev,_ZThn5412_N9S19967C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N9S19967C12D0Ev,_ZThn8588_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19967C12D1Ev,_ZTv0_n24_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N9S19967C12D1Ev,_ZThn5412_N9S19967C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N9S19967C12D1Ev,_ZThn8588_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D0Ev,_ZTv0_n12_N9S19967C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N9S19967C12D0Ev,_ZThn2728_N9S19967C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19967C12D1Ev,_ZTv0_n12_N9S19967C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N9S19967C12D1Ev,_ZThn2728_N9S19967C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D0Ev,_ZTv0_n24_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19967C7D0Ev,_ZThn1612_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19967C7D0Ev,_ZThn1768_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7888_N8S19967C7D0Ev,_ZThn4652_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19967C7D0Ev,_ZThn5412_N8S19967C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N8S19967C7D0Ev,_ZThn8588_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C7D1Ev,_ZTv0_n24_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N8S19967C7D1Ev,_ZThn1612_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3008_N8S19967C7D1Ev,_ZThn1768_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7888_N8S19967C7D1Ev,_ZThn4652_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9168_N8S19967C7D1Ev,_ZThn5412_N8S19967C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14480_N8S19967C7D1Ev,_ZThn8588_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D0Ev,_ZTv0_n12_N8S19967C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N8S19967C7D0Ev,_ZThn2728_N8S19967C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C7D1Ev,_ZTv0_n12_N8S19967C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4576_N8S19967C7D1Ev,_ZThn2728_N8S19967C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19967C1D0Ev,_ZTv0_n32_N8S19967C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N8S19967C1D0Ev,_ZThn9484_N8S19967C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19967C1D1Ev,_ZTv0_n32_N8S19967C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16016_N8S19967C1D1Ev,_ZThn9484_N8S19967C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C1D0Ev,_ZTv0_n24_N8S19967C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N8S19967C1D0Ev,_ZThn8628_N8S19967C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19967C1D1Ev,_ZTv0_n24_N8S19967C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14560_N8S19967C1D1Ev,_ZThn8628_N8S19967C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C1D0Ev,_ZTv0_n36_N8S19967C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14576_N8S19967C1D0Ev,_ZThn8640_N8S19967C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11552_N8S19967C1D0Ev,_ZThn6860_N8S19967C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19967C1D1Ev,_ZTv0_n36_N8S19967C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn14576_N8S19967C1D1Ev,_ZThn8640_N8S19967C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11552_N8S19967C1D1Ev,_ZThn6860_N8S19967C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19967C1D0Ev,_ZTv0_n40_N8S19967C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18448_N8S19967C1D0Ev,_ZThn10924_N8S19967C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5392_N8S19967C1D0Ev,_ZThn3216_N8S19967C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19967C1D1Ev,_ZTv0_n40_N8S19967C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18448_N8S19967C1D1Ev,_ZThn10924_N8S19967C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn5392_N8S19967C1D1Ev,_ZThn3216_N8S19967C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C1D0Ev,_ZTv0_n12_N8S19967C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19967C1D0Ev,_ZThn2768_N8S19967C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19967C1D1Ev,_ZTv0_n12_N8S19967C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4656_N8S19967C1D1Ev,_ZThn2768_N8S19967C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19967C1 = {  "S19967C1", // class name
  bases_S19967C1, 67,
  &(vtc_S19967C1[0]), // expected_vtbl_contents
  &(vtt_S19967C1[0]), // expected_vtt_contents
  ABISELECT(27888,16572), // object size
  NSPAIRA(_ZTI8S19967C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19967C1),272, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19967C1),211, //virtual table table var
  50, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S8516C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C3_nt  {
  ::S8516C4_nt s8516c3f0;
  void  mf8516c3(); // _ZN10S8516C3_nt8mf8516c3Ev
};
//SIG(-1 S8516C3_nt) C1{ m FC2{ Fl[4]}}


void  S8516C3_nt ::mf8516c3(){}

//skip512 S8516C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C5  {
  char s8516c5f0[2];
};
//SIG(1 S8516C5) C1{ Fc[2]}



static void Test_S8516C5()
{
  {
    init_simple_test("S8516C5");
    S8516C5 lv;
    check2(sizeof(lv), 2, "sizeof(S8516C5)");
    check2(__alignof__(lv), 1, "__alignof__(S8516C5)");
    check_field_offset(lv, s8516c5f0, 0, "S8516C5.s8516c5f0");
  }
}
static Arrange_To_Call_Me vS8516C5(Test_S8516C5, "S8516C5", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C10_nt  {
  int s8516c10f0[4];
};
//SIG(-1 S8516C10_nt) C1{ Fi[4]}



//skip512 S8516C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C9_nt  {
  void *s8516c9f0;
  ::S8516C10_nt s8516c9f1;
  void  mf8516c9(); // _ZN10S8516C9_nt8mf8516c9Ev
};
//SIG(-1 S8516C9_nt) C1{ m Fp FC2{ Fi[4]}}


void  S8516C9_nt ::mf8516c9(){}

//skip512 S8516C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C6_nt  {
  int s8516c6f0;
  char s8516c6f1;
  ::S22028C26_nt s8516c6f2;
  ::S8516C3_nt s8516c6f3;
  ::S8516C9_nt s8516c6f4;
  ::S8516C9_nt s8516c6f5;
  void  mf8516c6(); // _ZN10S8516C6_nt8mf8516c6Ev
};
//SIG(-1 S8516C6_nt) C1{ m Fi Fc FC2{ m Fp Fi[2] FC3{ m}} FC4{ m FC5{ Fl[4]}} FC6{ m Fp FC7{ Fi[4]}} FC6}


void  S8516C6_nt ::mf8516c6(){}

//skip512 S8516C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C11  {
  ::S8516C3_nt s8516c11f0;
  ::S8516C9_nt s8516c11f1;
  int s8516c11f2[5];
  void  mf8516c11(); // _ZN8S8516C119mf8516c11Ev
};
//SIG(-1 S8516C11) C1{ m FC2{ m FC3{ Fl[4]}} FC4{ m Fp FC5{ Fi[4]}} Fi[5]}


void  S8516C11 ::mf8516c11(){}

static void Test_S8516C11()
{
  {
    init_simple_test("S8516C11");
    S8516C11 lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S8516C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8516C11)");
    check_field_offset(lv, s8516c11f0, 0, "S8516C11.s8516c11f0");
    check_field_offset(lv, s8516c11f1, ABISELECT(32,16), "S8516C11.s8516c11f1");
    check_field_offset(lv, s8516c11f2, ABISELECT(56,36), "S8516C11.s8516c11f2");
  }
}
static Arrange_To_Call_Me vS8516C11(Test_S8516C11, "S8516C11", ABISELECT(80,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C2  {
  ::S8516C3_nt s8516c2f0;
  int s8516c2f1[4];
  ::S8516C5 s8516c2f2[32];
  char s8516c2f3;
  int s8516c2f4[2];
  ::S8516C6_nt s8516c2f5;
  ::S8516C11 s8516c2f6;
  int s8516c2f7[4];
  void *s8516c2f8;
  virtual  ~S8516C2(); // _ZN7S8516C2D1Ev
  virtual void  v10(); // _ZN7S8516C23v10Ev
  virtual void  v11(); // _ZN7S8516C23v11Ev
  virtual void  v12(); // _ZN7S8516C23v12Ev
  virtual void  v13(); // _ZN7S8516C23v13Ev
  virtual void  v14(); // _ZN7S8516C23v14Ev
  virtual void  v15(); // _ZN7S8516C23v15Ev
  virtual void  v16(); // _ZN7S8516C23v16Ev
  virtual void  v17(); // _ZN7S8516C23v17Ev
  virtual void  v18(); // _ZN7S8516C23v18Ev
  virtual void  v19(); // _ZN7S8516C23v19Ev
  virtual void  v20(); // _ZN7S8516C23v20Ev
  S8516C2(); // tgen
};
//SIG(-1 S8516C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FC3{ Fl[4]}} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC2 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC2 FC8 Fi[5]} Fi[4] Fp}


 S8516C2 ::~S8516C2(){ note_dtor("S8516C2", this);}
void  S8516C2 ::v10(){vfunc_called(this, "_ZN7S8516C23v10Ev");}
void  S8516C2 ::v11(){vfunc_called(this, "_ZN7S8516C23v11Ev");}
void  S8516C2 ::v12(){vfunc_called(this, "_ZN7S8516C23v12Ev");}
void  S8516C2 ::v13(){vfunc_called(this, "_ZN7S8516C23v13Ev");}
void  S8516C2 ::v14(){vfunc_called(this, "_ZN7S8516C23v14Ev");}
void  S8516C2 ::v15(){vfunc_called(this, "_ZN7S8516C23v15Ev");}
void  S8516C2 ::v16(){vfunc_called(this, "_ZN7S8516C23v16Ev");}
void  S8516C2 ::v17(){vfunc_called(this, "_ZN7S8516C23v17Ev");}
void  S8516C2 ::v18(){vfunc_called(this, "_ZN7S8516C23v18Ev");}
void  S8516C2 ::v19(){vfunc_called(this, "_ZN7S8516C23v19Ev");}
void  S8516C2 ::v20(){vfunc_called(this, "_ZN7S8516C23v20Ev");}
S8516C2 ::S8516C2(){ note_ctor("S8516C2", this);} // tgen

static void Test_S8516C2()
{
  extern Class_Descriptor cd_S8516C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,68)];
    init_test(&cd_S8516C2, buf);
    S8516C2 *dp, &lv = *(dp=new (buf) S8516C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,268), "sizeof(S8516C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8516C2)");
    check_field_offset(lv, s8516c2f0, ABISELECT(8,4), "S8516C2.s8516c2f0");
    check_field_offset(lv, s8516c2f1, ABISELECT(40,20), "S8516C2.s8516c2f1");
    check_field_offset(lv, s8516c2f2, ABISELECT(56,36), "S8516C2.s8516c2f2");
    check_field_offset(lv, s8516c2f3, ABISELECT(120,100), "S8516C2.s8516c2f3");
    check_field_offset(lv, s8516c2f4, ABISELECT(124,104), "S8516C2.s8516c2f4");
    check_field_offset(lv, s8516c2f5, ABISELECT(136,112), "S8516C2.s8516c2f5");
    check_field_offset(lv, s8516c2f6, ABISELECT(248,192), "S8516C2.s8516c2f6");
    check_field_offset(lv, s8516c2f7, ABISELECT(328,248), "S8516C2.s8516c2f7");
    check_field_offset(lv, s8516c2f8, ABISELECT(344,264), "S8516C2.s8516c2f8");
    test_class_info(&lv, &cd_S8516C2);
    dp->~S8516C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8516C2(Test_S8516C2, "S8516C2", ABISELECT(352,268));

#else // __cplusplus

extern void _ZN7S8516C2C1Ev();
extern void _ZN7S8516C2D1Ev();
Name_Map name_map_S8516C2[] = {
  NSPAIR(_ZN7S8516C2C1Ev),
  NSPAIR(_ZN7S8516C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8516C2[];
extern void _ZN7S8516C2D1Ev();
extern void _ZN7S8516C2D0Ev();
extern void _ZN7S8516C23v10Ev();
extern void _ZN7S8516C23v11Ev();
extern void _ZN7S8516C23v12Ev();
extern void _ZN7S8516C23v13Ev();
extern void _ZN7S8516C23v14Ev();
extern void _ZN7S8516C23v15Ev();
extern void _ZN7S8516C23v16Ev();
extern void _ZN7S8516C23v17Ev();
extern void _ZN7S8516C23v18Ev();
extern void _ZN7S8516C23v19Ev();
extern void _ZN7S8516C23v20Ev();
static  VTBL_ENTRY vtc_S8516C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8516C2[0]),
  (VTBL_ENTRY)&_ZN7S8516C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8516C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S8516C2[];
extern  VTBL_ENTRY _ZTV7S8516C2[];
Class_Descriptor cd_S8516C2 = {  "S8516C2", // class name
  0,0,//no base classes
  &(vtc_S8516C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,268), // object size
  NSPAIRA(_ZTI7S8516C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8516C2),15, //virtual function table var
  2, // 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  S8516C12  {
  void *s8516c12f0;
  int s8516c12f1;
  virtual  ~S8516C12(); // _ZN8S8516C12D1Ev
  virtual void  v21(); // _ZN8S8516C123v21Ev
  S8516C12(); // tgen
};
//SIG(-1 S8516C12) C1{ vd v1 Fp Fi}


 S8516C12 ::~S8516C12(){ note_dtor("S8516C12", this);}
void  S8516C12 ::v21(){vfunc_called(this, "_ZN8S8516C123v21Ev");}
S8516C12 ::S8516C12(){ note_ctor("S8516C12", this);} // tgen

static void Test_S8516C12()
{
  extern Class_Descriptor cd_S8516C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8516C12, buf);
    S8516C12 *dp, &lv = *(dp=new (buf) S8516C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8516C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8516C12)");
    check_field_offset(lv, s8516c12f0, ABISELECT(8,4), "S8516C12.s8516c12f0");
    check_field_offset(lv, s8516c12f1, ABISELECT(16,8), "S8516C12.s8516c12f1");
    test_class_info(&lv, &cd_S8516C12);
    dp->~S8516C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8516C12(Test_S8516C12, "S8516C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S8516C12C1Ev();
extern void _ZN8S8516C12D1Ev();
Name_Map name_map_S8516C12[] = {
  NSPAIR(_ZN8S8516C12C1Ev),
  NSPAIR(_ZN8S8516C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8516C12[];
extern void _ZN8S8516C12D1Ev();
extern void _ZN8S8516C12D0Ev();
extern void _ZN8S8516C123v21Ev();
static  VTBL_ENTRY vtc_S8516C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8516C12[0]),
  (VTBL_ENTRY)&_ZN8S8516C12D1Ev,
  (VTBL_ENTRY)&_ZN8S8516C12D0Ev,
  (VTBL_ENTRY)&_ZN8S8516C123v21Ev,
};
extern VTBL_ENTRY _ZTI8S8516C12[];
extern  VTBL_ENTRY _ZTV8S8516C12[];
Class_Descriptor cd_S8516C12 = {  "S8516C12", // class name
  0,0,//no base classes
  &(vtc_S8516C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S8516C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8516C12),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  S8516C16_nt  {
  int s8516c16f0[2];
};
//SIG(-1 S8516C16_nt) C1{ Fi[2]}



//skip512 S8516C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C15  {
  char s8516c15f0[4];
  int s8516c15f1[21];
  short s8516c15f2[2];
  char s8516c15f3[72];
  short s8516c15f4[4];
  int s8516c15f5[2];
  char s8516c15f6[4];
  ::S8516C16_nt s8516c15f7[8];
  int s8516c15f8[2];
};
//SIG(-1 S8516C15) C1{ Fc[4] Fi[21] Fs[2] Fc[72] Fs[4] Fi[2] Fc[4] FC2{ Fi[2]}[8] Fi[2]}



static void Test_S8516C15()
{
  {
    init_simple_test("S8516C15");
    S8516C15 lv;
    check2(sizeof(lv), 256, "sizeof(S8516C15)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C15)");
    check_field_offset(lv, s8516c15f0, 0, "S8516C15.s8516c15f0");
    check_field_offset(lv, s8516c15f1, 4, "S8516C15.s8516c15f1");
    check_field_offset(lv, s8516c15f2, 88, "S8516C15.s8516c15f2");
    check_field_offset(lv, s8516c15f3, 92, "S8516C15.s8516c15f3");
    check_field_offset(lv, s8516c15f4, 164, "S8516C15.s8516c15f4");
    check_field_offset(lv, s8516c15f5, 172, "S8516C15.s8516c15f5");
    check_field_offset(lv, s8516c15f6, 180, "S8516C15.s8516c15f6");
    check_field_offset(lv, s8516c15f7, 184, "S8516C15.s8516c15f7");
    check_field_offset(lv, s8516c15f8, 248, "S8516C15.s8516c15f8");
  }
}
static Arrange_To_Call_Me vS8516C15(Test_S8516C15, "S8516C15", 256);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C19  {
  int s8516c19f0[2];
  char s8516c19f1[4];
};
//SIG(1 S8516C19) C1{ Fi[2] Fc[4]}



static void Test_S8516C19()
{
  {
    init_simple_test("S8516C19");
    S8516C19 lv;
    check2(sizeof(lv), 12, "sizeof(S8516C19)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C19)");
    check_field_offset(lv, s8516c19f0, 0, "S8516C19.s8516c19f0");
    check_field_offset(lv, s8516c19f1, 8, "S8516C19.s8516c19f1");
  }
}
static Arrange_To_Call_Me vS8516C19(Test_S8516C19, "S8516C19", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C18  {
  short s8516c18f0[2];
  ::S8516C19 s8516c18f1[4];
};
//SIG(-1 S8516C18) C1{ Fs[2] FC2{ Fi[2] Fc[4]}[4]}



static void Test_S8516C18()
{
  {
    init_simple_test("S8516C18");
    S8516C18 lv;
    check2(sizeof(lv), 52, "sizeof(S8516C18)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C18)");
    check_field_offset(lv, s8516c18f0, 0, "S8516C18.s8516c18f0");
    check_field_offset(lv, s8516c18f1, 4, "S8516C18.s8516c18f1");
  }
}
static Arrange_To_Call_Me vS8516C18(Test_S8516C18, "S8516C18", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C23  {
  int s8516c23f0;
  char s8516c23f1[4];
};
//SIG(1 S8516C23) C1{ Fi Fc[4]}



static void Test_S8516C23()
{
  {
    init_simple_test("S8516C23");
    S8516C23 lv;
    check2(sizeof(lv), 8, "sizeof(S8516C23)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C23)");
    check_field_offset(lv, s8516c23f0, 0, "S8516C23.s8516c23f0");
    check_field_offset(lv, s8516c23f1, 4, "S8516C23.s8516c23f1");
  }
}
static Arrange_To_Call_Me vS8516C23(Test_S8516C23, "S8516C23", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C22  {
  short s8516c22f0[2];
  ::S8516C23 s8516c22f1[4];
};
//SIG(-1 S8516C22) C1{ Fs[2] FC2{ Fi Fc[4]}[4]}



static void Test_S8516C22()
{
  {
    init_simple_test("S8516C22");
    S8516C22 lv;
    check2(sizeof(lv), 36, "sizeof(S8516C22)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C22)");
    check_field_offset(lv, s8516c22f0, 0, "S8516C22.s8516c22f0");
    check_field_offset(lv, s8516c22f1, 4, "S8516C22.s8516c22f1");
  }
}
static Arrange_To_Call_Me vS8516C22(Test_S8516C22, "S8516C22", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C17  {
  int s8516c17f0[2];
  char s8516c17f1[4];
  ::S8516C18 s8516c17f2;
  ::S8516C18 s8516c17f3;
  ::S8516C22 s8516c17f4;
  ::S8516C22 s8516c17f5;
  int s8516c17f6;
  char s8516c17f7[4];
};
//SIG(-1 S8516C17) C1{ Fi[2] Fc[4] FC2{ Fs[2] FC3{ Fi[2] Fc[4]}[4]} FC2 FC4{ Fs[2] FC5{ Fi Fc[4]}[4]} FC4 Fi Fc[4]}



static void Test_S8516C17()
{
  {
    init_simple_test("S8516C17");
    S8516C17 lv;
    check2(sizeof(lv), 196, "sizeof(S8516C17)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C17)");
    check_field_offset(lv, s8516c17f0, 0, "S8516C17.s8516c17f0");
    check_field_offset(lv, s8516c17f1, 8, "S8516C17.s8516c17f1");
    check_field_offset(lv, s8516c17f2, 12, "S8516C17.s8516c17f2");
    check_field_offset(lv, s8516c17f3, 64, "S8516C17.s8516c17f3");
    check_field_offset(lv, s8516c17f4, 116, "S8516C17.s8516c17f4");
    check_field_offset(lv, s8516c17f5, 152, "S8516C17.s8516c17f5");
    check_field_offset(lv, s8516c17f6, 188, "S8516C17.s8516c17f6");
    check_field_offset(lv, s8516c17f7, 192, "S8516C17.s8516c17f7");
  }
}
static Arrange_To_Call_Me vS8516C17(Test_S8516C17, "S8516C17", 196);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C14  {
  int s8516c14f0;
  ::S8516C15 s8516c14f1;
  ::S8516C17 s8516c14f2;
};
//SIG(-1 S8516C14) C1{ Fi FC2{ Fc[4] Fi[21] Fs[2] Fc[72] Fs[4] Fi[2] Fc[4] FC3{ Fi[2]}[8] Fi[2]} FC4{ Fi[2] Fc[4] FC5{ Fs[2] FC6{ Fi[2] Fc[4]}[4]} FC5 FC7{ Fs[2] FC8{ Fi Fc[4]}[4]} FC7 Fi Fc[4]}}



static void Test_S8516C14()
{
  {
    init_simple_test("S8516C14");
    S8516C14 lv;
    check2(sizeof(lv), 456, "sizeof(S8516C14)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C14)");
    check_field_offset(lv, s8516c14f0, 0, "S8516C14.s8516c14f0");
    check_field_offset(lv, s8516c14f1, 4, "S8516C14.s8516c14f1");
    check_field_offset(lv, s8516c14f2, 260, "S8516C14.s8516c14f2");
  }
}
static Arrange_To_Call_Me vS8516C14(Test_S8516C14, "S8516C14", 456);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C26  {
  int s8516c26f0[4];
};
//SIG(-1 S8516C26) C1{ Fi[4]}



static void Test_S8516C26()
{
  {
    init_simple_test("S8516C26");
    S8516C26 lv;
    check2(sizeof(lv), 16, "sizeof(S8516C26)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C26)");
    check_field_offset(lv, s8516c26f0, 0, "S8516C26.s8516c26f0");
  }
}
static Arrange_To_Call_Me vS8516C26(Test_S8516C26, "S8516C26", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C28  {
  int s8516c28f0;
  short s8516c28f1[2];
};
//SIG(-1 S8516C28) C1{ Fi Fs[2]}



static void Test_S8516C28()
{
  {
    init_simple_test("S8516C28");
    S8516C28 lv;
    check2(sizeof(lv), 8, "sizeof(S8516C28)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C28)");
    check_field_offset(lv, s8516c28f0, 0, "S8516C28.s8516c28f0");
    check_field_offset(lv, s8516c28f1, 4, "S8516C28.s8516c28f1");
  }
}
static Arrange_To_Call_Me vS8516C28(Test_S8516C28, "S8516C28", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C27  {
  int s8516c27f0;
  ::S8516C28 s8516c27f1;
};
//SIG(-1 S8516C27) C1{ Fi FC2{ Fi Fs[2]}}



static void Test_S8516C27()
{
  {
    init_simple_test("S8516C27");
    S8516C27 lv;
    check2(sizeof(lv), 12, "sizeof(S8516C27)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C27)");
    check_field_offset(lv, s8516c27f0, 0, "S8516C27.s8516c27f0");
    check_field_offset(lv, s8516c27f1, 4, "S8516C27.s8516c27f1");
  }
}
static Arrange_To_Call_Me vS8516C27(Test_S8516C27, "S8516C27", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C32  {
  short s8516c32f0[2];
  char s8516c32f1[72];
  int s8516c32f2[5];
};
//SIG(1 S8516C32) C1{ Fs[2] Fc[72] Fi[5]}



static void Test_S8516C32()
{
  {
    init_simple_test("S8516C32");
    S8516C32 lv;
    check2(sizeof(lv), 96, "sizeof(S8516C32)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C32)");
    check_field_offset(lv, s8516c32f0, 0, "S8516C32.s8516c32f0");
    check_field_offset(lv, s8516c32f1, 4, "S8516C32.s8516c32f1");
    check_field_offset(lv, s8516c32f2, 76, "S8516C32.s8516c32f2");
  }
}
static Arrange_To_Call_Me vS8516C32(Test_S8516C32, "S8516C32", 96);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C31  {
  short s8516c31f0[2];
  ::S8516C32 s8516c31f1[10];
};
//SIG(-1 S8516C31) C1{ Fs[2] FC2{ Fs[2] Fc[72] Fi[5]}[10]}



static void Test_S8516C31()
{
  {
    init_simple_test("S8516C31");
    S8516C31 lv;
    check2(sizeof(lv), 964, "sizeof(S8516C31)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C31)");
    check_field_offset(lv, s8516c31f0, 0, "S8516C31.s8516c31f0");
    check_field_offset(lv, s8516c31f1, 4, "S8516C31.s8516c31f1");
  }
}
static Arrange_To_Call_Me vS8516C31(Test_S8516C31, "S8516C31", 964);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C30  {
  ::S8516C31 s8516c30f0;
  int s8516c30f1[3];
  char s8516c30f2[3];
  int s8516c30f3;
  void  mf8516c30(); // _ZN8S8516C309mf8516c30Ev
};
//SIG(-1 S8516C30) C1{ m FC2{ Fs[2] FC3{ Fs[2] Fc[72] Fi[5]}[10]} Fi[3] Fc[3] Fi}


void  S8516C30 ::mf8516c30(){}

static void Test_S8516C30()
{
  {
    init_simple_test("S8516C30");
    S8516C30 lv;
    check2(sizeof(lv), 984, "sizeof(S8516C30)");
    check2(__alignof__(lv), 4, "__alignof__(S8516C30)");
    check_field_offset(lv, s8516c30f0, 0, "S8516C30.s8516c30f0");
    check_field_offset(lv, s8516c30f1, 964, "S8516C30.s8516c30f1");
    check_field_offset(lv, s8516c30f2, 976, "S8516C30.s8516c30f2");
    check_field_offset(lv, s8516c30f3, 980, "S8516C30.s8516c30f3");
  }
}
static Arrange_To_Call_Me vS8516C30(Test_S8516C30, "S8516C30", 984);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8516C1  : S8516C2 , S8516C12 {
  ::S8516C3_nt s8516c1f0;
  ::S8516C10_nt s8516c1f1;
  ::S8516C14 s8516c1f2;
  ::S8516C14 s8516c1f3;
  int s8516c1f4;
  ::S8516C26 s8516c1f5;
  char s8516c1f6;
  int s8516c1f7[4];
  char s8516c1f8[3];
  int s8516c1f9;
  void *s8516c1f10;
  int s8516c1f11[2];
  void *s8516c1f12;
  int s8516c1f13[2];
  ::S8516C27 s8516c1f14;
  ::S8516C16_nt s8516c1f15;
  char s8516c1f16[2];
  ::S8516C30 s8516c1f17;
  int s8516c1f18;
  virtual  ~S8516C1(); // _ZN7S8516C1D1Ev
  virtual void  v1(); // _ZN7S8516C12v1Ev
  virtual void  v2(); // _ZN7S8516C12v2Ev
  virtual void  v3(); // _ZN7S8516C12v3Ev
  virtual void  v4(); // _ZN7S8516C12v4Ev
  virtual void  v5(); // _ZN7S8516C12v5Ev
  virtual void  v6(); // _ZN7S8516C12v6Ev
  virtual void  v7(); // _ZN7S8516C12v7Ev
  virtual void  v8(); // _ZN7S8516C12v8Ev
  virtual void  v9(); // _ZN7S8516C12v9Ev
  S8516C1(); // tgen
};
//SIG(1 S8516C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC3{ m FC4{ Fl[4]}} Fi[4] FC5{ Fc[2]}[32] Fc Fi[2] FC6{ m Fi Fc FC7{ m Fp Fi[2] FC8{ m}} FC3 FC9{ m Fp FC10{ Fi[4]}} FC9} FC11{ m FC3 FC9 Fi[5]} Fi[4] Fp} BC12{ vd v21 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC3 FC10 FC13{ Fi FC14{ Fc[4] Fi[21] Fs[2] Fc[72] Fs[4] Fi[2] Fc[4] FC15{ Fi[2]}[8] Fi[2]} FC16{ Fi[2] Fc[4] FC17{ Fs[2] FC18{ Fi[2] Fc[4]}[4]} FC17 FC19{ Fs[2] FC20{ Fi Fc[4]}[4]} FC19 Fi Fc[4]}} FC13 Fi FC21{ Fi[4]} Fc Fi[4] Fc[3] Fi Fp Fi[2] Fp Fi[2] FC22{ Fi FC23{ Fi Fs[2]}} FC15 Fc[2] FC24{ m FC25{ Fs[2] FC26{ Fs[2] Fc[72] Fi[5]}[10]} Fi[3] Fc[3] Fi} Fi}


 S8516C1 ::~S8516C1(){ note_dtor("S8516C1", this);}
void  S8516C1 ::v1(){vfunc_called(this, "_ZN7S8516C12v1Ev");}
void  S8516C1 ::v2(){vfunc_called(this, "_ZN7S8516C12v2Ev");}
void  S8516C1 ::v3(){vfunc_called(this, "_ZN7S8516C12v3Ev");}
void  S8516C1 ::v4(){vfunc_called(this, "_ZN7S8516C12v4Ev");}
void  S8516C1 ::v5(){vfunc_called(this, "_ZN7S8516C12v5Ev");}
void  S8516C1 ::v6(){vfunc_called(this, "_ZN7S8516C12v6Ev");}
void  S8516C1 ::v7(){vfunc_called(this, "_ZN7S8516C12v7Ev");}
void  S8516C1 ::v8(){vfunc_called(this, "_ZN7S8516C12v8Ev");}
void  S8516C1 ::v9(){vfunc_called(this, "_ZN7S8516C12v9Ev");}
S8516C1 ::S8516C1(){ note_ctor("S8516C1", this);} // tgen

static void Test_S8516C1()
{
  extern Class_Descriptor cd_S8516C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(305,578)];
    init_test(&cd_S8516C1, buf);
    S8516C1 *dp, &lv = *(dp=new (buf) S8516C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2432,2308), "sizeof(S8516C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8516C1)");
    check_base_class_offset(lv, (S8516C2*), 0, "S8516C1");
    check_base_class_offset(lv, (S8516C12*), ABISELECT(352,268), "S8516C1");
    check_field_offset(lv, s8516c1f0, ABISELECT(376,280), "S8516C1.s8516c1f0");
    check_field_offset(lv, s8516c1f1, ABISELECT(408,296), "S8516C1.s8516c1f1");
    check_field_offset(lv, s8516c1f2, ABISELECT(424,312), "S8516C1.s8516c1f2");
    check_field_offset(lv, s8516c1f3, ABISELECT(880,768), "S8516C1.s8516c1f3");
    check_field_offset(lv, s8516c1f4, ABISELECT(1336,1224), "S8516C1.s8516c1f4");
    check_field_offset(lv, s8516c1f5, ABISELECT(1340,1228), "S8516C1.s8516c1f5");
    check_field_offset(lv, s8516c1f6, ABISELECT(1356,1244), "S8516C1.s8516c1f6");
    check_field_offset(lv, s8516c1f7, ABISELECT(1360,1248), "S8516C1.s8516c1f7");
    check_field_offset(lv, s8516c1f8, ABISELECT(1376,1264), "S8516C1.s8516c1f8");
    check_field_offset(lv, s8516c1f9, ABISELECT(1380,1268), "S8516C1.s8516c1f9");
    check_field_offset(lv, s8516c1f10, ABISELECT(1384,1272), "S8516C1.s8516c1f10");
    check_field_offset(lv, s8516c1f11, ABISELECT(1392,1276), "S8516C1.s8516c1f11");
    check_field_offset(lv, s8516c1f12, ABISELECT(1400,1284), "S8516C1.s8516c1f12");
    check_field_offset(lv, s8516c1f13, ABISELECT(1408,1288), "S8516C1.s8516c1f13");
    check_field_offset(lv, s8516c1f14, ABISELECT(1416,1296), "S8516C1.s8516c1f14");
    check_field_offset(lv, s8516c1f15, ABISELECT(1428,1308), "S8516C1.s8516c1f15");
    check_field_offset(lv, s8516c1f16, ABISELECT(1436,1316), "S8516C1.s8516c1f16");
    check_field_offset(lv, s8516c1f17, ABISELECT(1440,1320), "S8516C1.s8516c1f17");
    check_field_offset(lv, s8516c1f18, ABISELECT(2424,2304), "S8516C1.s8516c1f18");
    test_class_info(&lv, &cd_S8516C1);
    dp->~S8516C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8516C1(Test_S8516C1, "S8516C1", ABISELECT(2432,2308));

#else // __cplusplus

extern void _ZN7S8516C1C1Ev();
extern void _ZN7S8516C1D1Ev();
Name_Map name_map_S8516C1[] = {
  NSPAIR(_ZN7S8516C1C1Ev),
  NSPAIR(_ZN7S8516C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8516C2;
extern VTBL_ENTRY _ZTI7S8516C2[];
extern  VTBL_ENTRY _ZTV7S8516C2[];
extern Class_Descriptor cd_S8516C12;
extern VTBL_ENTRY _ZTI8S8516C12[];
extern  VTBL_ENTRY _ZTV8S8516C12[];
static Base_Class bases_S8516C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8516C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8516C12,    ABISELECT(352,268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8516C1[];
extern void _ZN7S8516C1D1Ev();
extern void _ZN7S8516C1D0Ev();
extern void _ZN7S8516C23v10Ev();
extern void _ZN7S8516C23v11Ev();
extern void _ZN7S8516C23v12Ev();
extern void _ZN7S8516C23v13Ev();
extern void _ZN7S8516C23v14Ev();
extern void _ZN7S8516C23v15Ev();
extern void _ZN7S8516C23v16Ev();
extern void _ZN7S8516C23v17Ev();
extern void _ZN7S8516C23v18Ev();
extern void _ZN7S8516C23v19Ev();
extern void _ZN7S8516C23v20Ev();
extern void _ZN7S8516C12v1Ev();
extern void _ZN7S8516C12v2Ev();
extern void _ZN7S8516C12v3Ev();
extern void _ZN7S8516C12v4Ev();
extern void _ZN7S8516C12v5Ev();
extern void _ZN7S8516C12v6Ev();
extern void _ZN7S8516C12v7Ev();
extern void _ZN7S8516C12v8Ev();
extern void _ZN7S8516C12v9Ev();
extern void ABISELECT(_ZThn352_N7S8516C1D1Ev,_ZThn268_N7S8516C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S8516C1D0Ev,_ZThn268_N7S8516C1D0Ev)();
extern void _ZN8S8516C123v21Ev();
static  VTBL_ENTRY vtc_S8516C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8516C1[0]),
  (VTBL_ENTRY)&_ZN7S8516C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8516C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8516C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8516C12v9Ev,
  ABISELECT(-352,-268),
  (VTBL_ENTRY)&(_ZTI7S8516C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8516C1D1Ev,_ZThn268_N7S8516C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8516C1D0Ev,_ZThn268_N7S8516C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8516C123v21Ev,
};
extern VTBL_ENTRY _ZTI7S8516C1[];
extern  VTBL_ENTRY _ZTV7S8516C1[];
Class_Descriptor cd_S8516C1 = {  "S8516C1", // class name
  bases_S8516C1, 2,
  &(vtc_S8516C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2432,2308), // object size
  NSPAIRA(_ZTI7S8516C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8516C1),29, //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  S8517C4_nt  {
  __tsi64 s8517c4f0[4];
};
//SIG(-1 S8517C4_nt) C1{ FL[4]}



//skip512 S8517C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8517C3_nt  {
  ::S8517C4_nt s8517c3f0;
  void  mf8517c3(); // _ZN10S8517C3_nt8mf8517c3Ev
};
//SIG(-1 S8517C3_nt) C1{ m FC2{ FL[4]}}


void  S8517C3_nt ::mf8517c3(){}

//skip512 S8517C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8517C6_nt  {
  int s8517c6f0;
  char s8517c6f1;
  ::S22028C26_nt s8517c6f2;
  ::S8517C3_nt s8517c6f3;
  ::S8516C9_nt s8517c6f4;
  ::S8516C9_nt s8517c6f5;
  void  mf8517c6(); // _ZN10S8517C6_nt8mf8517c6Ev
};
//SIG(-1 S8517C6_nt) C1{ m Fi Fc FC2{ m Fp Fi[2] FC3{ m}} FC4{ m FC5{ FL[4]}} FC6{ m Fp FC7{ Fi[4]}} FC6}


void  S8517C6_nt ::mf8517c6(){}

//skip512 S8517C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8517C11  {
  ::S8517C3_nt s8517c11f0;
  ::S8516C9_nt s8517c11f1;
  int s8517c11f2[5];
  void  mf8517c11(); // _ZN8S8517C119mf8517c11Ev
};
//SIG(-1 S8517C11) C1{ m FC2{ m FC3{ FL[4]}} FC4{ m Fp FC5{ Fi[4]}} Fi[5]}


void  S8517C11 ::mf8517c11(){}

static void Test_S8517C11()
{
  {
    init_simple_test("S8517C11");
    S8517C11 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S8517C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8517C11)");
    check_field_offset(lv, s8517c11f0, 0, "S8517C11.s8517c11f0");
    check_field_offset(lv, s8517c11f1, 32, "S8517C11.s8517c11f1");
    check_field_offset(lv, s8517c11f2, ABISELECT(56,52), "S8517C11.s8517c11f2");
  }
}
static Arrange_To_Call_Me vS8517C11(Test_S8517C11, "S8517C11", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8517C2  {
  ::S8517C3_nt s8517c2f0;
  int s8517c2f1[4];
  ::S8516C5 s8517c2f2[32];
  char s8517c2f3;
  int s8517c2f4[2];
  ::S8517C6_nt s8517c2f5;
  ::S8517C11 s8517c2f6;
  int s8517c2f7[4];
  void *s8517c2f8;
  virtual  ~S8517C2(); // _ZN7S8517C2D1Ev
  virtual void  v10(); // _ZN7S8517C23v10Ev
  virtual void  v11(); // _ZN7S8517C23v11Ev
  virtual void  v12(); // _ZN7S8517C23v12Ev
  virtual void  v13(); // _ZN7S8517C23v13Ev
  virtual void  v14(); // _ZN7S8517C23v14Ev
  virtual void  v15(); // _ZN7S8517C23v15Ev
  virtual void  v16(); // _ZN7S8517C23v16Ev
  virtual void  v17(); // _ZN7S8517C23v17Ev
  virtual void  v18(); // _ZN7S8517C23v18Ev
  virtual void  v19(); // _ZN7S8517C23v19Ev
  virtual void  v20(); // _ZN7S8517C23v20Ev
  S8517C2(); // tgen
};
//SIG(-1 S8517C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FC3{ FL[4]}} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC2 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC2 FC8 Fi[5]} Fi[4] Fp}


 S8517C2 ::~S8517C2(){ note_dtor("S8517C2", this);}
void  S8517C2 ::v10(){vfunc_called(this, "_ZN7S8517C23v10Ev");}
void  S8517C2 ::v11(){vfunc_called(this, "_ZN7S8517C23v11Ev");}
void  S8517C2 ::v12(){vfunc_called(this, "_ZN7S8517C23v12Ev");}
void  S8517C2 ::v13(){vfunc_called(this, "_ZN7S8517C23v13Ev");}
void  S8517C2 ::v14(){vfunc_called(this, "_ZN7S8517C23v14Ev");}
void  S8517C2 ::v15(){vfunc_called(this, "_ZN7S8517C23v15Ev");}
void  S8517C2 ::v16(){vfunc_called(this, "_ZN7S8517C23v16Ev");}
void  S8517C2 ::v17(){vfunc_called(this, "_ZN7S8517C23v17Ev");}
void  S8517C2 ::v18(){vfunc_called(this, "_ZN7S8517C23v18Ev");}
void  S8517C2 ::v19(){vfunc_called(this, "_ZN7S8517C23v19Ev");}
void  S8517C2 ::v20(){vfunc_called(this, "_ZN7S8517C23v20Ev");}
S8517C2 ::S8517C2(){ note_ctor("S8517C2", this);} // tgen

static void Test_S8517C2()
{
  extern Class_Descriptor cd_S8517C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,80)];
    init_test(&cd_S8517C2, buf);
    S8517C2 *dp, &lv = *(dp=new (buf) S8517C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,316), "sizeof(S8517C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8517C2)");
    check_field_offset(lv, s8517c2f0, ABISELECT(8,4), "S8517C2.s8517c2f0");
    check_field_offset(lv, s8517c2f1, ABISELECT(40,36), "S8517C2.s8517c2f1");
    check_field_offset(lv, s8517c2f2, ABISELECT(56,52), "S8517C2.s8517c2f2");
    check_field_offset(lv, s8517c2f3, ABISELECT(120,116), "S8517C2.s8517c2f3");
    check_field_offset(lv, s8517c2f4, ABISELECT(124,120), "S8517C2.s8517c2f4");
    check_field_offset(lv, s8517c2f5, ABISELECT(136,128), "S8517C2.s8517c2f5");
    check_field_offset(lv, s8517c2f6, ABISELECT(248,224), "S8517C2.s8517c2f6");
    check_field_offset(lv, s8517c2f7, ABISELECT(328,296), "S8517C2.s8517c2f7");
    check_field_offset(lv, s8517c2f8, ABISELECT(344,312), "S8517C2.s8517c2f8");
    test_class_info(&lv, &cd_S8517C2);
    dp->~S8517C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8517C2(Test_S8517C2, "S8517C2", ABISELECT(352,316));

#else // __cplusplus

extern void _ZN7S8517C2C1Ev();
extern void _ZN7S8517C2D1Ev();
Name_Map name_map_S8517C2[] = {
  NSPAIR(_ZN7S8517C2C1Ev),
  NSPAIR(_ZN7S8517C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8517C2[];
extern void _ZN7S8517C2D1Ev();
extern void _ZN7S8517C2D0Ev();
extern void _ZN7S8517C23v10Ev();
extern void _ZN7S8517C23v11Ev();
extern void _ZN7S8517C23v12Ev();
extern void _ZN7S8517C23v13Ev();
extern void _ZN7S8517C23v14Ev();
extern void _ZN7S8517C23v15Ev();
extern void _ZN7S8517C23v16Ev();
extern void _ZN7S8517C23v17Ev();
extern void _ZN7S8517C23v18Ev();
extern void _ZN7S8517C23v19Ev();
extern void _ZN7S8517C23v20Ev();
static  VTBL_ENTRY vtc_S8517C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8517C2[0]),
  (VTBL_ENTRY)&_ZN7S8517C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8517C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S8517C2[];
extern  VTBL_ENTRY _ZTV7S8517C2[];
Class_Descriptor cd_S8517C2 = {  "S8517C2", // class name
  0,0,//no base classes
  &(vtc_S8517C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,316), // object size
  NSPAIRA(_ZTI7S8517C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8517C2),15, //virtual function table var
  2, // 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  S8517C12  {
  void *s8517c12f0;
  int s8517c12f1;
  virtual  ~S8517C12(); // _ZN8S8517C12D1Ev
  virtual void  v21(); // _ZN8S8517C123v21Ev
  S8517C12(); // tgen
};
//SIG(-1 S8517C12) C1{ vd v1 Fp Fi}


 S8517C12 ::~S8517C12(){ note_dtor("S8517C12", this);}
void  S8517C12 ::v21(){vfunc_called(this, "_ZN8S8517C123v21Ev");}
S8517C12 ::S8517C12(){ note_ctor("S8517C12", this);} // tgen

static void Test_S8517C12()
{
  extern Class_Descriptor cd_S8517C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8517C12, buf);
    S8517C12 *dp, &lv = *(dp=new (buf) S8517C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8517C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8517C12)");
    check_field_offset(lv, s8517c12f0, ABISELECT(8,4), "S8517C12.s8517c12f0");
    check_field_offset(lv, s8517c12f1, ABISELECT(16,8), "S8517C12.s8517c12f1");
    test_class_info(&lv, &cd_S8517C12);
    dp->~S8517C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8517C12(Test_S8517C12, "S8517C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S8517C12C1Ev();
extern void _ZN8S8517C12D1Ev();
Name_Map name_map_S8517C12[] = {
  NSPAIR(_ZN8S8517C12C1Ev),
  NSPAIR(_ZN8S8517C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8517C12[];
extern void _ZN8S8517C12D1Ev();
extern void _ZN8S8517C12D0Ev();
extern void _ZN8S8517C123v21Ev();
static  VTBL_ENTRY vtc_S8517C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8517C12[0]),
  (VTBL_ENTRY)&_ZN8S8517C12D1Ev,
  (VTBL_ENTRY)&_ZN8S8517C12D0Ev,
  (VTBL_ENTRY)&_ZN8S8517C123v21Ev,
};
extern VTBL_ENTRY _ZTI8S8517C12[];
extern  VTBL_ENTRY _ZTV8S8517C12[];
Class_Descriptor cd_S8517C12 = {  "S8517C12", // class name
  0,0,//no base classes
  &(vtc_S8517C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S8517C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8517C12),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  S8517C1  : S8517C2 , S8517C12 {
  ::S8517C3_nt s8517c1f0;
  ::S8516C26 s8517c1f1;
  ::S8516C14 s8517c1f2;
  ::S8516C14 s8517c1f3;
  int s8517c1f4;
  ::S8516C10_nt s8517c1f5;
  char s8517c1f6;
  int s8517c1f7[4];
  char s8517c1f8[3];
  int s8517c1f9;
  void *s8517c1f10;
  int s8517c1f11[2];
  void *s8517c1f12;
  int s8517c1f13[2];
  ::S8516C27 s8517c1f14;
  ::S8516C16_nt s8517c1f15;
  char s8517c1f16[2];
  ::S8516C30 s8517c1f17;
  int s8517c1f18;
  virtual  ~S8517C1(); // _ZN7S8517C1D1Ev
  virtual void  v1(); // _ZN7S8517C12v1Ev
  virtual void  v2(); // _ZN7S8517C12v2Ev
  virtual void  v3(); // _ZN7S8517C12v3Ev
  virtual void  v4(); // _ZN7S8517C12v4Ev
  virtual void  v5(); // _ZN7S8517C12v5Ev
  virtual void  v6(); // _ZN7S8517C12v6Ev
  virtual void  v7(); // _ZN7S8517C12v7Ev
  virtual void  v8(); // _ZN7S8517C12v8Ev
  virtual void  v9(); // _ZN7S8517C12v9Ev
  S8517C1(); // tgen
};
//SIG(1 S8517C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC3{ m FC4{ FL[4]}} Fi[4] FC5{ Fc[2]}[32] Fc Fi[2] FC6{ m Fi Fc FC7{ m Fp Fi[2] FC8{ m}} FC3 FC9{ m Fp FC10{ Fi[4]}} FC9} FC11{ m FC3 FC9 Fi[5]} Fi[4] Fp} BC12{ vd v21 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC3 FC13{ Fi[4]} FC14{ Fi FC15{ Fc[4] Fi[21] Fs[2] Fc[72] Fs[4] Fi[2] Fc[4] FC16{ Fi[2]}[8] Fi[2]} FC17{ Fi[2] Fc[4] FC18{ Fs[2] FC19{ Fi[2] Fc[4]}[4]} FC18 FC20{ Fs[2] FC21{ Fi Fc[4]}[4]} FC20 Fi Fc[4]}} FC14 Fi FC10 Fc Fi[4] Fc[3] Fi Fp Fi[2] Fp Fi[2] FC22{ Fi FC23{ Fi Fs[2]}} FC16 Fc[2] FC24{ m FC25{ Fs[2] FC26{ Fs[2] Fc[72] Fi[5]}[10]} Fi[3] Fc[3] Fi} Fi}


 S8517C1 ::~S8517C1(){ note_dtor("S8517C1", this);}
void  S8517C1 ::v1(){vfunc_called(this, "_ZN7S8517C12v1Ev");}
void  S8517C1 ::v2(){vfunc_called(this, "_ZN7S8517C12v2Ev");}
void  S8517C1 ::v3(){vfunc_called(this, "_ZN7S8517C12v3Ev");}
void  S8517C1 ::v4(){vfunc_called(this, "_ZN7S8517C12v4Ev");}
void  S8517C1 ::v5(){vfunc_called(this, "_ZN7S8517C12v5Ev");}
void  S8517C1 ::v6(){vfunc_called(this, "_ZN7S8517C12v6Ev");}
void  S8517C1 ::v7(){vfunc_called(this, "_ZN7S8517C12v7Ev");}
void  S8517C1 ::v8(){vfunc_called(this, "_ZN7S8517C12v8Ev");}
void  S8517C1 ::v9(){vfunc_called(this, "_ZN7S8517C12v9Ev");}
S8517C1 ::S8517C1(){ note_ctor("S8517C1", this);} // tgen

static void Test_S8517C1()
{
  extern Class_Descriptor cd_S8517C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(305,594)];
    init_test(&cd_S8517C1, buf);
    S8517C1 *dp, &lv = *(dp=new (buf) S8517C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2432,2372), "sizeof(S8517C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8517C1)");
    check_base_class_offset(lv, (S8517C2*), 0, "S8517C1");
    check_base_class_offset(lv, (S8517C12*), ABISELECT(352,316), "S8517C1");
    check_field_offset(lv, s8517c1f0, ABISELECT(376,328), "S8517C1.s8517c1f0");
    check_field_offset(lv, s8517c1f1, ABISELECT(408,360), "S8517C1.s8517c1f1");
    check_field_offset(lv, s8517c1f2, ABISELECT(424,376), "S8517C1.s8517c1f2");
    check_field_offset(lv, s8517c1f3, ABISELECT(880,832), "S8517C1.s8517c1f3");
    check_field_offset(lv, s8517c1f4, ABISELECT(1336,1288), "S8517C1.s8517c1f4");
    check_field_offset(lv, s8517c1f5, ABISELECT(1340,1292), "S8517C1.s8517c1f5");
    check_field_offset(lv, s8517c1f6, ABISELECT(1356,1308), "S8517C1.s8517c1f6");
    check_field_offset(lv, s8517c1f7, ABISELECT(1360,1312), "S8517C1.s8517c1f7");
    check_field_offset(lv, s8517c1f8, ABISELECT(1376,1328), "S8517C1.s8517c1f8");
    check_field_offset(lv, s8517c1f9, ABISELECT(1380,1332), "S8517C1.s8517c1f9");
    check_field_offset(lv, s8517c1f10, ABISELECT(1384,1336), "S8517C1.s8517c1f10");
    check_field_offset(lv, s8517c1f11, ABISELECT(1392,1340), "S8517C1.s8517c1f11");
    check_field_offset(lv, s8517c1f12, ABISELECT(1400,1348), "S8517C1.s8517c1f12");
    check_field_offset(lv, s8517c1f13, ABISELECT(1408,1352), "S8517C1.s8517c1f13");
    check_field_offset(lv, s8517c1f14, ABISELECT(1416,1360), "S8517C1.s8517c1f14");
    check_field_offset(lv, s8517c1f15, ABISELECT(1428,1372), "S8517C1.s8517c1f15");
    check_field_offset(lv, s8517c1f16, ABISELECT(1436,1380), "S8517C1.s8517c1f16");
    check_field_offset(lv, s8517c1f17, ABISELECT(1440,1384), "S8517C1.s8517c1f17");
    check_field_offset(lv, s8517c1f18, ABISELECT(2424,2368), "S8517C1.s8517c1f18");
    test_class_info(&lv, &cd_S8517C1);
    dp->~S8517C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8517C1(Test_S8517C1, "S8517C1", ABISELECT(2432,2372));

#else // __cplusplus

extern void _ZN7S8517C1C1Ev();
extern void _ZN7S8517C1D1Ev();
Name_Map name_map_S8517C1[] = {
  NSPAIR(_ZN7S8517C1C1Ev),
  NSPAIR(_ZN7S8517C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8517C2;
extern VTBL_ENTRY _ZTI7S8517C2[];
extern  VTBL_ENTRY _ZTV7S8517C2[];
extern Class_Descriptor cd_S8517C12;
extern VTBL_ENTRY _ZTI8S8517C12[];
extern  VTBL_ENTRY _ZTV8S8517C12[];
static Base_Class bases_S8517C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8517C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8517C12,    ABISELECT(352,316), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8517C1[];
extern void _ZN7S8517C1D1Ev();
extern void _ZN7S8517C1D0Ev();
extern void _ZN7S8517C23v10Ev();
extern void _ZN7S8517C23v11Ev();
extern void _ZN7S8517C23v12Ev();
extern void _ZN7S8517C23v13Ev();
extern void _ZN7S8517C23v14Ev();
extern void _ZN7S8517C23v15Ev();
extern void _ZN7S8517C23v16Ev();
extern void _ZN7S8517C23v17Ev();
extern void _ZN7S8517C23v18Ev();
extern void _ZN7S8517C23v19Ev();
extern void _ZN7S8517C23v20Ev();
extern void _ZN7S8517C12v1Ev();
extern void _ZN7S8517C12v2Ev();
extern void _ZN7S8517C12v3Ev();
extern void _ZN7S8517C12v4Ev();
extern void _ZN7S8517C12v5Ev();
extern void _ZN7S8517C12v6Ev();
extern void _ZN7S8517C12v7Ev();
extern void _ZN7S8517C12v8Ev();
extern void _ZN7S8517C12v9Ev();
extern void ABISELECT(_ZThn352_N7S8517C1D1Ev,_ZThn316_N7S8517C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S8517C1D0Ev,_ZThn316_N7S8517C1D0Ev)();
extern void _ZN8S8517C123v21Ev();
static  VTBL_ENTRY vtc_S8517C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8517C1[0]),
  (VTBL_ENTRY)&_ZN7S8517C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8517C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8517C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8517C12v9Ev,
  ABISELECT(-352,-316),
  (VTBL_ENTRY)&(_ZTI7S8517C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8517C1D1Ev,_ZThn316_N7S8517C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8517C1D0Ev,_ZThn316_N7S8517C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8517C123v21Ev,
};
extern VTBL_ENTRY _ZTI7S8517C1[];
extern  VTBL_ENTRY _ZTV7S8517C1[];
Class_Descriptor cd_S8517C1 = {  "S8517C1", // class name
  bases_S8517C1, 2,
  &(vtc_S8517C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2432,2372), // object size
  NSPAIRA(_ZTI7S8517C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8517C1),29, //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  S8520C3_nt  {
  __tsi64 s8520c3f0[4];
  void  mf8520c3(); // _ZN10S8520C3_nt8mf8520c3Ev
};
//SIG(-1 S8520C3_nt) C1{ m FL[4]}


void  S8520C3_nt ::mf8520c3(){}

//skip512 S8520C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8520C5_nt  {
  int s8520c5f0;
  char s8520c5f1;
  ::S22028C26_nt s8520c5f2;
  ::S8520C3_nt s8520c5f3;
  ::S8516C9_nt s8520c5f4;
  ::S8516C9_nt s8520c5f5;
  void  mf8520c5(); // _ZN10S8520C5_nt8mf8520c5Ev
};
//SIG(-1 S8520C5_nt) C1{ m Fi Fc FC2{ m Fp Fi[2] FC3{ m}} FC4{ m FL[4]} FC5{ m Fp FC6{ Fi[4]}} FC5}


void  S8520C5_nt ::mf8520c5(){}

//skip512 S8520C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8520C10  {
  ::S8520C3_nt s8520c10f0;
  ::S8516C9_nt s8520c10f1;
  int s8520c10f2[5];
  void  mf8520c10(); // _ZN8S8520C109mf8520c10Ev
};
//SIG(-1 S8520C10) C1{ m FC2{ m FL[4]} FC3{ m Fp FC4{ Fi[4]}} Fi[5]}


void  S8520C10 ::mf8520c10(){}

static void Test_S8520C10()
{
  {
    init_simple_test("S8520C10");
    S8520C10 lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S8520C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8520C10)");
    check_field_offset(lv, s8520c10f0, 0, "S8520C10.s8520c10f0");
    check_field_offset(lv, s8520c10f1, 32, "S8520C10.s8520c10f1");
    check_field_offset(lv, s8520c10f2, ABISELECT(56,52), "S8520C10.s8520c10f2");
  }
}
static Arrange_To_Call_Me vS8520C10(Test_S8520C10, "S8520C10", ABISELECT(80,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8520C2  {
  ::S8520C3_nt s8520c2f0;
  int s8520c2f1[4];
  ::S8516C5 s8520c2f2[32];
  char s8520c2f3;
  int s8520c2f4[2];
  ::S8520C5_nt s8520c2f5;
  ::S8520C10 s8520c2f6;
  int s8520c2f7[4];
  void *s8520c2f8;
  virtual  ~S8520C2(); // _ZN7S8520C2D1Ev
  virtual void  v10(); // _ZN7S8520C23v10Ev
  virtual void  v11(); // _ZN7S8520C23v11Ev
  virtual void  v12(); // _ZN7S8520C23v12Ev
  virtual void  v13(); // _ZN7S8520C23v13Ev
  virtual void  v14(); // _ZN7S8520C23v14Ev
  virtual void  v15(); // _ZN7S8520C23v15Ev
  virtual void  v16(); // _ZN7S8520C23v16Ev
  virtual void  v17(); // _ZN7S8520C23v17Ev
  virtual void  v18(); // _ZN7S8520C23v18Ev
  virtual void  v19(); // _ZN7S8520C23v19Ev
  virtual void  v20(); // _ZN7S8520C23v20Ev
  S8520C2(); // tgen
};
//SIG(-1 S8520C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FL[4]} Fi[4] FC3{ Fc[2]}[32] Fc Fi[2] FC4{ m Fi Fc FC5{ m Fp Fi[2] FC6{ m}} FC2 FC7{ m Fp FC8{ Fi[4]}} FC7} FC9{ m FC2 FC7 Fi[5]} Fi[4] Fp}


 S8520C2 ::~S8520C2(){ note_dtor("S8520C2", this);}
void  S8520C2 ::v10(){vfunc_called(this, "_ZN7S8520C23v10Ev");}
void  S8520C2 ::v11(){vfunc_called(this, "_ZN7S8520C23v11Ev");}
void  S8520C2 ::v12(){vfunc_called(this, "_ZN7S8520C23v12Ev");}
void  S8520C2 ::v13(){vfunc_called(this, "_ZN7S8520C23v13Ev");}
void  S8520C2 ::v14(){vfunc_called(this, "_ZN7S8520C23v14Ev");}
void  S8520C2 ::v15(){vfunc_called(this, "_ZN7S8520C23v15Ev");}
void  S8520C2 ::v16(){vfunc_called(this, "_ZN7S8520C23v16Ev");}
void  S8520C2 ::v17(){vfunc_called(this, "_ZN7S8520C23v17Ev");}
void  S8520C2 ::v18(){vfunc_called(this, "_ZN7S8520C23v18Ev");}
void  S8520C2 ::v19(){vfunc_called(this, "_ZN7S8520C23v19Ev");}
void  S8520C2 ::v20(){vfunc_called(this, "_ZN7S8520C23v20Ev");}
S8520C2 ::S8520C2(){ note_ctor("S8520C2", this);} // tgen

static void Test_S8520C2()
{
  extern Class_Descriptor cd_S8520C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,80)];
    init_test(&cd_S8520C2, buf);
    S8520C2 *dp, &lv = *(dp=new (buf) S8520C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,316), "sizeof(S8520C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8520C2)");
    check_field_offset(lv, s8520c2f0, ABISELECT(8,4), "S8520C2.s8520c2f0");
    check_field_offset(lv, s8520c2f1, ABISELECT(40,36), "S8520C2.s8520c2f1");
    check_field_offset(lv, s8520c2f2, ABISELECT(56,52), "S8520C2.s8520c2f2");
    check_field_offset(lv, s8520c2f3, ABISELECT(120,116), "S8520C2.s8520c2f3");
    check_field_offset(lv, s8520c2f4, ABISELECT(124,120), "S8520C2.s8520c2f4");
    check_field_offset(lv, s8520c2f5, ABISELECT(136,128), "S8520C2.s8520c2f5");
    check_field_offset(lv, s8520c2f6, ABISELECT(248,224), "S8520C2.s8520c2f6");
    check_field_offset(lv, s8520c2f7, ABISELECT(328,296), "S8520C2.s8520c2f7");
    check_field_offset(lv, s8520c2f8, ABISELECT(344,312), "S8520C2.s8520c2f8");
    test_class_info(&lv, &cd_S8520C2);
    dp->~S8520C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8520C2(Test_S8520C2, "S8520C2", ABISELECT(352,316));

#else // __cplusplus

extern void _ZN7S8520C2C1Ev();
extern void _ZN7S8520C2D1Ev();
Name_Map name_map_S8520C2[] = {
  NSPAIR(_ZN7S8520C2C1Ev),
  NSPAIR(_ZN7S8520C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8520C2[];
extern void _ZN7S8520C2D1Ev();
extern void _ZN7S8520C2D0Ev();
extern void _ZN7S8520C23v10Ev();
extern void _ZN7S8520C23v11Ev();
extern void _ZN7S8520C23v12Ev();
extern void _ZN7S8520C23v13Ev();
extern void _ZN7S8520C23v14Ev();
extern void _ZN7S8520C23v15Ev();
extern void _ZN7S8520C23v16Ev();
extern void _ZN7S8520C23v17Ev();
extern void _ZN7S8520C23v18Ev();
extern void _ZN7S8520C23v19Ev();
extern void _ZN7S8520C23v20Ev();
static  VTBL_ENTRY vtc_S8520C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8520C2[0]),
  (VTBL_ENTRY)&_ZN7S8520C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8520C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S8520C2[];
extern  VTBL_ENTRY _ZTV7S8520C2[];
Class_Descriptor cd_S8520C2 = {  "S8520C2", // class name
  0,0,//no base classes
  &(vtc_S8520C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,316), // object size
  NSPAIRA(_ZTI7S8520C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8520C2),15, //virtual function table var
  2, // 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  S8520C11  {
  void *s8520c11f0;
  int s8520c11f1;
  virtual  ~S8520C11(); // _ZN8S8520C11D1Ev
  virtual void  v21(); // _ZN8S8520C113v21Ev
  S8520C11(); // tgen
};
//SIG(-1 S8520C11) C1{ vd v1 Fp Fi}


 S8520C11 ::~S8520C11(){ note_dtor("S8520C11", this);}
void  S8520C11 ::v21(){vfunc_called(this, "_ZN8S8520C113v21Ev");}
S8520C11 ::S8520C11(){ note_ctor("S8520C11", this);} // tgen

static void Test_S8520C11()
{
  extern Class_Descriptor cd_S8520C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8520C11, buf);
    S8520C11 *dp, &lv = *(dp=new (buf) S8520C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8520C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8520C11)");
    check_field_offset(lv, s8520c11f0, ABISELECT(8,4), "S8520C11.s8520c11f0");
    check_field_offset(lv, s8520c11f1, ABISELECT(16,8), "S8520C11.s8520c11f1");
    test_class_info(&lv, &cd_S8520C11);
    dp->~S8520C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8520C11(Test_S8520C11, "S8520C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S8520C11C1Ev();
extern void _ZN8S8520C11D1Ev();
Name_Map name_map_S8520C11[] = {
  NSPAIR(_ZN8S8520C11C1Ev),
  NSPAIR(_ZN8S8520C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8520C11[];
extern void _ZN8S8520C11D1Ev();
extern void _ZN8S8520C11D0Ev();
extern void _ZN8S8520C113v21Ev();
static  VTBL_ENTRY vtc_S8520C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8520C11[0]),
  (VTBL_ENTRY)&_ZN8S8520C11D1Ev,
  (VTBL_ENTRY)&_ZN8S8520C11D0Ev,
  (VTBL_ENTRY)&_ZN8S8520C113v21Ev,
};
extern VTBL_ENTRY _ZTI8S8520C11[];
extern  VTBL_ENTRY _ZTV8S8520C11[];
Class_Descriptor cd_S8520C11 = {  "S8520C11", // class name
  0,0,//no base classes
  &(vtc_S8520C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S8520C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8520C11),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  S8520C1  : S8520C2 , S8520C11 {
  ::S8520C3_nt s8520c1f0;
  ::S8516C26 s8520c1f1;
  ::S8516C14 s8520c1f2;
  ::S8516C14 s8520c1f3;
  int s8520c1f4;
  ::S8516C10_nt s8520c1f5;
  char s8520c1f6;
  int s8520c1f7[4];
  char s8520c1f8[3];
  int s8520c1f9;
  void *s8520c1f10;
  int s8520c1f11[2];
  void *s8520c1f12;
  int s8520c1f13[2];
  ::S8516C27 s8520c1f14;
  ::S8516C16_nt s8520c1f15;
  char s8520c1f16[2];
  ::S8516C30 s8520c1f17;
  int s8520c1f18;
  virtual  ~S8520C1(); // _ZN7S8520C1D1Ev
  virtual void  v1(); // _ZN7S8520C12v1Ev
  virtual void  v2(); // _ZN7S8520C12v2Ev
  virtual void  v3(); // _ZN7S8520C12v3Ev
  virtual void  v4(); // _ZN7S8520C12v4Ev
  virtual void  v5(); // _ZN7S8520C12v5Ev
  virtual void  v6(); // _ZN7S8520C12v6Ev
  virtual void  v7(); // _ZN7S8520C12v7Ev
  virtual void  v8(); // _ZN7S8520C12v8Ev
  virtual void  v9(); // _ZN7S8520C12v9Ev
  S8520C1(); // tgen
};
//SIG(1 S8520C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC3{ m FL[4]} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC3 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC3 FC8 Fi[5]} Fi[4] Fp} BC11{ vd v21 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC3 FC12{ Fi[4]} FC13{ Fi FC14{ Fc[4] Fi[21] Fs[2] Fc[72] Fs[4] Fi[2] Fc[4] FC15{ Fi[2]}[8] Fi[2]} FC16{ Fi[2] Fc[4] FC17{ Fs[2] FC18{ Fi[2] Fc[4]}[4]} FC17 FC19{ Fs[2] FC20{ Fi Fc[4]}[4]} FC19 Fi Fc[4]}} FC13 Fi FC9 Fc Fi[4] Fc[3] Fi Fp Fi[2] Fp Fi[2] FC21{ Fi FC22{ Fi Fs[2]}} FC15 Fc[2] FC23{ m FC24{ Fs[2] FC25{ Fs[2] Fc[72] Fi[5]}[10]} Fi[3] Fc[3] Fi} Fi}


 S8520C1 ::~S8520C1(){ note_dtor("S8520C1", this);}
void  S8520C1 ::v1(){vfunc_called(this, "_ZN7S8520C12v1Ev");}
void  S8520C1 ::v2(){vfunc_called(this, "_ZN7S8520C12v2Ev");}
void  S8520C1 ::v3(){vfunc_called(this, "_ZN7S8520C12v3Ev");}
void  S8520C1 ::v4(){vfunc_called(this, "_ZN7S8520C12v4Ev");}
void  S8520C1 ::v5(){vfunc_called(this, "_ZN7S8520C12v5Ev");}
void  S8520C1 ::v6(){vfunc_called(this, "_ZN7S8520C12v6Ev");}
void  S8520C1 ::v7(){vfunc_called(this, "_ZN7S8520C12v7Ev");}
void  S8520C1 ::v8(){vfunc_called(this, "_ZN7S8520C12v8Ev");}
void  S8520C1 ::v9(){vfunc_called(this, "_ZN7S8520C12v9Ev");}
S8520C1 ::S8520C1(){ note_ctor("S8520C1", this);} // tgen

static void Test_S8520C1()
{
  extern Class_Descriptor cd_S8520C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(305,594)];
    init_test(&cd_S8520C1, buf);
    S8520C1 *dp, &lv = *(dp=new (buf) S8520C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2432,2372), "sizeof(S8520C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8520C1)");
    check_base_class_offset(lv, (S8520C2*), 0, "S8520C1");
    check_base_class_offset(lv, (S8520C11*), ABISELECT(352,316), "S8520C1");
    check_field_offset(lv, s8520c1f0, ABISELECT(376,328), "S8520C1.s8520c1f0");
    check_field_offset(lv, s8520c1f1, ABISELECT(408,360), "S8520C1.s8520c1f1");
    check_field_offset(lv, s8520c1f2, ABISELECT(424,376), "S8520C1.s8520c1f2");
    check_field_offset(lv, s8520c1f3, ABISELECT(880,832), "S8520C1.s8520c1f3");
    check_field_offset(lv, s8520c1f4, ABISELECT(1336,1288), "S8520C1.s8520c1f4");
    check_field_offset(lv, s8520c1f5, ABISELECT(1340,1292), "S8520C1.s8520c1f5");
    check_field_offset(lv, s8520c1f6, ABISELECT(1356,1308), "S8520C1.s8520c1f6");
    check_field_offset(lv, s8520c1f7, ABISELECT(1360,1312), "S8520C1.s8520c1f7");
    check_field_offset(lv, s8520c1f8, ABISELECT(1376,1328), "S8520C1.s8520c1f8");
    check_field_offset(lv, s8520c1f9, ABISELECT(1380,1332), "S8520C1.s8520c1f9");
    check_field_offset(lv, s8520c1f10, ABISELECT(1384,1336), "S8520C1.s8520c1f10");
    check_field_offset(lv, s8520c1f11, ABISELECT(1392,1340), "S8520C1.s8520c1f11");
    check_field_offset(lv, s8520c1f12, ABISELECT(1400,1348), "S8520C1.s8520c1f12");
    check_field_offset(lv, s8520c1f13, ABISELECT(1408,1352), "S8520C1.s8520c1f13");
    check_field_offset(lv, s8520c1f14, ABISELECT(1416,1360), "S8520C1.s8520c1f14");
    check_field_offset(lv, s8520c1f15, ABISELECT(1428,1372), "S8520C1.s8520c1f15");
    check_field_offset(lv, s8520c1f16, ABISELECT(1436,1380), "S8520C1.s8520c1f16");
    check_field_offset(lv, s8520c1f17, ABISELECT(1440,1384), "S8520C1.s8520c1f17");
    check_field_offset(lv, s8520c1f18, ABISELECT(2424,2368), "S8520C1.s8520c1f18");
    test_class_info(&lv, &cd_S8520C1);
    dp->~S8520C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8520C1(Test_S8520C1, "S8520C1", ABISELECT(2432,2372));

#else // __cplusplus

extern void _ZN7S8520C1C1Ev();
extern void _ZN7S8520C1D1Ev();
Name_Map name_map_S8520C1[] = {
  NSPAIR(_ZN7S8520C1C1Ev),
  NSPAIR(_ZN7S8520C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8520C2;
extern VTBL_ENTRY _ZTI7S8520C2[];
extern  VTBL_ENTRY _ZTV7S8520C2[];
extern Class_Descriptor cd_S8520C11;
extern VTBL_ENTRY _ZTI8S8520C11[];
extern  VTBL_ENTRY _ZTV8S8520C11[];
static Base_Class bases_S8520C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8520C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8520C11,    ABISELECT(352,316), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8520C1[];
extern void _ZN7S8520C1D1Ev();
extern void _ZN7S8520C1D0Ev();
extern void _ZN7S8520C23v10Ev();
extern void _ZN7S8520C23v11Ev();
extern void _ZN7S8520C23v12Ev();
extern void _ZN7S8520C23v13Ev();
extern void _ZN7S8520C23v14Ev();
extern void _ZN7S8520C23v15Ev();
extern void _ZN7S8520C23v16Ev();
extern void _ZN7S8520C23v17Ev();
extern void _ZN7S8520C23v18Ev();
extern void _ZN7S8520C23v19Ev();
extern void _ZN7S8520C23v20Ev();
extern void _ZN7S8520C12v1Ev();
extern void _ZN7S8520C12v2Ev();
extern void _ZN7S8520C12v3Ev();
extern void _ZN7S8520C12v4Ev();
extern void _ZN7S8520C12v5Ev();
extern void _ZN7S8520C12v6Ev();
extern void _ZN7S8520C12v7Ev();
extern void _ZN7S8520C12v8Ev();
extern void _ZN7S8520C12v9Ev();
extern void ABISELECT(_ZThn352_N7S8520C1D1Ev,_ZThn316_N7S8520C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S8520C1D0Ev,_ZThn316_N7S8520C1D0Ev)();
extern void _ZN8S8520C113v21Ev();
static  VTBL_ENTRY vtc_S8520C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8520C1[0]),
  (VTBL_ENTRY)&_ZN7S8520C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8520C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8520C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8520C12v9Ev,
  ABISELECT(-352,-316),
  (VTBL_ENTRY)&(_ZTI7S8520C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8520C1D1Ev,_ZThn316_N7S8520C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8520C1D0Ev,_ZThn316_N7S8520C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8520C113v21Ev,
};
extern VTBL_ENTRY _ZTI7S8520C1[];
extern  VTBL_ENTRY _ZTV7S8520C1[];
Class_Descriptor cd_S8520C1 = {  "S8520C1", // class name
  bases_S8520C1, 2,
  &(vtc_S8520C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2432,2372), // object size
  NSPAIRA(_ZTI7S8520C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8520C1),29, //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  S6551C3  {
  void *s6551c3f0;
  long double s6551c3f1;
  __tsi64 s6551c3f2;
  void *s6551c3f3;
  int s6551c3f4:6;
  int s6551c3f5;
  void *s6551c3f6;
  long s6551c3f7[2];
  int s6551c3f8[3];
  void *s6551c3f9[3];
  __tsi64 s6551c3f10;
  long s6551c3f11;
  virtual void  v7(); // _ZN7S6551C32v7Ev
  virtual void  v8(); // _ZN7S6551C32v8Ev
  ~S6551C3(); // tgen
  S6551C3(); // tgen
};
//SIG(-1 S6551C3) C1{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl}


void  S6551C3 ::v7(){vfunc_called(this, "_ZN7S6551C32v7Ev");}
void  S6551C3 ::v8(){vfunc_called(this, "_ZN7S6551C32v8Ev");}
S6551C3 ::~S6551C3(){ note_dtor("S6551C3", this);} // tgen
S6551C3 ::S6551C3(){ note_ctor("S6551C3", this);} // tgen

static void Test_S6551C3()
{
  extern Class_Descriptor cd_S6551C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S6551C3, buf);
    S6551C3 *dp, &lv = *(dp=new (buf) S6551C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S6551C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C3)");
    check_field_offset(lv, s6551c3f0, ABISELECT(8,4), "S6551C3.s6551c3f0");
    check_field_offset(lv, s6551c3f1, ABISELECT(16,8), "S6551C3.s6551c3f1");
    check_field_offset(lv, s6551c3f2, ABISELECT(32,20), "S6551C3.s6551c3f2");
    check_field_offset(lv, s6551c3f3, ABISELECT(40,28), "S6551C3.s6551c3f3");
    set_bf_and_test(lv, s6551c3f4, ABISELECT(48,32), 0, 6, 1, "S6551C3");
    set_bf_and_test(lv, s6551c3f4, ABISELECT(48,32), 0, 6, hide_sll(1LL<<5), "S6551C3");
    check_field_offset(lv, s6551c3f5, ABISELECT(52,36), "S6551C3.s6551c3f5");
    check_field_offset(lv, s6551c3f6, ABISELECT(56,40), "S6551C3.s6551c3f6");
    check_field_offset(lv, s6551c3f7, ABISELECT(64,44), "S6551C3.s6551c3f7");
    check_field_offset(lv, s6551c3f8, ABISELECT(80,52), "S6551C3.s6551c3f8");
    check_field_offset(lv, s6551c3f9, ABISELECT(96,64), "S6551C3.s6551c3f9");
    check_field_offset(lv, s6551c3f10, ABISELECT(120,76), "S6551C3.s6551c3f10");
    check_field_offset(lv, s6551c3f11, ABISELECT(128,84), "S6551C3.s6551c3f11");
    test_class_info(&lv, &cd_S6551C3);
    dp->~S6551C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C3(Test_S6551C3, "S6551C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S6551C3C1Ev();
extern void _ZN7S6551C3D1Ev();
Name_Map name_map_S6551C3[] = {
  NSPAIR(_ZN7S6551C3C1Ev),
  NSPAIR(_ZN7S6551C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6551C3[];
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY vtc_S6551C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C3[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
Class_Descriptor cd_S6551C3 = {  "S6551C3", // class name
  0,0,//no base classes
  &(vtc_S6551C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S6551C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6551C3),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  S6551C2  {
  int s6551c2f0[2];
  __tsi64 s6551c2f1;
  char  :0;
  ::S6551C3 s6551c2f3;
  char s6551c2f4;
  int s6551c2f5;
  long double s6551c2f6;
  virtual void  v2(); // _ZN7S6551C22v2Ev
  virtual void  v3(); // _ZN7S6551C22v3Ev
  virtual void  v4(); // _ZN7S6551C22v4Ev
  ~S6551C2(); // tgen
  S6551C2(); // tgen
};
//SIG(-1 S6551C2) C1{ v1 v2 v3 Fi[2] FL Fc:0 FC2{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD}


void  S6551C2 ::v2(){vfunc_called(this, "_ZN7S6551C22v2Ev");}
void  S6551C2 ::v3(){vfunc_called(this, "_ZN7S6551C22v3Ev");}
void  S6551C2 ::v4(){vfunc_called(this, "_ZN7S6551C22v4Ev");}
S6551C2 ::~S6551C2(){ note_dtor("S6551C2", this);} // tgen
S6551C2 ::S6551C2(){ note_ctor("S6551C2", this);} // tgen

static void Test_S6551C2()
{
  extern Class_Descriptor cd_S6551C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S6551C2, buf);
    S6551C2 *dp, &lv = *(dp=new (buf) S6551C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S6551C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C2)");
    check_field_offset(lv, s6551c2f0, ABISELECT(8,4), "S6551C2.s6551c2f0");
    check_field_offset(lv, s6551c2f1, ABISELECT(16,12), "S6551C2.s6551c2f1");
    check_field_offset(lv, s6551c2f3, ABISELECT(32,20), "S6551C2.s6551c2f3");
    check_field_offset(lv, s6551c2f4, ABISELECT(176,108), "S6551C2.s6551c2f4");
    check_field_offset(lv, s6551c2f5, ABISELECT(180,112), "S6551C2.s6551c2f5");
    check_field_offset(lv, s6551c2f6, ABISELECT(192,116), "S6551C2.s6551c2f6");
    test_class_info(&lv, &cd_S6551C2);
    dp->~S6551C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C2(Test_S6551C2, "S6551C2", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S6551C2C1Ev();
extern void _ZN7S6551C2D1Ev();
Name_Map name_map_S6551C2[] = {
  NSPAIR(_ZN7S6551C2C1Ev),
  NSPAIR(_ZN7S6551C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6551C2[];
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
static  VTBL_ENTRY vtc_S6551C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C2[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
Class_Descriptor cd_S6551C2 = {  "S6551C2", // class name
  0,0,//no base classes
  &(vtc_S6551C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S6551C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6551C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6551C4  : S6551C2 {
  ::S6551C3 s6551c4f0;
  int s6551c4f1;
  ::S6551C3 s6551c4f2;
  ::S6551C2 s6551c4f3;
  ::S6551C3 s6551c4f4;
  long double s6551c4f5;
  void *s6551c4f6;
  int s6551c4f7;
  long double s6551c4f8;
  char  :0;
  virtual void  v5(); // _ZN7S6551C42v5Ev
  virtual void  v6(); // _ZN7S6551C42v6Ev
  ~S6551C4(); // tgen
  S6551C4(); // tgen
};
//SIG(-1 S6551C4) C1{ BC2{ v3 v4 v5 Fi[2] FL Fc:0 FC3{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v1 v2 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0}


void  S6551C4 ::v5(){vfunc_called(this, "_ZN7S6551C42v5Ev");}
void  S6551C4 ::v6(){vfunc_called(this, "_ZN7S6551C42v6Ev");}
S6551C4 ::~S6551C4(){ note_dtor("S6551C4", this);} // tgen
S6551C4 ::S6551C4(){ note_ctor("S6551C4", this);} // tgen

static void Test_S6551C4()
{
  extern Class_Descriptor cd_S6551C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,140)];
    init_test(&cd_S6551C4, buf);
    S6551C4 *dp, &lv = *(dp=new (buf) S6551C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,556), "sizeof(S6551C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C4)");
    check_base_class_offset(lv, (S6551C2*), 0, "S6551C4");
    check_field_offset(lv, s6551c4f0, ABISELECT(208,128), "S6551C4.s6551c4f0");
    check_field_offset(lv, s6551c4f1, ABISELECT(352,216), "S6551C4.s6551c4f1");
    check_field_offset(lv, s6551c4f2, ABISELECT(368,220), "S6551C4.s6551c4f2");
    check_field_offset(lv, s6551c4f3, ABISELECT(512,308), "S6551C4.s6551c4f3");
    check_field_offset(lv, s6551c4f4, ABISELECT(720,436), "S6551C4.s6551c4f4");
    check_field_offset(lv, s6551c4f5, ABISELECT(864,524), "S6551C4.s6551c4f5");
    check_field_offset(lv, s6551c4f6, ABISELECT(880,536), "S6551C4.s6551c4f6");
    check_field_offset(lv, s6551c4f7, ABISELECT(888,540), "S6551C4.s6551c4f7");
    check_field_offset(lv, s6551c4f8, ABISELECT(896,544), "S6551C4.s6551c4f8");
    test_class_info(&lv, &cd_S6551C4);
    dp->~S6551C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C4(Test_S6551C4, "S6551C4", ABISELECT(912,556));

#else // __cplusplus

extern void _ZN7S6551C4C1Ev();
extern void _ZN7S6551C4D1Ev();
Name_Map name_map_S6551C4[] = {
  NSPAIR(_ZN7S6551C4C1Ev),
  NSPAIR(_ZN7S6551C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
static Base_Class bases_S6551C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6551C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6551C4[];
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C42v5Ev();
extern void _ZN7S6551C42v6Ev();
static  VTBL_ENTRY vtc_S6551C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C4[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S6551C4[];
extern  VTBL_ENTRY _ZTV7S6551C4[];
Class_Descriptor cd_S6551C4 = {  "S6551C4", // class name
  bases_S6551C4, 1,
  &(vtc_S6551C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(912,556), // object size
  NSPAIRA(_ZTI7S6551C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6551C4),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  S6551C7  : virtual S6551C3 {
  int s6551c7f0;
  int s6551c7f1:7;
  ::S3465C9_nt s6551c7f2;
  void *s6551c7f3;
  int s6551c7f4;
  void *s6551c7f5;
  ~S6551C7(); // tgen
  S6551C7(); // tgen
};
//SIG(-1 S6551C7) C1{ VBC2{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC3{} Fp Fi Fp}


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

static void Test_S6551C7()
{
  extern Class_Descriptor cd_S6551C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S6551C7, buf);
    S6551C7 *dp, &lv = *(dp=new (buf) S6551C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S6551C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C7)");
    check_base_class_offset(lv, (S6551C3*), ABISELECT(48,24), "S6551C7");
    check_field_offset(lv, s6551c7f0, ABISELECT(8,4), "S6551C7.s6551c7f0");
    set_bf_and_test(lv, s6551c7f1, ABISELECT(12,8), 0, 7, 1, "S6551C7");
    set_bf_and_test(lv, s6551c7f1, ABISELECT(12,8), 0, 7, hide_sll(1LL<<6), "S6551C7");
    check_field_offset(lv, s6551c7f2, ABISELECT(13,9), "S6551C7.s6551c7f2");
    check_field_offset(lv, s6551c7f3, ABISELECT(16,12), "S6551C7.s6551c7f3");
    check_field_offset(lv, s6551c7f4, ABISELECT(24,16), "S6551C7.s6551c7f4");
    check_field_offset(lv, s6551c7f5, ABISELECT(32,20), "S6551C7.s6551c7f5");
    test_class_info(&lv, &cd_S6551C7);
    dp->~S6551C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C7(Test_S6551C7, "S6551C7", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN7S6551C7C1Ev();
extern void _ZN7S6551C7D1Ev();
Name_Map name_map_S6551C7[] = {
  NSPAIR(_ZN7S6551C7C1Ev),
  NSPAIR(_ZN7S6551C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
static Base_Class bases_S6551C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6551C3,    ABISELECT(48,24), //bcp->offset
    3, //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 _ZTI7S6551C7[];
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY vtc_S6551C7[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S6551C7[];
static  VTT_ENTRY vtt_S6551C7[] = {
  {&(_ZTV7S6551C7[3]),  3,9},
  {&(_ZTV7S6551C7[7]),  7,9},
};
extern VTBL_ENTRY _ZTI7S6551C7[];
extern  VTBL_ENTRY _ZTV7S6551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C7[];
Class_Descriptor cd_S6551C7 = {  "S6551C7", // class name
  bases_S6551C7, 1,
  &(vtc_S6551C7[0]), // expected_vtbl_contents
  &(vtt_S6551C7[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI7S6551C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6551C7),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6551C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6551C6  : S6551C2 , S6551C3 , virtual S6551C7 {
  short s6551c6f0:16;
  __tsi64 s6551c6f1;
  short s6551c6f2;
  virtual  ~S6551C6(); // _ZN7S6551C6D2Ev
  S6551C6(); // tgen
};
//SIG(-1 S6551C6) C1{ BC2{ v1 v2 v3 Fi[2] FL Fc:0 FC3{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} BC3 VBC4{ VBC3 Fi Fi:7 FC5{} Fp Fi Fp} vd Fs:16 FL Fs}


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

static void Test_S6551C6()
{
  extern Class_Descriptor cd_S6551C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,87)];
    init_test(&cd_S6551C6, buf);
    S6551C6 *dp, &lv = *(dp=new (buf) S6551C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,344), "sizeof(S6551C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C6)");
    check_base_class_offset(lv, (S6551C2*), 0, "S6551C6");
    /*is_ambiguous_... S6551C6::S6551C3 */ AMB_check_base_class_offset(lv, (S6551C3*), ABISELECT(208,128), "S6551C6");
    check_base_class_offset(lv, (S6551C3*)(S6551C7*), ABISELECT(416,256), "S6551C6");
    check_base_class_offset(lv, (S6551C7*), ABISELECT(368,232), "S6551C6");
    set_bf_and_test(lv, s6551c6f0, ABISELECT(344,216), 0, 16, 1, "S6551C6");
    set_bf_and_test(lv, s6551c6f0, ABISELECT(344,216), 0, 16, hide_sll(1LL<<15), "S6551C6");
    check_field_offset(lv, s6551c6f1, ABISELECT(352,220), "S6551C6.s6551c6f1");
    check_field_offset(lv, s6551c6f2, ABISELECT(360,228), "S6551C6.s6551c6f2");
    test_class_info(&lv, &cd_S6551C6);
    dp->~S6551C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C6(Test_S6551C6, "S6551C6", ABISELECT(560,344));

#else // __cplusplus

extern void _ZN7S6551C6C1Ev();
extern void _ZN7S6551C6D2Ev();
Name_Map name_map_S6551C6[] = {
  NSPAIR(_ZN7S6551C6C1Ev),
  NSPAIR(_ZN7S6551C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C7;
extern VTBL_ENTRY _ZTI7S6551C7[];
extern  VTBL_ENTRY _ZTV7S6551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C7[];
static Base_Class bases_S6551C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6551C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6551C3,    ABISELECT(208,128), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6551C3,    ABISELECT(416,256), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S6551C7,    ABISELECT(368,232), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6551C6[];
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C6D1Ev();
extern void _ZN7S6551C6D0Ev();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY vtc_S6551C6[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6551C6D0Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S6551C6[];
static  VTBL_ENTRY _tg__ZTV7S6551C7__7S6551C6[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__7S6551C7__7S6551C6[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
static  VTT_ENTRY vtt_S6551C6[] = {
  {&(_ZTV7S6551C6[4]),  4,22},
  {&(_ZTV7S6551C6[16]),  16,22},
  {&(_ZTV7S6551C6[20]),  20,22},
  {&(_tg__ZTV7S6551C7__7S6551C6[3]),  3,3},
  {&(_tg__ZTV7S6551C3__7S6551C7__7S6551C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S6551C6[];
extern  VTBL_ENTRY _ZTV7S6551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C6[];
Class_Descriptor cd_S6551C6 = {  "S6551C6", // class name
  bases_S6551C6, 4,
  &(vtc_S6551C6[0]), // expected_vtbl_contents
  &(vtt_S6551C6[0]), // expected_vtt_contents
  ABISELECT(560,344), // object size
  NSPAIRA(_ZTI7S6551C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6551C6),22, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6551C6),5, //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  S6551C5  : S6551C2 , virtual S6551C4 , S6551C3 , S6551C6 , S6551C7 {
  ::S6551C3 s6551c5f0;
  char s6551c5f1;
  int s6551c5f2;
  short s6551c5f3;
  ::S6551C6 s6551c5f4;
  long double s6551c5f5[2];
  int s6551c5f6[2];
  long double s6551c5f7;
  virtual  ~S6551C5(); // _ZN7S6551C5D2Ev
  virtual void  v9(); // _ZN7S6551C52v9Ev
  virtual void  v10(); // _ZN7S6551C53v10Ev
  virtual void  v11(); // _ZN7S6551C53v11Ev
  S6551C5(); // tgen
};
//SIG(-1 S6551C5) C1{ BC2{ v4 v5 v6 Fi[2] FL Fc:0 FC3{ v9 v10 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} VBC4{ BC2 v7 v8 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0} BC3 BC5{ BC2 BC3 VBC6{ VBC3 Fi Fi:7 FC7{} Fp Fi Fp} vd Fs:16 FL Fs} BC6 vd v1 v2 v3 FC3 Fc Fi Fs FC5 FD[2] Fi[2] FD}


 S6551C5 ::~S6551C5(){ note_dtor("S6551C5", this);}
void  S6551C5 ::v9(){vfunc_called(this, "_ZN7S6551C52v9Ev");}
void  S6551C5 ::v10(){vfunc_called(this, "_ZN7S6551C53v10Ev");}
void  S6551C5 ::v11(){vfunc_called(this, "_ZN7S6551C53v11Ev");}
S6551C5 ::S6551C5(){ note_ctor("S6551C5", this);} // tgen

static void Test_S6551C5()
{
  extern Class_Descriptor cd_S6551C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(167,408)];
    init_test(&cd_S6551C5, buf);
    S6551C5 *dp, &lv = *(dp=new (buf) S6551C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2656,1628), "sizeof(S6551C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C5)");
    /*is_ambiguous_... S6551C5::S6551C2 */ AMB_check_base_class_offset(lv, (S6551C2*), 0, "S6551C5");
    check_base_class_offset(lv, (S6551C2*)(S6551C4*), ABISELECT(1552,960), "S6551C5");
    check_base_class_offset(lv, (S6551C4*), ABISELECT(1552,960), "S6551C5");
    /*is_ambiguous_... S6551C5::S6551C3 */ AMB_check_base_class_offset(lv, (S6551C3*), ABISELECT(208,128), "S6551C5");
    check_base_class_offset(lv, (S6551C2*)(S6551C6*), ABISELECT(352,216), "S6551C5");
    /*is_ambiguous_... S6551C6::S6551C3 */ AMB_check_base_class_offset(lv, (S6551C3*)(S6551C6*), ABISELECT(560,344), "S6551C5");
    /*is_ambiguous_... S6551C5::S6551C7 */ AMB_check_base_class_offset(lv, (S6551C3*)(S6551C7*), ABISELECT(2512,1540), "S6551C5");
    /*is_ambiguous_... S6551C5::S6551C7 */ AMB_check_base_class_offset(lv, (S6551C3*)(S6551C7*), ABISELECT(2512,1540), "S6551C5");
    check_base_class_offset(lv, (S6551C7*)(S6551C6*), ABISELECT(2464,1516), "S6551C5");
    check_base_class_offset(lv, (S6551C6*), ABISELECT(352,216), "S6551C5");
    /*is_ambiguous_... S6551C5::S6551C7 */ AMB_check_base_class_offset(lv, (S6551C7*), ABISELECT(720,448), "S6551C5");
    check_field_offset(lv, s6551c5f0, ABISELECT(768,472), "S6551C5.s6551c5f0");
    check_field_offset(lv, s6551c5f1, ABISELECT(912,560), "S6551C5.s6551c5f1");
    check_field_offset(lv, s6551c5f2, ABISELECT(916,564), "S6551C5.s6551c5f2");
    check_field_offset(lv, s6551c5f3, ABISELECT(920,568), "S6551C5.s6551c5f3");
    check_field_offset(lv, s6551c5f4, ABISELECT(928,572), "S6551C5.s6551c5f4");
    check_field_offset(lv, s6551c5f5, ABISELECT(1488,916), "S6551C5.s6551c5f5");
    check_field_offset(lv, s6551c5f6, ABISELECT(1520,940), "S6551C5.s6551c5f6");
    check_field_offset(lv, s6551c5f7, ABISELECT(1536,948), "S6551C5.s6551c5f7");
    test_class_info(&lv, &cd_S6551C5);
    dp->~S6551C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C5(Test_S6551C5, "S6551C5", ABISELECT(2656,1628));

#else // __cplusplus

extern void _ZN7S6551C5C1Ev();
extern void _ZN7S6551C5D2Ev();
Name_Map name_map_S6551C5[] = {
  NSPAIR(_ZN7S6551C5C1Ev),
  NSPAIR(_ZN7S6551C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C4;
extern VTBL_ENTRY _ZTI7S6551C4[];
extern  VTBL_ENTRY _ZTV7S6551C4[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C7;
extern VTBL_ENTRY _ZTI7S6551C7[];
extern  VTBL_ENTRY _ZTV7S6551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C7[];
extern Class_Descriptor cd_S6551C6;
extern VTBL_ENTRY _ZTI7S6551C6[];
extern  VTBL_ENTRY _ZTV7S6551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C6[];
extern Class_Descriptor cd_S6551C7;
extern VTBL_ENTRY _ZTI7S6551C7[];
extern  VTBL_ENTRY _ZTV7S6551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C7[];
static Base_Class bases_S6551C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6551C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6551C2,    ABISELECT(1552,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6551C4,    ABISELECT(1552,960), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S6551C3,    ABISELECT(208,128), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6551C2,    ABISELECT(352,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6551C3,    ABISELECT(560,344), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6551C3,    ABISELECT(2512,1540), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //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
    7, //immediately_derived
  0, 1},
  {&cd_S6551C7,    ABISELECT(2464,1516), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S6551C6,    ABISELECT(352,216), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6551C7,    ABISELECT(720,448), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6551C5[];
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C5D1Ev();
extern void _ZN7S6551C5D0Ev();
extern void _ZN7S6551C52v9Ev();
extern void _ZN7S6551C53v10Ev();
extern void _ZN7S6551C53v11Ev();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void ABISELECT(_ZThn352_N7S6551C5D1Ev,_ZThn216_N7S6551C5D1Ev)();
extern void ABISELECT(_ZThn352_N7S6551C5D0Ev,_ZThn216_N7S6551C5D0Ev)();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C42v5Ev();
extern void _ZN7S6551C42v6Ev();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY vtc_S6551C5[] = {
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6551C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6551C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6551C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6551C53v11Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S6551C5D1Ev,_ZThn216_N7S6551C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S6551C5D0Ev,_ZThn216_N7S6551C5D0Ev),
  ABISELECT(-560,-344),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
  ABISELECT(1792,1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v6Ev,
  ABISELECT(48,24),
  ABISELECT(-2464,-1516),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
extern VTBL_ENTRY _ZTV7S6551C5[];
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C6D1Ev();
extern void _ZN7S6551C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C6__7S6551C5[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6551C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6551C7__7S6551C6__7S6551C5[] = {
  ABISELECT(48,24),
  ABISELECT(-2112,-1300),
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__A1__7S6551C6__7S6551C5[] = {
  0,
  0,
  ABISELECT(-2160,-1324),
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6551C7__A__7S6551C5[] = {
  ABISELECT(1792,1092),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__7S6551C7__A__7S6551C5[] = {
  0,
  0,
  ABISELECT(-1792,-1092),
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6551C7__7S6551C5[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__7S6551C7__7S6551C5[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
static  VTT_ENTRY vtt_S6551C5[] = {
  {&(_ZTV7S6551C5[5]),  5,54},
  {&(_tg__ZTV7S6551C6__7S6551C5[4]),  4,9},
  {&(_tg__ZTV7S6551C7__7S6551C6__7S6551C5[3]),  3,3},
  {&(_tg__ZTV7S6551C3__A1__7S6551C6__7S6551C5[4]),  4,6},
  {&(_tg__ZTV7S6551C7__A__7S6551C5[3]),  3,3},
  {&(_tg__ZTV7S6551C3__7S6551C7__A__7S6551C5[4]),  4,6},
  {&(_ZTV7S6551C5[40]),  40,54},
  {&(_ZTV7S6551C5[21]),  21,54},
  {&(_ZTV7S6551C5[48]),  48,54},
  {&(_ZTV7S6551C5[52]),  52,54},
  {&(_ZTV7S6551C5[33]),  33,54},
  {&(_tg__ZTV7S6551C7__7S6551C5[3]),  3,3},
  {&(_tg__ZTV7S6551C3__7S6551C7__7S6551C5[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S6551C5[];
extern  VTBL_ENTRY _ZTV7S6551C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C5[];
Class_Descriptor cd_S6551C5 = {  "S6551C5", // class name
  bases_S6551C5, 10,
  &(vtc_S6551C5[0]), // expected_vtbl_contents
  &(vtt_S6551C5[0]), // expected_vtt_contents
  ABISELECT(2656,1628), // object size
  NSPAIRA(_ZTI7S6551C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6551C5),54, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6551C5),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6551C10  {
  ::S3465C14 s6551c10f0[6];
  int s6551c10f1;
  ::S3465C17 s6551c10f2;
  int s6551c10f3;
  void *s6551c10f4[2];
  char s6551c10f5;
  void *s6551c10f6;
  virtual void  v12(); // _ZN8S6551C103v12Ev
  virtual void  v13(); // _ZN8S6551C103v13Ev
  virtual void  v14(); // _ZN8S6551C103v14Ev
  virtual void  v15(); // _ZN8S6551C103v15Ev
  virtual void  v16(); // _ZN8S6551C103v16Ev
  ~S6551C10(); // tgen
  S6551C10(); // tgen
};
//SIG(-1 S6551C10) C1{ v1 v2 v3 v4 v5 FC2{ vd m Fp FC3{} Fp Fi FC4{ BC5{ v8 v9 v10 Fi[2] FL Fc:0 FC6{ v11 v12 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v6 v7 FC6 Fi FC6 FC5 FC6 FD Fp Fi FD Fc:0} FC5[5]}[6] Fi FC7{ BC4 FD} Fi Fp[2] Fc Fp}


void  S6551C10 ::v12(){vfunc_called(this, "_ZN8S6551C103v12Ev");}
void  S6551C10 ::v13(){vfunc_called(this, "_ZN8S6551C103v13Ev");}
void  S6551C10 ::v14(){vfunc_called(this, "_ZN8S6551C103v14Ev");}
void  S6551C10 ::v15(){vfunc_called(this, "_ZN8S6551C103v15Ev");}
void  S6551C10 ::v16(){vfunc_called(this, "_ZN8S6551C103v16Ev");}
S6551C10 ::~S6551C10(){ note_dtor("S6551C10", this);} // tgen
S6551C10 ::S6551C10(){ note_ctor("S6551C10", this);} // tgen

static void Test_S6551C10()
{
  extern Class_Descriptor cd_S6551C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(814,1974)];
    init_test(&cd_S6551C10, buf);
    S6551C10 *dp, &lv = *(dp=new (buf) S6551C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13008,7892), "sizeof(S6551C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C10)");
    check_field_offset(lv, s6551c10f0, ABISELECT(16,4), "S6551C10.s6551c10f0");
    check_field_offset(lv, s6551c10f1, ABISELECT(12016,7300), "S6551C10.s6551c10f1");
    check_field_offset(lv, s6551c10f2, ABISELECT(12032,7304), "S6551C10.s6551c10f2");
    check_field_offset(lv, s6551c10f3, ABISELECT(12960,7872), "S6551C10.s6551c10f3");
    check_field_offset(lv, s6551c10f4, ABISELECT(12968,7876), "S6551C10.s6551c10f4");
    check_field_offset(lv, s6551c10f5, ABISELECT(12984,7884), "S6551C10.s6551c10f5");
    check_field_offset(lv, s6551c10f6, ABISELECT(12992,7888), "S6551C10.s6551c10f6");
    test_class_info(&lv, &cd_S6551C10);
    dp->~S6551C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C10(Test_S6551C10, "S6551C10", ABISELECT(13008,7892));

#else // __cplusplus

extern void _ZN8S6551C10C1Ev();
extern void _ZN8S6551C10D1Ev();
Name_Map name_map_S6551C10[] = {
  NSPAIR(_ZN8S6551C10C1Ev),
  NSPAIR(_ZN8S6551C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6551C10[];
extern void _ZN8S6551C103v12Ev();
extern void _ZN8S6551C103v13Ev();
extern void _ZN8S6551C103v14Ev();
extern void _ZN8S6551C103v15Ev();
extern void _ZN8S6551C103v16Ev();
static  VTBL_ENTRY vtc_S6551C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6551C10[0]),
  (VTBL_ENTRY)&_ZN8S6551C103v12Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v13Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v14Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v15Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v16Ev,
};
extern VTBL_ENTRY _ZTI8S6551C10[];
extern  VTBL_ENTRY _ZTV8S6551C10[];
Class_Descriptor cd_S6551C10 = {  "S6551C10", // class name
  0,0,//no base classes
  &(vtc_S6551C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13008,7892), // object size
  NSPAIRA(_ZTI8S6551C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6551C10),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  S6551C1  : S6551C2 , virtual S6551C4 , virtual S6551C5 , virtual S3465C14 , virtual S6551C10 {
  ::S6551C3 s6551c1f0;
  __tsi64 s6551c1f1;
  ::S3465C10 s6551c1f2;
  int s6551c1f3;
  __tsi64 s6551c1f4;
  void *s6551c1f5;
  __tsi64 s6551c1f6;
  ::S6551C3 s6551c1f7;
  ::S6551C3 s6551c1f8[5];
  ::S6551C3 s6551c1f9;
  virtual  ~S6551C1(); // _ZN7S6551C1D2Ev
  virtual void  v1(); // _ZN7S6551C12v1Ev
  S6551C1(); // tgen
};
//SIG(1 S6551C1) C1{ BC2{ v2 v3 v4 Fi[2] FL Fc:0 FC3{ v7 v8 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} VBC4{ BC2 v5 v6 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0} VBC5{ BC2 VBC4 BC3 BC6{ BC2 BC3 VBC7{ VBC3 Fi Fi:7 FC8{} Fp Fi Fp} vd Fs:16 FL Fs} BC7 vd v9 v10 v11 FC3 Fc Fi Fs FC6 FD[2] Fi[2] FD} VBC9{ vd m Fp FC8 Fp Fi FC10{ BC11{ v20 v21 v22 Fi[2] FL Fc:0 FC12{ v18 v19 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v23 v24 FC12 Fi FC12 FC11 FC12 FD Fp Fi FD Fc:0} FC11[5]} VBC13{ v12 v13 v14 v15 v16 FC9[6] Fi FC14{ BC10 FD} Fi Fp[2] Fc Fp} vd v1 FC3 FL FC15{ VBC12 VBC16{ BC11 BC12 VBC17{ VBC12 Fi Fi:7 FC8 Fp Fi Fp} vd Fs:16 FL Fs} VBC18{ VBC19{ BC17 BC10 VBC11 BC12 VBC16 vd Fs} VBC10 BC11 vd v25 v26 v27 Fl[2] FC16 Fi FD FC11 FC12 Fc FD FC8 FL:64 FC12} VBC20{ VBC19 BC12 VBC10 BC16 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC8 Fi[5] FC9} vd v17 FL FC17 Fp[2] Fi FC12 Fi[8]} Fi FL Fp FL FC3 FC3[5] FC3}


 S6551C1 ::~S6551C1(){ note_dtor("S6551C1", this);}
void  S6551C1 ::v1(){vfunc_called(this, "_ZN7S6551C12v1Ev");}
S6551C1 ::S6551C1(){ note_ctor("S6551C1", this);} // tgen

static void Test_S6551C1()
{
  extern Class_Descriptor cd_S6551C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1643,4002)];
    init_test(&cd_S6551C1, buf);
    S6551C1 *dp, &lv = *(dp=new (buf) S6551C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(26272,16004), "sizeof(S6551C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6551C1)");
    /*is_ambiguous_... S6551C1::S6551C2 */ AMB_check_base_class_offset(lv, (S6551C2*), 0, "S6551C1");
    check_base_class_offset(lv, (S6551C2*)(S6551C4*), ABISELECT(8608,5268), "S6551C1");
    check_base_class_offset(lv, (S6551C4*), ABISELECT(8608,5268), "S6551C1");
    check_base_class_offset(lv, (S6551C4*)(S6551C5*), ABISELECT(8608,5268), "S6551C1");
    /*is_ambiguous_... S6551C5::S6551C2 */ AMB_check_base_class_offset(lv, (S6551C2*)(S6551C5*), ABISELECT(9520,5824), "S6551C1");
    /*is_ambiguous_... S6551C5::S6551C3 */ AMB_check_base_class_offset(lv, (S6551C3*)(S6551C5*), ABISELECT(9728,5952), "S6551C1");
    check_base_class_offset(lv, (S6551C2*)(S6551C6*)(S6551C5*), ABISELECT(9872,6040), "S6551C1");
    /*is_ambiguous_... S6551C6::S6551C3 */ AMB_check_base_class_offset(lv, (S6551C3*)(S6551C6*)(S6551C5*), ABISELECT(10080,6168), "S6551C1");
    /*is_ambiguous_... S6551C1::S6551C7 */ AMB_check_base_class_offset(lv, (S6551C3*)(S6551C7*), ABISELECT(11120,6808), "S6551C1");
    /*is_ambiguous_... S6551C5::S6551C7 */ AMB_check_base_class_offset(lv, (S6551C3*)(S6551C7*)(S6551C5*), ABISELECT(11120,6808), "S6551C1");
    check_base_class_offset(lv, (S6551C7*)(S6551C6*)(S6551C5*), ABISELECT(11072,6784), "S6551C1");
    check_base_class_offset(lv, (S6551C6*)(S6551C5*), ABISELECT(9872,6040), "S6551C1");
    /*is_ambiguous_... S6551C5::S6551C7 */ AMB_check_base_class_offset(lv, (S6551C7*)(S6551C5*), ABISELECT(10240,6272), "S6551C1");
    check_base_class_offset(lv, (S6551C5*), ABISELECT(9520,5824), "S6551C1");
    check_base_class_offset(lv, (S3465C14*), ABISELECT(11264,6896), "S6551C1");
    check_base_class_offset(lv, (S6551C10*), ABISELECT(13264,8112), "S6551C1");
    check_field_offset(lv, s6551c1f0, ABISELECT(208,128), "S6551C1.s6551c1f0");
    check_field_offset(lv, s6551c1f1, ABISELECT(352,216), "S6551C1.s6551c1f1");
    check_field_offset(lv, s6551c1f2, ABISELECT(368,224), "S6551C1.s6551c1f2");
    check_field_offset(lv, s6551c1f3, ABISELECT(7568,4628), "S6551C1.s6551c1f3");
    check_field_offset(lv, s6551c1f4, ABISELECT(7576,4632), "S6551C1.s6551c1f4");
    check_field_offset(lv, s6551c1f5, ABISELECT(7584,4640), "S6551C1.s6551c1f5");
    check_field_offset(lv, s6551c1f6, ABISELECT(7592,4644), "S6551C1.s6551c1f6");
    check_field_offset(lv, s6551c1f7, ABISELECT(7600,4652), "S6551C1.s6551c1f7");
    check_field_offset(lv, s6551c1f8, ABISELECT(7744,4740), "S6551C1.s6551c1f8");
    check_field_offset(lv, s6551c1f9, ABISELECT(8464,5180), "S6551C1.s6551c1f9");
    test_class_info(&lv, &cd_S6551C1);
    dp->~S6551C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6551C1(Test_S6551C1, "S6551C1", ABISELECT(26272,16004));

#else // __cplusplus

extern void _ZN7S6551C1C1Ev();
extern void _ZN7S6551C1D2Ev();
Name_Map name_map_S6551C1[] = {
  NSPAIR(_ZN7S6551C1C1Ev),
  NSPAIR(_ZN7S6551C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C4;
extern VTBL_ENTRY _ZTI7S6551C4[];
extern  VTBL_ENTRY _ZTV7S6551C4[];
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C2;
extern VTBL_ENTRY _ZTI7S6551C2[];
extern  VTBL_ENTRY _ZTV7S6551C2[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C3;
extern VTBL_ENTRY _ZTI7S6551C3[];
extern  VTBL_ENTRY _ZTV7S6551C3[];
extern Class_Descriptor cd_S6551C7;
extern VTBL_ENTRY _ZTI7S6551C7[];
extern  VTBL_ENTRY _ZTV7S6551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C7[];
extern Class_Descriptor cd_S6551C6;
extern VTBL_ENTRY _ZTI7S6551C6[];
extern  VTBL_ENTRY _ZTV7S6551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C6[];
extern Class_Descriptor cd_S6551C7;
extern VTBL_ENTRY _ZTI7S6551C7[];
extern  VTBL_ENTRY _ZTV7S6551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C7[];
extern Class_Descriptor cd_S6551C5;
extern VTBL_ENTRY _ZTI7S6551C5[];
extern  VTBL_ENTRY _ZTV7S6551C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C5[];
extern Class_Descriptor cd_S3465C14;
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
extern Class_Descriptor cd_S6551C10;
extern VTBL_ENTRY _ZTI8S6551C10[];
extern  VTBL_ENTRY _ZTV8S6551C10[];
static Base_Class bases_S6551C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6551C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6551C2,    ABISELECT(8608,5268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6551C4,    ABISELECT(8608,5268), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //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_S6551C2,    ABISELECT(9520,5824), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S6551C3,    ABISELECT(9728,5952), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6551C2,    ABISELECT(9872,6040), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S6551C3,    ABISELECT(10080,6168), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6551C3,    ABISELECT(11120,6808), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //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
    8, //immediately_derived
  0, 1},
  {&cd_S6551C7,    ABISELECT(11072,6784), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6551C6,    ABISELECT(9872,6040), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6551C7,    ABISELECT(10240,6272), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6551C5,    ABISELECT(9520,5824), //bcp->offset
    26, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C14,    ABISELECT(11264,6896), //bcp->offset
    77, //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
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6551C10,    ABISELECT(13264,8112), //bcp->offset
    82, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6551C1[];
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C1D1Ev();
extern void _ZN7S6551C1D0Ev();
extern void _ZN7S6551C12v1Ev();
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C42v5Ev();
extern void _ZN7S6551C42v6Ev();
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void ABISELECT(_ZTv0_n72_N7S6551C1D1Ev,_ZTv0_n36_N7S6551C1D1Ev)();
extern void ABISELECT(_ZThn9520_N7S6551C1D1Ev,_ZThn5824_N7S6551C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6551C1D0Ev,_ZTv0_n36_N7S6551C1D0Ev)();
extern void ABISELECT(_ZThn9520_N7S6551C1D0Ev,_ZThn5824_N7S6551C1D0Ev)() __attribute__((weak));
extern void _ZN7S6551C52v9Ev();
extern void _ZN7S6551C53v10Ev();
extern void _ZN7S6551C53v11Ev();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void ABISELECT(_ZTvn352_n72_N7S6551C1D1Ev,_ZTvn216_n36_N7S6551C1D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N7S6551C1D0Ev,_ZTvn216_n36_N7S6551C1D0Ev)();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
extern void ABISELECT(_ZTv0_n24_N7S6551C1D1Ev,_ZTv0_n12_N7S6551C1D1Ev)();
extern void ABISELECT(_ZThn11264_N7S6551C1D1Ev,_ZThn6896_N7S6551C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6551C1D0Ev,_ZTv0_n12_N7S6551C1D0Ev)();
extern void ABISELECT(_ZThn11264_N7S6551C1D0Ev,_ZThn6896_N7S6551C1D0Ev)() __attribute__((weak));
extern void _ZN8S6551C103v12Ev();
extern void _ZN8S6551C103v13Ev();
extern void _ZN8S6551C103v14Ev();
extern void _ZN8S6551C103v15Ev();
extern void _ZN8S6551C103v16Ev();
static  VTBL_ENTRY vtc_S6551C1[] = {
  ABISELECT(13264,8112),
  ABISELECT(11264,6896),
  ABISELECT(11120,6808),
  ABISELECT(11072,6784),
  ABISELECT(9520,5824),
  ABISELECT(8608,5268),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6551C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6551C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8608,-5268),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v6Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-9520,-5824),
  0,
  0,
  0,
  ABISELECT(1600,984),
  ABISELECT(1552,960),
  ABISELECT(-912,-556),
  ABISELECT(-9520,-5824),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6551C1D1Ev,_ZTv0_n36_N7S6551C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6551C1D0Ev,_ZTv0_n36_N7S6551C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6551C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6551C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6551C53v11Ev,
  ABISELECT(-9728,-5952),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
  ABISELECT(1248,768),
  ABISELECT(1200,744),
  ABISELECT(-9872,-6040),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N7S6551C1D1Ev,_ZTvn216_n36_N7S6551C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N7S6551C1D0Ev,_ZTvn216_n36_N7S6551C1D0Ev),
  ABISELECT(-10080,-6168),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
  ABISELECT(880,536),
  ABISELECT(-10240,-6272),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  ABISELECT(48,24),
  ABISELECT(-11072,-6784),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  0,
  0,
  ABISELECT(-11120,-6808),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
  ABISELECT(-11264,-6896),
  ABISELECT(-11264,-6896),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6551C1D1Ev,_ZTv0_n12_N7S6551C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6551C1D0Ev,_ZTv0_n12_N7S6551C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-13264,-8112),
  (VTBL_ENTRY)&(_ZTI7S6551C1[0]),
  (VTBL_ENTRY)&_ZN8S6551C103v12Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v13Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v14Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v15Ev,
  (VTBL_ENTRY)&_ZN8S6551C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S6551C1[];
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C5D1Ev();
extern void _ZN7S6551C5D0Ev();
extern void _ZN7S6551C52v9Ev();
extern void _ZN7S6551C53v10Ev();
extern void _ZN7S6551C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C5__7S6551C1[] = {
  ABISELECT(1600,984),
  ABISELECT(1552,960),
  ABISELECT(-912,-556),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6551C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6551C52v9Ev,
  (VTBL_ENTRY)&_ZN7S6551C53v10Ev,
  (VTBL_ENTRY)&_ZN7S6551C53v11Ev,
};
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C6D1Ev();
extern void _ZN7S6551C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C67S6551C5__7S6551C1[] = {
  ABISELECT(1248,768),
  ABISELECT(1200,744),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6551C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6551C7__7S6551C67S6551C5__7S6551C1[] = {
  ABISELECT(48,24),
  ABISELECT(-1200,-744),
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__A1__7S6551C67S6551C5__7S6551C1[] = {
  0,
  0,
  ABISELECT(-1248,-768),
  (VTBL_ENTRY)&(_ZTI7S6551C6[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6551C77S6551C5__A1__7S6551C1[] = {
  ABISELECT(880,536),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__7S6551C77S6551C5__A1__7S6551C1[] = {
  0,
  0,
  ABISELECT(-880,-536),
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void _ZN7S6551C42v5Ev();
extern void _ZN7S6551C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C4__7S6551C5__7S6551C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(912,556),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v5Ev,
  (VTBL_ENTRY)&_ZN7S6551C42v6Ev,
};
extern void _ZN7S6551C22v2Ev();
extern void _ZN7S6551C22v3Ev();
extern void _ZN7S6551C22v4Ev();
extern void ABISELECT(_ZThn352_N7S6551C5D1Ev,_ZThn216_N7S6551C5D1Ev)();
extern void ABISELECT(_ZThn352_N7S6551C5D0Ev,_ZThn216_N7S6551C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6551C6__7S6551C5__7S6551C1[] = {
  ABISELECT(1248,768),
  ABISELECT(1200,744),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6551C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S6551C5D1Ev,_ZThn216_N7S6551C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S6551C5D0Ev,_ZThn216_N7S6551C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6551C7__7S6551C5__7S6551C1[] = {
  ABISELECT(48,24),
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__A2__7S6551C5__7S6551C1[] = {
  0,
  0,
  ABISELECT(-1600,-984),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6551C7__A__7S6551C5__7S6551C1[] = {
  ABISELECT(880,536),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI7S6551C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6551C7__7S6551C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
};
extern void _ZN7S6551C32v7Ev();
extern void _ZN7S6551C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S6551C3__7S6551C7__7S6551C1[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6551C7[0]),
  (VTBL_ENTRY)&_ZN7S6551C32v7Ev,
  (VTBL_ENTRY)&_ZN7S6551C32v8Ev,
};
static  VTT_ENTRY vtt_S6551C1[] = {
  {&(_ZTV7S6551C1[8]),  8,94},
  {&(_ZTV7S6551C1[21]),  21,94},
  {&(_ZTV7S6551C1[40]),  40,94},
  {&(_ZTV7S6551C1[50]),  50,94},
  {&(_ZTV7S6551C1[56]),  56,94},
  {&(_ZTV7S6551C1[63]),  63,94},
  {&(_ZTV7S6551C1[71]),  71,94},
  {&(_ZTV7S6551C1[75]),  75,94},
  {&(_ZTV7S6551C1[68]),  68,94},
  {&(_ZTV7S6551C1[80]),  80,94},
  {&(_ZTV7S6551C1[89]),  89,94},
  {&(_tg__ZTV7S6551C5__7S6551C1[5]),  5,13},
  {&(_tg__ZTV7S6551C67S6551C5__7S6551C1[4]),  4,9},
  {&(_tg__ZTV7S6551C7__7S6551C67S6551C5__7S6551C1[3]),  3,3},
  {&(_tg__ZTV7S6551C3__A1__7S6551C67S6551C5__7S6551C1[4]),  4,6},
  {&(_tg__ZTV7S6551C77S6551C5__A1__7S6551C1[3]),  3,3},
  {&(_tg__ZTV7S6551C3__7S6551C77S6551C5__A1__7S6551C1[4]),  4,6},
  {&(_tg__ZTV7S6551C4__7S6551C5__7S6551C1[7]),  7,12},
  {&(_tg__ZTV7S6551C6__7S6551C5__7S6551C1[4]),  4,9},
  {&(_tg__ZTV7S6551C7__7S6551C5__7S6551C1[3]),  3,3},
  {&(_tg__ZTV7S6551C3__A2__7S6551C5__7S6551C1[4]),  4,6},
  {&(_tg__ZTV7S6551C7__A__7S6551C5__7S6551C1[3]),  3,3},
  {&(_tg__ZTV7S6551C7__7S6551C1[3]),  3,3},
  {&(_tg__ZTV7S6551C3__7S6551C7__7S6551C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S6551C1[];
extern  VTBL_ENTRY _ZTV7S6551C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6551C1[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6551C1D0Ev,_ZTv0_n12_N7S6551C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11264_N7S6551C1D0Ev,_ZThn6896_N7S6551C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6551C1D1Ev,_ZTv0_n12_N7S6551C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11264_N7S6551C1D1Ev,_ZThn6896_N7S6551C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6551C1D0Ev,_ZTv0_n36_N7S6551C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9520_N7S6551C1D0Ev,_ZThn5824_N7S6551C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6551C1D1Ev,_ZTv0_n36_N7S6551C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9520_N7S6551C1D1Ev,_ZThn5824_N7S6551C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6551C1 = {  "S6551C1", // class name
  bases_S6551C1, 14,
  &(vtc_S6551C1[0]), // expected_vtbl_contents
  &(vtt_S6551C1[0]), // expected_vtt_contents
  ABISELECT(26272,16004), // object size
  NSPAIRA(_ZTI7S6551C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6551C1),94, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6551C1),24, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19296C4  {
  void *s19296c4f0;
  long double s19296c4f1;
  __tsi64 s19296c4f2;
  void *s19296c4f3;
  int s19296c4f4:6;
  int s19296c4f5;
  void *s19296c4f6;
  long s19296c4f7[2];
  int s19296c4f8[3];
  void *s19296c4f9[3];
  __tsi64 s19296c4f10;
  long s19296c4f11;
  virtual void  v5(); // _ZN8S19296C42v5Ev
  virtual void  v6(); // _ZN8S19296C42v6Ev
  ~S19296C4(); // tgen
  S19296C4(); // tgen
};
//SIG(-1 S19296C4) C1{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl}


void  S19296C4 ::v5(){vfunc_called(this, "_ZN8S19296C42v5Ev");}
void  S19296C4 ::v6(){vfunc_called(this, "_ZN8S19296C42v6Ev");}
S19296C4 ::~S19296C4(){ note_dtor("S19296C4", this);} // tgen
S19296C4 ::S19296C4(){ note_ctor("S19296C4", this);} // tgen

static void Test_S19296C4()
{
  extern Class_Descriptor cd_S19296C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S19296C4, buf);
    S19296C4 *dp, &lv = *(dp=new (buf) S19296C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S19296C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C4)");
    check_field_offset(lv, s19296c4f0, ABISELECT(8,4), "S19296C4.s19296c4f0");
    check_field_offset(lv, s19296c4f1, ABISELECT(16,8), "S19296C4.s19296c4f1");
    check_field_offset(lv, s19296c4f2, ABISELECT(32,20), "S19296C4.s19296c4f2");
    check_field_offset(lv, s19296c4f3, ABISELECT(40,28), "S19296C4.s19296c4f3");
    set_bf_and_test(lv, s19296c4f4, ABISELECT(48,32), 0, 6, 1, "S19296C4");
    set_bf_and_test(lv, s19296c4f4, ABISELECT(48,32), 0, 6, hide_sll(1LL<<5), "S19296C4");
    check_field_offset(lv, s19296c4f5, ABISELECT(52,36), "S19296C4.s19296c4f5");
    check_field_offset(lv, s19296c4f6, ABISELECT(56,40), "S19296C4.s19296c4f6");
    check_field_offset(lv, s19296c4f7, ABISELECT(64,44), "S19296C4.s19296c4f7");
    check_field_offset(lv, s19296c4f8, ABISELECT(80,52), "S19296C4.s19296c4f8");
    check_field_offset(lv, s19296c4f9, ABISELECT(96,64), "S19296C4.s19296c4f9");
    check_field_offset(lv, s19296c4f10, ABISELECT(120,76), "S19296C4.s19296c4f10");
    check_field_offset(lv, s19296c4f11, ABISELECT(128,84), "S19296C4.s19296c4f11");
    test_class_info(&lv, &cd_S19296C4);
    dp->~S19296C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C4(Test_S19296C4, "S19296C4", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN8S19296C4C1Ev();
extern void _ZN8S19296C4D1Ev();
Name_Map name_map_S19296C4[] = {
  NSPAIR(_ZN8S19296C4C1Ev),
  NSPAIR(_ZN8S19296C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19296C4[];
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY vtc_S19296C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C4[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
Class_Descriptor cd_S19296C4 = {  "S19296C4", // class name
  0,0,//no base classes
  &(vtc_S19296C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI8S19296C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19296C4),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  S19296C3  {
  int s19296c3f0[2];
  __tsi64 s19296c3f1;
  char  :0;
  ::S19296C4 s19296c3f3;
  char s19296c3f4;
  int s19296c3f5;
  long double s19296c3f6;
  virtual void  v2(); // _ZN8S19296C32v2Ev
  virtual void  v3(); // _ZN8S19296C32v3Ev
  virtual void  v4(); // _ZN8S19296C32v4Ev
  ~S19296C3(); // tgen
  S19296C3(); // tgen
};
//SIG(-1 S19296C3) C1{ v1 v2 v3 Fi[2] FL Fc:0 FC2{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD}


void  S19296C3 ::v2(){vfunc_called(this, "_ZN8S19296C32v2Ev");}
void  S19296C3 ::v3(){vfunc_called(this, "_ZN8S19296C32v3Ev");}
void  S19296C3 ::v4(){vfunc_called(this, "_ZN8S19296C32v4Ev");}
S19296C3 ::~S19296C3(){ note_dtor("S19296C3", this);} // tgen
S19296C3 ::S19296C3(){ note_ctor("S19296C3", this);} // tgen

static void Test_S19296C3()
{
  extern Class_Descriptor cd_S19296C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S19296C3, buf);
    S19296C3 *dp, &lv = *(dp=new (buf) S19296C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S19296C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C3)");
    check_field_offset(lv, s19296c3f0, ABISELECT(8,4), "S19296C3.s19296c3f0");
    check_field_offset(lv, s19296c3f1, ABISELECT(16,12), "S19296C3.s19296c3f1");
    check_field_offset(lv, s19296c3f3, ABISELECT(32,20), "S19296C3.s19296c3f3");
    check_field_offset(lv, s19296c3f4, ABISELECT(176,108), "S19296C3.s19296c3f4");
    check_field_offset(lv, s19296c3f5, ABISELECT(180,112), "S19296C3.s19296c3f5");
    check_field_offset(lv, s19296c3f6, ABISELECT(192,116), "S19296C3.s19296c3f6");
    test_class_info(&lv, &cd_S19296C3);
    dp->~S19296C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C3(Test_S19296C3, "S19296C3", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN8S19296C3C1Ev();
extern void _ZN8S19296C3D1Ev();
Name_Map name_map_S19296C3[] = {
  NSPAIR(_ZN8S19296C3C1Ev),
  NSPAIR(_ZN8S19296C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19296C3[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY vtc_S19296C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C3[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
Class_Descriptor cd_S19296C3 = {  "S19296C3", // class name
  0,0,//no base classes
  &(vtc_S19296C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI8S19296C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19296C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19296C5  : virtual S19296C4 {
  int s19296c5f0;
  int s19296c5f1:7;
  ::S3465C9_nt s19296c5f2;
  void *s19296c5f3;
  int s19296c5f4;
  void *s19296c5f5;
  ~S19296C5(); // tgen
  S19296C5(); // tgen
};
//SIG(-1 S19296C5) C1{ VBC2{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC3{} Fp Fi Fp}


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

static void Test_S19296C5()
{
  extern Class_Descriptor cd_S19296C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S19296C5, buf);
    S19296C5 *dp, &lv = *(dp=new (buf) S19296C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S19296C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C5)");
    check_base_class_offset(lv, (S19296C4*), ABISELECT(48,24), "S19296C5");
    check_field_offset(lv, s19296c5f0, ABISELECT(8,4), "S19296C5.s19296c5f0");
    set_bf_and_test(lv, s19296c5f1, ABISELECT(12,8), 0, 7, 1, "S19296C5");
    set_bf_and_test(lv, s19296c5f1, ABISELECT(12,8), 0, 7, hide_sll(1LL<<6), "S19296C5");
    check_field_offset(lv, s19296c5f2, ABISELECT(13,9), "S19296C5.s19296c5f2");
    check_field_offset(lv, s19296c5f3, ABISELECT(16,12), "S19296C5.s19296c5f3");
    check_field_offset(lv, s19296c5f4, ABISELECT(24,16), "S19296C5.s19296c5f4");
    check_field_offset(lv, s19296c5f5, ABISELECT(32,20), "S19296C5.s19296c5f5");
    test_class_info(&lv, &cd_S19296C5);
    dp->~S19296C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C5(Test_S19296C5, "S19296C5", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN8S19296C5C1Ev();
extern void _ZN8S19296C5D1Ev();
Name_Map name_map_S19296C5[] = {
  NSPAIR(_ZN8S19296C5C1Ev),
  NSPAIR(_ZN8S19296C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
static Base_Class bases_S19296C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C4,    ABISELECT(48,24), //bcp->offset
    3, //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 _ZTI8S19296C5[];
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY vtc_S19296C5[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S19296C5[];
static  VTT_ENTRY vtt_S19296C5[] = {
  {&(_ZTV8S19296C5[3]),  3,9},
  {&(_ZTV8S19296C5[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
Class_Descriptor cd_S19296C5 = {  "S19296C5", // class name
  bases_S19296C5, 1,
  &(vtc_S19296C5[0]), // expected_vtbl_contents
  &(vtt_S19296C5[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI8S19296C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19296C5),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19296C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19296C2  : S19296C3 , S19296C4 , virtual S19296C5 {
  short s19296c2f0:16;
  __tsi64 s19296c2f1;
  short s19296c2f2;
  virtual  ~S19296C2(); // _ZN8S19296C2D2Ev
  S19296C2(); // tgen
};
//SIG(-1 S19296C2) C1{ BC2{ v1 v2 v3 Fi[2] FL Fc:0 FC3{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} BC3 VBC4{ VBC3 Fi Fi:7 FC5{} Fp Fi Fp} vd Fs:16 FL Fs}


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

static void Test_S19296C2()
{
  extern Class_Descriptor cd_S19296C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,87)];
    init_test(&cd_S19296C2, buf);
    S19296C2 *dp, &lv = *(dp=new (buf) S19296C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,344), "sizeof(S19296C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C2)");
    check_base_class_offset(lv, (S19296C3*), 0, "S19296C2");
    /*is_ambiguous_... S19296C2::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*), ABISELECT(208,128), "S19296C2");
    check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(416,256), "S19296C2");
    check_base_class_offset(lv, (S19296C5*), ABISELECT(368,232), "S19296C2");
    set_bf_and_test(lv, s19296c2f0, ABISELECT(344,216), 0, 16, 1, "S19296C2");
    set_bf_and_test(lv, s19296c2f0, ABISELECT(344,216), 0, 16, hide_sll(1LL<<15), "S19296C2");
    check_field_offset(lv, s19296c2f1, ABISELECT(352,220), "S19296C2.s19296c2f1");
    check_field_offset(lv, s19296c2f2, ABISELECT(360,228), "S19296C2.s19296c2f2");
    test_class_info(&lv, &cd_S19296C2);
    dp->~S19296C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C2(Test_S19296C2, "S19296C2", ABISELECT(560,344));

#else // __cplusplus

extern void _ZN8S19296C2C1Ev();
extern void _ZN8S19296C2D2Ev();
Name_Map name_map_S19296C2[] = {
  NSPAIR(_ZN8S19296C2C1Ev),
  NSPAIR(_ZN8S19296C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
static Base_Class bases_S19296C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19296C4,    ABISELECT(208,128), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C4,    ABISELECT(416,256), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19296C5,    ABISELECT(368,232), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19296C2[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY vtc_S19296C2[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S19296C2[];
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C2[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__8S19296C2[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTT_ENTRY vtt_S19296C2[] = {
  {&(_ZTV8S19296C2[4]),  4,22},
  {&(_ZTV8S19296C2[16]),  16,22},
  {&(_ZTV8S19296C2[20]),  20,22},
  {&(_tg__ZTV8S19296C5__8S19296C2[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__8S19296C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
Class_Descriptor cd_S19296C2 = {  "S19296C2", // class name
  bases_S19296C2, 4,
  &(vtc_S19296C2[0]), // expected_vtbl_contents
  &(vtt_S19296C2[0]), // expected_vtt_contents
  ABISELECT(560,344), // object size
  NSPAIRA(_ZTI8S19296C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19296C2),22, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19296C2),5, //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  S19296C8  : S19296C3 {
  ::S19296C4 s19296c8f0;
  int s19296c8f1;
  ::S19296C4 s19296c8f2;
  ::S19296C3 s19296c8f3;
  ::S19296C4 s19296c8f4;
  long double s19296c8f5;
  void *s19296c8f6;
  int s19296c8f7;
  long double s19296c8f8;
  char  :0;
  virtual void  v7(); // _ZN8S19296C82v7Ev
  virtual void  v8(); // _ZN8S19296C82v8Ev
  ~S19296C8(); // tgen
  S19296C8(); // tgen
};
//SIG(-1 S19296C8) C1{ BC2{ v3 v4 v5 Fi[2] FL Fc:0 FC3{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v1 v2 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0}


void  S19296C8 ::v7(){vfunc_called(this, "_ZN8S19296C82v7Ev");}
void  S19296C8 ::v8(){vfunc_called(this, "_ZN8S19296C82v8Ev");}
S19296C8 ::~S19296C8(){ note_dtor("S19296C8", this);} // tgen
S19296C8 ::S19296C8(){ note_ctor("S19296C8", this);} // tgen

static void Test_S19296C8()
{
  extern Class_Descriptor cd_S19296C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,140)];
    init_test(&cd_S19296C8, buf);
    S19296C8 *dp, &lv = *(dp=new (buf) S19296C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,556), "sizeof(S19296C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C8)");
    check_base_class_offset(lv, (S19296C3*), 0, "S19296C8");
    check_field_offset(lv, s19296c8f0, ABISELECT(208,128), "S19296C8.s19296c8f0");
    check_field_offset(lv, s19296c8f1, ABISELECT(352,216), "S19296C8.s19296c8f1");
    check_field_offset(lv, s19296c8f2, ABISELECT(368,220), "S19296C8.s19296c8f2");
    check_field_offset(lv, s19296c8f3, ABISELECT(512,308), "S19296C8.s19296c8f3");
    check_field_offset(lv, s19296c8f4, ABISELECT(720,436), "S19296C8.s19296c8f4");
    check_field_offset(lv, s19296c8f5, ABISELECT(864,524), "S19296C8.s19296c8f5");
    check_field_offset(lv, s19296c8f6, ABISELECT(880,536), "S19296C8.s19296c8f6");
    check_field_offset(lv, s19296c8f7, ABISELECT(888,540), "S19296C8.s19296c8f7");
    check_field_offset(lv, s19296c8f8, ABISELECT(896,544), "S19296C8.s19296c8f8");
    test_class_info(&lv, &cd_S19296C8);
    dp->~S19296C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C8(Test_S19296C8, "S19296C8", ABISELECT(912,556));

#else // __cplusplus

extern void _ZN8S19296C8C1Ev();
extern void _ZN8S19296C8D1Ev();
Name_Map name_map_S19296C8[] = {
  NSPAIR(_ZN8S19296C8C1Ev),
  NSPAIR(_ZN8S19296C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
static Base_Class bases_S19296C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19296C8[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY vtc_S19296C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C8[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
Class_Descriptor cd_S19296C8 = {  "S19296C8", // class name
  bases_S19296C8, 1,
  &(vtc_S19296C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(912,556), // object size
  NSPAIRA(_ZTI8S19296C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19296C8),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  S19296C7  : S19296C8 {
  long double s19296c7f0;
  ~S19296C7(); // tgen
  S19296C7(); // tgen
};
//SIG(-1 S19296C7) C1{ BC2{ BC3{ v1 v2 v3 Fi[2] FL Fc:0 FC4{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v4 v5 FC4 Fi FC4 FC3 FC4 FD Fp Fi FD Fc:0} FD}


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

static void Test_S19296C7()
{
  extern Class_Descriptor cd_S19296C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,143)];
    init_test(&cd_S19296C7, buf);
    S19296C7 *dp, &lv = *(dp=new (buf) S19296C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,568), "sizeof(S19296C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C7)");
    check_base_class_offset(lv, (S19296C3*)(S19296C8*), 0, "S19296C7");
    check_base_class_offset(lv, (S19296C8*), 0, "S19296C7");
    check_field_offset(lv, s19296c7f0, ABISELECT(912,556), "S19296C7.s19296c7f0");
    test_class_info(&lv, &cd_S19296C7);
    dp->~S19296C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C7(Test_S19296C7, "S19296C7", ABISELECT(928,568));

#else // __cplusplus

extern void _ZN8S19296C7C1Ev();
extern void _ZN8S19296C7D1Ev();
Name_Map name_map_S19296C7[] = {
  NSPAIR(_ZN8S19296C7C1Ev),
  NSPAIR(_ZN8S19296C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
static Base_Class bases_S19296C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19296C8,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19296C7[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY vtc_S19296C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C7[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S19296C7[];
extern  VTBL_ENTRY _ZTV8S19296C7[];
Class_Descriptor cd_S19296C7 = {  "S19296C7", // class name
  bases_S19296C7, 2,
  &(vtc_S19296C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(928,568), // object size
  NSPAIRA(_ZTI8S19296C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19296C7),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  S19296C9  : S19296C3 , virtual S19296C8 , S19296C4 , S19296C2 , S19296C5 {
  ::S19296C4 s19296c9f0;
  char s19296c9f1;
  int s19296c9f2;
  short s19296c9f3;
  ::S19296C2 s19296c9f4;
  long double s19296c9f5[2];
  int s19296c9f6[2];
  long double s19296c9f7;
  virtual  ~S19296C9(); // _ZN8S19296C9D2Ev
  virtual void  v9(); // _ZN8S19296C92v9Ev
  virtual void  v10(); // _ZN8S19296C93v10Ev
  virtual void  v11(); // _ZN8S19296C93v11Ev
  S19296C9(); // tgen
};
//SIG(-1 S19296C9) C1{ BC2{ v4 v5 v6 Fi[2] FL Fc:0 FC3{ v9 v10 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} VBC4{ BC2 v7 v8 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0} BC3 BC5{ BC2 BC3 VBC6{ VBC3 Fi Fi:7 FC7{} Fp Fi Fp} vd Fs:16 FL Fs} BC6 vd v1 v2 v3 FC3 Fc Fi Fs FC5 FD[2] Fi[2] FD}


 S19296C9 ::~S19296C9(){ note_dtor("S19296C9", this);}
void  S19296C9 ::v9(){vfunc_called(this, "_ZN8S19296C92v9Ev");}
void  S19296C9 ::v10(){vfunc_called(this, "_ZN8S19296C93v10Ev");}
void  S19296C9 ::v11(){vfunc_called(this, "_ZN8S19296C93v11Ev");}
S19296C9 ::S19296C9(){ note_ctor("S19296C9", this);} // tgen

static void Test_S19296C9()
{
  extern Class_Descriptor cd_S19296C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(167,408)];
    init_test(&cd_S19296C9, buf);
    S19296C9 *dp, &lv = *(dp=new (buf) S19296C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2656,1628), "sizeof(S19296C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C9)");
    /*is_ambiguous_... S19296C9::S19296C3 */ AMB_check_base_class_offset(lv, (S19296C3*), 0, "S19296C9");
    check_base_class_offset(lv, (S19296C3*)(S19296C8*), ABISELECT(1552,960), "S19296C9");
    check_base_class_offset(lv, (S19296C8*), ABISELECT(1552,960), "S19296C9");
    /*is_ambiguous_... S19296C9::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*), ABISELECT(208,128), "S19296C9");
    check_base_class_offset(lv, (S19296C3*)(S19296C2*), ABISELECT(352,216), "S19296C9");
    /*is_ambiguous_... S19296C2::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*), ABISELECT(560,344), "S19296C9");
    /*is_ambiguous_... S19296C9::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(2512,1540), "S19296C9");
    /*is_ambiguous_... S19296C9::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(2512,1540), "S19296C9");
    check_base_class_offset(lv, (S19296C5*)(S19296C2*), ABISELECT(2464,1516), "S19296C9");
    check_base_class_offset(lv, (S19296C2*), ABISELECT(352,216), "S19296C9");
    /*is_ambiguous_... S19296C9::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C5*), ABISELECT(720,448), "S19296C9");
    check_field_offset(lv, s19296c9f0, ABISELECT(768,472), "S19296C9.s19296c9f0");
    check_field_offset(lv, s19296c9f1, ABISELECT(912,560), "S19296C9.s19296c9f1");
    check_field_offset(lv, s19296c9f2, ABISELECT(916,564), "S19296C9.s19296c9f2");
    check_field_offset(lv, s19296c9f3, ABISELECT(920,568), "S19296C9.s19296c9f3");
    check_field_offset(lv, s19296c9f4, ABISELECT(928,572), "S19296C9.s19296c9f4");
    check_field_offset(lv, s19296c9f5, ABISELECT(1488,916), "S19296C9.s19296c9f5");
    check_field_offset(lv, s19296c9f6, ABISELECT(1520,940), "S19296C9.s19296c9f6");
    check_field_offset(lv, s19296c9f7, ABISELECT(1536,948), "S19296C9.s19296c9f7");
    test_class_info(&lv, &cd_S19296C9);
    dp->~S19296C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C9(Test_S19296C9, "S19296C9", ABISELECT(2656,1628));

#else // __cplusplus

extern void _ZN8S19296C9C1Ev();
extern void _ZN8S19296C9D2Ev();
Name_Map name_map_S19296C9[] = {
  NSPAIR(_ZN8S19296C9C1Ev),
  NSPAIR(_ZN8S19296C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
static Base_Class bases_S19296C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19296C3,    ABISELECT(1552,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19296C8,    ABISELECT(1552,960), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19296C4,    ABISELECT(208,128), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C3,    ABISELECT(352,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(560,344), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(2512,1540), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //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
    7, //immediately_derived
  0, 1},
  {&cd_S19296C5,    ABISELECT(2464,1516), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19296C2,    ABISELECT(352,216), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C5,    ABISELECT(720,448), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19296C9[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C9D1Ev();
extern void _ZN8S19296C9D0Ev();
extern void _ZN8S19296C92v9Ev();
extern void _ZN8S19296C93v10Ev();
extern void _ZN8S19296C93v11Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn352_N8S19296C9D1Ev,_ZThn216_N8S19296C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S19296C9D0Ev,_ZThn216_N8S19296C9D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY vtc_S19296C9[] = {
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19296C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v11Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19296C9D1Ev,_ZThn216_N8S19296C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19296C9D0Ev,_ZThn216_N8S19296C9D0Ev),
  ABISELECT(-560,-344),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(1792,1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  ABISELECT(48,24),
  ABISELECT(-2464,-1516),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S19296C9[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C2__8S19296C9[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C2__8S19296C9[] = {
  ABISELECT(48,24),
  ABISELECT(-2112,-1300),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C2__8S19296C9[] = {
  0,
  0,
  ABISELECT(-2160,-1324),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A__8S19296C9[] = {
  ABISELECT(1792,1092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__A__8S19296C9[] = {
  0,
  0,
  ABISELECT(-1792,-1092),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C9[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__8S19296C9[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTT_ENTRY vtt_S19296C9[] = {
  {&(_ZTV8S19296C9[5]),  5,54},
  {&(_tg__ZTV8S19296C2__8S19296C9[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C2__8S19296C9[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C2__8S19296C9[4]),  4,6},
  {&(_tg__ZTV8S19296C5__A__8S19296C9[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__A__8S19296C9[4]),  4,6},
  {&(_ZTV8S19296C9[40]),  40,54},
  {&(_ZTV8S19296C9[21]),  21,54},
  {&(_ZTV8S19296C9[48]),  48,54},
  {&(_ZTV8S19296C9[52]),  52,54},
  {&(_ZTV8S19296C9[33]),  33,54},
  {&(_tg__ZTV8S19296C5__8S19296C9[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__8S19296C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19296C9[];
extern  VTBL_ENTRY _ZTV8S19296C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C9[];
Class_Descriptor cd_S19296C9 = {  "S19296C9", // class name
  bases_S19296C9, 10,
  &(vtc_S19296C9[0]), // expected_vtbl_contents
  &(vtt_S19296C9[0]), // expected_vtt_contents
  ABISELECT(2656,1628), // object size
  NSPAIRA(_ZTI8S19296C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19296C9),54, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19296C9),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19296C11  {
  ::S3465C14 s19296c11f0[6];
  int s19296c11f1;
  ::S19296C7 s19296c11f2;
  int s19296c11f3;
  void *s19296c11f4[2];
  char s19296c11f5;
  void *s19296c11f6;
  virtual void  v12(); // _ZN9S19296C113v12Ev
  virtual void  v13(); // _ZN9S19296C113v13Ev
  virtual void  v14(); // _ZN9S19296C113v14Ev
  virtual void  v15(); // _ZN9S19296C113v15Ev
  virtual void  v16(); // _ZN9S19296C113v16Ev
  ~S19296C11(); // tgen
  S19296C11(); // tgen
};
//SIG(-1 S19296C11) C1{ v1 v2 v3 v4 v5 FC2{ vd m Fp FC3{} Fp Fi FC4{ BC5{ v8 v9 v10 Fi[2] FL Fc:0 FC6{ v11 v12 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v6 v7 FC6 Fi FC6 FC5 FC6 FD Fp Fi FD Fc:0} FC5[5]}[6] Fi FC7{ BC8{ BC9{ v13 v14 v15 Fi[2] FL Fc:0 FC10{ v18 v19 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v16 v17 FC10 Fi FC10 FC9 FC10 FD Fp Fi FD Fc:0} FD} Fi Fp[2] Fc Fp}


void  S19296C11 ::v12(){vfunc_called(this, "_ZN9S19296C113v12Ev");}
void  S19296C11 ::v13(){vfunc_called(this, "_ZN9S19296C113v13Ev");}
void  S19296C11 ::v14(){vfunc_called(this, "_ZN9S19296C113v14Ev");}
void  S19296C11 ::v15(){vfunc_called(this, "_ZN9S19296C113v15Ev");}
void  S19296C11 ::v16(){vfunc_called(this, "_ZN9S19296C113v16Ev");}
S19296C11 ::~S19296C11(){ note_dtor("S19296C11", this);} // tgen
S19296C11 ::S19296C11(){ note_ctor("S19296C11", this);} // tgen

static void Test_S19296C11()
{
  extern Class_Descriptor cd_S19296C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(814,1974)];
    init_test(&cd_S19296C11, buf);
    S19296C11 *dp, &lv = *(dp=new (buf) S19296C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13008,7892), "sizeof(S19296C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C11)");
    check_field_offset(lv, s19296c11f0, ABISELECT(16,4), "S19296C11.s19296c11f0");
    check_field_offset(lv, s19296c11f1, ABISELECT(12016,7300), "S19296C11.s19296c11f1");
    check_field_offset(lv, s19296c11f2, ABISELECT(12032,7304), "S19296C11.s19296c11f2");
    check_field_offset(lv, s19296c11f3, ABISELECT(12960,7872), "S19296C11.s19296c11f3");
    check_field_offset(lv, s19296c11f4, ABISELECT(12968,7876), "S19296C11.s19296c11f4");
    check_field_offset(lv, s19296c11f5, ABISELECT(12984,7884), "S19296C11.s19296c11f5");
    check_field_offset(lv, s19296c11f6, ABISELECT(12992,7888), "S19296C11.s19296c11f6");
    test_class_info(&lv, &cd_S19296C11);
    dp->~S19296C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C11(Test_S19296C11, "S19296C11", ABISELECT(13008,7892));

#else // __cplusplus

extern void _ZN9S19296C11C1Ev();
extern void _ZN9S19296C11D1Ev();
Name_Map name_map_S19296C11[] = {
  NSPAIR(_ZN9S19296C11C1Ev),
  NSPAIR(_ZN9S19296C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19296C11[];
extern void _ZN9S19296C113v12Ev();
extern void _ZN9S19296C113v13Ev();
extern void _ZN9S19296C113v14Ev();
extern void _ZN9S19296C113v15Ev();
extern void _ZN9S19296C113v16Ev();
static  VTBL_ENTRY vtc_S19296C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C11[0]),
  (VTBL_ENTRY)&_ZN9S19296C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v16Ev,
};
extern VTBL_ENTRY _ZTI9S19296C11[];
extern  VTBL_ENTRY _ZTV9S19296C11[];
Class_Descriptor cd_S19296C11 = {  "S19296C11", // class name
  0,0,//no base classes
  &(vtc_S19296C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13008,7892), // object size
  NSPAIRA(_ZTI9S19296C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19296C11),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  S19296C14  : S19296C5 , S19296C8 , virtual S19296C3 , S19296C4 , virtual S19296C2 {
  short s19296c14f0;
  virtual  ~S19296C14(); // _ZN9S19296C14D2Ev
  S19296C14(); // tgen
};
//SIG(-1 S19296C14) C1{ BC2{ VBC3{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC4{} Fp Fi Fp} BC5{ BC6{ v3 v4 v5 Fi[2] FL Fc:0 FC3 Fc Fi FD} v6 v7 FC3 Fi FC3 FC6 FC3 FD Fp Fi FD Fc:0} VBC6 BC3 VBC7{ BC6 BC3 VBC2 vd Fs:16 FL Fs} vd Fs}


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

static void Test_S19296C14()
{
  extern Class_Descriptor cd_S19296C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(118,287)];
    init_test(&cd_S19296C14, buf);
    S19296C14 *dp, &lv = *(dp=new (buf) S19296C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1872,1144), "sizeof(S19296C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C14)");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(1104,672), "S19296C14");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(1104,672), "S19296C14");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C5*), 0, "S19296C14");
    check_base_class_offset(lv, (S19296C3*)(S19296C8*), ABISELECT(48,24), "S19296C14");
    check_base_class_offset(lv, (S19296C8*), ABISELECT(48,24), "S19296C14");
    /*is_ambiguous_... S19296C14::S19296C3 */ AMB_check_base_class_offset(lv, (S19296C3*), ABISELECT(1248,760), "S19296C14");
    /*is_ambiguous_... S19296C14::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*), ABISELECT(960,580), "S19296C14");
    check_base_class_offset(lv, (S19296C3*)(S19296C2*), ABISELECT(1456,888), "S19296C14");
    /*is_ambiguous_... S19296C2::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*), ABISELECT(1664,1016), "S19296C14");
    check_base_class_offset(lv, (S19296C5*)(S19296C2*), ABISELECT(1824,1120), "S19296C14");
    check_base_class_offset(lv, (S19296C2*), ABISELECT(1456,888), "S19296C14");
    check_field_offset(lv, s19296c14f0, ABISELECT(1096,668), "S19296C14.s19296c14f0");
    test_class_info(&lv, &cd_S19296C14);
    dp->~S19296C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C14(Test_S19296C14, "S19296C14", ABISELECT(1872,1144));

#else // __cplusplus

extern void _ZN9S19296C14C1Ev();
extern void _ZN9S19296C14D2Ev();
Name_Map name_map_S19296C14[] = {
  NSPAIR(_ZN9S19296C14C1Ev),
  NSPAIR(_ZN9S19296C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
static Base_Class bases_S19296C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C4,    ABISELECT(1104,672), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19296C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19296C8,    ABISELECT(48,24), //bcp->offset
    8, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C3,    ABISELECT(1248,760), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19296C4,    ABISELECT(960,580), //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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C3,    ABISELECT(1456,888), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(1664,1016), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19296C5,    ABISELECT(1824,1120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19296C2,    ABISELECT(1456,888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19296C14[];
extern void _ZN9S19296C14D1Ev();
extern void _ZN9S19296C14D0Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev)();
extern void ABISELECT(_ZThn1456_N9S19296C14D1Ev,_ZThn888_N9S19296C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev)();
extern void ABISELECT(_ZThn1456_N9S19296C14D0Ev,_ZThn888_N9S19296C14D0Ev)() __attribute__((weak));
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY vtc_S19296C14[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN9S19296C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C14D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  ABISELECT(-960,-580),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev),
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
};
extern VTBL_ENTRY _ZTV9S19296C14[];
static  VTBL_ENTRY _tg__ZTV8S19296C5__A__9S19296C14[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__A__9S19296C14[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C2__9S19296C14[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C2__9S19296C14[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C2__9S19296C14[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A1__9S19296C14[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__A1__9S19296C14[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTT_ENTRY vtt_S19296C14[] = {
  {&(_ZTV9S19296C14[6]),  6,55},
  {&(_tg__ZTV8S19296C5__A__9S19296C14[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__A__9S19296C14[4]),  4,6},
  {&(_ZTV9S19296C14[23]),  23,55},
  {&(_ZTV9S19296C14[30]),  30,55},
  {&(_ZTV9S19296C14[43]),  43,55},
  {&(_ZTV9S19296C14[50]),  50,55},
  {&(_ZTV9S19296C14[55]),  55,55},
  {&(_tg__ZTV8S19296C2__9S19296C14[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C2__9S19296C14[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C2__9S19296C14[4]),  4,6},
  {&(_tg__ZTV8S19296C5__A1__9S19296C14[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__A1__9S19296C14[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19296C14[];
extern  VTBL_ENTRY _ZTV9S19296C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C14[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19296C14D0Ev,_ZThn888_N9S19296C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19296C14D1Ev,_ZThn888_N9S19296C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19296C14 = {  "S19296C14", // class name
  bases_S19296C14, 10,
  &(vtc_S19296C14[0]), // expected_vtbl_contents
  &(vtt_S19296C14[0]), // expected_vtt_contents
  ABISELECT(1872,1144), // object size
  NSPAIRA(_ZTI9S19296C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19296C14),55, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19296C14),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19296C13  : virtual S19296C14 , S19296C4 , virtual S19296C8 , S19296C2 {
  char s19296c13f0;
  void *s19296c13f1[2];
  char s19296c13f2[8];
  int s19296c13f3[2];
  long s19296c13f4[9];
  ::S3465C9_nt s19296c13f5;
  int s19296c13f6[5];
  ::S3465C14 s19296c13f7;
  virtual  ~S19296C13(); // _ZN9S19296C13D2Ev
  S19296C13(); // tgen
};
//SIG(-1 S19296C13) C1{ VBC2{ BC3{ VBC4{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC5{} Fp Fi Fp} BC6{ BC7{ v3 v4 v5 Fi[2] FL Fc:0 FC4 Fc Fi FD} v6 v7 FC4 Fi FC4 FC7 FC4 FD Fp Fi FD Fc:0} VBC7 BC4 VBC8{ BC7 BC4 VBC3 vd Fs:16 FL Fs} vd Fs} BC4 VBC6 BC8 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC5 Fi[5] FC9{ vd m Fp FC5 Fp Fi FC10{ BC11{ v10 v11 v12 Fi[2] FL Fc:0 FC12{ v13 v14 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v8 v9 FC12 Fi FC12 FC11 FC12 FD Fp Fi FD Fc:0} FC11[5]}}


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

static void Test_S19296C13()
{
  extern Class_Descriptor cd_S19296C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(340,831)];
    init_test(&cd_S19296C13, buf);
    S19296C13 *dp, &lv = *(dp=new (buf) S19296C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5424,3320), "sizeof(S19296C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C13)");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*)(S19296C14*), ABISELECT(3744,2292), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(3744,2292), "S19296C13");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C14*), ABISELECT(2640,1620), "S19296C13");
    check_base_class_offset(lv, (S19296C3*)(S19296C8*)(S19296C14*), ABISELECT(2688,1644), "S19296C13");
    check_base_class_offset(lv, (S19296C8*)(S19296C14*), ABISELECT(2688,1644), "S19296C13");
    /*is_ambiguous_... S19296C14::S19296C3 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C14*), ABISELECT(3888,2380), "S19296C13");
    /*is_ambiguous_... S19296C14::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C14*), ABISELECT(3600,2200), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C2*), ABISELECT(4096,2508), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*), ABISELECT(4304,2636), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C2*), ABISELECT(4464,2740), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C2*), ABISELECT(4464,2740), "S19296C13");
    check_base_class_offset(lv, (S19296C2*)(S19296C14*), ABISELECT(4096,2508), "S19296C13");
    check_base_class_offset(lv, (S19296C14*), ABISELECT(2640,1620), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*), 0, "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C8 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C8*), ABISELECT(4512,2764), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C8 */ AMB_check_base_class_offset(lv, (S19296C8*), ABISELECT(4512,2764), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C2*), ABISELECT(144,88), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*), ABISELECT(352,216), "S19296C13");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C2*), ABISELECT(144,88), "S19296C13");
    check_field_offset(lv, s19296c13f0, ABISELECT(506,318), "S19296C13.s19296c13f0");
    check_field_offset(lv, s19296c13f1, ABISELECT(512,320), "S19296C13.s19296c13f1");
    check_field_offset(lv, s19296c13f2, ABISELECT(528,328), "S19296C13.s19296c13f2");
    check_field_offset(lv, s19296c13f3, ABISELECT(536,336), "S19296C13.s19296c13f3");
    check_field_offset(lv, s19296c13f4, ABISELECT(544,344), "S19296C13.s19296c13f4");
    check_field_offset(lv, s19296c13f5, ABISELECT(616,380), "S19296C13.s19296c13f5");
    check_field_offset(lv, s19296c13f6, ABISELECT(620,384), "S19296C13.s19296c13f6");
    check_field_offset(lv, s19296c13f7, ABISELECT(640,404), "S19296C13.s19296c13f7");
    test_class_info(&lv, &cd_S19296C13);
    dp->~S19296C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C13(Test_S19296C13, "S19296C13", ABISELECT(5424,3320));

#else // __cplusplus

extern void _ZN9S19296C13C1Ev();
extern void _ZN9S19296C13D2Ev();
Name_Map name_map_S19296C13[] = {
  NSPAIR(_ZN9S19296C13C1Ev),
  NSPAIR(_ZN9S19296C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C14;
extern VTBL_ENTRY _ZTI9S19296C14[];
extern  VTBL_ENTRY _ZTV9S19296C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C14[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
static Base_Class bases_S19296C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C4,    ABISELECT(3744,2292), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19296C5,    ABISELECT(2640,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(2688,1644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19296C8,    ABISELECT(2688,1644), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(3888,2380), //bcp->offset
    58, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19296C4,    ABISELECT(3600,2200), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(4096,2508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(4304,2636), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19296C5,    ABISELECT(4464,2740), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19296C2,    ABISELECT(4096,2508), //bcp->offset
    66, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19296C14,    ABISELECT(2640,1620), //bcp->offset
    25, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19296C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C3,    ABISELECT(4512,2764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19296C8,    ABISELECT(4512,2764), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19296C3,    ABISELECT(144,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
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(352,216), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19296C2,    ABISELECT(144,88), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19296C13[];
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN9S19296C13D1Ev();
extern void _ZN9S19296C13D0Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn144_N9S19296C13D1Ev,_ZThn88_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19296C13D0Ev,_ZThn88_N9S19296C13D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn2640_N9S19296C13D1Ev,_ZThn1620_N9S19296C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev)();
extern void ABISELECT(_ZThn2640_N9S19296C13D0Ev,_ZThn1620_N9S19296C13D0Ev)() __attribute__((weak));
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn4096_N9S19296C13D1Ev,_ZThn2508_N9S19296C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev)();
extern void ABISELECT(_ZThn4096_N9S19296C13D0Ev,_ZThn2508_N9S19296C13D0Ev)() __attribute__((weak));
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY vtc_S19296C13[] = {
  ABISELECT(4512,2764),
  ABISELECT(4464,2740),
  ABISELECT(4096,2508),
  ABISELECT(3888,2380),
  ABISELECT(3744,2292),
  ABISELECT(2640,1620),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19296C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C13D0Ev,
  ABISELECT(3600,2204),
  ABISELECT(4320,2652),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19296C13D1Ev,_ZThn88_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19296C13D0Ev,_ZThn88_N9S19296C13D0Ev),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-2640,-1620),
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  ABISELECT(-2640,-1620),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev),
  ABISELECT(-2688,-1644),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  ABISELECT(-3600,-2200),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  0,
  0,
  ABISELECT(-3744,-2292),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-3888,-2380),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-4096,-2508),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-4096,-2508),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev),
  ABISELECT(-4304,-2636),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(-720,-448),
  ABISELECT(-4464,-2740),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4512,-2764),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern VTBL_ENTRY _ZTV9S19296C13[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C2__A__9S19296C13[] = {
  ABISELECT(3600,2204),
  ABISELECT(4320,2652),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C2__A__9S19296C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-4320,-2652),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C2__A__9S19296C13[] = {
  0,
  0,
  ABISELECT(-3600,-2204),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN9S19296C14D1Ev();
extern void _ZN9S19296C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19296C14__9S19296C13[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN9S19296C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C59S19296C14__9S19296C13[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C59S19296C14__9S19296C13[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__9S19296C14__9S19296C13[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C3__A1__9S19296C14__9S19296C13[] = {
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev)();
extern void ABISELECT(_ZThn1456_N9S19296C14D1Ev,_ZThn888_N9S19296C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev)();
extern void ABISELECT(_ZThn1456_N9S19296C14D0Ev,_ZThn888_N9S19296C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19296C2__9S19296C14__9S19296C13[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C2__A2__9S19296C14__9S19296C13[] = {
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A1__9S19296C14__9S19296C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C2__9S19296C13[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C2__9S19296C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C2__9S19296C13[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A1__9S19296C13[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__A1__9S19296C13[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTT_ENTRY vtt_S19296C13[] = {
  {&(_ZTV9S19296C13[8]),  8,100},
  {&(_tg__ZTV8S19296C2__A__9S19296C13[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C2__A__9S19296C13[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C2__A__9S19296C13[4]),  4,6},
  {&(_ZTV9S19296C13[39]),  39,100},
  {&(_ZTV9S19296C13[56]),  56,100},
  {&(_ZTV9S19296C13[43]),  43,100},
  {&(_ZTV9S19296C13[63]),  63,100},
  {&(_ZTV9S19296C13[50]),  50,100},
  {&(_ZTV9S19296C13[76]),  76,100},
  {&(_ZTV9S19296C13[83]),  83,100},
  {&(_ZTV9S19296C13[88]),  88,100},
  {&(_ZTV9S19296C13[95]),  95,100},
  {&(_ZTV9S19296C13[16]),  16,100},
  {&(_tg__ZTV9S19296C14__9S19296C13[6]),  6,8},
  {&(_tg__ZTV8S19296C59S19296C14__9S19296C13[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C59S19296C14__9S19296C13[4]),  4,6},
  {&(_tg__ZTV8S19296C4__9S19296C14__9S19296C13[4]),  4,6},
  {&(_tg__ZTV8S19296C3__A1__9S19296C14__9S19296C13[5]),  5,8},
  {&(_tg__ZTV8S19296C2__9S19296C14__9S19296C13[10]),  10,15},
  {&(_tg__ZTV8S19296C48S19296C2__A2__9S19296C14__9S19296C13[2]),  2,4},
  {&(_tg__ZTV8S19296C5__A1__9S19296C14__9S19296C13[3]),  3,3},
  {&(_tg__ZTV8S19296C2__9S19296C13[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C2__9S19296C13[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C2__9S19296C13[4]),  4,6},
  {&(_tg__ZTV8S19296C5__A1__9S19296C13[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__A1__9S19296C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19296C13[];
extern  VTBL_ENTRY _ZTV9S19296C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C13[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19296C14D0Ev,_ZThn888_N9S19296C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19296C14D1Ev,_ZThn888_N9S19296C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N9S19296C13D0Ev,_ZThn2508_N9S19296C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N9S19296C13D1Ev,_ZThn2508_N9S19296C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2640_N9S19296C13D0Ev,_ZThn1620_N9S19296C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2640_N9S19296C13D1Ev,_ZThn1620_N9S19296C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19296C13 = {  "S19296C13", // class name
  bases_S19296C13, 17,
  &(vtc_S19296C13[0]), // expected_vtbl_contents
  &(vtt_S19296C13[0]), // expected_vtt_contents
  ABISELECT(5424,3320), // object size
  NSPAIRA(_ZTI9S19296C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19296C13),100, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19296C13),27, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19296C10  : S19296C11 , virtual S19296C9 , S3465C14 , S19296C13 {
  int s19296c10f0:2;
  void *s19296c10f1[5];
  int s19296c10f2[2];
  ::S19296C4 s19296c10f3;
  int s19296c10f4[7];
  ::S19296C4 s19296c10f5;
  char s19296c10f6[7];
  unsigned short s19296c10f7:1;
  virtual  ~S19296C10(); // _ZN9S19296C10D2Ev
  virtual void  v17(); // _ZN9S19296C103v17Ev
  S19296C10(); // tgen
};
//SIG(-1 S19296C10) C1{ BC2{ v2 v3 v4 v5 v6 FC3{ vd m Fp FC4{} Fp Fi FC5{ BC6{ v19 v20 v21 Fi[2] FL Fc:0 FC7{ v22 v23 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v17 v18 FC7 Fi FC7 FC6 FC7 FD Fp Fi FD Fc:0} FC6[5]}[6] Fi FC8{ BC9{ BC10{ v7 v8 v9 Fi[2] FL Fc:0 FC11{ v12 v13 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v10 v11 FC11 Fi FC11 FC10 FC11 FD Fp Fi FD Fc:0} FD} Fi Fp[2] Fc Fp} VBC12{ BC10 VBC9 BC11 BC13{ BC10 BC11 VBC14{ VBC11 Fi Fi:7 FC4 Fp Fi Fp} vd Fs:16 FL Fs} BC14 vd v14 v15 v16 FC11 Fc Fi Fs FC13 FD[2] Fi[2] FD} BC3 BC15{ VBC16{ BC14 BC9 VBC10 BC11 VBC13 vd Fs} BC11 VBC9 BC13 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC4 Fi[5] FC3} vd v1 Fi:2 Fp[5] Fi[2] FC11 Fi[7] FC11 Fc[7] Fs:1}


 S19296C10 ::~S19296C10(){ note_dtor("S19296C10", this);}
void  S19296C10 ::v17(){vfunc_called(this, "_ZN9S19296C103v17Ev");}
S19296C10 ::S19296C10(){ note_ctor("S19296C10", this);} // tgen

static void Test_S19296C10()
{
  extern Class_Descriptor cd_S19296C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1400,3409)];
    init_test(&cd_S19296C10, buf);
    S19296C10 *dp, &lv = *(dp=new (buf) S19296C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(22384,13632), "sizeof(S19296C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C10)");
    check_base_class_offset(lv, (S19296C11*), 0, "S19296C10");
    /*is_ambiguous_... S19296C9::S19296C3 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C9*), ABISELECT(18048,10972), "S19296C10");
    /*is_ambiguous_... S19296C10::S19296C8 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C8*), ABISELECT(19600,11932), "S19296C10");
    check_base_class_offset(lv, (S19296C8*)(S19296C9*), ABISELECT(19600,11932), "S19296C10");
    /*is_ambiguous_... S19296C13::S19296C8 */ AMB_check_base_class_offset(lv, (S19296C8*)(S19296C13*), ABISELECT(19600,11932), "S19296C10");
    /*is_ambiguous_... S19296C9::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C9*), ABISELECT(18256,11100), "S19296C10");
    check_base_class_offset(lv, (S19296C3*)(S19296C2*)(S19296C9*), ABISELECT(18400,11188), "S19296C10");
    /*is_ambiguous_... S19296C2::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*)(S19296C9*), ABISELECT(18608,11316), "S19296C10");
    /*is_ambiguous_... S19296C10::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(20560,12512), "S19296C10");
    /*is_ambiguous_... S19296C9::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*)(S19296C9*), ABISELECT(20560,12512), "S19296C10");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*)(S19296C14*), ABISELECT(20560,12512), "S19296C10");
    check_base_class_offset(lv, (S19296C5*)(S19296C2*)(S19296C9*), ABISELECT(20512,12488), "S19296C10");
    /*is_ambiguous_... S19296C10::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C2*), ABISELECT(20512,12488), "S19296C10");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C2*)(S19296C13*), ABISELECT(20512,12488), "S19296C10");
    check_base_class_offset(lv, (S19296C2*)(S19296C9*), ABISELECT(18400,11188), "S19296C10");
    /*is_ambiguous_... S19296C9::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C9*), ABISELECT(18768,11420), "S19296C10");
    check_base_class_offset(lv, (S19296C9*), ABISELECT(18048,10972), "S19296C10");
    check_base_class_offset(lv, (S3465C14*), ABISELECT(13008,7892), "S19296C10");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C14*), ABISELECT(20704,12600), "S19296C10");
    check_base_class_offset(lv, (S19296C3*)(S19296C8*)(S19296C14*), ABISELECT(20752,12624), "S19296C10");
    check_base_class_offset(lv, (S19296C8*)(S19296C14*), ABISELECT(20752,12624), "S19296C10");
    /*is_ambiguous_... S19296C14::S19296C3 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C14*), ABISELECT(21808,13272), "S19296C10");
    /*is_ambiguous_... S19296C14::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C14*), ABISELECT(21664,13180), "S19296C10");
    /*is_ambiguous_... S19296C10::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C2*), ABISELECT(22016,13400), "S19296C10");
    /*is_ambiguous_... S19296C10::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*), ABISELECT(22224,13528), "S19296C10");
    check_base_class_offset(lv, (S19296C2*)(S19296C14*), ABISELECT(22016,13400), "S19296C10");
    check_base_class_offset(lv, (S19296C14*)(S19296C13*), ABISELECT(20704,12600), "S19296C10");
    /*is_ambiguous_... S19296C13::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C13*), ABISELECT(15008,9108), "S19296C10");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C2*)(S19296C13*), ABISELECT(15152,9196), "S19296C10");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*)(S19296C13*), ABISELECT(15360,9324), "S19296C10");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C2*)(S19296C13*), ABISELECT(15152,9196), "S19296C10");
    check_base_class_offset(lv, (S19296C13*), ABISELECT(15008,9108), "S19296C10");
    set_bf_and_test(lv, s19296c10f0, ABISELECT(17648,10728), 0, 2, 1, "S19296C10");
    set_bf_and_test(lv, s19296c10f0, ABISELECT(17648,10728), 0, 2, hide_sll(1LL<<1), "S19296C10");
    check_field_offset(lv, s19296c10f1, ABISELECT(17656,10732), "S19296C10.s19296c10f1");
    check_field_offset(lv, s19296c10f2, ABISELECT(17696,10752), "S19296C10.s19296c10f2");
    check_field_offset(lv, s19296c10f3, ABISELECT(17712,10760), "S19296C10.s19296c10f3");
    check_field_offset(lv, s19296c10f4, ABISELECT(17856,10848), "S19296C10.s19296c10f4");
    check_field_offset(lv, s19296c10f5, ABISELECT(17888,10876), "S19296C10.s19296c10f5");
    check_field_offset(lv, s19296c10f6, ABISELECT(18032,10964), "S19296C10.s19296c10f6");
    set_bf_and_test(lv, s19296c10f7, ABISELECT(18039,10971), 0, 1, 1, "S19296C10");
    test_class_info(&lv, &cd_S19296C10);
    dp->~S19296C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C10(Test_S19296C10, "S19296C10", ABISELECT(22384,13632));

#else // __cplusplus

extern void _ZN9S19296C10C1Ev();
extern void _ZN9S19296C10D2Ev();
Name_Map name_map_S19296C10[] = {
  NSPAIR(_ZN9S19296C10C1Ev),
  NSPAIR(_ZN9S19296C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C11;
extern VTBL_ENTRY _ZTI9S19296C11[];
extern  VTBL_ENTRY _ZTV9S19296C11[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C9;
extern VTBL_ENTRY _ZTI8S19296C9[];
extern  VTBL_ENTRY _ZTV8S19296C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C9[];
extern Class_Descriptor cd_S3465C14;
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C14;
extern VTBL_ENTRY _ZTI9S19296C14[];
extern  VTBL_ENTRY _ZTV9S19296C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C14[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C13;
extern VTBL_ENTRY _ZTI9S19296C13[];
extern  VTBL_ENTRY _ZTV9S19296C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C13[];
static Base_Class bases_S19296C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C3,    ABISELECT(18048,10972), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(19600,11932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19296C8,    ABISELECT(19600,11932), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //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
    11, //immediately_derived
  0, 1},
  {&cd_S19296C4,    ABISELECT(18256,11100), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(18400,11188), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(18608,11316), //bcp->offset
    81, //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(20560,12512), //bcp->offset
    103, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19296C5,    ABISELECT(20512,12488), //bcp->offset
    100, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19296C2,    ABISELECT(18400,11188), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19296C5,    ABISELECT(18768,11420), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19296C9,    ABISELECT(18048,10972), //bcp->offset
    46, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C14,    ABISELECT(13008,7892), //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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C5,    ABISELECT(20704,12600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(20752,12624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19296C8,    ABISELECT(20752,12624), //bcp->offset
    125, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(21808,13272), //bcp->offset
    136, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19296C4,    ABISELECT(21664,13180), //bcp->offset
    132, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(22016,13400), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19296C4,    ABISELECT(22224,13528), //bcp->offset
    159, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19296C2,    ABISELECT(22016,13400), //bcp->offset
    144, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19296C14,    ABISELECT(20704,12600), //bcp->offset
    109, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S19296C4,    ABISELECT(15008,9108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(15152,9196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(15360,9324), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19296C2,    ABISELECT(15152,9196), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19296C13,    ABISELECT(15008,9108), //bcp->offset
    21, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19296C10[];
extern void _ZN9S19296C113v12Ev();
extern void _ZN9S19296C113v13Ev();
extern void _ZN9S19296C113v14Ev();
extern void _ZN9S19296C113v15Ev();
extern void _ZN9S19296C113v16Ev();
extern void _ZN9S19296C10D1Ev();
extern void _ZN9S19296C10D0Ev();
extern void _ZN9S19296C103v17Ev();
extern void ABISELECT(_ZThn13008_N9S19296C10D1Ev,_ZThn7892_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn13008_N9S19296C10D0Ev,_ZThn7892_N9S19296C10D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void ABISELECT(_ZThn15008_N9S19296C10D1Ev,_ZThn9108_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn15008_N9S19296C10D0Ev,_ZThn9108_N9S19296C10D0Ev)();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn15152_N9S19296C10D1Ev,_ZThn9196_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn15152_N9S19296C10D0Ev,_ZThn9196_N9S19296C10D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n72_N9S19296C10D1Ev,_ZTv0_n36_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn18048_N9S19296C10D1Ev,_ZThn10972_N9S19296C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19296C10D0Ev,_ZTv0_n36_N9S19296C10D0Ev)();
extern void ABISELECT(_ZThn18048_N9S19296C10D0Ev,_ZThn10972_N9S19296C10D0Ev)() __attribute__((weak));
extern void _ZN8S19296C92v9Ev();
extern void _ZN8S19296C93v10Ev();
extern void _ZN8S19296C93v11Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTvn352_n72_N9S19296C10D1Ev,_ZTvn216_n36_N9S19296C10D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N9S19296C10D0Ev,_ZTvn216_n36_N9S19296C10D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void ABISELECT(_ZTv0_n56_N9S19296C10D1Ev,_ZTv0_n28_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn20704_N9S19296C10D1Ev,_ZThn12600_N9S19296C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19296C10D0Ev,_ZTv0_n28_N9S19296C10D0Ev)();
extern void ABISELECT(_ZThn20704_N9S19296C10D0Ev,_ZThn12600_N9S19296C10D0Ev)() __attribute__((weak));
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C10D1Ev,_ZTv0_n32_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn22016_N9S19296C10D1Ev,_ZThn13400_N9S19296C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19296C10D0Ev,_ZTv0_n32_N9S19296C10D0Ev)();
extern void ABISELECT(_ZThn22016_N9S19296C10D0Ev,_ZThn13400_N9S19296C10D0Ev)() __attribute__((weak));
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY vtc_S19296C10[] = {
  ABISELECT(22016,13400),
  ABISELECT(21808,13272),
  ABISELECT(20704,12600),
  ABISELECT(20560,12512),
  ABISELECT(20512,12488),
  ABISELECT(19600,11932),
  ABISELECT(18048,10972),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN9S19296C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v16Ev,
  (VTBL_ENTRY)&_ZN9S19296C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19296C103v17Ev,
  ABISELECT(-13008,-7892),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn13008_N9S19296C10D1Ev,_ZThn7892_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn13008_N9S19296C10D0Ev,_ZThn7892_N9S19296C10D0Ev),
  ABISELECT(4592,2824),
  ABISELECT(5504,3380),
  ABISELECT(7008,4292),
  ABISELECT(6800,4164),
  ABISELECT(5552,3404),
  ABISELECT(5696,3492),
  ABISELECT(-15008,-9108),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19296C10D1Ev,_ZThn9108_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19296C10D0Ev,_ZThn9108_N9S19296C10D0Ev),
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  ABISELECT(-15152,-9196),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19296C10D1Ev,_ZThn9196_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19296C10D0Ev,_ZThn9196_N9S19296C10D0Ev),
  ABISELECT(-15360,-9324),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-18048,-10972),
  0,
  0,
  0,
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  ABISELECT(-18048,-10972),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19296C10D1Ev,_ZTv0_n36_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19296C10D0Ev,_ZTv0_n36_N9S19296C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19296C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v11Ev,
  ABISELECT(-18256,-11100),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-18400,-11188),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19296C10D1Ev,_ZTvn216_n36_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19296C10D0Ev,_ZTvn216_n36_N9S19296C10D0Ev),
  ABISELECT(-18608,-11316),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(1792,1092),
  ABISELECT(-18768,-11420),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-19600,-11932),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  ABISELECT(48,24),
  ABISELECT(-20512,-12488),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  0,
  0,
  ABISELECT(-20560,-12512),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-20704,-12600),
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  ABISELECT(-20704,-12600),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C10D1Ev,_ZTv0_n28_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C10D0Ev,_ZTv0_n28_N9S19296C10D0Ev),
  ABISELECT(-20752,-12624),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  ABISELECT(-21664,-13180),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-21808,-13272),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-22016,-13400),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-22016,-13400),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C10D1Ev,_ZTv0_n32_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C10D0Ev,_ZTv0_n32_N9S19296C10D0Ev),
  ABISELECT(-22224,-13528),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern VTBL_ENTRY _ZTV9S19296C10[];
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN9S19296C13D1Ev();
extern void _ZN9S19296C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19296C13__9S19296C10[] = {
  ABISELECT(4592,2824),
  ABISELECT(5504,3380),
  ABISELECT(7008,4292),
  ABISELECT(6800,4164),
  ABISELECT(5552,3404),
  ABISELECT(5696,3492),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19296C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C13D0Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C29S19296C13__A2__9S19296C10[] = {
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C29S19296C13__A2__9S19296C10[] = {
  ABISELECT(48,24),
  ABISELECT(-5360,-3292),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C29S19296C13__A2__9S19296C10[] = {
  0,
  0,
  ABISELECT(-5408,-3316),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn5696_N9S19296C13D1Ev,_ZThn3492_N9S19296C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev)();
extern void ABISELECT(_ZThn5696_N9S19296C13D0Ev,_ZThn3492_N9S19296C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19296C14__9S19296C13__9S19296C10[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-5696,-3492),
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  ABISELECT(-5696,-3492),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__9S19296C13__9S19296C10[] = {
  0,
  0,
  ABISELECT(-5552,-3404),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C89S19296C14__9S19296C13__9S19296C10[] = {
  ABISELECT(-5744,-3516),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C3__A1__9S19296C13__9S19296C10[] = {
  0,
  0,
  0,
  ABISELECT(-6800,-4164),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C49S19296C14__A1__9S19296C13__9S19296C10[] = {
  ABISELECT(-6656,-4072),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn7008_N9S19296C13D1Ev,_ZThn4292_N9S19296C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev)();
extern void ABISELECT(_ZThn7008_N9S19296C13D0Ev,_ZThn4292_N9S19296C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19296C2__9S19296C13__9S19296C10[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-7008,-4292),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-7008,-4292),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C2__A2__9S19296C13__9S19296C10[] = {
  ABISELECT(-7216,-4420),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A1__9S19296C13__9S19296C10[] = {
  ABISELECT(48,24),
  ABISELECT(-5504,-3380),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C8__A1__9S19296C13__9S19296C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4592,-2824),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn144_N9S19296C13D1Ev,_ZThn88_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19296C13D0Ev,_ZThn88_N9S19296C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C2__A__9S19296C13__9S19296C10[] = {
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19296C13D1Ev,_ZThn88_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19296C13D0Ev,_ZThn88_N9S19296C13D0Ev),
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C9D1Ev();
extern void _ZN8S19296C9D0Ev();
extern void _ZN8S19296C92v9Ev();
extern void _ZN8S19296C93v10Ev();
extern void _ZN8S19296C93v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C9__9S19296C10[] = {
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19296C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v11Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C28S19296C9__9S19296C10[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C28S19296C9__9S19296C10[] = {
  ABISELECT(48,24),
  ABISELECT(-2112,-1300),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C28S19296C9__9S19296C10[] = {
  0,
  0,
  ABISELECT(-2160,-1324),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C58S19296C9__A1__9S19296C10[] = {
  ABISELECT(1792,1092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C58S19296C9__A1__9S19296C10[] = {
  0,
  0,
  ABISELECT(-1792,-1092),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C8__8S19296C9__9S19296C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn352_N8S19296C9D1Ev,_ZThn216_N8S19296C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S19296C9D0Ev,_ZThn216_N8S19296C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C2__8S19296C9__9S19296C10[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19296C9D1Ev,_ZThn216_N8S19296C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19296C9D0Ev,_ZThn216_N8S19296C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C9__9S19296C10[] = {
  ABISELECT(48,24),
  ABISELECT(-2464,-1516),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A2__8S19296C9__9S19296C10[] = {
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A__8S19296C9__9S19296C10[] = {
  ABISELECT(1792,1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__9S19296C10[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__9S19296C10[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN9S19296C14D1Ev();
extern void _ZN9S19296C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19296C14__9S19296C10[] = {
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN9S19296C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C59S19296C14__A2__9S19296C10[] = {
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C59S19296C14__A2__9S19296C10[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__9S19296C14__9S19296C10[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C3__A1__9S19296C14__9S19296C10[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev)();
extern void ABISELECT(_ZThn1312_N9S19296C14D1Ev,_ZThn800_N9S19296C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev)();
extern void ABISELECT(_ZThn1312_N9S19296C14D0Ev,_ZThn800_N9S19296C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19296C2__9S19296C14__9S19296C10[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1312,-800),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-1312,-800),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C2__A2__9S19296C14__9S19296C10[] = {
  ABISELECT(-1520,-928),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A1__9S19296C14__9S19296C10[] = {
  ABISELECT(48,24),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C2__A1__9S19296C10[] = {
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C2__A1__9S19296C10[] = {
  ABISELECT(48,24),
  ABISELECT(1504,912),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C2__A1__9S19296C10[] = {
  0,
  0,
  ABISELECT(1456,888),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTT_ENTRY vtt_S19296C10[] = {
  {&(_ZTV9S19296C10[9]),  9,163},
  {&(_tg__ZTV9S19296C13__9S19296C10[8]),  8,12},
  {&(_tg__ZTV8S19296C29S19296C13__A2__9S19296C10[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C29S19296C13__A2__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C29S19296C13__A2__9S19296C10[4]),  4,6},
  {&(_tg__ZTV9S19296C14__9S19296C13__9S19296C10[14]),  14,16},
  {&(_tg__ZTV8S19296C4__9S19296C13__9S19296C10[4]),  4,6},
  {&(_tg__ZTV8S19296C89S19296C14__9S19296C13__9S19296C10[2]),  2,7},
  {&(_tg__ZTV8S19296C3__A1__9S19296C13__9S19296C10[5]),  5,8},
  {&(_tg__ZTV8S19296C49S19296C14__A1__9S19296C13__9S19296C10[2]),  2,4},
  {&(_tg__ZTV8S19296C2__9S19296C13__9S19296C10[10]),  10,15},
  {&(_tg__ZTV8S19296C48S19296C2__A2__9S19296C13__9S19296C10[2]),  2,4},
  {&(_tg__ZTV8S19296C5__A1__9S19296C13__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C8__A1__9S19296C13__9S19296C10[7]),  7,12},
  {&(_tg__ZTV8S19296C2__A__9S19296C13__9S19296C10[4]),  4,9},
  {&(_ZTV9S19296C10[60]),  60,163},
  {&(_ZTV9S19296C10[95]),  95,163},
  {&(_ZTV9S19296C10[70]),  70,163},
  {&(_ZTV9S19296C10[76]),  76,163},
  {&(_ZTV9S19296C10[83]),  83,163},
  {&(_ZTV9S19296C10[103]),  103,163},
  {&(_ZTV9S19296C10[107]),  107,163},
  {&(_ZTV9S19296C10[88]),  88,163},
  {&(_ZTV9S19296C10[29]),  29,163},
  {&(_ZTV9S19296C10[123]),  123,163},
  {&(_ZTV9S19296C10[127]),  127,163},
  {&(_ZTV9S19296C10[141]),  141,163},
  {&(_ZTV9S19296C10[134]),  134,163},
  {&(_ZTV9S19296C10[154]),  154,163},
  {&(_ZTV9S19296C10[161]),  161,163},
  {&(_ZTV9S19296C10[37]),  37,163},
  {&(_tg__ZTV8S19296C9__9S19296C10[5]),  5,13},
  {&(_tg__ZTV8S19296C28S19296C9__9S19296C10[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C28S19296C9__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C28S19296C9__9S19296C10[4]),  4,6},
  {&(_tg__ZTV8S19296C58S19296C9__A1__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C58S19296C9__A1__9S19296C10[4]),  4,6},
  {&(_tg__ZTV8S19296C8__8S19296C9__9S19296C10[7]),  7,12},
  {&(_tg__ZTV8S19296C2__8S19296C9__9S19296C10[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C9__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A2__8S19296C9__9S19296C10[4]),  4,6},
  {&(_tg__ZTV8S19296C5__A__8S19296C9__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C5__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__9S19296C10[4]),  4,6},
  {&(_tg__ZTV9S19296C14__9S19296C10[6]),  6,8},
  {&(_tg__ZTV8S19296C59S19296C14__A2__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C59S19296C14__A2__9S19296C10[4]),  4,6},
  {&(_tg__ZTV8S19296C4__9S19296C14__9S19296C10[4]),  4,6},
  {&(_tg__ZTV8S19296C3__A1__9S19296C14__9S19296C10[5]),  5,8},
  {&(_tg__ZTV8S19296C2__9S19296C14__9S19296C10[10]),  10,15},
  {&(_tg__ZTV8S19296C48S19296C2__A2__9S19296C14__9S19296C10[2]),  2,4},
  {&(_tg__ZTV8S19296C5__A1__9S19296C14__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C2__A1__9S19296C10[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C2__A1__9S19296C10[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C2__A1__9S19296C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19296C10[];
extern  VTBL_ENTRY _ZTV9S19296C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C10[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19296C14D0Ev,_ZThn800_N9S19296C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19296C14D1Ev,_ZThn800_N9S19296C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7008_N9S19296C13D0Ev,_ZThn4292_N9S19296C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7008_N9S19296C13D1Ev,_ZThn4292_N9S19296C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5696_N9S19296C13D0Ev,_ZThn3492_N9S19296C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5696_N9S19296C13D1Ev,_ZThn3492_N9S19296C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C10D0Ev,_ZTv0_n32_N9S19296C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22016_N9S19296C10D0Ev,_ZThn13400_N9S19296C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19296C10D1Ev,_ZTv0_n32_N9S19296C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22016_N9S19296C10D1Ev,_ZThn13400_N9S19296C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C10D0Ev,_ZTv0_n28_N9S19296C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20704_N9S19296C10D0Ev,_ZThn12600_N9S19296C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C10D1Ev,_ZTv0_n28_N9S19296C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20704_N9S19296C10D1Ev,_ZThn12600_N9S19296C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19296C10D0Ev,_ZTv0_n36_N9S19296C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19296C10D0Ev,_ZThn10972_N9S19296C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19296C10D1Ev,_ZTv0_n36_N9S19296C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19296C10D1Ev,_ZThn10972_N9S19296C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19296C10 = {  "S19296C10", // class name
  bases_S19296C10, 27,
  &(vtc_S19296C10[0]), // expected_vtbl_contents
  &(vtt_S19296C10[0]), // expected_vtt_contents
  ABISELECT(22384,13632), // object size
  NSPAIRA(_ZTI9S19296C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19296C10),163, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19296C10),55, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19296C1  : virtual S19296C2 , S19296C7 , virtual S19296C8 , virtual S19296C9 , virtual S19296C10 {
  ::S19296C8 s19296c1f0;
  int s19296c1f1:8;
  void *s19296c1f2;
  int s19296c1f3;
  virtual  ~S19296C1(); // _ZN8S19296C1D2Ev
  virtual void  v1(); // _ZN8S19296C12v1Ev
  S19296C1(); // tgen
};
//SIG(1 S19296C1) C1{ VBC2{ BC3{ v2 v3 v4 Fi[2] FL Fc:0 FC4{ v5 v6 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} BC4 VBC5{ VBC4 Fi Fi:7 FC6{} Fp Fi Fp} vd Fs:16 FL Fs} BC7{ BC8{ BC3 v7 v8 FC4 Fi FC4 FC3 FC4 FD Fp Fi FD Fc:0} FD} VBC8 VBC9{ BC3 VBC8 BC4 BC2 BC5 vd v9 v10 v11 FC4 Fc Fi Fs FC2 FD[2] Fi[2] FD} VBC10{ BC11{ v12 v13 v14 v15 v16 FC12{ vd m Fp FC6 Fp Fi FC13{ BC14{ v20 v21 v22 Fi[2] FL Fc:0 FC15{ v23 v24 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v18 v19 FC15 Fi FC15 FC14 FC15 FD Fp Fi FD Fc:0} FC14[5]}[6] Fi FC7 Fi Fp[2] Fc Fp} VBC9 BC12 BC16{ VBC17{ BC5 BC8 VBC3 BC4 VBC2 vd Fs} BC4 VBC8 BC2 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC6 Fi[5] FC12} vd v17 Fi:2 Fp[5] Fi[2] FC4 Fi[7] FC4 Fc[7] Fs:1} vd v1 FC8 Fi:8 Fp Fi}


 S19296C1 ::~S19296C1(){ note_dtor("S19296C1", this);}
void  S19296C1 ::v1(){vfunc_called(this, "_ZN8S19296C12v1Ev");}
S19296C1 ::S19296C1(){ note_ctor("S19296C1", this);} // tgen

static void Test_S19296C1()
{
  extern Class_Descriptor cd_S19296C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1517,3693)];
    init_test(&cd_S19296C1, buf);
    S19296C1 *dp, &lv = *(dp=new (buf) S19296C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24256,14768), "sizeof(S19296C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19296C1)");
    /*is_ambiguous_... S19296C1::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C2*), ABISELECT(1872,1136), "S19296C1");
    /*is_ambiguous_... S19296C1::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*), ABISELECT(2080,1264), "S19296C1");
    /*is_ambiguous_... S19296C1::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*), ABISELECT(2288,1392), "S19296C1");
    /*is_ambiguous_... S19296C9::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*)(S19296C9*), ABISELECT(2288,1392), "S19296C1");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C5*)(S19296C14*), ABISELECT(2288,1392), "S19296C1");
    /*is_ambiguous_... S19296C1::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C2*), ABISELECT(2240,1368), "S19296C1");
    check_base_class_offset(lv, (S19296C5*)(S19296C2*)(S19296C9*), ABISELECT(2240,1368), "S19296C1");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C2*)(S19296C13*)(S19296C10*), ABISELECT(2240,1368), "S19296C1");
    /*is_ambiguous_... S19296C1::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C2*), ABISELECT(1872,1136), "S19296C1");
    check_base_class_offset(lv, (S19296C2*)(S19296C14*), ABISELECT(1872,1136), "S19296C1");
    check_base_class_offset(lv, (S19296C3*)(S19296C8*)(S19296C7*), 0, "S19296C1");
    check_base_class_offset(lv, (S19296C8*)(S19296C7*), 0, "S19296C1");
    check_base_class_offset(lv, (S19296C7*), 0, "S19296C1");
    /*is_ambiguous_... S19296C1::S19296C8 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C8*), ABISELECT(2432,1480), "S19296C1");
    /*is_ambiguous_... S19296C1::S19296C8 */ AMB_check_base_class_offset(lv, (S19296C8*), ABISELECT(2432,1480), "S19296C1");
    check_base_class_offset(lv, (S19296C8*)(S19296C9*), ABISELECT(2432,1480), "S19296C1");
    /*is_ambiguous_... S19296C13::S19296C8 */ AMB_check_base_class_offset(lv, (S19296C8*)(S19296C13*)(S19296C10*), ABISELECT(2432,1480), "S19296C1");
    /*is_ambiguous_... S19296C9::S19296C3 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C9*), ABISELECT(3344,2036), "S19296C1");
    /*is_ambiguous_... S19296C9::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C9*), ABISELECT(3552,2164), "S19296C1");
    check_base_class_offset(lv, (S19296C3*)(S19296C2*)(S19296C9*), ABISELECT(3696,2252), "S19296C1");
    /*is_ambiguous_... S19296C2::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*)(S19296C9*), ABISELECT(3904,2380), "S19296C1");
    check_base_class_offset(lv, (S19296C2*)(S19296C9*), ABISELECT(3696,2252), "S19296C1");
    /*is_ambiguous_... S19296C9::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C9*), ABISELECT(4064,2484), "S19296C1");
    check_base_class_offset(lv, (S19296C9*), ABISELECT(3344,2036), "S19296C1");
    check_base_class_offset(lv, (S19296C9*)(S19296C10*), ABISELECT(3344,2036), "S19296C1");
    check_base_class_offset(lv, (S19296C11*)(S19296C10*), ABISELECT(4896,2996), "S19296C1");
    check_base_class_offset(lv, (S3465C14*)(S19296C10*), ABISELECT(17904,10888), "S19296C1");
    /*is_ambiguous_... S19296C14::S19296C5 */ AMB_check_base_class_offset(lv, (S19296C5*)(S19296C14*), ABISELECT(22944,13968), "S19296C1");
    check_base_class_offset(lv, (S19296C3*)(S19296C8*)(S19296C14*), ABISELECT(22992,13992), "S19296C1");
    check_base_class_offset(lv, (S19296C8*)(S19296C14*), ABISELECT(22992,13992), "S19296C1");
    /*is_ambiguous_... S19296C14::S19296C3 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C14*), ABISELECT(24048,14640), "S19296C1");
    /*is_ambiguous_... S19296C14::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C14*), ABISELECT(23904,14548), "S19296C1");
    check_base_class_offset(lv, (S19296C14*)(S19296C13*)(S19296C10*), ABISELECT(22944,13968), "S19296C1");
    /*is_ambiguous_... S19296C13::S19296C4 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C13*)(S19296C10*), ABISELECT(19904,12104), "S19296C1");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C3*)(S19296C2*)(S19296C13*)(S19296C10*), ABISELECT(20048,12192), "S19296C1");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C4*)(S19296C2*)(S19296C13*)(S19296C10*), ABISELECT(20256,12320), "S19296C1");
    /*is_ambiguous_... S19296C13::S19296C2 */ AMB_check_base_class_offset(lv, (S19296C2*)(S19296C13*)(S19296C10*), ABISELECT(20048,12192), "S19296C1");
    check_base_class_offset(lv, (S19296C13*)(S19296C10*), ABISELECT(19904,12104), "S19296C1");
    check_base_class_offset(lv, (S19296C10*), ABISELECT(4896,2996), "S19296C1");
    check_field_offset(lv, s19296c1f0, ABISELECT(928,568), "S19296C1.s19296c1f0");
    set_bf_and_test(lv, s19296c1f1, ABISELECT(1840,1124), 0, 8, 1, "S19296C1");
    set_bf_and_test(lv, s19296c1f1, ABISELECT(1840,1124), 0, 8, hide_sll(1LL<<7), "S19296C1");
    check_field_offset(lv, s19296c1f2, ABISELECT(1848,1128), "S19296C1.s19296c1f2");
    check_field_offset(lv, s19296c1f3, ABISELECT(1856,1132), "S19296C1.s19296c1f3");
    test_class_info(&lv, &cd_S19296C1);
    dp->~S19296C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19296C1(Test_S19296C1, "S19296C1", ABISELECT(24256,14768));

#else // __cplusplus

extern void _ZN8S19296C1C1Ev();
extern void _ZN8S19296C1D2Ev();
Name_Map name_map_S19296C1[] = {
  NSPAIR(_ZN8S19296C1C1Ev),
  NSPAIR(_ZN8S19296C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C7;
extern VTBL_ENTRY _ZTI8S19296C7[];
extern  VTBL_ENTRY _ZTV8S19296C7[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C9;
extern VTBL_ENTRY _ZTI8S19296C9[];
extern  VTBL_ENTRY _ZTV8S19296C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C9[];
extern Class_Descriptor cd_S19296C11;
extern VTBL_ENTRY _ZTI9S19296C11[];
extern  VTBL_ENTRY _ZTV9S19296C11[];
extern Class_Descriptor cd_S3465C14;
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
extern Class_Descriptor cd_S19296C5;
extern VTBL_ENTRY _ZTI8S19296C5[];
extern  VTBL_ENTRY _ZTV8S19296C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C5[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C8;
extern VTBL_ENTRY _ZTI8S19296C8[];
extern  VTBL_ENTRY _ZTV8S19296C8[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C14;
extern VTBL_ENTRY _ZTI9S19296C14[];
extern  VTBL_ENTRY _ZTV9S19296C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C14[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C3;
extern VTBL_ENTRY _ZTI8S19296C3[];
extern  VTBL_ENTRY _ZTV8S19296C3[];
extern Class_Descriptor cd_S19296C4;
extern VTBL_ENTRY _ZTI8S19296C4[];
extern  VTBL_ENTRY _ZTV8S19296C4[];
extern Class_Descriptor cd_S19296C2;
extern VTBL_ENTRY _ZTI8S19296C2[];
extern  VTBL_ENTRY _ZTV8S19296C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C2[];
extern Class_Descriptor cd_S19296C13;
extern VTBL_ENTRY _ZTI9S19296C13[];
extern  VTBL_ENTRY _ZTV9S19296C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C13[];
extern Class_Descriptor cd_S19296C10;
extern VTBL_ENTRY _ZTI9S19296C10[];
extern  VTBL_ENTRY _ZTV9S19296C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19296C10[];
static Base_Class bases_S19296C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19296C3,    ABISELECT(1872,1136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(2080,1264), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(2288,1392), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19296C5,    ABISELECT(2240,1368), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19296C2,    ABISELECT(1872,1136), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19296C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19296C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19296C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19296C3,    ABISELECT(2432,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19296C8,    ABISELECT(2432,1480), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19296C3,    ABISELECT(3344,2036), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(3552,2164), //bcp->offset
    80, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(3696,2252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(3904,2380), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19296C2,    ABISELECT(3696,2252), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19296C5,    ABISELECT(4064,2484), //bcp->offset
    97, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19296C9,    ABISELECT(3344,2036), //bcp->offset
    58, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19296C11,    ABISELECT(4896,2996), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3465C14,    ABISELECT(17904,10888), //bcp->offset
    129, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19296C5,    ABISELECT(22944,13968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(22992,13992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19296C8,    ABISELECT(22992,13992), //bcp->offset
    174, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(24048,14640), //bcp->offset
    185, //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
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19296C4,    ABISELECT(23904,14548), //bcp->offset
    181, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19296C14,    ABISELECT(22944,13968), //bcp->offset
    158, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19296C4,    ABISELECT(19904,12104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19296C3,    ABISELECT(20048,12192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19296C4,    ABISELECT(20256,12320), //bcp->offset
    154, //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
    25, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19296C2,    ABISELECT(20048,12192), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19296C13,    ABISELECT(19904,12104), //bcp->offset
    133, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19296C10,    ABISELECT(4896,2996), //bcp->offset
    100, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19296C1[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C1D1Ev();
extern void _ZN8S19296C1D0Ev();
extern void _ZN8S19296C12v1Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S19296C1D1Ev,_ZTv0_n32_N8S19296C1D1Ev)();
extern void ABISELECT(_ZThn1872_N8S19296C1D1Ev,_ZThn1136_N8S19296C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19296C1D0Ev,_ZTv0_n32_N8S19296C1D0Ev)();
extern void ABISELECT(_ZThn1872_N8S19296C1D0Ev,_ZThn1136_N8S19296C1D0Ev)() __attribute__((weak));
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19296C1D1Ev,_ZTv0_n36_N8S19296C1D1Ev)();
extern void ABISELECT(_ZThn3344_N8S19296C1D1Ev,_ZThn2036_N8S19296C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19296C1D0Ev,_ZTv0_n36_N8S19296C1D0Ev)();
extern void ABISELECT(_ZThn3344_N8S19296C1D0Ev,_ZThn2036_N8S19296C1D0Ev)() __attribute__((weak));
extern void _ZN8S19296C92v9Ev();
extern void _ZN8S19296C93v10Ev();
extern void _ZN8S19296C93v11Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTvn352_n72_N8S19296C1D1Ev,_ZTvn216_n36_N8S19296C1D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N8S19296C1D0Ev,_ZTvn216_n36_N8S19296C1D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN9S19296C113v12Ev();
extern void _ZN9S19296C113v13Ev();
extern void _ZN9S19296C113v14Ev();
extern void _ZN9S19296C113v15Ev();
extern void _ZN9S19296C113v16Ev();
extern void ABISELECT(_ZTv0_n120_N8S19296C1D1Ev,_ZTv0_n60_N8S19296C1D1Ev)();
extern void ABISELECT(_ZThn4896_N8S19296C1D1Ev,_ZThn2996_N8S19296C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19296C1D0Ev,_ZTv0_n60_N8S19296C1D0Ev)();
extern void ABISELECT(_ZThn4896_N8S19296C1D0Ev,_ZThn2996_N8S19296C1D0Ev)() __attribute__((weak));
extern void _ZN9S19296C103v17Ev();
extern void ABISELECT(_ZTvn13008_n120_N8S19296C1D1Ev,_ZTvn7892_n60_N8S19296C1D1Ev)();
extern void ABISELECT(_ZTvn13008_n120_N8S19296C1D0Ev,_ZTvn7892_n60_N8S19296C1D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void ABISELECT(_ZTvn15008_n120_N8S19296C1D1Ev,_ZTvn9108_n60_N8S19296C1D1Ev)();
extern void ABISELECT(_ZTvn15008_n120_N8S19296C1D0Ev,_ZTvn9108_n60_N8S19296C1D0Ev)();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTvn15152_n120_N8S19296C1D1Ev,_ZTvn9196_n60_N8S19296C1D1Ev)();
extern void ABISELECT(_ZTvn15152_n120_N8S19296C1D0Ev,_ZTvn9196_n60_N8S19296C1D0Ev)();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void ABISELECT(_ZTv0_n56_N8S19296C1D1Ev,_ZTv0_n28_N8S19296C1D1Ev)();
extern void ABISELECT(_ZThn22944_N8S19296C1D1Ev,_ZThn13968_N8S19296C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19296C1D0Ev,_ZTv0_n28_N8S19296C1D0Ev)();
extern void ABISELECT(_ZThn22944_N8S19296C1D0Ev,_ZThn13968_N8S19296C1D0Ev)() __attribute__((weak));
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY vtc_S19296C1[] = {
  ABISELECT(24048,14640),
  ABISELECT(22944,13968),
  ABISELECT(4896,2996),
  ABISELECT(3344,2036),
  ABISELECT(2432,1480),
  ABISELECT(2288,1392),
  ABISELECT(2240,1368),
  ABISELECT(1872,1136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  (VTBL_ENTRY)&_ZN8S19296C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19296C12v1Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1872,-1136),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(-1872,-1136),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19296C1D1Ev,_ZTv0_n32_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19296C1D0Ev,_ZTv0_n32_N8S19296C1D0Ev),
  ABISELECT(-2080,-1264),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(48,24),
  ABISELECT(-2240,-1368),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  0,
  0,
  ABISELECT(-2288,-1392),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2432,-1480),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-3344,-2036),
  0,
  0,
  0,
  ABISELECT(-1056,-644),
  ABISELECT(-1104,-668),
  ABISELECT(-912,-556),
  ABISELECT(-3344,-2036),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19296C1D1Ev,_ZTv0_n36_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19296C1D0Ev,_ZTv0_n36_N8S19296C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19296C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v11Ev,
  ABISELECT(-3552,-2164),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  ABISELECT(-3696,-2252),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S19296C1D1Ev,_ZTvn216_n36_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S19296C1D0Ev,_ZTvn216_n36_N8S19296C1D0Ev),
  ABISELECT(-3904,-2380),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(-1776,-1092),
  ABISELECT(-4064,-2484),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  ABISELECT(15152,9196),
  ABISELECT(15152,9196),
  ABISELECT(15152,9196),
  ABISELECT(15008,9108),
  ABISELECT(15008,9108),
  0,
  ABISELECT(-4896,-2996),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3024,-1860),
  ABISELECT(19152,11644),
  ABISELECT(18048,10972),
  ABISELECT(-2608,-1604),
  ABISELECT(-2656,-1628),
  ABISELECT(-2464,-1516),
  ABISELECT(-1552,-960),
  ABISELECT(-4896,-2996),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN9S19296C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19296C1D1Ev,_ZTv0_n60_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19296C1D0Ev,_ZTv0_n60_N8S19296C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19296C103v17Ev,
  ABISELECT(-17904,-10888),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn13008_n120_N8S19296C1D1Ev,_ZTvn7892_n60_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn13008_n120_N8S19296C1D0Ev,_ZTvn7892_n60_N8S19296C1D0Ev),
  ABISELECT(-17472,-10624),
  ABISELECT(-17664,-10736),
  ABISELECT(-18032,-10968),
  ABISELECT(4144,2536),
  ABISELECT(-17616,-10712),
  ABISELECT(3040,1864),
  ABISELECT(-19904,-12104),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn15008_n120_N8S19296C1D1Ev,_ZTvn9108_n60_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn15008_n120_N8S19296C1D0Ev,_ZTvn9108_n60_N8S19296C1D0Ev),
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  ABISELECT(-20048,-12192),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn15152_n120_N8S19296C1D1Ev,_ZTvn9196_n60_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn15152_n120_N8S19296C1D0Ev,_ZTvn9196_n60_N8S19296C1D0Ev),
  ABISELECT(-20256,-12320),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-22944,-13968),
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  ABISELECT(-22944,-13968),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19296C1D1Ev,_ZTv0_n28_N8S19296C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19296C1D0Ev,_ZTv0_n28_N8S19296C1D0Ev),
  ABISELECT(-22992,-13992),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
  ABISELECT(-23904,-14548),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-24048,-14640),
  (VTBL_ENTRY)&(_ZTI8S19296C1[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S19296C1[];
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C2__8S19296C1[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C2__8S19296C1[] = {
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C2__8S19296C1[] = {
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C5__8S19296C1[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C9D1Ev();
extern void _ZN8S19296C9D0Ev();
extern void _ZN8S19296C92v9Ev();
extern void _ZN8S19296C93v10Ev();
extern void _ZN8S19296C93v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C9__8S19296C1[] = {
  ABISELECT(-1056,-644),
  ABISELECT(-1104,-668),
  ABISELECT(-912,-556),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19296C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v11Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C28S19296C9__A1__8S19296C1[] = {
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C28S19296C9__A1__8S19296C1[] = {
  ABISELECT(48,24),
  ABISELECT(1456,884),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C28S19296C9__A1__8S19296C1[] = {
  0,
  0,
  ABISELECT(1408,860),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C58S19296C9__A1__8S19296C1[] = {
  ABISELECT(-1776,-1092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C58S19296C9__A1__8S19296C1[] = {
  0,
  0,
  ABISELECT(1776,1092),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C8__8S19296C9__8S19296C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(912,556),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn352_N8S19296C9D1Ev,_ZThn216_N8S19296C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S19296C9D0Ev,_ZThn216_N8S19296C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C2__8S19296C9__8S19296C1[] = {
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19296C9D1Ev,_ZThn216_N8S19296C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19296C9D0Ev,_ZThn216_N8S19296C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C9__8S19296C1[] = {
  ABISELECT(48,24),
  ABISELECT(1104,668),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A2__8S19296C9__8S19296C1[] = {
  0,
  0,
  ABISELECT(1056,644),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A__8S19296C9__8S19296C1[] = {
  ABISELECT(-1776,-1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S19296C9[0]),
};
extern void _ZN9S19296C113v12Ev();
extern void _ZN9S19296C113v13Ev();
extern void _ZN9S19296C113v14Ev();
extern void _ZN9S19296C113v15Ev();
extern void _ZN9S19296C113v16Ev();
extern void _ZN9S19296C10D1Ev();
extern void _ZN9S19296C10D0Ev();
extern void _ZN9S19296C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19296C10__8S19296C1[] = {
  ABISELECT(-3024,-1860),
  ABISELECT(19152,11644),
  ABISELECT(18048,10972),
  ABISELECT(-2608,-1604),
  ABISELECT(-2656,-1628),
  ABISELECT(-2464,-1516),
  ABISELECT(-1552,-960),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN9S19296C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19296C113v16Ev,
  (VTBL_ENTRY)&_ZN9S19296C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19296C103v17Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void _ZN9S19296C13D1Ev();
extern void _ZN9S19296C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(-17472,-10624),
  ABISELECT(-17664,-10736),
  ABISELECT(-18032,-10968),
  ABISELECT(4144,2536),
  ABISELECT(-17616,-10712),
  ABISELECT(3040,1864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19296C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C13D0Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C2D1Ev();
extern void _ZN8S19296C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C29S19296C139S19296C10__A2__8S19296C1[] = {
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19296C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__8S19296C29S19296C139S19296C10__A2__8S19296C1[] = {
  ABISELECT(48,24),
  ABISELECT(17808,10824),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A1__8S19296C29S19296C139S19296C10__A2__8S19296C1[] = {
  0,
  0,
  ABISELECT(17760,10800),
  (VTBL_ENTRY)&(_ZTI8S19296C2[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn3040_N9S19296C13D1Ev,_ZThn1864_N9S19296C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev)();
extern void ABISELECT(_ZThn3040_N9S19296C13D0Ev,_ZThn1864_N9S19296C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19296C14__9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-3040,-1864),
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  ABISELECT(-3040,-1864),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__9S19296C139S19296C10__8S19296C1[] = {
  0,
  0,
  ABISELECT(17616,10712),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C89S19296C14__9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(-3088,-1888),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C3__A1__9S19296C139S19296C10__8S19296C1[] = {
  0,
  0,
  0,
  ABISELECT(-4144,-2536),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C49S19296C14__A1__9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(-4000,-2444),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C2__9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(18032,10968),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(18032,10968),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C13D1Ev,_ZTv0_n32_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C13D0Ev,_ZTv0_n32_N9S19296C13D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C2__A2__9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(17824,10840),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A1__9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(48,24),
  ABISELECT(17664,10736),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C8__A1__9S19296C139S19296C10__8S19296C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(17472,10624),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn144_N9S19296C13D1Ev,_ZThn88_N9S19296C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19296C13D0Ev,_ZThn88_N9S19296C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C2__A__9S19296C139S19296C10__8S19296C1[] = {
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI9S19296C13[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19296C13D1Ev,_ZThn88_N9S19296C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19296C13D0Ev,_ZThn88_N9S19296C13D0Ev),
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n72_N9S19296C10D1Ev,_ZTv0_n36_N9S19296C10D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S19296C10D0Ev,_ZTv0_n36_N9S19296C10D0Ev)();
extern void _ZN8S19296C92v9Ev();
extern void _ZN8S19296C93v10Ev();
extern void _ZN8S19296C93v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C9__9S19296C10__8S19296C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(1552,960),
  0,
  0,
  0,
  ABISELECT(-1056,-644),
  ABISELECT(-1104,-668),
  ABISELECT(-912,-556),
  ABISELECT(1552,960),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19296C10D1Ev,_ZTv0_n36_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19296C10D0Ev,_ZTv0_n36_N9S19296C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19296C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19296C93v11Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C8__9S19296C10__8S19296C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2464,1516),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C9__9S19296C10__8S19296C1[] = {
  ABISELECT(1344,832),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTvn352_n72_N9S19296C10D1Ev,_ZTvn216_n36_N9S19296C10D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N9S19296C10D0Ev,_ZTvn216_n36_N9S19296C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C28S19296C9__9S19296C10__8S19296C1[] = {
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  ABISELECT(1200,744),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19296C10D1Ev,_ZTvn216_n36_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19296C10D0Ev,_ZTvn216_n36_N9S19296C10D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C28S19296C9__A1__9S19296C10__8S19296C1[] = {
  ABISELECT(992,616),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__9S19296C10__8S19296C1[] = {
  ABISELECT(48,24),
  ABISELECT(2656,1628),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__A2__9S19296C10__8S19296C1[] = {
  0,
  0,
  ABISELECT(2608,1604),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C58S19296C9__A1__9S19296C10__8S19296C1[] = {
  ABISELECT(-1776,-1092),
  ABISELECT(832,512),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
extern void ABISELECT(_ZThn15008_N9S19296C10D1Ev,_ZThn9108_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn15008_N9S19296C10D0Ev,_ZThn9108_N9S19296C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19296C13__9S19296C10__8S19296C1[] = {
  ABISELECT(-17472,-10624),
  ABISELECT(-17664,-10736),
  ABISELECT(-18032,-10968),
  ABISELECT(4144,2536),
  ABISELECT(-17616,-10712),
  ABISELECT(3040,1864),
  ABISELECT(-15008,-9108),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19296C10D1Ev,_ZThn9108_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19296C10D0Ev,_ZThn9108_N9S19296C10D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19296C10D1Ev,_ZTv0_n28_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn18048_N9S19296C10D1Ev,_ZThn10972_N9S19296C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19296C10D0Ev,_ZTv0_n28_N9S19296C10D0Ev)();
extern void ABISELECT(_ZThn18048_N9S19296C10D0Ev,_ZThn10972_N9S19296C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19296C14__9S19296C10__8S19296C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-18048,-10972),
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  ABISELECT(-18048,-10972),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C10D1Ev,_ZTv0_n28_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19296C10D0Ev,_ZTv0_n28_N9S19296C10D0Ev),
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void _ZN8S19296C82v7Ev();
extern void _ZN8S19296C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C89S19296C14__A1__9S19296C10__8S19296C1[] = {
  ABISELECT(-18096,-10996),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19296C82v8Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C3__A4__9S19296C10__8S19296C1[] = {
  0,
  0,
  0,
  ABISELECT(-19152,-11644),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C49S19296C14__A3__9S19296C10__8S19296C1[] = {
  ABISELECT(-19008,-11552),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C10D1Ev,_ZTv0_n32_N9S19296C10D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19296C10D0Ev,_ZTv0_n32_N9S19296C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C2__A1__9S19296C10__8S19296C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(3024,1860),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(3024,1860),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C10D1Ev,_ZTv0_n32_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C10D0Ev,_ZTv0_n32_N9S19296C10D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C2__A4__9S19296C10__8S19296C1[] = {
  ABISELECT(2816,1732),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZThn15152_N9S19296C10D1Ev,_ZThn9196_N9S19296C10D1Ev)();
extern void ABISELECT(_ZThn15152_N9S19296C10D0Ev,_ZThn9196_N9S19296C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C29S19296C13__A2__9S19296C10__8S19296C1[] = {
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  ABISELECT(-15152,-9196),
  (VTBL_ENTRY)&(_ZTI9S19296C10[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19296C10D1Ev,_ZThn9196_N9S19296C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19296C10D0Ev,_ZThn9196_N9S19296C10D0Ev),
};
extern void _ZN9S19296C14D1Ev();
extern void _ZN9S19296C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19296C14__8S19296C1[] = {
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  0,
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN9S19296C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19296C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C59S19296C14__A2__8S19296C1[] = {
  ABISELECT(-20656,-12576),
  0,
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__8S19296C59S19296C14__A2__8S19296C1[] = {
  0,
  0,
  ABISELECT(20656,12576),
  (VTBL_ENTRY)&(_ZTI8S19296C5[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C4__9S19296C14__8S19296C1[] = {
  0,
  0,
  ABISELECT(20656,12576),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C3__A1__9S19296C14__8S19296C1[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
};
extern void _ZN8S19296C32v2Ev();
extern void _ZN8S19296C32v3Ev();
extern void _ZN8S19296C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19296C2__9S19296C14__8S19296C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(21072,12832),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(21072,12832),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19296C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D1Ev,_ZTv0_n32_N9S19296C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19296C14D0Ev,_ZTv0_n32_N9S19296C14D0Ev),
};
extern void _ZN8S19296C42v5Ev();
extern void _ZN8S19296C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19296C48S19296C2__A2__9S19296C14__8S19296C1[] = {
  ABISELECT(20864,12704),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
  (VTBL_ENTRY)&_ZN8S19296C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19296C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19296C5__A1__9S19296C14__8S19296C1[] = {
  ABISELECT(48,24),
  ABISELECT(20704,12600),
  (VTBL_ENTRY)&(_ZTI9S19296C14[0]),
};
static  VTT_ENTRY vtt_S19296C1[] = {
  {&(_ZTV8S19296C1[10]),  10,193},
  {&(_ZTV8S19296C1[28]),  28,193},
  {&(_ZTV8S19296C1[35]),  35,193},
  {&(_ZTV8S19296C1[40]),  40,193},
  {&(_ZTV8S19296C1[44]),  44,193},
  {&(_ZTV8S19296C1[53]),  53,193},
  {&(_ZTV8S19296C1[72]),  72,193},
  {&(_ZTV8S19296C1[82]),  82,193},
  {&(_ZTV8S19296C1[88]),  88,193},
  {&(_ZTV8S19296C1[95]),  95,193},
  {&(_ZTV8S19296C1[100]),  100,193},
  {&(_ZTV8S19296C1[121]),  121,193},
  {&(_ZTV8S19296C1[131]),  131,193},
  {&(_ZTV8S19296C1[141]),  141,193},
  {&(_ZTV8S19296C1[172]),  172,193},
  {&(_ZTV8S19296C1[176]),  176,193},
  {&(_ZTV8S19296C1[190]),  190,193},
  {&(_ZTV8S19296C1[183]),  183,193},
  {&(_ZTV8S19296C1[149]),  149,193},
  {&(_ZTV8S19296C1[156]),  156,193},
  {&(_tg__ZTV8S19296C2__8S19296C1[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C2__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C2__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C5__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C5__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C9__8S19296C1[5]),  5,13},
  {&(_tg__ZTV8S19296C28S19296C9__A1__8S19296C1[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C28S19296C9__A1__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C28S19296C9__A1__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C58S19296C9__A1__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C58S19296C9__A1__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C8__8S19296C9__8S19296C1[7]),  7,12},
  {&(_tg__ZTV8S19296C2__8S19296C9__8S19296C1[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C9__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A2__8S19296C9__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C5__A__8S19296C9__8S19296C1[3]),  3,3},
  {&(_tg__ZTV9S19296C10__8S19296C1[9]),  9,17},
  {&(_tg__ZTV9S19296C139S19296C10__8S19296C1[8]),  8,12},
  {&(_tg__ZTV8S19296C29S19296C139S19296C10__A2__8S19296C1[4]),  4,9},
  {&(_tg__ZTV8S19296C5__8S19296C29S19296C139S19296C10__A2__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A1__8S19296C29S19296C139S19296C10__A2__8S19296C1[4]),  4,6},
  {&(_tg__ZTV9S19296C14__9S19296C139S19296C10__8S19296C1[14]),  14,16},
  {&(_tg__ZTV8S19296C4__9S19296C139S19296C10__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C89S19296C14__9S19296C139S19296C10__8S19296C1[2]),  2,7},
  {&(_tg__ZTV8S19296C3__A1__9S19296C139S19296C10__8S19296C1[5]),  5,8},
  {&(_tg__ZTV8S19296C49S19296C14__A1__9S19296C139S19296C10__8S19296C1[2]),  2,4},
  {&(_tg__ZTV8S19296C2__9S19296C139S19296C10__8S19296C1[10]),  10,15},
  {&(_tg__ZTV8S19296C48S19296C2__A2__9S19296C139S19296C10__8S19296C1[2]),  2,4},
  {&(_tg__ZTV8S19296C5__A1__9S19296C139S19296C10__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C8__A1__9S19296C139S19296C10__8S19296C1[7]),  7,12},
  {&(_tg__ZTV8S19296C2__A__9S19296C139S19296C10__8S19296C1[4]),  4,9},
  {&(_tg__ZTV8S19296C9__9S19296C10__8S19296C1[14]),  14,22},
  {&(_tg__ZTV8S19296C8__9S19296C10__8S19296C1[7]),  7,12},
  {&(_tg__ZTV8S19296C48S19296C9__9S19296C10__8S19296C1[2]),  2,4},
  {&(_tg__ZTV8S19296C28S19296C9__9S19296C10__8S19296C1[4]),  4,9},
  {&(_tg__ZTV8S19296C48S19296C28S19296C9__A1__9S19296C10__8S19296C1[2]),  2,4},
  {&(_tg__ZTV8S19296C5__9S19296C10__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__A2__9S19296C10__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C58S19296C9__A1__9S19296C10__8S19296C1[3]),  3,3},
  {&(_tg__ZTV9S19296C13__9S19296C10__8S19296C1[8]),  8,12},
  {&(_tg__ZTV9S19296C14__9S19296C10__8S19296C1[14]),  14,16},
  {&(_tg__ZTV8S19296C89S19296C14__A1__9S19296C10__8S19296C1[2]),  2,7},
  {&(_tg__ZTV8S19296C3__A4__9S19296C10__8S19296C1[5]),  5,8},
  {&(_tg__ZTV8S19296C49S19296C14__A3__9S19296C10__8S19296C1[2]),  2,4},
  {&(_tg__ZTV8S19296C2__A1__9S19296C10__8S19296C1[10]),  10,15},
  {&(_tg__ZTV8S19296C48S19296C2__A4__9S19296C10__8S19296C1[2]),  2,4},
  {&(_tg__ZTV8S19296C29S19296C13__A2__9S19296C10__8S19296C1[4]),  4,9},
  {&(_tg__ZTV9S19296C14__8S19296C1[6]),  6,8},
  {&(_tg__ZTV8S19296C59S19296C14__A2__8S19296C1[3]),  3,3},
  {&(_tg__ZTV8S19296C4__8S19296C59S19296C14__A2__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C4__9S19296C14__8S19296C1[4]),  4,6},
  {&(_tg__ZTV8S19296C3__A1__9S19296C14__8S19296C1[5]),  5,8},
  {&(_tg__ZTV8S19296C2__9S19296C14__8S19296C1[10]),  10,15},
  {&(_tg__ZTV8S19296C48S19296C2__A2__9S19296C14__8S19296C1[2]),  2,4},
  {&(_tg__ZTV8S19296C5__A1__9S19296C14__8S19296C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19296C1[];
extern  VTBL_ENTRY _ZTV8S19296C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19296C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C10D0Ev,_ZTv0_n28_N9S19296C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19296C10D0Ev,_ZThn10972_N9S19296C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C10D1Ev,_ZTv0_n28_N9S19296C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19296C10D1Ev,_ZThn10972_N9S19296C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C13D0Ev,_ZTv0_n28_N9S19296C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3040_N9S19296C13D0Ev,_ZThn1864_N9S19296C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19296C13D1Ev,_ZTv0_n28_N9S19296C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3040_N9S19296C13D1Ev,_ZThn1864_N9S19296C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19296C1D0Ev,_ZTv0_n28_N8S19296C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22944_N8S19296C1D0Ev,_ZThn13968_N8S19296C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19296C1D1Ev,_ZTv0_n28_N8S19296C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22944_N8S19296C1D1Ev,_ZThn13968_N8S19296C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19296C1D0Ev,_ZTv0_n60_N8S19296C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4896_N8S19296C1D0Ev,_ZThn2996_N8S19296C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19296C1D1Ev,_ZTv0_n60_N8S19296C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4896_N8S19296C1D1Ev,_ZThn2996_N8S19296C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19296C1D0Ev,_ZTv0_n36_N8S19296C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19296C1D0Ev,_ZThn2036_N8S19296C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19296C1D1Ev,_ZTv0_n36_N8S19296C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19296C1D1Ev,_ZThn2036_N8S19296C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19296C1D0Ev,_ZTv0_n32_N8S19296C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19296C1D0Ev,_ZThn1136_N8S19296C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19296C1D1Ev,_ZTv0_n32_N8S19296C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19296C1D1Ev,_ZThn1136_N8S19296C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19296C1 = {  "S19296C1", // class name
  bases_S19296C1, 31,
  &(vtc_S19296C1[0]), // expected_vtbl_contents
  &(vtt_S19296C1[0]), // expected_vtt_contents
  ABISELECT(24256,14768), // object size
  NSPAIRA(_ZTI8S19296C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19296C1),193, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19296C1),75, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19297C4  {
  void *s19297c4f0;
  long double s19297c4f1;
  __tsi64 s19297c4f2;
  void *s19297c4f3;
  int s19297c4f4:6;
  int s19297c4f5;
  void *s19297c4f6;
  long s19297c4f7[2];
  int s19297c4f8[3];
  void *s19297c4f9[3];
  __tsi64 s19297c4f10;
  long s19297c4f11;
  virtual void  v5(); // _ZN8S19297C42v5Ev
  virtual void  v6(); // _ZN8S19297C42v6Ev
  ~S19297C4(); // tgen
  S19297C4(); // tgen
};
//SIG(-1 S19297C4) C1{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl}


void  S19297C4 ::v5(){vfunc_called(this, "_ZN8S19297C42v5Ev");}
void  S19297C4 ::v6(){vfunc_called(this, "_ZN8S19297C42v6Ev");}
S19297C4 ::~S19297C4(){ note_dtor("S19297C4", this);} // tgen
S19297C4 ::S19297C4(){ note_ctor("S19297C4", this);} // tgen

static void Test_S19297C4()
{
  extern Class_Descriptor cd_S19297C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S19297C4, buf);
    S19297C4 *dp, &lv = *(dp=new (buf) S19297C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S19297C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C4)");
    check_field_offset(lv, s19297c4f0, ABISELECT(8,4), "S19297C4.s19297c4f0");
    check_field_offset(lv, s19297c4f1, ABISELECT(16,8), "S19297C4.s19297c4f1");
    check_field_offset(lv, s19297c4f2, ABISELECT(32,20), "S19297C4.s19297c4f2");
    check_field_offset(lv, s19297c4f3, ABISELECT(40,28), "S19297C4.s19297c4f3");
    set_bf_and_test(lv, s19297c4f4, ABISELECT(48,32), 0, 6, 1, "S19297C4");
    set_bf_and_test(lv, s19297c4f4, ABISELECT(48,32), 0, 6, hide_sll(1LL<<5), "S19297C4");
    check_field_offset(lv, s19297c4f5, ABISELECT(52,36), "S19297C4.s19297c4f5");
    check_field_offset(lv, s19297c4f6, ABISELECT(56,40), "S19297C4.s19297c4f6");
    check_field_offset(lv, s19297c4f7, ABISELECT(64,44), "S19297C4.s19297c4f7");
    check_field_offset(lv, s19297c4f8, ABISELECT(80,52), "S19297C4.s19297c4f8");
    check_field_offset(lv, s19297c4f9, ABISELECT(96,64), "S19297C4.s19297c4f9");
    check_field_offset(lv, s19297c4f10, ABISELECT(120,76), "S19297C4.s19297c4f10");
    check_field_offset(lv, s19297c4f11, ABISELECT(128,84), "S19297C4.s19297c4f11");
    test_class_info(&lv, &cd_S19297C4);
    dp->~S19297C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C4(Test_S19297C4, "S19297C4", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN8S19297C4C1Ev();
extern void _ZN8S19297C4D1Ev();
Name_Map name_map_S19297C4[] = {
  NSPAIR(_ZN8S19297C4C1Ev),
  NSPAIR(_ZN8S19297C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19297C4[];
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY vtc_S19297C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C4[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
Class_Descriptor cd_S19297C4 = {  "S19297C4", // class name
  0,0,//no base classes
  &(vtc_S19297C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI8S19297C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19297C4),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  S19297C3  {
  int s19297c3f0[2];
  __tsi64 s19297c3f1;
  char  :0;
  ::S19297C4 s19297c3f3;
  char s19297c3f4;
  int s19297c3f5;
  long double s19297c3f6;
  virtual void  v2(); // _ZN8S19297C32v2Ev
  virtual void  v3(); // _ZN8S19297C32v3Ev
  virtual void  v4(); // _ZN8S19297C32v4Ev
  ~S19297C3(); // tgen
  S19297C3(); // tgen
};
//SIG(-1 S19297C3) C1{ v1 v2 v3 Fi[2] FL Fc:0 FC2{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD}


void  S19297C3 ::v2(){vfunc_called(this, "_ZN8S19297C32v2Ev");}
void  S19297C3 ::v3(){vfunc_called(this, "_ZN8S19297C32v3Ev");}
void  S19297C3 ::v4(){vfunc_called(this, "_ZN8S19297C32v4Ev");}
S19297C3 ::~S19297C3(){ note_dtor("S19297C3", this);} // tgen
S19297C3 ::S19297C3(){ note_ctor("S19297C3", this);} // tgen

static void Test_S19297C3()
{
  extern Class_Descriptor cd_S19297C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S19297C3, buf);
    S19297C3 *dp, &lv = *(dp=new (buf) S19297C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S19297C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C3)");
    check_field_offset(lv, s19297c3f0, ABISELECT(8,4), "S19297C3.s19297c3f0");
    check_field_offset(lv, s19297c3f1, ABISELECT(16,12), "S19297C3.s19297c3f1");
    check_field_offset(lv, s19297c3f3, ABISELECT(32,20), "S19297C3.s19297c3f3");
    check_field_offset(lv, s19297c3f4, ABISELECT(176,108), "S19297C3.s19297c3f4");
    check_field_offset(lv, s19297c3f5, ABISELECT(180,112), "S19297C3.s19297c3f5");
    check_field_offset(lv, s19297c3f6, ABISELECT(192,116), "S19297C3.s19297c3f6");
    test_class_info(&lv, &cd_S19297C3);
    dp->~S19297C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C3(Test_S19297C3, "S19297C3", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN8S19297C3C1Ev();
extern void _ZN8S19297C3D1Ev();
Name_Map name_map_S19297C3[] = {
  NSPAIR(_ZN8S19297C3C1Ev),
  NSPAIR(_ZN8S19297C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19297C3[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY vtc_S19297C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C3[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
Class_Descriptor cd_S19297C3 = {  "S19297C3", // class name
  0,0,//no base classes
  &(vtc_S19297C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI8S19297C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19297C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19297C5  : virtual S19297C4 {
  int s19297c5f0;
  int s19297c5f1:7;
  ::S3465C9_nt s19297c5f2;
  void *s19297c5f3;
  int s19297c5f4;
  void *s19297c5f5;
  ~S19297C5(); // tgen
  S19297C5(); // tgen
};
//SIG(-1 S19297C5) C1{ VBC2{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC3{} Fp Fi Fp}


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

static void Test_S19297C5()
{
  extern Class_Descriptor cd_S19297C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S19297C5, buf);
    S19297C5 *dp, &lv = *(dp=new (buf) S19297C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S19297C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C5)");
    check_base_class_offset(lv, (S19297C4*), ABISELECT(48,24), "S19297C5");
    check_field_offset(lv, s19297c5f0, ABISELECT(8,4), "S19297C5.s19297c5f0");
    set_bf_and_test(lv, s19297c5f1, ABISELECT(12,8), 0, 7, 1, "S19297C5");
    set_bf_and_test(lv, s19297c5f1, ABISELECT(12,8), 0, 7, hide_sll(1LL<<6), "S19297C5");
    check_field_offset(lv, s19297c5f2, ABISELECT(13,9), "S19297C5.s19297c5f2");
    check_field_offset(lv, s19297c5f3, ABISELECT(16,12), "S19297C5.s19297c5f3");
    check_field_offset(lv, s19297c5f4, ABISELECT(24,16), "S19297C5.s19297c5f4");
    check_field_offset(lv, s19297c5f5, ABISELECT(32,20), "S19297C5.s19297c5f5");
    test_class_info(&lv, &cd_S19297C5);
    dp->~S19297C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C5(Test_S19297C5, "S19297C5", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN8S19297C5C1Ev();
extern void _ZN8S19297C5D1Ev();
Name_Map name_map_S19297C5[] = {
  NSPAIR(_ZN8S19297C5C1Ev),
  NSPAIR(_ZN8S19297C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
static Base_Class bases_S19297C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C4,    ABISELECT(48,24), //bcp->offset
    3, //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 _ZTI8S19297C5[];
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY vtc_S19297C5[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S19297C5[];
static  VTT_ENTRY vtt_S19297C5[] = {
  {&(_ZTV8S19297C5[3]),  3,9},
  {&(_ZTV8S19297C5[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
Class_Descriptor cd_S19297C5 = {  "S19297C5", // class name
  bases_S19297C5, 1,
  &(vtc_S19297C5[0]), // expected_vtbl_contents
  &(vtt_S19297C5[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI8S19297C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19297C5),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19297C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19297C2  : S19297C3 , S19297C4 , virtual S19297C5 {
  short s19297c2f0:16;
  __tsi64 s19297c2f1;
  short s19297c2f2;
  virtual  ~S19297C2(); // _ZN8S19297C2D2Ev
  S19297C2(); // tgen
};
//SIG(-1 S19297C2) C1{ BC2{ v1 v2 v3 Fi[2] FL Fc:0 FC3{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} BC3 VBC4{ VBC3 Fi Fi:7 FC5{} Fp Fi Fp} vd Fs:16 FL Fs}


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

static void Test_S19297C2()
{
  extern Class_Descriptor cd_S19297C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,87)];
    init_test(&cd_S19297C2, buf);
    S19297C2 *dp, &lv = *(dp=new (buf) S19297C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,344), "sizeof(S19297C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C2)");
    check_base_class_offset(lv, (S19297C3*), 0, "S19297C2");
    /*is_ambiguous_... S19297C2::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*), ABISELECT(208,128), "S19297C2");
    check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(416,256), "S19297C2");
    check_base_class_offset(lv, (S19297C5*), ABISELECT(368,232), "S19297C2");
    set_bf_and_test(lv, s19297c2f0, ABISELECT(344,216), 0, 16, 1, "S19297C2");
    set_bf_and_test(lv, s19297c2f0, ABISELECT(344,216), 0, 16, hide_sll(1LL<<15), "S19297C2");
    check_field_offset(lv, s19297c2f1, ABISELECT(352,220), "S19297C2.s19297c2f1");
    check_field_offset(lv, s19297c2f2, ABISELECT(360,228), "S19297C2.s19297c2f2");
    test_class_info(&lv, &cd_S19297C2);
    dp->~S19297C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C2(Test_S19297C2, "S19297C2", ABISELECT(560,344));

#else // __cplusplus

extern void _ZN8S19297C2C1Ev();
extern void _ZN8S19297C2D2Ev();
Name_Map name_map_S19297C2[] = {
  NSPAIR(_ZN8S19297C2C1Ev),
  NSPAIR(_ZN8S19297C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
static Base_Class bases_S19297C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19297C4,    ABISELECT(208,128), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C4,    ABISELECT(416,256), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S19297C5,    ABISELECT(368,232), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19297C2[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY vtc_S19297C2[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S19297C2[];
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C2[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__8S19297C2[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTT_ENTRY vtt_S19297C2[] = {
  {&(_ZTV8S19297C2[4]),  4,22},
  {&(_ZTV8S19297C2[16]),  16,22},
  {&(_ZTV8S19297C2[20]),  20,22},
  {&(_tg__ZTV8S19297C5__8S19297C2[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__8S19297C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
Class_Descriptor cd_S19297C2 = {  "S19297C2", // class name
  bases_S19297C2, 4,
  &(vtc_S19297C2[0]), // expected_vtbl_contents
  &(vtt_S19297C2[0]), // expected_vtt_contents
  ABISELECT(560,344), // object size
  NSPAIRA(_ZTI8S19297C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19297C2),22, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19297C2),5, //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  S19297C8  : S19297C3 {
  ::S19297C4 s19297c8f0;
  int s19297c8f1;
  ::S19297C4 s19297c8f2;
  ::S19297C3 s19297c8f3;
  ::S19297C4 s19297c8f4;
  long double s19297c8f5;
  void *s19297c8f6;
  int s19297c8f7;
  long double s19297c8f8;
  char  :0;
  virtual void  v7(); // _ZN8S19297C82v7Ev
  virtual void  v8(); // _ZN8S19297C82v8Ev
  ~S19297C8(); // tgen
  S19297C8(); // tgen
};
//SIG(-1 S19297C8) C1{ BC2{ v3 v4 v5 Fi[2] FL Fc:0 FC3{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v1 v2 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0}


void  S19297C8 ::v7(){vfunc_called(this, "_ZN8S19297C82v7Ev");}
void  S19297C8 ::v8(){vfunc_called(this, "_ZN8S19297C82v8Ev");}
S19297C8 ::~S19297C8(){ note_dtor("S19297C8", this);} // tgen
S19297C8 ::S19297C8(){ note_ctor("S19297C8", this);} // tgen

static void Test_S19297C8()
{
  extern Class_Descriptor cd_S19297C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,140)];
    init_test(&cd_S19297C8, buf);
    S19297C8 *dp, &lv = *(dp=new (buf) S19297C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,556), "sizeof(S19297C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C8)");
    check_base_class_offset(lv, (S19297C3*), 0, "S19297C8");
    check_field_offset(lv, s19297c8f0, ABISELECT(208,128), "S19297C8.s19297c8f0");
    check_field_offset(lv, s19297c8f1, ABISELECT(352,216), "S19297C8.s19297c8f1");
    check_field_offset(lv, s19297c8f2, ABISELECT(368,220), "S19297C8.s19297c8f2");
    check_field_offset(lv, s19297c8f3, ABISELECT(512,308), "S19297C8.s19297c8f3");
    check_field_offset(lv, s19297c8f4, ABISELECT(720,436), "S19297C8.s19297c8f4");
    check_field_offset(lv, s19297c8f5, ABISELECT(864,524), "S19297C8.s19297c8f5");
    check_field_offset(lv, s19297c8f6, ABISELECT(880,536), "S19297C8.s19297c8f6");
    check_field_offset(lv, s19297c8f7, ABISELECT(888,540), "S19297C8.s19297c8f7");
    check_field_offset(lv, s19297c8f8, ABISELECT(896,544), "S19297C8.s19297c8f8");
    test_class_info(&lv, &cd_S19297C8);
    dp->~S19297C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C8(Test_S19297C8, "S19297C8", ABISELECT(912,556));

#else // __cplusplus

extern void _ZN8S19297C8C1Ev();
extern void _ZN8S19297C8D1Ev();
Name_Map name_map_S19297C8[] = {
  NSPAIR(_ZN8S19297C8C1Ev),
  NSPAIR(_ZN8S19297C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
static Base_Class bases_S19297C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19297C8[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY vtc_S19297C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C8[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
Class_Descriptor cd_S19297C8 = {  "S19297C8", // class name
  bases_S19297C8, 1,
  &(vtc_S19297C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(912,556), // object size
  NSPAIRA(_ZTI8S19297C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19297C8),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  S19297C7  : S19297C8 {
  long double s19297c7f0;
  ~S19297C7(); // tgen
  S19297C7(); // tgen
};
//SIG(-1 S19297C7) C1{ BC2{ BC3{ v1 v2 v3 Fi[2] FL Fc:0 FC4{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v4 v5 FC4 Fi FC4 FC3 FC4 FD Fp Fi FD Fc:0} FD}


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

static void Test_S19297C7()
{
  extern Class_Descriptor cd_S19297C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,143)];
    init_test(&cd_S19297C7, buf);
    S19297C7 *dp, &lv = *(dp=new (buf) S19297C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,568), "sizeof(S19297C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C7)");
    check_base_class_offset(lv, (S19297C3*)(S19297C8*), 0, "S19297C7");
    check_base_class_offset(lv, (S19297C8*), 0, "S19297C7");
    check_field_offset(lv, s19297c7f0, ABISELECT(912,556), "S19297C7.s19297c7f0");
    test_class_info(&lv, &cd_S19297C7);
    dp->~S19297C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C7(Test_S19297C7, "S19297C7", ABISELECT(928,568));

#else // __cplusplus

extern void _ZN8S19297C7C1Ev();
extern void _ZN8S19297C7D1Ev();
Name_Map name_map_S19297C7[] = {
  NSPAIR(_ZN8S19297C7C1Ev),
  NSPAIR(_ZN8S19297C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
static Base_Class bases_S19297C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S19297C8,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19297C7[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY vtc_S19297C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C7[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S19297C7[];
extern  VTBL_ENTRY _ZTV8S19297C7[];
Class_Descriptor cd_S19297C7 = {  "S19297C7", // class name
  bases_S19297C7, 2,
  &(vtc_S19297C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(928,568), // object size
  NSPAIRA(_ZTI8S19297C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19297C7),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  S19297C9  : S19297C3 , virtual S19297C8 , S19297C4 , S19297C2 , S19297C5 {
  ::S19297C4 s19297c9f0;
  char s19297c9f1;
  int s19297c9f2;
  short s19297c9f3;
  ::S19297C2 s19297c9f4;
  long double s19297c9f5[2];
  int s19297c9f6[2];
  long double s19297c9f7;
  virtual  ~S19297C9(); // _ZN8S19297C9D2Ev
  virtual void  v9(); // _ZN8S19297C92v9Ev
  virtual void  v10(); // _ZN8S19297C93v10Ev
  virtual void  v11(); // _ZN8S19297C93v11Ev
  S19297C9(); // tgen
};
//SIG(-1 S19297C9) C1{ BC2{ v4 v5 v6 Fi[2] FL Fc:0 FC3{ v9 v10 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} VBC4{ BC2 v7 v8 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0} BC3 BC5{ BC2 BC3 VBC6{ VBC3 Fi Fi:7 FC7{} Fp Fi Fp} vd Fs:16 FL Fs} BC6 vd v1 v2 v3 FC3 Fc Fi Fs FC5 FD[2] Fi[2] FD}


 S19297C9 ::~S19297C9(){ note_dtor("S19297C9", this);}
void  S19297C9 ::v9(){vfunc_called(this, "_ZN8S19297C92v9Ev");}
void  S19297C9 ::v10(){vfunc_called(this, "_ZN8S19297C93v10Ev");}
void  S19297C9 ::v11(){vfunc_called(this, "_ZN8S19297C93v11Ev");}
S19297C9 ::S19297C9(){ note_ctor("S19297C9", this);} // tgen

static void Test_S19297C9()
{
  extern Class_Descriptor cd_S19297C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(167,408)];
    init_test(&cd_S19297C9, buf);
    S19297C9 *dp, &lv = *(dp=new (buf) S19297C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2656,1628), "sizeof(S19297C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C9)");
    /*is_ambiguous_... S19297C9::S19297C3 */ AMB_check_base_class_offset(lv, (S19297C3*), 0, "S19297C9");
    check_base_class_offset(lv, (S19297C3*)(S19297C8*), ABISELECT(1552,960), "S19297C9");
    check_base_class_offset(lv, (S19297C8*), ABISELECT(1552,960), "S19297C9");
    /*is_ambiguous_... S19297C9::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*), ABISELECT(208,128), "S19297C9");
    check_base_class_offset(lv, (S19297C3*)(S19297C2*), ABISELECT(352,216), "S19297C9");
    /*is_ambiguous_... S19297C2::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*), ABISELECT(560,344), "S19297C9");
    /*is_ambiguous_... S19297C9::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(2512,1540), "S19297C9");
    /*is_ambiguous_... S19297C9::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(2512,1540), "S19297C9");
    check_base_class_offset(lv, (S19297C5*)(S19297C2*), ABISELECT(2464,1516), "S19297C9");
    check_base_class_offset(lv, (S19297C2*), ABISELECT(352,216), "S19297C9");
    /*is_ambiguous_... S19297C9::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C5*), ABISELECT(720,448), "S19297C9");
    check_field_offset(lv, s19297c9f0, ABISELECT(768,472), "S19297C9.s19297c9f0");
    check_field_offset(lv, s19297c9f1, ABISELECT(912,560), "S19297C9.s19297c9f1");
    check_field_offset(lv, s19297c9f2, ABISELECT(916,564), "S19297C9.s19297c9f2");
    check_field_offset(lv, s19297c9f3, ABISELECT(920,568), "S19297C9.s19297c9f3");
    check_field_offset(lv, s19297c9f4, ABISELECT(928,572), "S19297C9.s19297c9f4");
    check_field_offset(lv, s19297c9f5, ABISELECT(1488,916), "S19297C9.s19297c9f5");
    check_field_offset(lv, s19297c9f6, ABISELECT(1520,940), "S19297C9.s19297c9f6");
    check_field_offset(lv, s19297c9f7, ABISELECT(1536,948), "S19297C9.s19297c9f7");
    test_class_info(&lv, &cd_S19297C9);
    dp->~S19297C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C9(Test_S19297C9, "S19297C9", ABISELECT(2656,1628));

#else // __cplusplus

extern void _ZN8S19297C9C1Ev();
extern void _ZN8S19297C9D2Ev();
Name_Map name_map_S19297C9[] = {
  NSPAIR(_ZN8S19297C9C1Ev),
  NSPAIR(_ZN8S19297C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
static Base_Class bases_S19297C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19297C3,    ABISELECT(1552,960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19297C8,    ABISELECT(1552,960), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19297C4,    ABISELECT(208,128), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C3,    ABISELECT(352,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(560,344), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(2512,1540), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //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
    7, //immediately_derived
  0, 1},
  {&cd_S19297C5,    ABISELECT(2464,1516), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19297C2,    ABISELECT(352,216), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C5,    ABISELECT(720,448), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19297C9[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C9D1Ev();
extern void _ZN8S19297C9D0Ev();
extern void _ZN8S19297C92v9Ev();
extern void _ZN8S19297C93v10Ev();
extern void _ZN8S19297C93v11Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn352_N8S19297C9D1Ev,_ZThn216_N8S19297C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S19297C9D0Ev,_ZThn216_N8S19297C9D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY vtc_S19297C9[] = {
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19297C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v11Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19297C9D1Ev,_ZThn216_N8S19297C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19297C9D0Ev,_ZThn216_N8S19297C9D0Ev),
  ABISELECT(-560,-344),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(1792,1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  ABISELECT(48,24),
  ABISELECT(-2464,-1516),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern VTBL_ENTRY _ZTV8S19297C9[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C2__8S19297C9[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C2__8S19297C9[] = {
  ABISELECT(48,24),
  ABISELECT(-2112,-1300),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C2__8S19297C9[] = {
  0,
  0,
  ABISELECT(-2160,-1324),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A__8S19297C9[] = {
  ABISELECT(1792,1092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__A__8S19297C9[] = {
  0,
  0,
  ABISELECT(-1792,-1092),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C9[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__8S19297C9[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTT_ENTRY vtt_S19297C9[] = {
  {&(_ZTV8S19297C9[5]),  5,54},
  {&(_tg__ZTV8S19297C2__8S19297C9[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C2__8S19297C9[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C2__8S19297C9[4]),  4,6},
  {&(_tg__ZTV8S19297C5__A__8S19297C9[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__A__8S19297C9[4]),  4,6},
  {&(_ZTV8S19297C9[40]),  40,54},
  {&(_ZTV8S19297C9[21]),  21,54},
  {&(_ZTV8S19297C9[48]),  48,54},
  {&(_ZTV8S19297C9[52]),  52,54},
  {&(_ZTV8S19297C9[33]),  33,54},
  {&(_tg__ZTV8S19297C5__8S19297C9[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__8S19297C9[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19297C9[];
extern  VTBL_ENTRY _ZTV8S19297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C9[];
Class_Descriptor cd_S19297C9 = {  "S19297C9", // class name
  bases_S19297C9, 10,
  &(vtc_S19297C9[0]), // expected_vtbl_contents
  &(vtt_S19297C9[0]), // expected_vtt_contents
  ABISELECT(2656,1628), // object size
  NSPAIRA(_ZTI8S19297C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19297C9),54, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19297C9),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19297C11  {
  ::S3465C14 s19297c11f0[6];
  int s19297c11f1;
  ::S19297C7 s19297c11f2;
  int s19297c11f3;
  void *s19297c11f4[2];
  char s19297c11f5;
  void *s19297c11f6;
  virtual void  v12(); // _ZN9S19297C113v12Ev
  virtual void  v13(); // _ZN9S19297C113v13Ev
  virtual void  v14(); // _ZN9S19297C113v14Ev
  virtual void  v15(); // _ZN9S19297C113v15Ev
  virtual void  v16(); // _ZN9S19297C113v16Ev
  ~S19297C11(); // tgen
  S19297C11(); // tgen
};
//SIG(-1 S19297C11) C1{ v1 v2 v3 v4 v5 FC2{ vd m Fp FC3{} Fp Fi FC4{ BC5{ v8 v9 v10 Fi[2] FL Fc:0 FC6{ v11 v12 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v6 v7 FC6 Fi FC6 FC5 FC6 FD Fp Fi FD Fc:0} FC5[5]}[6] Fi FC7{ BC8{ BC9{ v13 v14 v15 Fi[2] FL Fc:0 FC10{ v18 v19 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v16 v17 FC10 Fi FC10 FC9 FC10 FD Fp Fi FD Fc:0} FD} Fi Fp[2] Fc Fp}


void  S19297C11 ::v12(){vfunc_called(this, "_ZN9S19297C113v12Ev");}
void  S19297C11 ::v13(){vfunc_called(this, "_ZN9S19297C113v13Ev");}
void  S19297C11 ::v14(){vfunc_called(this, "_ZN9S19297C113v14Ev");}
void  S19297C11 ::v15(){vfunc_called(this, "_ZN9S19297C113v15Ev");}
void  S19297C11 ::v16(){vfunc_called(this, "_ZN9S19297C113v16Ev");}
S19297C11 ::~S19297C11(){ note_dtor("S19297C11", this);} // tgen
S19297C11 ::S19297C11(){ note_ctor("S19297C11", this);} // tgen

static void Test_S19297C11()
{
  extern Class_Descriptor cd_S19297C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(814,1974)];
    init_test(&cd_S19297C11, buf);
    S19297C11 *dp, &lv = *(dp=new (buf) S19297C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13008,7892), "sizeof(S19297C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C11)");
    check_field_offset(lv, s19297c11f0, ABISELECT(16,4), "S19297C11.s19297c11f0");
    check_field_offset(lv, s19297c11f1, ABISELECT(12016,7300), "S19297C11.s19297c11f1");
    check_field_offset(lv, s19297c11f2, ABISELECT(12032,7304), "S19297C11.s19297c11f2");
    check_field_offset(lv, s19297c11f3, ABISELECT(12960,7872), "S19297C11.s19297c11f3");
    check_field_offset(lv, s19297c11f4, ABISELECT(12968,7876), "S19297C11.s19297c11f4");
    check_field_offset(lv, s19297c11f5, ABISELECT(12984,7884), "S19297C11.s19297c11f5");
    check_field_offset(lv, s19297c11f6, ABISELECT(12992,7888), "S19297C11.s19297c11f6");
    test_class_info(&lv, &cd_S19297C11);
    dp->~S19297C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C11(Test_S19297C11, "S19297C11", ABISELECT(13008,7892));

#else // __cplusplus

extern void _ZN9S19297C11C1Ev();
extern void _ZN9S19297C11D1Ev();
Name_Map name_map_S19297C11[] = {
  NSPAIR(_ZN9S19297C11C1Ev),
  NSPAIR(_ZN9S19297C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19297C11[];
extern void _ZN9S19297C113v12Ev();
extern void _ZN9S19297C113v13Ev();
extern void _ZN9S19297C113v14Ev();
extern void _ZN9S19297C113v15Ev();
extern void _ZN9S19297C113v16Ev();
static  VTBL_ENTRY vtc_S19297C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C11[0]),
  (VTBL_ENTRY)&_ZN9S19297C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v16Ev,
};
extern VTBL_ENTRY _ZTI9S19297C11[];
extern  VTBL_ENTRY _ZTV9S19297C11[];
Class_Descriptor cd_S19297C11 = {  "S19297C11", // class name
  0,0,//no base classes
  &(vtc_S19297C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(13008,7892), // object size
  NSPAIRA(_ZTI9S19297C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19297C11),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  S19297C14  : S19297C5 , S19297C8 , virtual S19297C3 , S19297C4 , virtual S19297C2 {
  short s19297c14f0;
  virtual  ~S19297C14(); // _ZN9S19297C14D2Ev
  S19297C14(); // tgen
};
//SIG(-1 S19297C14) C1{ BC2{ VBC3{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC4{} Fp Fi Fp} BC5{ BC6{ v3 v4 v5 Fi[2] FL Fc:0 FC3 Fc Fi FD} v6 v7 FC3 Fi FC3 FC6 FC3 FD Fp Fi FD Fc:0} VBC6 BC3 VBC7{ BC6 BC3 VBC2 vd Fs:16 FL Fs} vd Fs}


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

static void Test_S19297C14()
{
  extern Class_Descriptor cd_S19297C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(118,287)];
    init_test(&cd_S19297C14, buf);
    S19297C14 *dp, &lv = *(dp=new (buf) S19297C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1872,1144), "sizeof(S19297C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C14)");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(1104,672), "S19297C14");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(1104,672), "S19297C14");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C5*), 0, "S19297C14");
    check_base_class_offset(lv, (S19297C3*)(S19297C8*), ABISELECT(48,24), "S19297C14");
    check_base_class_offset(lv, (S19297C8*), ABISELECT(48,24), "S19297C14");
    /*is_ambiguous_... S19297C14::S19297C3 */ AMB_check_base_class_offset(lv, (S19297C3*), ABISELECT(1248,760), "S19297C14");
    /*is_ambiguous_... S19297C14::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*), ABISELECT(960,580), "S19297C14");
    check_base_class_offset(lv, (S19297C3*)(S19297C2*), ABISELECT(1456,888), "S19297C14");
    /*is_ambiguous_... S19297C2::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*), ABISELECT(1664,1016), "S19297C14");
    check_base_class_offset(lv, (S19297C5*)(S19297C2*), ABISELECT(1824,1120), "S19297C14");
    check_base_class_offset(lv, (S19297C2*), ABISELECT(1456,888), "S19297C14");
    check_field_offset(lv, s19297c14f0, ABISELECT(1096,668), "S19297C14.s19297c14f0");
    test_class_info(&lv, &cd_S19297C14);
    dp->~S19297C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C14(Test_S19297C14, "S19297C14", ABISELECT(1872,1144));

#else // __cplusplus

extern void _ZN9S19297C14C1Ev();
extern void _ZN9S19297C14D2Ev();
Name_Map name_map_S19297C14[] = {
  NSPAIR(_ZN9S19297C14C1Ev),
  NSPAIR(_ZN9S19297C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
static Base_Class bases_S19297C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C4,    ABISELECT(1104,672), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19297C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C3,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19297C8,    ABISELECT(48,24), //bcp->offset
    8, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C3,    ABISELECT(1248,760), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19297C4,    ABISELECT(960,580), //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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C3,    ABISELECT(1456,888), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(1664,1016), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19297C5,    ABISELECT(1824,1120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19297C2,    ABISELECT(1456,888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19297C14[];
extern void _ZN9S19297C14D1Ev();
extern void _ZN9S19297C14D0Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev)();
extern void ABISELECT(_ZThn1456_N9S19297C14D1Ev,_ZThn888_N9S19297C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev)();
extern void ABISELECT(_ZThn1456_N9S19297C14D0Ev,_ZThn888_N9S19297C14D0Ev)() __attribute__((weak));
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY vtc_S19297C14[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN9S19297C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C14D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  ABISELECT(-960,-580),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev),
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
};
extern VTBL_ENTRY _ZTV9S19297C14[];
static  VTBL_ENTRY _tg__ZTV8S19297C5__A__9S19297C14[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__A__9S19297C14[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C2__9S19297C14[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C2__9S19297C14[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C2__9S19297C14[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A1__9S19297C14[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__A1__9S19297C14[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTT_ENTRY vtt_S19297C14[] = {
  {&(_ZTV9S19297C14[6]),  6,55},
  {&(_tg__ZTV8S19297C5__A__9S19297C14[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__A__9S19297C14[4]),  4,6},
  {&(_ZTV9S19297C14[23]),  23,55},
  {&(_ZTV9S19297C14[30]),  30,55},
  {&(_ZTV9S19297C14[43]),  43,55},
  {&(_ZTV9S19297C14[50]),  50,55},
  {&(_ZTV9S19297C14[55]),  55,55},
  {&(_tg__ZTV8S19297C2__9S19297C14[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C2__9S19297C14[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C2__9S19297C14[4]),  4,6},
  {&(_tg__ZTV8S19297C5__A1__9S19297C14[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__A1__9S19297C14[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19297C14[];
extern  VTBL_ENTRY _ZTV9S19297C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C14[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19297C14D0Ev,_ZThn888_N9S19297C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19297C14D1Ev,_ZThn888_N9S19297C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19297C14 = {  "S19297C14", // class name
  bases_S19297C14, 10,
  &(vtc_S19297C14[0]), // expected_vtbl_contents
  &(vtt_S19297C14[0]), // expected_vtt_contents
  ABISELECT(1872,1144), // object size
  NSPAIRA(_ZTI9S19297C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19297C14),55, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19297C14),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19297C13  : virtual S19297C14 , S19297C4 , virtual S19297C8 , S19297C2 {
  char s19297c13f0;
  void *s19297c13f1[2];
  char s19297c13f2[8];
  int s19297c13f3[2];
  long s19297c13f4[9];
  ::S3465C9_nt s19297c13f5;
  int s19297c13f6[5];
  ::S3465C14 s19297c13f7;
  virtual  ~S19297C13(); // _ZN9S19297C13D2Ev
  S19297C13(); // tgen
};
//SIG(-1 S19297C13) C1{ VBC2{ BC3{ VBC4{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC5{} Fp Fi Fp} BC6{ BC7{ v3 v4 v5 Fi[2] FL Fc:0 FC4 Fc Fi FD} v6 v7 FC4 Fi FC4 FC7 FC4 FD Fp Fi FD Fc:0} VBC7 BC4 VBC8{ BC7 BC4 VBC3 vd Fs:16 FL Fs} vd Fs} BC4 VBC6 BC8 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC5 Fi[5] FC9{ vd m Fp FC5 Fp Fi FC10{ BC11{ v10 v11 v12 Fi[2] FL Fc:0 FC12{ v13 v14 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v8 v9 FC12 Fi FC12 FC11 FC12 FD Fp Fi FD Fc:0} FC11[5]}}


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

static void Test_S19297C13()
{
  extern Class_Descriptor cd_S19297C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(340,831)];
    init_test(&cd_S19297C13, buf);
    S19297C13 *dp, &lv = *(dp=new (buf) S19297C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5424,3320), "sizeof(S19297C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C13)");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*)(S19297C14*), ABISELECT(3744,2292), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(3744,2292), "S19297C13");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C14*), ABISELECT(2640,1620), "S19297C13");
    check_base_class_offset(lv, (S19297C3*)(S19297C8*)(S19297C14*), ABISELECT(2688,1644), "S19297C13");
    check_base_class_offset(lv, (S19297C8*)(S19297C14*), ABISELECT(2688,1644), "S19297C13");
    /*is_ambiguous_... S19297C14::S19297C3 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C14*), ABISELECT(3888,2380), "S19297C13");
    /*is_ambiguous_... S19297C14::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C14*), ABISELECT(3600,2200), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C2*), ABISELECT(4096,2508), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*), ABISELECT(4304,2636), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C2*), ABISELECT(4464,2740), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C2*), ABISELECT(4464,2740), "S19297C13");
    check_base_class_offset(lv, (S19297C2*)(S19297C14*), ABISELECT(4096,2508), "S19297C13");
    check_base_class_offset(lv, (S19297C14*), ABISELECT(2640,1620), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*), 0, "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C8 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C8*), ABISELECT(4512,2764), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C8 */ AMB_check_base_class_offset(lv, (S19297C8*), ABISELECT(4512,2764), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C2*), ABISELECT(144,88), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*), ABISELECT(352,216), "S19297C13");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C2*), ABISELECT(144,88), "S19297C13");
    check_field_offset(lv, s19297c13f0, ABISELECT(506,318), "S19297C13.s19297c13f0");
    check_field_offset(lv, s19297c13f1, ABISELECT(512,320), "S19297C13.s19297c13f1");
    check_field_offset(lv, s19297c13f2, ABISELECT(528,328), "S19297C13.s19297c13f2");
    check_field_offset(lv, s19297c13f3, ABISELECT(536,336), "S19297C13.s19297c13f3");
    check_field_offset(lv, s19297c13f4, ABISELECT(544,344), "S19297C13.s19297c13f4");
    check_field_offset(lv, s19297c13f5, ABISELECT(616,380), "S19297C13.s19297c13f5");
    check_field_offset(lv, s19297c13f6, ABISELECT(620,384), "S19297C13.s19297c13f6");
    check_field_offset(lv, s19297c13f7, ABISELECT(640,404), "S19297C13.s19297c13f7");
    test_class_info(&lv, &cd_S19297C13);
    dp->~S19297C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C13(Test_S19297C13, "S19297C13", ABISELECT(5424,3320));

#else // __cplusplus

extern void _ZN9S19297C13C1Ev();
extern void _ZN9S19297C13D2Ev();
Name_Map name_map_S19297C13[] = {
  NSPAIR(_ZN9S19297C13C1Ev),
  NSPAIR(_ZN9S19297C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C14;
extern VTBL_ENTRY _ZTI9S19297C14[];
extern  VTBL_ENTRY _ZTV9S19297C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C14[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
static Base_Class bases_S19297C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C4,    ABISELECT(3744,2292), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19297C5,    ABISELECT(2640,1620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(2688,1644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19297C8,    ABISELECT(2688,1644), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(3888,2380), //bcp->offset
    58, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19297C4,    ABISELECT(3600,2200), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(4096,2508), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(4304,2636), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19297C5,    ABISELECT(4464,2740), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19297C2,    ABISELECT(4096,2508), //bcp->offset
    66, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19297C14,    ABISELECT(2640,1620), //bcp->offset
    25, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19297C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C3,    ABISELECT(4512,2764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19297C8,    ABISELECT(4512,2764), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19297C3,    ABISELECT(144,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
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(352,216), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19297C2,    ABISELECT(144,88), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19297C13[];
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN9S19297C13D1Ev();
extern void _ZN9S19297C13D0Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn144_N9S19297C13D1Ev,_ZThn88_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19297C13D0Ev,_ZThn88_N9S19297C13D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn2640_N9S19297C13D1Ev,_ZThn1620_N9S19297C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev)();
extern void ABISELECT(_ZThn2640_N9S19297C13D0Ev,_ZThn1620_N9S19297C13D0Ev)() __attribute__((weak));
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn4096_N9S19297C13D1Ev,_ZThn2508_N9S19297C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev)();
extern void ABISELECT(_ZThn4096_N9S19297C13D0Ev,_ZThn2508_N9S19297C13D0Ev)() __attribute__((weak));
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY vtc_S19297C13[] = {
  ABISELECT(4512,2764),
  ABISELECT(4464,2740),
  ABISELECT(4096,2508),
  ABISELECT(3888,2380),
  ABISELECT(3744,2292),
  ABISELECT(2640,1620),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19297C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C13D0Ev,
  ABISELECT(3600,2204),
  ABISELECT(4320,2652),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19297C13D1Ev,_ZThn88_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19297C13D0Ev,_ZThn88_N9S19297C13D0Ev),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-2640,-1620),
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  ABISELECT(-2640,-1620),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev),
  ABISELECT(-2688,-1644),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  ABISELECT(-3600,-2200),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  0,
  0,
  ABISELECT(-3744,-2292),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-3888,-2380),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-4096,-2508),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-4096,-2508),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev),
  ABISELECT(-4304,-2636),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(-720,-448),
  ABISELECT(-4464,-2740),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4512,-2764),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern VTBL_ENTRY _ZTV9S19297C13[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C2__A__9S19297C13[] = {
  ABISELECT(3600,2204),
  ABISELECT(4320,2652),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C2__A__9S19297C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-4320,-2652),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C2__A__9S19297C13[] = {
  0,
  0,
  ABISELECT(-3600,-2204),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN9S19297C14D1Ev();
extern void _ZN9S19297C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19297C14__9S19297C13[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN9S19297C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C59S19297C14__9S19297C13[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C59S19297C14__9S19297C13[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__9S19297C14__9S19297C13[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C3__A1__9S19297C14__9S19297C13[] = {
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev)();
extern void ABISELECT(_ZThn1456_N9S19297C14D1Ev,_ZThn888_N9S19297C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev)();
extern void ABISELECT(_ZThn1456_N9S19297C14D0Ev,_ZThn888_N9S19297C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19297C2__9S19297C14__9S19297C13[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C2__A2__9S19297C14__9S19297C13[] = {
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A1__9S19297C14__9S19297C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C2__9S19297C13[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C2__9S19297C13[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C2__9S19297C13[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A1__9S19297C13[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__A1__9S19297C13[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTT_ENTRY vtt_S19297C13[] = {
  {&(_ZTV9S19297C13[8]),  8,100},
  {&(_tg__ZTV8S19297C2__A__9S19297C13[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C2__A__9S19297C13[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C2__A__9S19297C13[4]),  4,6},
  {&(_ZTV9S19297C13[39]),  39,100},
  {&(_ZTV9S19297C13[56]),  56,100},
  {&(_ZTV9S19297C13[43]),  43,100},
  {&(_ZTV9S19297C13[63]),  63,100},
  {&(_ZTV9S19297C13[50]),  50,100},
  {&(_ZTV9S19297C13[76]),  76,100},
  {&(_ZTV9S19297C13[83]),  83,100},
  {&(_ZTV9S19297C13[88]),  88,100},
  {&(_ZTV9S19297C13[95]),  95,100},
  {&(_ZTV9S19297C13[16]),  16,100},
  {&(_tg__ZTV9S19297C14__9S19297C13[6]),  6,8},
  {&(_tg__ZTV8S19297C59S19297C14__9S19297C13[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C59S19297C14__9S19297C13[4]),  4,6},
  {&(_tg__ZTV8S19297C4__9S19297C14__9S19297C13[4]),  4,6},
  {&(_tg__ZTV8S19297C3__A1__9S19297C14__9S19297C13[5]),  5,8},
  {&(_tg__ZTV8S19297C2__9S19297C14__9S19297C13[10]),  10,15},
  {&(_tg__ZTV8S19297C48S19297C2__A2__9S19297C14__9S19297C13[2]),  2,4},
  {&(_tg__ZTV8S19297C5__A1__9S19297C14__9S19297C13[3]),  3,3},
  {&(_tg__ZTV8S19297C2__9S19297C13[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C2__9S19297C13[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C2__9S19297C13[4]),  4,6},
  {&(_tg__ZTV8S19297C5__A1__9S19297C13[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__A1__9S19297C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19297C13[];
extern  VTBL_ENTRY _ZTV9S19297C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C13[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19297C14D0Ev,_ZThn888_N9S19297C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19297C14D1Ev,_ZThn888_N9S19297C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N9S19297C13D0Ev,_ZThn2508_N9S19297C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4096_N9S19297C13D1Ev,_ZThn2508_N9S19297C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2640_N9S19297C13D0Ev,_ZThn1620_N9S19297C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2640_N9S19297C13D1Ev,_ZThn1620_N9S19297C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19297C13 = {  "S19297C13", // class name
  bases_S19297C13, 17,
  &(vtc_S19297C13[0]), // expected_vtbl_contents
  &(vtt_S19297C13[0]), // expected_vtt_contents
  ABISELECT(5424,3320), // object size
  NSPAIRA(_ZTI9S19297C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19297C13),100, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19297C13),27, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19297C10  : S19297C11 , virtual S19297C9 , S3465C14 , S19297C13 {
  int s19297c10f0:2;
  void *s19297c10f1[5];
  int s19297c10f2[2];
  ::S19297C4 s19297c10f3;
  int s19297c10f4[7];
  ::S19297C4 s19297c10f5;
  char s19297c10f6[7];
  unsigned short s19297c10f7:1;
  virtual  ~S19297C10(); // _ZN9S19297C10D2Ev
  virtual void  v17(); // _ZN9S19297C103v17Ev
  S19297C10(); // tgen
};
//SIG(-1 S19297C10) C1{ BC2{ v2 v3 v4 v5 v6 FC3{ vd m Fp FC4{} Fp Fi FC5{ BC6{ v19 v20 v21 Fi[2] FL Fc:0 FC7{ v22 v23 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v17 v18 FC7 Fi FC7 FC6 FC7 FD Fp Fi FD Fc:0} FC6[5]}[6] Fi FC8{ BC9{ BC10{ v7 v8 v9 Fi[2] FL Fc:0 FC11{ v12 v13 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v10 v11 FC11 Fi FC11 FC10 FC11 FD Fp Fi FD Fc:0} FD} Fi Fp[2] Fc Fp} VBC12{ BC10 VBC9 BC11 BC13{ BC10 BC11 VBC14{ VBC11 Fi Fi:7 FC4 Fp Fi Fp} vd Fs:16 FL Fs} BC14 vd v14 v15 v16 FC11 Fc Fi Fs FC13 FD[2] Fi[2] FD} BC3 BC15{ VBC16{ BC14 BC9 VBC10 BC11 VBC13 vd Fs} BC11 VBC9 BC13 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC4 Fi[5] FC3} vd v1 Fi:2 Fp[5] Fi[2] FC11 Fi[7] FC11 Fc[7] Fs:1}


 S19297C10 ::~S19297C10(){ note_dtor("S19297C10", this);}
void  S19297C10 ::v17(){vfunc_called(this, "_ZN9S19297C103v17Ev");}
S19297C10 ::S19297C10(){ note_ctor("S19297C10", this);} // tgen

static void Test_S19297C10()
{
  extern Class_Descriptor cd_S19297C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1400,3409)];
    init_test(&cd_S19297C10, buf);
    S19297C10 *dp, &lv = *(dp=new (buf) S19297C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(22384,13632), "sizeof(S19297C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C10)");
    check_base_class_offset(lv, (S19297C11*), 0, "S19297C10");
    /*is_ambiguous_... S19297C9::S19297C3 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C9*), ABISELECT(18048,10972), "S19297C10");
    /*is_ambiguous_... S19297C10::S19297C8 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C8*), ABISELECT(19600,11932), "S19297C10");
    check_base_class_offset(lv, (S19297C8*)(S19297C9*), ABISELECT(19600,11932), "S19297C10");
    /*is_ambiguous_... S19297C13::S19297C8 */ AMB_check_base_class_offset(lv, (S19297C8*)(S19297C13*), ABISELECT(19600,11932), "S19297C10");
    /*is_ambiguous_... S19297C9::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C9*), ABISELECT(18256,11100), "S19297C10");
    check_base_class_offset(lv, (S19297C3*)(S19297C2*)(S19297C9*), ABISELECT(18400,11188), "S19297C10");
    /*is_ambiguous_... S19297C2::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*)(S19297C9*), ABISELECT(18608,11316), "S19297C10");
    /*is_ambiguous_... S19297C10::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(20560,12512), "S19297C10");
    /*is_ambiguous_... S19297C9::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*)(S19297C9*), ABISELECT(20560,12512), "S19297C10");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*)(S19297C14*), ABISELECT(20560,12512), "S19297C10");
    check_base_class_offset(lv, (S19297C5*)(S19297C2*)(S19297C9*), ABISELECT(20512,12488), "S19297C10");
    /*is_ambiguous_... S19297C10::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C2*), ABISELECT(20512,12488), "S19297C10");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C2*)(S19297C13*), ABISELECT(20512,12488), "S19297C10");
    check_base_class_offset(lv, (S19297C2*)(S19297C9*), ABISELECT(18400,11188), "S19297C10");
    /*is_ambiguous_... S19297C9::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C9*), ABISELECT(18768,11420), "S19297C10");
    check_base_class_offset(lv, (S19297C9*), ABISELECT(18048,10972), "S19297C10");
    check_base_class_offset(lv, (S3465C14*), ABISELECT(13008,7892), "S19297C10");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C14*), ABISELECT(20704,12600), "S19297C10");
    check_base_class_offset(lv, (S19297C3*)(S19297C8*)(S19297C14*), ABISELECT(20752,12624), "S19297C10");
    check_base_class_offset(lv, (S19297C8*)(S19297C14*), ABISELECT(20752,12624), "S19297C10");
    /*is_ambiguous_... S19297C14::S19297C3 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C14*), ABISELECT(21808,13272), "S19297C10");
    /*is_ambiguous_... S19297C14::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C14*), ABISELECT(21664,13180), "S19297C10");
    /*is_ambiguous_... S19297C10::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C2*), ABISELECT(22016,13400), "S19297C10");
    /*is_ambiguous_... S19297C10::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*), ABISELECT(22224,13528), "S19297C10");
    check_base_class_offset(lv, (S19297C2*)(S19297C14*), ABISELECT(22016,13400), "S19297C10");
    check_base_class_offset(lv, (S19297C14*)(S19297C13*), ABISELECT(20704,12600), "S19297C10");
    /*is_ambiguous_... S19297C13::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C13*), ABISELECT(15008,9108), "S19297C10");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C2*)(S19297C13*), ABISELECT(15152,9196), "S19297C10");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*)(S19297C13*), ABISELECT(15360,9324), "S19297C10");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C2*)(S19297C13*), ABISELECT(15152,9196), "S19297C10");
    check_base_class_offset(lv, (S19297C13*), ABISELECT(15008,9108), "S19297C10");
    set_bf_and_test(lv, s19297c10f0, ABISELECT(17648,10728), 0, 2, 1, "S19297C10");
    set_bf_and_test(lv, s19297c10f0, ABISELECT(17648,10728), 0, 2, hide_sll(1LL<<1), "S19297C10");
    check_field_offset(lv, s19297c10f1, ABISELECT(17656,10732), "S19297C10.s19297c10f1");
    check_field_offset(lv, s19297c10f2, ABISELECT(17696,10752), "S19297C10.s19297c10f2");
    check_field_offset(lv, s19297c10f3, ABISELECT(17712,10760), "S19297C10.s19297c10f3");
    check_field_offset(lv, s19297c10f4, ABISELECT(17856,10848), "S19297C10.s19297c10f4");
    check_field_offset(lv, s19297c10f5, ABISELECT(17888,10876), "S19297C10.s19297c10f5");
    check_field_offset(lv, s19297c10f6, ABISELECT(18032,10964), "S19297C10.s19297c10f6");
    set_bf_and_test(lv, s19297c10f7, ABISELECT(18039,10971), 0, 1, 1, "S19297C10");
    test_class_info(&lv, &cd_S19297C10);
    dp->~S19297C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C10(Test_S19297C10, "S19297C10", ABISELECT(22384,13632));

#else // __cplusplus

extern void _ZN9S19297C10C1Ev();
extern void _ZN9S19297C10D2Ev();
Name_Map name_map_S19297C10[] = {
  NSPAIR(_ZN9S19297C10C1Ev),
  NSPAIR(_ZN9S19297C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C11;
extern VTBL_ENTRY _ZTI9S19297C11[];
extern  VTBL_ENTRY _ZTV9S19297C11[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C9;
extern VTBL_ENTRY _ZTI8S19297C9[];
extern  VTBL_ENTRY _ZTV8S19297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C9[];
extern Class_Descriptor cd_S3465C14;
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C14;
extern VTBL_ENTRY _ZTI9S19297C14[];
extern  VTBL_ENTRY _ZTV9S19297C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C14[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C13;
extern VTBL_ENTRY _ZTI9S19297C13[];
extern  VTBL_ENTRY _ZTV9S19297C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C13[];
static Base_Class bases_S19297C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C3,    ABISELECT(18048,10972), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(19600,11932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19297C8,    ABISELECT(19600,11932), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //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
    11, //immediately_derived
  0, 1},
  {&cd_S19297C4,    ABISELECT(18256,11100), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(18400,11188), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(18608,11316), //bcp->offset
    81, //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(20560,12512), //bcp->offset
    103, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19297C5,    ABISELECT(20512,12488), //bcp->offset
    100, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19297C2,    ABISELECT(18400,11188), //bcp->offset
    72, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19297C5,    ABISELECT(18768,11420), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19297C9,    ABISELECT(18048,10972), //bcp->offset
    46, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3465C14,    ABISELECT(13008,7892), //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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C5,    ABISELECT(20704,12600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(20752,12624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19297C8,    ABISELECT(20752,12624), //bcp->offset
    125, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(21808,13272), //bcp->offset
    136, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19297C4,    ABISELECT(21664,13180), //bcp->offset
    132, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(22016,13400), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19297C4,    ABISELECT(22224,13528), //bcp->offset
    159, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19297C2,    ABISELECT(22016,13400), //bcp->offset
    144, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19297C14,    ABISELECT(20704,12600), //bcp->offset
    109, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S19297C4,    ABISELECT(15008,9108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(15152,9196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(15360,9324), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19297C2,    ABISELECT(15152,9196), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19297C13,    ABISELECT(15008,9108), //bcp->offset
    21, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19297C10[];
extern void _ZN9S19297C113v12Ev();
extern void _ZN9S19297C113v13Ev();
extern void _ZN9S19297C113v14Ev();
extern void _ZN9S19297C113v15Ev();
extern void _ZN9S19297C113v16Ev();
extern void _ZN9S19297C10D1Ev();
extern void _ZN9S19297C10D0Ev();
extern void _ZN9S19297C103v17Ev();
extern void ABISELECT(_ZThn13008_N9S19297C10D1Ev,_ZThn7892_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn13008_N9S19297C10D0Ev,_ZThn7892_N9S19297C10D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void ABISELECT(_ZThn15008_N9S19297C10D1Ev,_ZThn9108_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn15008_N9S19297C10D0Ev,_ZThn9108_N9S19297C10D0Ev)();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn15152_N9S19297C10D1Ev,_ZThn9196_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn15152_N9S19297C10D0Ev,_ZThn9196_N9S19297C10D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n72_N9S19297C10D1Ev,_ZTv0_n36_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn18048_N9S19297C10D1Ev,_ZThn10972_N9S19297C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19297C10D0Ev,_ZTv0_n36_N9S19297C10D0Ev)();
extern void ABISELECT(_ZThn18048_N9S19297C10D0Ev,_ZThn10972_N9S19297C10D0Ev)() __attribute__((weak));
extern void _ZN8S19297C92v9Ev();
extern void _ZN8S19297C93v10Ev();
extern void _ZN8S19297C93v11Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTvn352_n72_N9S19297C10D1Ev,_ZTvn216_n36_N9S19297C10D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N9S19297C10D0Ev,_ZTvn216_n36_N9S19297C10D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void ABISELECT(_ZTv0_n56_N9S19297C10D1Ev,_ZTv0_n28_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn20704_N9S19297C10D1Ev,_ZThn12600_N9S19297C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19297C10D0Ev,_ZTv0_n28_N9S19297C10D0Ev)();
extern void ABISELECT(_ZThn20704_N9S19297C10D0Ev,_ZThn12600_N9S19297C10D0Ev)() __attribute__((weak));
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C10D1Ev,_ZTv0_n32_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn22016_N9S19297C10D1Ev,_ZThn13400_N9S19297C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19297C10D0Ev,_ZTv0_n32_N9S19297C10D0Ev)();
extern void ABISELECT(_ZThn22016_N9S19297C10D0Ev,_ZThn13400_N9S19297C10D0Ev)() __attribute__((weak));
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY vtc_S19297C10[] = {
  ABISELECT(22016,13400),
  ABISELECT(21808,13272),
  ABISELECT(20704,12600),
  ABISELECT(20560,12512),
  ABISELECT(20512,12488),
  ABISELECT(19600,11932),
  ABISELECT(18048,10972),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN9S19297C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v16Ev,
  (VTBL_ENTRY)&_ZN9S19297C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19297C103v17Ev,
  ABISELECT(-13008,-7892),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn13008_N9S19297C10D1Ev,_ZThn7892_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn13008_N9S19297C10D0Ev,_ZThn7892_N9S19297C10D0Ev),
  ABISELECT(4592,2824),
  ABISELECT(5504,3380),
  ABISELECT(7008,4292),
  ABISELECT(6800,4164),
  ABISELECT(5552,3404),
  ABISELECT(5696,3492),
  ABISELECT(-15008,-9108),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19297C10D1Ev,_ZThn9108_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19297C10D0Ev,_ZThn9108_N9S19297C10D0Ev),
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  ABISELECT(-15152,-9196),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19297C10D1Ev,_ZThn9196_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19297C10D0Ev,_ZThn9196_N9S19297C10D0Ev),
  ABISELECT(-15360,-9324),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-18048,-10972),
  0,
  0,
  0,
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  ABISELECT(-18048,-10972),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19297C10D1Ev,_ZTv0_n36_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19297C10D0Ev,_ZTv0_n36_N9S19297C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19297C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v11Ev,
  ABISELECT(-18256,-11100),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-18400,-11188),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19297C10D1Ev,_ZTvn216_n36_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19297C10D0Ev,_ZTvn216_n36_N9S19297C10D0Ev),
  ABISELECT(-18608,-11316),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(1792,1092),
  ABISELECT(-18768,-11420),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-19600,-11932),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  ABISELECT(48,24),
  ABISELECT(-20512,-12488),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  0,
  0,
  ABISELECT(-20560,-12512),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-20704,-12600),
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  ABISELECT(-20704,-12600),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C10D1Ev,_ZTv0_n28_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C10D0Ev,_ZTv0_n28_N9S19297C10D0Ev),
  ABISELECT(-20752,-12624),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  ABISELECT(-21664,-13180),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-21808,-13272),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-22016,-13400),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-22016,-13400),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C10D1Ev,_ZTv0_n32_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C10D0Ev,_ZTv0_n32_N9S19297C10D0Ev),
  ABISELECT(-22224,-13528),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern VTBL_ENTRY _ZTV9S19297C10[];
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN9S19297C13D1Ev();
extern void _ZN9S19297C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19297C13__9S19297C10[] = {
  ABISELECT(4592,2824),
  ABISELECT(5504,3380),
  ABISELECT(7008,4292),
  ABISELECT(6800,4164),
  ABISELECT(5552,3404),
  ABISELECT(5696,3492),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19297C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C13D0Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C29S19297C13__A2__9S19297C10[] = {
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C29S19297C13__A2__9S19297C10[] = {
  ABISELECT(48,24),
  ABISELECT(-5360,-3292),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C29S19297C13__A2__9S19297C10[] = {
  0,
  0,
  ABISELECT(-5408,-3316),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn5696_N9S19297C13D1Ev,_ZThn3492_N9S19297C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev)();
extern void ABISELECT(_ZThn5696_N9S19297C13D0Ev,_ZThn3492_N9S19297C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19297C14__9S19297C13__9S19297C10[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-5696,-3492),
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  ABISELECT(-5696,-3492),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__9S19297C13__9S19297C10[] = {
  0,
  0,
  ABISELECT(-5552,-3404),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C89S19297C14__9S19297C13__9S19297C10[] = {
  ABISELECT(-5744,-3516),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C3__A1__9S19297C13__9S19297C10[] = {
  0,
  0,
  0,
  ABISELECT(-6800,-4164),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C49S19297C14__A1__9S19297C13__9S19297C10[] = {
  ABISELECT(-6656,-4072),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn7008_N9S19297C13D1Ev,_ZThn4292_N9S19297C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev)();
extern void ABISELECT(_ZThn7008_N9S19297C13D0Ev,_ZThn4292_N9S19297C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19297C2__9S19297C13__9S19297C10[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-7008,-4292),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-7008,-4292),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C2__A2__9S19297C13__9S19297C10[] = {
  ABISELECT(-7216,-4420),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A1__9S19297C13__9S19297C10[] = {
  ABISELECT(48,24),
  ABISELECT(-5504,-3380),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C8__A1__9S19297C13__9S19297C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-4592,-2824),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn144_N9S19297C13D1Ev,_ZThn88_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19297C13D0Ev,_ZThn88_N9S19297C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C2__A__9S19297C13__9S19297C10[] = {
  ABISELECT(5408,3316),
  ABISELECT(5360,3292),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19297C13D1Ev,_ZThn88_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19297C13D0Ev,_ZThn88_N9S19297C13D0Ev),
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C9D1Ev();
extern void _ZN8S19297C9D0Ev();
extern void _ZN8S19297C92v9Ev();
extern void _ZN8S19297C93v10Ev();
extern void _ZN8S19297C93v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C9__9S19297C10[] = {
  ABISELECT(2512,1540),
  ABISELECT(2464,1516),
  ABISELECT(1552,960),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19297C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v11Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C28S19297C9__9S19297C10[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C28S19297C9__9S19297C10[] = {
  ABISELECT(48,24),
  ABISELECT(-2112,-1300),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C28S19297C9__9S19297C10[] = {
  0,
  0,
  ABISELECT(-2160,-1324),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C58S19297C9__A1__9S19297C10[] = {
  ABISELECT(1792,1092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C58S19297C9__A1__9S19297C10[] = {
  0,
  0,
  ABISELECT(-1792,-1092),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C8__8S19297C9__9S19297C10[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-1552,-960),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn352_N8S19297C9D1Ev,_ZThn216_N8S19297C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S19297C9D0Ev,_ZThn216_N8S19297C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C2__8S19297C9__9S19297C10[] = {
  ABISELECT(2160,1324),
  ABISELECT(2112,1300),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19297C9D1Ev,_ZThn216_N8S19297C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19297C9D0Ev,_ZThn216_N8S19297C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C9__9S19297C10[] = {
  ABISELECT(48,24),
  ABISELECT(-2464,-1516),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A2__8S19297C9__9S19297C10[] = {
  0,
  0,
  ABISELECT(-2512,-1540),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A__8S19297C9__9S19297C10[] = {
  ABISELECT(1792,1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__9S19297C10[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__9S19297C10[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN9S19297C14D1Ev();
extern void _ZN9S19297C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19297C14__9S19297C10[] = {
  ABISELECT(-192,-112),
  ABISELECT(1312,800),
  ABISELECT(1104,672),
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN9S19297C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C59S19297C14__A2__9S19297C10[] = {
  ABISELECT(-144,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C59S19297C14__A2__9S19297C10[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__9S19297C14__9S19297C10[] = {
  0,
  0,
  ABISELECT(144,88),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C3__A1__9S19297C14__9S19297C10[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev)();
extern void ABISELECT(_ZThn1312_N9S19297C14D1Ev,_ZThn800_N9S19297C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev)();
extern void ABISELECT(_ZThn1312_N9S19297C14D0Ev,_ZThn800_N9S19297C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19297C2__9S19297C14__9S19297C10[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1312,-800),
  0,
  0,
  0,
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  ABISELECT(-1312,-800),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C2__A2__9S19297C14__9S19297C10[] = {
  ABISELECT(-1520,-928),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A1__9S19297C14__9S19297C10[] = {
  ABISELECT(48,24),
  ABISELECT(192,112),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C2__A1__9S19297C10[] = {
  ABISELECT(-1456,-888),
  ABISELECT(-1504,-912),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C2__A1__9S19297C10[] = {
  ABISELECT(48,24),
  ABISELECT(1504,912),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C2__A1__9S19297C10[] = {
  0,
  0,
  ABISELECT(1456,888),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTT_ENTRY vtt_S19297C10[] = {
  {&(_ZTV9S19297C10[9]),  9,163},
  {&(_tg__ZTV9S19297C13__9S19297C10[8]),  8,12},
  {&(_tg__ZTV8S19297C29S19297C13__A2__9S19297C10[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C29S19297C13__A2__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C29S19297C13__A2__9S19297C10[4]),  4,6},
  {&(_tg__ZTV9S19297C14__9S19297C13__9S19297C10[14]),  14,16},
  {&(_tg__ZTV8S19297C4__9S19297C13__9S19297C10[4]),  4,6},
  {&(_tg__ZTV8S19297C89S19297C14__9S19297C13__9S19297C10[2]),  2,7},
  {&(_tg__ZTV8S19297C3__A1__9S19297C13__9S19297C10[5]),  5,8},
  {&(_tg__ZTV8S19297C49S19297C14__A1__9S19297C13__9S19297C10[2]),  2,4},
  {&(_tg__ZTV8S19297C2__9S19297C13__9S19297C10[10]),  10,15},
  {&(_tg__ZTV8S19297C48S19297C2__A2__9S19297C13__9S19297C10[2]),  2,4},
  {&(_tg__ZTV8S19297C5__A1__9S19297C13__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C8__A1__9S19297C13__9S19297C10[7]),  7,12},
  {&(_tg__ZTV8S19297C2__A__9S19297C13__9S19297C10[4]),  4,9},
  {&(_ZTV9S19297C10[60]),  60,163},
  {&(_ZTV9S19297C10[95]),  95,163},
  {&(_ZTV9S19297C10[70]),  70,163},
  {&(_ZTV9S19297C10[76]),  76,163},
  {&(_ZTV9S19297C10[83]),  83,163},
  {&(_ZTV9S19297C10[103]),  103,163},
  {&(_ZTV9S19297C10[107]),  107,163},
  {&(_ZTV9S19297C10[88]),  88,163},
  {&(_ZTV9S19297C10[29]),  29,163},
  {&(_ZTV9S19297C10[123]),  123,163},
  {&(_ZTV9S19297C10[127]),  127,163},
  {&(_ZTV9S19297C10[141]),  141,163},
  {&(_ZTV9S19297C10[134]),  134,163},
  {&(_ZTV9S19297C10[154]),  154,163},
  {&(_ZTV9S19297C10[161]),  161,163},
  {&(_ZTV9S19297C10[37]),  37,163},
  {&(_tg__ZTV8S19297C9__9S19297C10[5]),  5,13},
  {&(_tg__ZTV8S19297C28S19297C9__9S19297C10[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C28S19297C9__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C28S19297C9__9S19297C10[4]),  4,6},
  {&(_tg__ZTV8S19297C58S19297C9__A1__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C58S19297C9__A1__9S19297C10[4]),  4,6},
  {&(_tg__ZTV8S19297C8__8S19297C9__9S19297C10[7]),  7,12},
  {&(_tg__ZTV8S19297C2__8S19297C9__9S19297C10[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C9__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A2__8S19297C9__9S19297C10[4]),  4,6},
  {&(_tg__ZTV8S19297C5__A__8S19297C9__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C5__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__9S19297C10[4]),  4,6},
  {&(_tg__ZTV9S19297C14__9S19297C10[6]),  6,8},
  {&(_tg__ZTV8S19297C59S19297C14__A2__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C59S19297C14__A2__9S19297C10[4]),  4,6},
  {&(_tg__ZTV8S19297C4__9S19297C14__9S19297C10[4]),  4,6},
  {&(_tg__ZTV8S19297C3__A1__9S19297C14__9S19297C10[5]),  5,8},
  {&(_tg__ZTV8S19297C2__9S19297C14__9S19297C10[10]),  10,15},
  {&(_tg__ZTV8S19297C48S19297C2__A2__9S19297C14__9S19297C10[2]),  2,4},
  {&(_tg__ZTV8S19297C5__A1__9S19297C14__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C2__A1__9S19297C10[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C2__A1__9S19297C10[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C2__A1__9S19297C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S19297C10[];
extern  VTBL_ENTRY _ZTV9S19297C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C10[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19297C14D0Ev,_ZThn800_N9S19297C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N9S19297C14D1Ev,_ZThn800_N9S19297C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7008_N9S19297C13D0Ev,_ZThn4292_N9S19297C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7008_N9S19297C13D1Ev,_ZThn4292_N9S19297C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5696_N9S19297C13D0Ev,_ZThn3492_N9S19297C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5696_N9S19297C13D1Ev,_ZThn3492_N9S19297C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C10D0Ev,_ZTv0_n32_N9S19297C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22016_N9S19297C10D0Ev,_ZThn13400_N9S19297C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19297C10D1Ev,_ZTv0_n32_N9S19297C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22016_N9S19297C10D1Ev,_ZThn13400_N9S19297C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C10D0Ev,_ZTv0_n28_N9S19297C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20704_N9S19297C10D0Ev,_ZThn12600_N9S19297C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C10D1Ev,_ZTv0_n28_N9S19297C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20704_N9S19297C10D1Ev,_ZThn12600_N9S19297C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19297C10D0Ev,_ZTv0_n36_N9S19297C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19297C10D0Ev,_ZThn10972_N9S19297C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19297C10D1Ev,_ZTv0_n36_N9S19297C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19297C10D1Ev,_ZThn10972_N9S19297C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19297C10 = {  "S19297C10", // class name
  bases_S19297C10, 27,
  &(vtc_S19297C10[0]), // expected_vtbl_contents
  &(vtt_S19297C10[0]), // expected_vtt_contents
  ABISELECT(22384,13632), // object size
  NSPAIRA(_ZTI9S19297C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19297C10),163, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19297C10),55, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19297C1  : virtual S19297C2 , S19297C7 , virtual S19297C8 , virtual S19297C9 , virtual S19297C10 {
  ::S19297C8 s19297c1f0;
  __tsi64 s19297c1f1:8;
  void *s19297c1f2;
  int s19297c1f3;
  virtual  ~S19297C1(); // _ZN8S19297C1D2Ev
  virtual void  v1(); // _ZN8S19297C12v1Ev
  S19297C1(); // tgen
};
//SIG(1 S19297C1) C1{ VBC2{ BC3{ v2 v3 v4 Fi[2] FL Fc:0 FC4{ v5 v6 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} BC4 VBC5{ VBC4 Fi Fi:7 FC6{} Fp Fi Fp} vd Fs:16 FL Fs} BC7{ BC8{ BC3 v7 v8 FC4 Fi FC4 FC3 FC4 FD Fp Fi FD Fc:0} FD} VBC8 VBC9{ BC3 VBC8 BC4 BC2 BC5 vd v9 v10 v11 FC4 Fc Fi Fs FC2 FD[2] Fi[2] FD} VBC10{ BC11{ v12 v13 v14 v15 v16 FC12{ vd m Fp FC6 Fp Fi FC13{ BC14{ v20 v21 v22 Fi[2] FL Fc:0 FC15{ v23 v24 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v18 v19 FC15 Fi FC15 FC14 FC15 FD Fp Fi FD Fc:0} FC14[5]}[6] Fi FC7 Fi Fp[2] Fc Fp} VBC9 BC12 BC16{ VBC17{ BC5 BC8 VBC3 BC4 VBC2 vd Fs} BC4 VBC8 BC2 vd Fc Fp[2] Fc[8] Fi[2] Fl[9] FC6 Fi[5] FC12} vd v17 Fi:2 Fp[5] Fi[2] FC4 Fi[7] FC4 Fc[7] Fs:1} vd v1 FC8 FL:8 Fp Fi}


 S19297C1 ::~S19297C1(){ note_dtor("S19297C1", this);}
void  S19297C1 ::v1(){vfunc_called(this, "_ZN8S19297C12v1Ev");}
S19297C1 ::S19297C1(){ note_ctor("S19297C1", this);} // tgen

static void Test_S19297C1()
{
  extern Class_Descriptor cd_S19297C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1517,3693)];
    init_test(&cd_S19297C1, buf);
    S19297C1 *dp, &lv = *(dp=new (buf) S19297C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24256,14768), "sizeof(S19297C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19297C1)");
    /*is_ambiguous_... S19297C1::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C2*), ABISELECT(1872,1136), "S19297C1");
    /*is_ambiguous_... S19297C1::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*), ABISELECT(2080,1264), "S19297C1");
    /*is_ambiguous_... S19297C1::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*), ABISELECT(2288,1392), "S19297C1");
    /*is_ambiguous_... S19297C9::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*)(S19297C9*), ABISELECT(2288,1392), "S19297C1");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C5*)(S19297C14*), ABISELECT(2288,1392), "S19297C1");
    /*is_ambiguous_... S19297C1::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C2*), ABISELECT(2240,1368), "S19297C1");
    check_base_class_offset(lv, (S19297C5*)(S19297C2*)(S19297C9*), ABISELECT(2240,1368), "S19297C1");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C2*)(S19297C13*)(S19297C10*), ABISELECT(2240,1368), "S19297C1");
    /*is_ambiguous_... S19297C1::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C2*), ABISELECT(1872,1136), "S19297C1");
    check_base_class_offset(lv, (S19297C2*)(S19297C14*), ABISELECT(1872,1136), "S19297C1");
    check_base_class_offset(lv, (S19297C3*)(S19297C8*)(S19297C7*), 0, "S19297C1");
    check_base_class_offset(lv, (S19297C8*)(S19297C7*), 0, "S19297C1");
    check_base_class_offset(lv, (S19297C7*), 0, "S19297C1");
    /*is_ambiguous_... S19297C1::S19297C8 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C8*), ABISELECT(2432,1480), "S19297C1");
    /*is_ambiguous_... S19297C1::S19297C8 */ AMB_check_base_class_offset(lv, (S19297C8*), ABISELECT(2432,1480), "S19297C1");
    check_base_class_offset(lv, (S19297C8*)(S19297C9*), ABISELECT(2432,1480), "S19297C1");
    /*is_ambiguous_... S19297C13::S19297C8 */ AMB_check_base_class_offset(lv, (S19297C8*)(S19297C13*)(S19297C10*), ABISELECT(2432,1480), "S19297C1");
    /*is_ambiguous_... S19297C9::S19297C3 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C9*), ABISELECT(3344,2036), "S19297C1");
    /*is_ambiguous_... S19297C9::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C9*), ABISELECT(3552,2164), "S19297C1");
    check_base_class_offset(lv, (S19297C3*)(S19297C2*)(S19297C9*), ABISELECT(3696,2252), "S19297C1");
    /*is_ambiguous_... S19297C2::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*)(S19297C9*), ABISELECT(3904,2380), "S19297C1");
    check_base_class_offset(lv, (S19297C2*)(S19297C9*), ABISELECT(3696,2252), "S19297C1");
    /*is_ambiguous_... S19297C9::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C9*), ABISELECT(4064,2484), "S19297C1");
    check_base_class_offset(lv, (S19297C9*), ABISELECT(3344,2036), "S19297C1");
    check_base_class_offset(lv, (S19297C9*)(S19297C10*), ABISELECT(3344,2036), "S19297C1");
    check_base_class_offset(lv, (S19297C11*)(S19297C10*), ABISELECT(4896,2996), "S19297C1");
    check_base_class_offset(lv, (S3465C14*)(S19297C10*), ABISELECT(17904,10888), "S19297C1");
    /*is_ambiguous_... S19297C14::S19297C5 */ AMB_check_base_class_offset(lv, (S19297C5*)(S19297C14*), ABISELECT(22944,13968), "S19297C1");
    check_base_class_offset(lv, (S19297C3*)(S19297C8*)(S19297C14*), ABISELECT(22992,13992), "S19297C1");
    check_base_class_offset(lv, (S19297C8*)(S19297C14*), ABISELECT(22992,13992), "S19297C1");
    /*is_ambiguous_... S19297C14::S19297C3 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C14*), ABISELECT(24048,14640), "S19297C1");
    /*is_ambiguous_... S19297C14::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C14*), ABISELECT(23904,14548), "S19297C1");
    check_base_class_offset(lv, (S19297C14*)(S19297C13*)(S19297C10*), ABISELECT(22944,13968), "S19297C1");
    /*is_ambiguous_... S19297C13::S19297C4 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C13*)(S19297C10*), ABISELECT(19904,12104), "S19297C1");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C3*)(S19297C2*)(S19297C13*)(S19297C10*), ABISELECT(20048,12192), "S19297C1");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C4*)(S19297C2*)(S19297C13*)(S19297C10*), ABISELECT(20256,12320), "S19297C1");
    /*is_ambiguous_... S19297C13::S19297C2 */ AMB_check_base_class_offset(lv, (S19297C2*)(S19297C13*)(S19297C10*), ABISELECT(20048,12192), "S19297C1");
    check_base_class_offset(lv, (S19297C13*)(S19297C10*), ABISELECT(19904,12104), "S19297C1");
    check_base_class_offset(lv, (S19297C10*), ABISELECT(4896,2996), "S19297C1");
    check_field_offset(lv, s19297c1f0, ABISELECT(928,568), "S19297C1.s19297c1f0");
    set_bf_and_test(lv, s19297c1f1, ABISELECT(1840,1124), 0, 8, 1, "S19297C1");
    set_bf_and_test(lv, s19297c1f1, ABISELECT(1840,1124), 0, 8, hide_sll(1LL<<7), "S19297C1");
    check_field_offset(lv, s19297c1f2, ABISELECT(1848,1128), "S19297C1.s19297c1f2");
    check_field_offset(lv, s19297c1f3, ABISELECT(1856,1132), "S19297C1.s19297c1f3");
    test_class_info(&lv, &cd_S19297C1);
    dp->~S19297C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19297C1(Test_S19297C1, "S19297C1", ABISELECT(24256,14768));

#else // __cplusplus

extern void _ZN8S19297C1C1Ev();
extern void _ZN8S19297C1D2Ev();
Name_Map name_map_S19297C1[] = {
  NSPAIR(_ZN8S19297C1C1Ev),
  NSPAIR(_ZN8S19297C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C7;
extern VTBL_ENTRY _ZTI8S19297C7[];
extern  VTBL_ENTRY _ZTV8S19297C7[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C9;
extern VTBL_ENTRY _ZTI8S19297C9[];
extern  VTBL_ENTRY _ZTV8S19297C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C9[];
extern Class_Descriptor cd_S19297C11;
extern VTBL_ENTRY _ZTI9S19297C11[];
extern  VTBL_ENTRY _ZTV9S19297C11[];
extern Class_Descriptor cd_S3465C14;
extern VTBL_ENTRY _ZTI8S3465C14[];
extern  VTBL_ENTRY _ZTV8S3465C14[];
extern Class_Descriptor cd_S19297C5;
extern VTBL_ENTRY _ZTI8S19297C5[];
extern  VTBL_ENTRY _ZTV8S19297C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C5[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C8;
extern VTBL_ENTRY _ZTI8S19297C8[];
extern  VTBL_ENTRY _ZTV8S19297C8[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C14;
extern VTBL_ENTRY _ZTI9S19297C14[];
extern  VTBL_ENTRY _ZTV9S19297C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C14[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C3;
extern VTBL_ENTRY _ZTI8S19297C3[];
extern  VTBL_ENTRY _ZTV8S19297C3[];
extern Class_Descriptor cd_S19297C4;
extern VTBL_ENTRY _ZTI8S19297C4[];
extern  VTBL_ENTRY _ZTV8S19297C4[];
extern Class_Descriptor cd_S19297C2;
extern VTBL_ENTRY _ZTI8S19297C2[];
extern  VTBL_ENTRY _ZTV8S19297C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C2[];
extern Class_Descriptor cd_S19297C13;
extern VTBL_ENTRY _ZTI9S19297C13[];
extern  VTBL_ENTRY _ZTV9S19297C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C13[];
extern Class_Descriptor cd_S19297C10;
extern VTBL_ENTRY _ZTI9S19297C10[];
extern  VTBL_ENTRY _ZTV9S19297C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19297C10[];
static Base_Class bases_S19297C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19297C3,    ABISELECT(1872,1136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(2080,1264), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(2288,1392), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19297C5,    ABISELECT(2240,1368), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19297C2,    ABISELECT(1872,1136), //bcp->offset
    18, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19297C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19297C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19297C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19297C3,    ABISELECT(2432,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19297C8,    ABISELECT(2432,1480), //bcp->offset
    46, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19297C3,    ABISELECT(3344,2036), //bcp->offset
    -1, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(3552,2164), //bcp->offset
    80, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(3696,2252), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(3904,2380), //bcp->offset
    93, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19297C2,    ABISELECT(3696,2252), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19297C5,    ABISELECT(4064,2484), //bcp->offset
    97, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19297C9,    ABISELECT(3344,2036), //bcp->offset
    58, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19297C11,    ABISELECT(4896,2996), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S3465C14,    ABISELECT(17904,10888), //bcp->offset
    129, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19297C5,    ABISELECT(22944,13968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(22992,13992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19297C8,    ABISELECT(22992,13992), //bcp->offset
    174, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(24048,14640), //bcp->offset
    185, //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
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19297C4,    ABISELECT(23904,14548), //bcp->offset
    181, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19297C14,    ABISELECT(22944,13968), //bcp->offset
    158, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19297C4,    ABISELECT(19904,12104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19297C3,    ABISELECT(20048,12192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19297C4,    ABISELECT(20256,12320), //bcp->offset
    154, //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
    25, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19297C2,    ABISELECT(20048,12192), //bcp->offset
    145, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19297C13,    ABISELECT(19904,12104), //bcp->offset
    133, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19297C10,    ABISELECT(4896,2996), //bcp->offset
    100, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19297C1[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C1D1Ev();
extern void _ZN8S19297C1D0Ev();
extern void _ZN8S19297C12v1Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N8S19297C1D1Ev,_ZTv0_n32_N8S19297C1D1Ev)();
extern void ABISELECT(_ZThn1872_N8S19297C1D1Ev,_ZThn1136_N8S19297C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19297C1D0Ev,_ZTv0_n32_N8S19297C1D0Ev)();
extern void ABISELECT(_ZThn1872_N8S19297C1D0Ev,_ZThn1136_N8S19297C1D0Ev)() __attribute__((weak));
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S19297C1D1Ev,_ZTv0_n36_N8S19297C1D1Ev)();
extern void ABISELECT(_ZThn3344_N8S19297C1D1Ev,_ZThn2036_N8S19297C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19297C1D0Ev,_ZTv0_n36_N8S19297C1D0Ev)();
extern void ABISELECT(_ZThn3344_N8S19297C1D0Ev,_ZThn2036_N8S19297C1D0Ev)() __attribute__((weak));
extern void _ZN8S19297C92v9Ev();
extern void _ZN8S19297C93v10Ev();
extern void _ZN8S19297C93v11Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTvn352_n72_N8S19297C1D1Ev,_ZTvn216_n36_N8S19297C1D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N8S19297C1D0Ev,_ZTvn216_n36_N8S19297C1D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN9S19297C113v12Ev();
extern void _ZN9S19297C113v13Ev();
extern void _ZN9S19297C113v14Ev();
extern void _ZN9S19297C113v15Ev();
extern void _ZN9S19297C113v16Ev();
extern void ABISELECT(_ZTv0_n120_N8S19297C1D1Ev,_ZTv0_n60_N8S19297C1D1Ev)();
extern void ABISELECT(_ZThn4896_N8S19297C1D1Ev,_ZThn2996_N8S19297C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S19297C1D0Ev,_ZTv0_n60_N8S19297C1D0Ev)();
extern void ABISELECT(_ZThn4896_N8S19297C1D0Ev,_ZThn2996_N8S19297C1D0Ev)() __attribute__((weak));
extern void _ZN9S19297C103v17Ev();
extern void ABISELECT(_ZTvn13008_n120_N8S19297C1D1Ev,_ZTvn7892_n60_N8S19297C1D1Ev)();
extern void ABISELECT(_ZTvn13008_n120_N8S19297C1D0Ev,_ZTvn7892_n60_N8S19297C1D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void ABISELECT(_ZTvn15008_n120_N8S19297C1D1Ev,_ZTvn9108_n60_N8S19297C1D1Ev)();
extern void ABISELECT(_ZTvn15008_n120_N8S19297C1D0Ev,_ZTvn9108_n60_N8S19297C1D0Ev)();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTvn15152_n120_N8S19297C1D1Ev,_ZTvn9196_n60_N8S19297C1D1Ev)();
extern void ABISELECT(_ZTvn15152_n120_N8S19297C1D0Ev,_ZTvn9196_n60_N8S19297C1D0Ev)();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void ABISELECT(_ZTv0_n56_N8S19297C1D1Ev,_ZTv0_n28_N8S19297C1D1Ev)();
extern void ABISELECT(_ZThn22944_N8S19297C1D1Ev,_ZThn13968_N8S19297C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19297C1D0Ev,_ZTv0_n28_N8S19297C1D0Ev)();
extern void ABISELECT(_ZThn22944_N8S19297C1D0Ev,_ZThn13968_N8S19297C1D0Ev)() __attribute__((weak));
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY vtc_S19297C1[] = {
  ABISELECT(24048,14640),
  ABISELECT(22944,13968),
  ABISELECT(4896,2996),
  ABISELECT(3344,2036),
  ABISELECT(2432,1480),
  ABISELECT(2288,1392),
  ABISELECT(2240,1368),
  ABISELECT(1872,1136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  (VTBL_ENTRY)&_ZN8S19297C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19297C12v1Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1872,-1136),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(-1872,-1136),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19297C1D1Ev,_ZTv0_n32_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19297C1D0Ev,_ZTv0_n32_N8S19297C1D0Ev),
  ABISELECT(-2080,-1264),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(48,24),
  ABISELECT(-2240,-1368),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  0,
  0,
  ABISELECT(-2288,-1392),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-2432,-1480),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(-3344,-2036),
  0,
  0,
  0,
  ABISELECT(-1056,-644),
  ABISELECT(-1104,-668),
  ABISELECT(-912,-556),
  ABISELECT(-3344,-2036),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19297C1D1Ev,_ZTv0_n36_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19297C1D0Ev,_ZTv0_n36_N8S19297C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19297C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v11Ev,
  ABISELECT(-3552,-2164),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  ABISELECT(-3696,-2252),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S19297C1D1Ev,_ZTvn216_n36_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N8S19297C1D0Ev,_ZTvn216_n36_N8S19297C1D0Ev),
  ABISELECT(-3904,-2380),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(-1776,-1092),
  ABISELECT(-4064,-2484),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  ABISELECT(15152,9196),
  ABISELECT(15152,9196),
  ABISELECT(15152,9196),
  ABISELECT(15008,9108),
  ABISELECT(15008,9108),
  0,
  ABISELECT(-4896,-2996),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3024,-1860),
  ABISELECT(19152,11644),
  ABISELECT(18048,10972),
  ABISELECT(-2608,-1604),
  ABISELECT(-2656,-1628),
  ABISELECT(-2464,-1516),
  ABISELECT(-1552,-960),
  ABISELECT(-4896,-2996),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN9S19297C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19297C1D1Ev,_ZTv0_n60_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S19297C1D0Ev,_ZTv0_n60_N8S19297C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19297C103v17Ev,
  ABISELECT(-17904,-10888),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn13008_n120_N8S19297C1D1Ev,_ZTvn7892_n60_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn13008_n120_N8S19297C1D0Ev,_ZTvn7892_n60_N8S19297C1D0Ev),
  ABISELECT(-17472,-10624),
  ABISELECT(-17664,-10736),
  ABISELECT(-18032,-10968),
  ABISELECT(4144,2536),
  ABISELECT(-17616,-10712),
  ABISELECT(3040,1864),
  ABISELECT(-19904,-12104),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn15008_n120_N8S19297C1D1Ev,_ZTvn9108_n60_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn15008_n120_N8S19297C1D0Ev,_ZTvn9108_n60_N8S19297C1D0Ev),
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  ABISELECT(-20048,-12192),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn15152_n120_N8S19297C1D1Ev,_ZTvn9196_n60_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn15152_n120_N8S19297C1D0Ev,_ZTvn9196_n60_N8S19297C1D0Ev),
  ABISELECT(-20256,-12320),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-22944,-13968),
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  ABISELECT(-22944,-13968),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19297C1D1Ev,_ZTv0_n28_N8S19297C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19297C1D0Ev,_ZTv0_n28_N8S19297C1D0Ev),
  ABISELECT(-22992,-13992),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
  ABISELECT(-23904,-14548),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  0,
  0,
  0,
  ABISELECT(-24048,-14640),
  (VTBL_ENTRY)&(_ZTI8S19297C1[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S19297C1[];
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C2__8S19297C1[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C2__8S19297C1[] = {
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C2__8S19297C1[] = {
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C5__8S19297C1[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C9D1Ev();
extern void _ZN8S19297C9D0Ev();
extern void _ZN8S19297C92v9Ev();
extern void _ZN8S19297C93v10Ev();
extern void _ZN8S19297C93v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C9__8S19297C1[] = {
  ABISELECT(-1056,-644),
  ABISELECT(-1104,-668),
  ABISELECT(-912,-556),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19297C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v11Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C28S19297C9__A1__8S19297C1[] = {
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C28S19297C9__A1__8S19297C1[] = {
  ABISELECT(48,24),
  ABISELECT(1456,884),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C28S19297C9__A1__8S19297C1[] = {
  0,
  0,
  ABISELECT(1408,860),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C58S19297C9__A1__8S19297C1[] = {
  ABISELECT(-1776,-1092),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C58S19297C9__A1__8S19297C1[] = {
  0,
  0,
  ABISELECT(1776,1092),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C8__8S19297C9__8S19297C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(912,556),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn352_N8S19297C9D1Ev,_ZThn216_N8S19297C9D1Ev)();
extern void ABISELECT(_ZThn352_N8S19297C9D0Ev,_ZThn216_N8S19297C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C2__8S19297C9__8S19297C1[] = {
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19297C9D1Ev,_ZThn216_N8S19297C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S19297C9D0Ev,_ZThn216_N8S19297C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C9__8S19297C1[] = {
  ABISELECT(48,24),
  ABISELECT(1104,668),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A2__8S19297C9__8S19297C1[] = {
  0,
  0,
  ABISELECT(1056,644),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A__8S19297C9__8S19297C1[] = {
  ABISELECT(-1776,-1092),
  ABISELECT(-720,-448),
  (VTBL_ENTRY)&(_ZTI8S19297C9[0]),
};
extern void _ZN9S19297C113v12Ev();
extern void _ZN9S19297C113v13Ev();
extern void _ZN9S19297C113v14Ev();
extern void _ZN9S19297C113v15Ev();
extern void _ZN9S19297C113v16Ev();
extern void _ZN9S19297C10D1Ev();
extern void _ZN9S19297C10D0Ev();
extern void _ZN9S19297C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19297C10__8S19297C1[] = {
  ABISELECT(-3024,-1860),
  ABISELECT(19152,11644),
  ABISELECT(18048,10972),
  ABISELECT(-2608,-1604),
  ABISELECT(-2656,-1628),
  ABISELECT(-2464,-1516),
  ABISELECT(-1552,-960),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN9S19297C113v12Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v13Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v14Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v15Ev,
  (VTBL_ENTRY)&_ZN9S19297C113v16Ev,
  (VTBL_ENTRY)&_ZN9S19297C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19297C103v17Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void _ZN9S19297C13D1Ev();
extern void _ZN9S19297C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(-17472,-10624),
  ABISELECT(-17664,-10736),
  ABISELECT(-18032,-10968),
  ABISELECT(4144,2536),
  ABISELECT(-17616,-10712),
  ABISELECT(3040,1864),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  (VTBL_ENTRY)&_ZN9S19297C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C13D0Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C2D1Ev();
extern void _ZN8S19297C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C29S19297C139S19297C10__A2__8S19297C1[] = {
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19297C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__8S19297C29S19297C139S19297C10__A2__8S19297C1[] = {
  ABISELECT(48,24),
  ABISELECT(17808,10824),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A1__8S19297C29S19297C139S19297C10__A2__8S19297C1[] = {
  0,
  0,
  ABISELECT(17760,10800),
  (VTBL_ENTRY)&(_ZTI8S19297C2[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn3040_N9S19297C13D1Ev,_ZThn1864_N9S19297C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev)();
extern void ABISELECT(_ZThn3040_N9S19297C13D0Ev,_ZThn1864_N9S19297C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19297C14__9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-3040,-1864),
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  ABISELECT(-3040,-1864),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__9S19297C139S19297C10__8S19297C1[] = {
  0,
  0,
  ABISELECT(17616,10712),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C89S19297C14__9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(-3088,-1888),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C3__A1__9S19297C139S19297C10__8S19297C1[] = {
  0,
  0,
  0,
  ABISELECT(-4144,-2536),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C49S19297C14__A1__9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(-4000,-2444),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C2__9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(18032,10968),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(18032,10968),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C13D1Ev,_ZTv0_n32_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C13D0Ev,_ZTv0_n32_N9S19297C13D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C2__A2__9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(17824,10840),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A1__9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(48,24),
  ABISELECT(17664,10736),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C8__A1__9S19297C139S19297C10__8S19297C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(17472,10624),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn144_N9S19297C13D1Ev,_ZThn88_N9S19297C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S19297C13D0Ev,_ZThn88_N9S19297C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C2__A__9S19297C139S19297C10__8S19297C1[] = {
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI9S19297C13[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19297C13D1Ev,_ZThn88_N9S19297C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N9S19297C13D0Ev,_ZThn88_N9S19297C13D0Ev),
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n72_N9S19297C10D1Ev,_ZTv0_n36_N9S19297C10D1Ev)();
extern void ABISELECT(_ZTv0_n72_N9S19297C10D0Ev,_ZTv0_n36_N9S19297C10D0Ev)();
extern void _ZN8S19297C92v9Ev();
extern void _ZN8S19297C93v10Ev();
extern void _ZN8S19297C93v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C9__9S19297C10__8S19297C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  0,
  0,
  0,
  ABISELECT(1552,960),
  0,
  0,
  0,
  ABISELECT(-1056,-644),
  ABISELECT(-1104,-668),
  ABISELECT(-912,-556),
  ABISELECT(1552,960),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19297C10D1Ev,_ZTv0_n36_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19297C10D0Ev,_ZTv0_n36_N9S19297C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19297C92v9Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v10Ev,
  (VTBL_ENTRY)&_ZN8S19297C93v11Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C8__9S19297C10__8S19297C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2464,1516),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C9__9S19297C10__8S19297C1[] = {
  ABISELECT(1344,832),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTvn352_n72_N9S19297C10D1Ev,_ZTvn216_n36_N9S19297C10D1Ev)();
extern void ABISELECT(_ZTvn352_n72_N9S19297C10D0Ev,_ZTvn216_n36_N9S19297C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C28S19297C9__9S19297C10__8S19297C1[] = {
  ABISELECT(-1408,-860),
  ABISELECT(-1456,-884),
  ABISELECT(1200,744),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19297C10D1Ev,_ZTvn216_n36_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn352_n72_N9S19297C10D0Ev,_ZTvn216_n36_N9S19297C10D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C28S19297C9__A1__9S19297C10__8S19297C1[] = {
  ABISELECT(992,616),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__9S19297C10__8S19297C1[] = {
  ABISELECT(48,24),
  ABISELECT(2656,1628),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__A2__9S19297C10__8S19297C1[] = {
  0,
  0,
  ABISELECT(2608,1604),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C58S19297C9__A1__9S19297C10__8S19297C1[] = {
  ABISELECT(-1776,-1092),
  ABISELECT(832,512),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
extern void ABISELECT(_ZThn15008_N9S19297C10D1Ev,_ZThn9108_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn15008_N9S19297C10D0Ev,_ZThn9108_N9S19297C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19297C13__9S19297C10__8S19297C1[] = {
  ABISELECT(-17472,-10624),
  ABISELECT(-17664,-10736),
  ABISELECT(-18032,-10968),
  ABISELECT(4144,2536),
  ABISELECT(-17616,-10712),
  ABISELECT(3040,1864),
  ABISELECT(-15008,-9108),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19297C10D1Ev,_ZThn9108_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15008_N9S19297C10D0Ev,_ZThn9108_N9S19297C10D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S19297C10D1Ev,_ZTv0_n28_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn18048_N9S19297C10D1Ev,_ZThn10972_N9S19297C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19297C10D0Ev,_ZTv0_n28_N9S19297C10D0Ev)();
extern void ABISELECT(_ZThn18048_N9S19297C10D0Ev,_ZThn10972_N9S19297C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19297C14__9S19297C10__8S19297C1[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-18048,-10972),
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  ABISELECT(-18048,-10972),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C10D1Ev,_ZTv0_n28_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19297C10D0Ev,_ZTv0_n28_N9S19297C10D0Ev),
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void _ZN8S19297C82v7Ev();
extern void _ZN8S19297C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C89S19297C14__A1__9S19297C10__8S19297C1[] = {
  ABISELECT(-18096,-10996),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v7Ev,
  (VTBL_ENTRY)&_ZN8S19297C82v8Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C3__A4__9S19297C10__8S19297C1[] = {
  0,
  0,
  0,
  ABISELECT(-19152,-11644),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C49S19297C14__A3__9S19297C10__8S19297C1[] = {
  ABISELECT(-19008,-11552),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C10D1Ev,_ZTv0_n32_N9S19297C10D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19297C10D0Ev,_ZTv0_n32_N9S19297C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C2__A1__9S19297C10__8S19297C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(3024,1860),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(3024,1860),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C10D1Ev,_ZTv0_n32_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C10D0Ev,_ZTv0_n32_N9S19297C10D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C2__A4__9S19297C10__8S19297C1[] = {
  ABISELECT(2816,1732),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZThn15152_N9S19297C10D1Ev,_ZThn9196_N9S19297C10D1Ev)();
extern void ABISELECT(_ZThn15152_N9S19297C10D0Ev,_ZThn9196_N9S19297C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C29S19297C13__A2__9S19297C10__8S19297C1[] = {
  ABISELECT(-17760,-10800),
  ABISELECT(-17808,-10824),
  ABISELECT(-15152,-9196),
  (VTBL_ENTRY)&(_ZTI9S19297C10[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19297C10D1Ev,_ZThn9196_N9S19297C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn15152_N9S19297C10D0Ev,_ZThn9196_N9S19297C10D0Ev),
};
extern void _ZN9S19297C14D1Ev();
extern void _ZN9S19297C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19297C14__8S19297C1[] = {
  ABISELECT(-20704,-12600),
  ABISELECT(-21072,-12832),
  ABISELECT(1104,672),
  ABISELECT(-20656,-12576),
  0,
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN9S19297C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19297C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C59S19297C14__A2__8S19297C1[] = {
  ABISELECT(-20656,-12576),
  0,
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__8S19297C59S19297C14__A2__8S19297C1[] = {
  0,
  0,
  ABISELECT(20656,12576),
  (VTBL_ENTRY)&(_ZTI8S19297C5[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C4__9S19297C14__8S19297C1[] = {
  0,
  0,
  ABISELECT(20656,12576),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C3__A1__9S19297C14__8S19297C1[] = {
  0,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
};
extern void _ZN8S19297C32v2Ev();
extern void _ZN8S19297C32v3Ev();
extern void _ZN8S19297C32v4Ev();
extern void ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19297C2__9S19297C14__8S19297C1[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(21072,12832),
  0,
  0,
  0,
  ABISELECT(416,256),
  ABISELECT(368,232),
  ABISELECT(21072,12832),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19297C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D1Ev,_ZTv0_n32_N9S19297C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19297C14D0Ev,_ZTv0_n32_N9S19297C14D0Ev),
};
extern void _ZN8S19297C42v5Ev();
extern void _ZN8S19297C42v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19297C48S19297C2__A2__9S19297C14__8S19297C1[] = {
  ABISELECT(20864,12704),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
  (VTBL_ENTRY)&_ZN8S19297C42v5Ev,
  (VTBL_ENTRY)&_ZN8S19297C42v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19297C5__A1__9S19297C14__8S19297C1[] = {
  ABISELECT(48,24),
  ABISELECT(20704,12600),
  (VTBL_ENTRY)&(_ZTI9S19297C14[0]),
};
static  VTT_ENTRY vtt_S19297C1[] = {
  {&(_ZTV8S19297C1[10]),  10,193},
  {&(_ZTV8S19297C1[28]),  28,193},
  {&(_ZTV8S19297C1[35]),  35,193},
  {&(_ZTV8S19297C1[40]),  40,193},
  {&(_ZTV8S19297C1[44]),  44,193},
  {&(_ZTV8S19297C1[53]),  53,193},
  {&(_ZTV8S19297C1[72]),  72,193},
  {&(_ZTV8S19297C1[82]),  82,193},
  {&(_ZTV8S19297C1[88]),  88,193},
  {&(_ZTV8S19297C1[95]),  95,193},
  {&(_ZTV8S19297C1[100]),  100,193},
  {&(_ZTV8S19297C1[121]),  121,193},
  {&(_ZTV8S19297C1[131]),  131,193},
  {&(_ZTV8S19297C1[141]),  141,193},
  {&(_ZTV8S19297C1[172]),  172,193},
  {&(_ZTV8S19297C1[176]),  176,193},
  {&(_ZTV8S19297C1[190]),  190,193},
  {&(_ZTV8S19297C1[183]),  183,193},
  {&(_ZTV8S19297C1[149]),  149,193},
  {&(_ZTV8S19297C1[156]),  156,193},
  {&(_tg__ZTV8S19297C2__8S19297C1[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C2__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C2__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C5__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C5__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C9__8S19297C1[5]),  5,13},
  {&(_tg__ZTV8S19297C28S19297C9__A1__8S19297C1[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C28S19297C9__A1__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C28S19297C9__A1__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C58S19297C9__A1__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C58S19297C9__A1__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C8__8S19297C9__8S19297C1[7]),  7,12},
  {&(_tg__ZTV8S19297C2__8S19297C9__8S19297C1[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C9__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A2__8S19297C9__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C5__A__8S19297C9__8S19297C1[3]),  3,3},
  {&(_tg__ZTV9S19297C10__8S19297C1[9]),  9,17},
  {&(_tg__ZTV9S19297C139S19297C10__8S19297C1[8]),  8,12},
  {&(_tg__ZTV8S19297C29S19297C139S19297C10__A2__8S19297C1[4]),  4,9},
  {&(_tg__ZTV8S19297C5__8S19297C29S19297C139S19297C10__A2__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A1__8S19297C29S19297C139S19297C10__A2__8S19297C1[4]),  4,6},
  {&(_tg__ZTV9S19297C14__9S19297C139S19297C10__8S19297C1[14]),  14,16},
  {&(_tg__ZTV8S19297C4__9S19297C139S19297C10__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C89S19297C14__9S19297C139S19297C10__8S19297C1[2]),  2,7},
  {&(_tg__ZTV8S19297C3__A1__9S19297C139S19297C10__8S19297C1[5]),  5,8},
  {&(_tg__ZTV8S19297C49S19297C14__A1__9S19297C139S19297C10__8S19297C1[2]),  2,4},
  {&(_tg__ZTV8S19297C2__9S19297C139S19297C10__8S19297C1[10]),  10,15},
  {&(_tg__ZTV8S19297C48S19297C2__A2__9S19297C139S19297C10__8S19297C1[2]),  2,4},
  {&(_tg__ZTV8S19297C5__A1__9S19297C139S19297C10__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C8__A1__9S19297C139S19297C10__8S19297C1[7]),  7,12},
  {&(_tg__ZTV8S19297C2__A__9S19297C139S19297C10__8S19297C1[4]),  4,9},
  {&(_tg__ZTV8S19297C9__9S19297C10__8S19297C1[14]),  14,22},
  {&(_tg__ZTV8S19297C8__9S19297C10__8S19297C1[7]),  7,12},
  {&(_tg__ZTV8S19297C48S19297C9__9S19297C10__8S19297C1[2]),  2,4},
  {&(_tg__ZTV8S19297C28S19297C9__9S19297C10__8S19297C1[4]),  4,9},
  {&(_tg__ZTV8S19297C48S19297C28S19297C9__A1__9S19297C10__8S19297C1[2]),  2,4},
  {&(_tg__ZTV8S19297C5__9S19297C10__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__A2__9S19297C10__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C58S19297C9__A1__9S19297C10__8S19297C1[3]),  3,3},
  {&(_tg__ZTV9S19297C13__9S19297C10__8S19297C1[8]),  8,12},
  {&(_tg__ZTV9S19297C14__9S19297C10__8S19297C1[14]),  14,16},
  {&(_tg__ZTV8S19297C89S19297C14__A1__9S19297C10__8S19297C1[2]),  2,7},
  {&(_tg__ZTV8S19297C3__A4__9S19297C10__8S19297C1[5]),  5,8},
  {&(_tg__ZTV8S19297C49S19297C14__A3__9S19297C10__8S19297C1[2]),  2,4},
  {&(_tg__ZTV8S19297C2__A1__9S19297C10__8S19297C1[10]),  10,15},
  {&(_tg__ZTV8S19297C48S19297C2__A4__9S19297C10__8S19297C1[2]),  2,4},
  {&(_tg__ZTV8S19297C29S19297C13__A2__9S19297C10__8S19297C1[4]),  4,9},
  {&(_tg__ZTV9S19297C14__8S19297C1[6]),  6,8},
  {&(_tg__ZTV8S19297C59S19297C14__A2__8S19297C1[3]),  3,3},
  {&(_tg__ZTV8S19297C4__8S19297C59S19297C14__A2__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C4__9S19297C14__8S19297C1[4]),  4,6},
  {&(_tg__ZTV8S19297C3__A1__9S19297C14__8S19297C1[5]),  5,8},
  {&(_tg__ZTV8S19297C2__9S19297C14__8S19297C1[10]),  10,15},
  {&(_tg__ZTV8S19297C48S19297C2__A2__9S19297C14__8S19297C1[2]),  2,4},
  {&(_tg__ZTV8S19297C5__A1__9S19297C14__8S19297C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19297C1[];
extern  VTBL_ENTRY _ZTV8S19297C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19297C1[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C10D0Ev,_ZTv0_n28_N9S19297C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19297C10D0Ev,_ZThn10972_N9S19297C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C10D1Ev,_ZTv0_n28_N9S19297C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18048_N9S19297C10D1Ev,_ZThn10972_N9S19297C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C13D0Ev,_ZTv0_n28_N9S19297C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3040_N9S19297C13D0Ev,_ZThn1864_N9S19297C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19297C13D1Ev,_ZTv0_n28_N9S19297C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3040_N9S19297C13D1Ev,_ZThn1864_N9S19297C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19297C1D0Ev,_ZTv0_n28_N8S19297C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22944_N8S19297C1D0Ev,_ZThn13968_N8S19297C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19297C1D1Ev,_ZTv0_n28_N8S19297C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22944_N8S19297C1D1Ev,_ZThn13968_N8S19297C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19297C1D0Ev,_ZTv0_n60_N8S19297C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4896_N8S19297C1D0Ev,_ZThn2996_N8S19297C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S19297C1D1Ev,_ZTv0_n60_N8S19297C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4896_N8S19297C1D1Ev,_ZThn2996_N8S19297C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19297C1D0Ev,_ZTv0_n36_N8S19297C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19297C1D0Ev,_ZThn2036_N8S19297C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19297C1D1Ev,_ZTv0_n36_N8S19297C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3344_N8S19297C1D1Ev,_ZThn2036_N8S19297C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19297C1D0Ev,_ZTv0_n32_N8S19297C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19297C1D0Ev,_ZThn1136_N8S19297C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19297C1D1Ev,_ZTv0_n32_N8S19297C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1872_N8S19297C1D1Ev,_ZThn1136_N8S19297C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19297C1 = {  "S19297C1", // class name
  bases_S19297C1, 31,
  &(vtc_S19297C1[0]), // expected_vtbl_contents
  &(vtt_S19297C1[0]), // expected_vtt_contents
  ABISELECT(24256,14768), // object size
  NSPAIRA(_ZTI8S19297C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19297C1),193, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19297C1),75, //virtual table table var
  31, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7561C3  {
  void *s7561c3f0;
  ::S19968C3 s7561c3f1;
  ::S19968C3 s7561c3f2;
  int s7561c3f3[3];
  void *s7561c3f4[6];
  short s7561c3f5;
  ::S19968C4 s7561c3f6;
  virtual  ~S7561C3(); // _ZN7S7561C3D1Ev
  virtual void  v2(); // _ZN7S7561C32v2Ev
  virtual void  v3(); // _ZN7S7561C32v3Ev
  S7561C3(); // tgen
};
//SIG(-1 S7561C3) C1{ vd v1 v2 Fp FC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC2 Fi[3] Fp[6] Fs FU3{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}}


 S7561C3 ::~S7561C3(){ note_dtor("S7561C3", this);}
void  S7561C3 ::v2(){vfunc_called(this, "_ZN7S7561C32v2Ev");}
void  S7561C3 ::v3(){vfunc_called(this, "_ZN7S7561C32v3Ev");}
S7561C3 ::S7561C3(){ note_ctor("S7561C3", this);} // tgen

static void Test_S7561C3()
{
  extern Class_Descriptor cd_S7561C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,113)];
    init_test(&cd_S7561C3, buf);
    S7561C3 *dp, &lv = *(dp=new (buf) S7561C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,448), "sizeof(S7561C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C3)");
    check_field_offset(lv, s7561c3f0, ABISELECT(8,4), "S7561C3.s7561c3f0");
    check_field_offset(lv, s7561c3f1, ABISELECT(16,8), "S7561C3.s7561c3f1");
    check_field_offset(lv, s7561c3f2, ABISELECT(256,148), "S7561C3.s7561c3f2");
    check_field_offset(lv, s7561c3f3, ABISELECT(496,288), "S7561C3.s7561c3f3");
    check_field_offset(lv, s7561c3f4, ABISELECT(512,300), "S7561C3.s7561c3f4");
    check_field_offset(lv, s7561c3f5, ABISELECT(560,324), "S7561C3.s7561c3f5");
    check_field_offset(lv, s7561c3f6, ABISELECT(576,328), "S7561C3.s7561c3f6");
    test_class_info(&lv, &cd_S7561C3);
    dp->~S7561C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C3(Test_S7561C3, "S7561C3", ABISELECT(736,448));

#else // __cplusplus

extern void _ZN7S7561C3C1Ev();
extern void _ZN7S7561C3D1Ev();
Name_Map name_map_S7561C3[] = {
  NSPAIR(_ZN7S7561C3C1Ev),
  NSPAIR(_ZN7S7561C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7561C3[];
extern void _ZN7S7561C3D1Ev();
extern void _ZN7S7561C3D0Ev();
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY vtc_S7561C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C3[0]),
  (VTBL_ENTRY)&_ZN7S7561C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S7561C3[];
extern  VTBL_ENTRY _ZTV7S7561C3[];
Class_Descriptor cd_S7561C3 = {  "S7561C3", // class name
  0,0,//no base classes
  &(vtc_S7561C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,448), // object size
  NSPAIRA(_ZTI7S7561C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7561C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7561C6  : virtual S22028C16 , virtual S19968C3 {
  void *s7561c6f0[9];
  ~S7561C6(); // tgen
  S7561C6(); // tgen
};
//SIG(-1 S7561C6) C1{ VBC2{ m} VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]}


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

static void Test_S7561C6()
{
  extern Class_Descriptor cd_S7561C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,46)];
    init_test(&cd_S7561C6, buf);
    S7561C6 *dp, &lv = *(dp=new (buf) S7561C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,180), "sizeof(S7561C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C6)");
    check_base_class_offset(lv, (S22028C16*), 0, "S7561C6");
    check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S7561C6");
    check_field_offset(lv, s7561c6f0, ABISELECT(8,4), "S7561C6.s7561c6f0");
    test_class_info(&lv, &cd_S7561C6);
    dp->~S7561C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C6(Test_S7561C6, "S7561C6", ABISELECT(320,180));

#else // __cplusplus

extern void _ZN7S7561C6C1Ev();
extern void _ZN7S7561C6D1Ev();
Name_Map name_map_S7561C6[] = {
  NSPAIR(_ZN7S7561C6C1Ev),
  NSPAIR(_ZN7S7561C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S7561C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7561C6[];
static  VTBL_ENTRY vtc_S7561C6[] = {
  ABISELECT(80,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern VTBL_ENTRY _ZTV7S7561C6[];
static  VTT_ENTRY vtt_S7561C6[] = {
  {&(_ZTV7S7561C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
Class_Descriptor cd_S7561C6 = {  "S7561C6", // class name
  bases_S7561C6, 2,
  &(vtc_S7561C6[0]), // expected_vtbl_contents
  &(vtt_S7561C6[0]), // expected_vtt_contents
  ABISELECT(320,180), // object size
  NSPAIRA(_ZTI7S7561C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7561C6),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7561C6),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  S7561C8  : virtual S7561C6 {
  int s7561c8f0:21;
  int s7561c8f1;
  virtual  ~S7561C8(); // _ZN7S7561C8D2Ev
  S7561C8(); // tgen
};
//SIG(-1 S7561C8) C1{ VBC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi}


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

static void Test_S7561C8()
{
  extern Class_Descriptor cd_S7561C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7561C8, buf);
    S7561C8 *dp, &lv = *(dp=new (buf) S7561C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7561C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C8)");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*), 0, "S7561C8");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(96,52), "S7561C8");
    check_base_class_offset(lv, (S7561C6*), ABISELECT(16,12), "S7561C8");
    set_bf_and_test(lv, s7561c8f0, ABISELECT(8,4), 0, 21, 1, "S7561C8");
    set_bf_and_test(lv, s7561c8f0, ABISELECT(8,4), 0, 21, hide_sll(1LL<<20), "S7561C8");
    check_field_offset(lv, s7561c8f1, ABISELECT(12,8), "S7561C8.s7561c8f1");
    test_class_info(&lv, &cd_S7561C8);
    dp->~S7561C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C8(Test_S7561C8, "S7561C8", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S7561C8C1Ev();
extern void _ZN7S7561C8D2Ev();
Name_Map name_map_S7561C8[] = {
  NSPAIR(_ZN7S7561C8C1Ev),
  NSPAIR(_ZN7S7561C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
static Base_Class bases_S7561C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(96,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
    2, //immediately_derived
  0, 1},
  {&cd_S7561C6,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7561C8[];
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY vtc_S7561C8[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern VTBL_ENTRY _ZTV7S7561C8[];
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C8[] = {
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTT_ENTRY vtt_S7561C8[] = {
  {&(_ZTV7S7561C8[5]),  5,11},
  {&(_ZTV7S7561C8[11]),  11,11},
  {&(_tg__ZTV7S7561C6__7S7561C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
Class_Descriptor cd_S7561C8 = {  "S7561C8", // class name
  bases_S7561C8, 3,
  &(vtc_S7561C8[0]), // expected_vtbl_contents
  &(vtt_S7561C8[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S7561C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7561C8),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7561C8),3, //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  S7561C2  : virtual S7561C3 , virtual S7561C6 , virtual S7561C8 , S19968C3 {
  virtual void  v4(); // _ZN7S7561C22v4Ev
  ~S7561C2(); // tgen
  S7561C2(); // tgen
};
//SIG(-1 S7561C2) C1{ VBC2{ vd v2 v3 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ VBC5 vd Fi:21 Fi} BC3 v1}


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

static void Test_S7561C2()
{
  extern Class_Descriptor cd_S7561C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(84,197)];
    init_test(&cd_S7561C2, buf);
    S7561C2 *dp, &lv = *(dp=new (buf) S7561C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,784), "sizeof(S7561C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C2)");
    check_base_class_offset(lv, (S7561C3*), ABISELECT(256,144), "S7561C2");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*), 0, "S7561C2");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(1072,632), "S7561C2");
    check_base_class_offset(lv, (S7561C6*), ABISELECT(992,592), "S7561C2");
    check_base_class_offset(lv, (S7561C6*)(S7561C8*), ABISELECT(992,592), "S7561C2");
    check_base_class_offset(lv, (S7561C8*), ABISELECT(1312,772), "S7561C2");
    /*is_ambiguous_... S7561C2::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(16,4), "S7561C2");
    test_class_info(&lv, &cd_S7561C2);
    dp->~S7561C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C2(Test_S7561C2, "S7561C2", ABISELECT(1328,784));

#else // __cplusplus

extern void _ZN7S7561C2C1Ev();
extern void _ZN7S7561C2D1Ev();
Name_Map name_map_S7561C2[] = {
  NSPAIR(_ZN7S7561C2C1Ev),
  NSPAIR(_ZN7S7561C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7561C3;
extern VTBL_ENTRY _ZTI7S7561C3[];
extern  VTBL_ENTRY _ZTV7S7561C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S7561C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7561C3,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1072,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7561C6,    ABISELECT(992,592), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7561C8,    ABISELECT(1312,772), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7561C2[];
extern void _ZN7S7561C22v4Ev();
extern void _ZN7S7561C2D1Ev();
extern void _ZN7S7561C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn256_N7S7561C2D1Ev,_ZThn144_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn256_N7S7561C2D0Ev,_ZThn144_N7S7561C2D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn1312_N7S7561C2D1Ev,_ZThn772_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn1312_N7S7561C2D0Ev,_ZThn772_N7S7561C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7561C2[] = {
  ABISELECT(1312,772),
  ABISELECT(1072,632),
  0,
  ABISELECT(992,592),
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D0Ev,
  0,
  0,
  ABISELECT(-256,-144),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  ABISELECT(-1312,-772),
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  ABISELECT(-1312,-772),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7561C2[];
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C2[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C8__7S7561C2[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C8__7S7561C2[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
static  VTT_ENTRY vtt_S7561C2[] = {
  {&(_ZTV7S7561C2[7]),  7,31},
  {&(_ZTV7S7561C2[15]),  15,31},
  {&(_ZTV7S7561C2[23]),  23,31},
  {&(_ZTV7S7561C2[29]),  29,31},
  {&(_tg__ZTV7S7561C6__7S7561C2[4]),  4,4},
  {&(_tg__ZTV7S7561C8__7S7561C2[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C8__7S7561C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7561C2[];
extern  VTBL_ENTRY _ZTV7S7561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C2[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7561C2D0Ev,_ZThn772_N7S7561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7561C2D1Ev,_ZThn772_N7S7561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7561C2D0Ev,_ZThn144_N7S7561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7561C2D1Ev,_ZThn144_N7S7561C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7561C2 = {  "S7561C2", // class name
  bases_S7561C2, 6,
  &(vtc_S7561C2[0]), // expected_vtbl_contents
  &(vtt_S7561C2[0]), // expected_vtt_contents
  ABISELECT(1328,784), // object size
  NSPAIRA(_ZTI7S7561C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7561C2),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7561C2),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7561C9  : virtual S22028C16 , virtual S7561C6 , S7561C8 , S7561C2 {
  int s7561c9f0;
  int s7561c9f1;
  int s7561c9f2;
  short s7561c9f3;
  int s7561c9f4;
  ::S19968C12 s7561c9f5;
  __tsi64 s7561c9f6;
  void *s7561c9f7;
  int s7561c9f8;
  ~S7561C9(); // tgen
  S7561C9(); // tgen
};
//SIG(-1 S7561C9) C1{ VBC2{ m} VBC3{ VBC2 VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} BC5{ VBC3 vd Fi:21 Fi} BC6{ VBC7{ vd v1 v2 Fp FC4 FC4 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC5 BC4 v3} Fi Fi Fi Fs Fi FC9{ VBC4 VBC10{ VBC2 VBC4 Fp[9]} BC11{ VBC12{ vd v4 v5 Fp FC4 FC4 Fi[3] Fp[6] Fs FU8} VBC10 VBC13{ VBC10 vd Fi:21 Fi} BC4 v6} BC13 BC12 vd Fi} FL Fp Fi}


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

static void Test_S7561C9()
{
  extern Class_Descriptor cd_S7561C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(220,521)];
    init_test(&cd_S7561C9, buf);
    S7561C9 *dp, &lv = *(dp=new (buf) S7561C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3504,2080), "sizeof(S7561C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C9)");
    check_base_class_offset(lv, (S22028C16*), 0, "S7561C9");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*), 0, "S7561C9");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(2512,1480), "S7561C9");
    check_base_class_offset(lv, (S7561C6*), ABISELECT(2424,1440), "S7561C9");
    /*is_ambiguous_... S7561C9::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*), ABISELECT(2424,1440), "S7561C9");
    check_base_class_offset(lv, (S7561C6*)(S7561C2*), ABISELECT(2424,1440), "S7561C9");
    /*is_ambiguous_... S7561C9::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*), ABISELECT(2424,1440), "S7561C9");
    /*is_ambiguous_... S7561C9::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C8*), 0, "S7561C9");
    check_base_class_offset(lv, (S7561C3*)(S7561C2*), ABISELECT(2752,1620), "S7561C9");
    check_base_class_offset(lv, (S7561C8*)(S7561C2*), ABISELECT(3488,2068), "S7561C9");
    /*is_ambiguous_... S7561C2::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C2*), ABISELECT(32,16), "S7561C9");
    check_base_class_offset(lv, (S7561C2*), ABISELECT(16,12), "S7561C9");
    check_field_offset(lv, s7561c9f0, ABISELECT(272,156), "S7561C9.s7561c9f0");
    check_field_offset(lv, s7561c9f1, ABISELECT(276,160), "S7561C9.s7561c9f1");
    check_field_offset(lv, s7561c9f2, ABISELECT(280,164), "S7561C9.s7561c9f2");
    check_field_offset(lv, s7561c9f3, ABISELECT(284,168), "S7561C9.s7561c9f3");
    check_field_offset(lv, s7561c9f4, ABISELECT(288,172), "S7561C9.s7561c9f4");
    check_field_offset(lv, s7561c9f5, ABISELECT(304,176), "S7561C9.s7561c9f5");
    check_field_offset(lv, s7561c9f6, ABISELECT(2400,1424), "S7561C9.s7561c9f6");
    check_field_offset(lv, s7561c9f7, ABISELECT(2408,1432), "S7561C9.s7561c9f7");
    check_field_offset(lv, s7561c9f8, ABISELECT(2416,1436), "S7561C9.s7561c9f8");
    test_class_info(&lv, &cd_S7561C9);
    dp->~S7561C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C9(Test_S7561C9, "S7561C9", ABISELECT(3504,2080));

#else // __cplusplus

extern void _ZN7S7561C9C1Ev();
extern void _ZN7S7561C9D1Ev();
Name_Map name_map_S7561C9[] = {
  NSPAIR(_ZN7S7561C9C1Ev),
  NSPAIR(_ZN7S7561C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S7561C3;
extern VTBL_ENTRY _ZTI7S7561C3[];
extern  VTBL_ENTRY _ZTV7S7561C3[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C2;
extern VTBL_ENTRY _ZTI7S7561C2[];
extern  VTBL_ENTRY _ZTV7S7561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C2[];
static Base_Class bases_S7561C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(2512,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7561C6,    ABISELECT(2424,1440), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7561C8,    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_S7561C3,    ABISELECT(2752,1620), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7561C8,    ABISELECT(3488,2068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7561C2,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7561C9[];
extern void _ZN7S7561C9D1Ev();
extern void _ZN7S7561C9D0Ev();
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn2752_N7S7561C9D1Ev,_ZThn1620_N7S7561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev)();
extern void ABISELECT(_ZThn2752_N7S7561C9D0Ev,_ZThn1620_N7S7561C9D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn3488_N7S7561C9D1Ev,_ZThn2068_N7S7561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev)();
extern void ABISELECT(_ZThn3488_N7S7561C9D0Ev,_ZThn2068_N7S7561C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7561C9[] = {
  ABISELECT(3488,2068),
  ABISELECT(2752,1620),
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C9D0Ev,
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev),
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  0,
  0,
  ABISELECT(-2752,-1620),
  ABISELECT(-2752,-1620),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
  ABISELECT(-3488,-2068),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3488,-2068),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S7561C9[];
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C8__A__7S7561C9[] = {
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C8__A__7S7561C9[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern void _ZN7S7561C22v4Ev();
extern void _ZN7S7561C2D1Ev();
extern void _ZN7S7561C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C2__7S7561C9[] = {
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn2736_N7S7561C2D1Ev,_ZThn1608_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn2736_N7S7561C2D0Ev,_ZThn1608_N7S7561C2D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C2__7S7561C9[] = {
  0,
  0,
  ABISELECT(-2736,-1608),
  ABISELECT(-2736,-1608),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C2__7S7561C9[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn3472_N7S7561C2D1Ev,_ZThn2056_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn3472_N7S7561C2D0Ev,_ZThn2056_N7S7561C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7561C8__7S7561C2__7S7561C9[] = {
  ABISELECT(-3472,-2056),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3472,-2056),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C9[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C8__A1__7S7561C9[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C8__A1__7S7561C9[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
static  VTT_ENTRY vtt_S7561C9[] = {
  {&(_ZTV7S7561C9[7]),  7,40},
  {&(_tg__ZTV7S7561C8__A__7S7561C9[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C8__A__7S7561C9[4]),  4,4},
  {&(_tg__ZTV7S7561C2__7S7561C9[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C2__7S7561C9[5]),  5,9},
  {&(_tg__ZTV7S7561C6__7S7561C2__7S7561C9[4]),  4,4},
  {&(_tg__ZTV7S7561C8__7S7561C2__7S7561C9[6]),  6,8},
  {&(_ZTV7S7561C9[23]),  23,40},
  {&(_ZTV7S7561C9[16]),  16,40},
  {&(_ZTV7S7561C9[28]),  28,40},
  {&(_ZTV7S7561C9[38]),  38,40},
  {&(_tg__ZTV7S7561C6__7S7561C9[4]),  4,4},
  {&(_tg__ZTV7S7561C8__A1__7S7561C9[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C8__A1__7S7561C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7561C9[];
extern  VTBL_ENTRY _ZTV7S7561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C9[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7561C2D0Ev,_ZThn2056_N7S7561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7561C2D1Ev,_ZThn2056_N7S7561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N7S7561C2D0Ev,_ZThn1608_N7S7561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N7S7561C2D1Ev,_ZThn1608_N7S7561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N7S7561C9D0Ev,_ZThn2068_N7S7561C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N7S7561C9D1Ev,_ZThn2068_N7S7561C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S7561C9D0Ev,_ZThn1620_N7S7561C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N7S7561C9D1Ev,_ZThn1620_N7S7561C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7561C9 = {  "S7561C9", // class name
  bases_S7561C9, 8,
  &(vtc_S7561C9[0]), // expected_vtbl_contents
  &(vtt_S7561C9[0]), // expected_vtt_contents
  ABISELECT(3504,2080), // object size
  NSPAIRA(_ZTI7S7561C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7561C9),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7561C9),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7561C13  : S19968C3 , S7561C6 {
  int s7561c13f0;
  void *s7561c13f1;
  int s7561c13f2;
  short s7561c13f3;
  unsigned int s7561c13f4:1;
  ::S22028C16 s7561c13f5;
  ::S3465C9_nt s7561c13f6;
  int s7561c13f7;
  ~S7561C13(); // tgen
  S7561C13(); // tgen
};
//SIG(-1 S7561C13) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC3{ VBC4{ m} VBC2 Fp[9]} Fi Fp Fi Fs Fi:1 FC4 FC5{} Fi}


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

static void Test_S7561C13()
{
  extern Class_Descriptor cd_S7561C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,87)];
    init_test(&cd_S7561C13, buf);
    S7561C13 *dp, &lv = *(dp=new (buf) S7561C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,344), "sizeof(S7561C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C13)");
    /*is_ambiguous_... S7561C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S7561C13");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*), 0, "S7561C13");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(352,204), "S7561C13");
    check_base_class_offset(lv, (S7561C6*), 0, "S7561C13");
    check_field_offset(lv, s7561c13f0, ABISELECT(320,180), "S7561C13.s7561c13f0");
    check_field_offset(lv, s7561c13f1, ABISELECT(328,184), "S7561C13.s7561c13f1");
    check_field_offset(lv, s7561c13f2, ABISELECT(336,188), "S7561C13.s7561c13f2");
    check_field_offset(lv, s7561c13f3, ABISELECT(340,192), "S7561C13.s7561c13f3");
    set_bf_and_test(lv, s7561c13f4, ABISELECT(342,194), 0, 1, 1, "S7561C13");
    check_field_offset(lv, s7561c13f5, ABISELECT(343,195), "S7561C13.s7561c13f5");
    check_field_offset(lv, s7561c13f6, ABISELECT(344,196), "S7561C13.s7561c13f6");
    check_field_offset(lv, s7561c13f7, ABISELECT(348,200), "S7561C13.s7561c13f7");
    test_class_info(&lv, &cd_S7561C13);
    dp->~S7561C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C13(Test_S7561C13, "S7561C13", ABISELECT(592,344));

#else // __cplusplus

extern void _ZN8S7561C13C1Ev();
extern void _ZN8S7561C13D1Ev();
Name_Map name_map_S7561C13[] = {
  NSPAIR(_ZN8S7561C13C1Ev),
  NSPAIR(_ZN8S7561C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
static Base_Class bases_S7561C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(352,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7561C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7561C13[];
static  VTBL_ENTRY vtc_S7561C13[] = {
  ABISELECT(352,204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C13[0]),
};
extern VTBL_ENTRY _ZTV8S7561C13[];
static  VTBL_ENTRY _tg__ZTV7S7561C6__8S7561C13[] = {
  ABISELECT(352,204),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTT_ENTRY vtt_S7561C13[] = {
  {&(_ZTV8S7561C13[4]),  4,4},
  {&(_tg__ZTV7S7561C6__8S7561C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7561C13[];
extern  VTBL_ENTRY _ZTV8S7561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C13[];
Class_Descriptor cd_S7561C13 = {  "S7561C13", // class name
  bases_S7561C13, 4,
  &(vtc_S7561C13[0]), // expected_vtbl_contents
  &(vtt_S7561C13[0]), // expected_vtt_contents
  ABISELECT(592,344), // object size
  NSPAIRA(_ZTI8S7561C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7561C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7561C13),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7561C12  : virtual S7561C3 , S7561C13 , S22028C16 , S7561C6 {
  ::S7561C6 s7561c12f0;
  void *s7561c12f1;
  long double s7561c12f2;
  void *s7561c12f3;
  ::S19968C4 s7561c12f4;
  void *s7561c12f5;
  short s7561c12f6:4;
  char  :0;
  int s7561c12f8;
  short s7561c12f9;
  int s7561c12f10;
  ~S7561C12(); // tgen
  S7561C12(); // tgen
};
//SIG(-1 S7561C12) C1{ VBC2{ vd v1 v2 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ BC3 BC6{ VBC7{ m} VBC3 Fp[9]} Fi Fp Fi Fs Fi:1 FC7 FC8{} Fi} BC7 BC6 FC6 Fp FD Fp FU4 Fp Fs:4 Fc:0 Fi Fs Fi}


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

static void Test_S7561C12()
{
  extern Class_Descriptor cd_S7561C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(124,294)];
    init_test(&cd_S7561C12, buf);
    S7561C12 *dp, &lv = *(dp=new (buf) S7561C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1968,1172), "sizeof(S7561C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C12)");
    check_base_class_offset(lv, (S7561C3*), ABISELECT(992,584), "S7561C12");
    /*is_ambiguous_... S7561C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C13*), ABISELECT(80,40), "S7561C12");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C13*), ABISELECT(1728,1032), "S7561C12");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*), ABISELECT(1728,1032), "S7561C12");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C13*), ABISELECT(1728,1032), "S7561C12");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(1728,1032), "S7561C12");
    check_base_class_offset(lv, (S7561C6*)(S7561C13*), 0, "S7561C12");
    check_base_class_offset(lv, (S7561C13*), 0, "S7561C12");
    /*is_ambiguous_... S7561C12::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*), 0, "S7561C12");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S7561C6*), ABISELECT(352,204), "S7561C12");
    check_field_offset(lv, s7561c12f0, ABISELECT(432,244), "S7561C12.s7561c12f0");
    check_field_offset(lv, s7561c12f1, ABISELECT(752,424), "S7561C12.s7561c12f1");
    check_field_offset(lv, s7561c12f2, ABISELECT(768,428), "S7561C12.s7561c12f2");
    check_field_offset(lv, s7561c12f3, ABISELECT(784,440), "S7561C12.s7561c12f3");
    check_field_offset(lv, s7561c12f4, ABISELECT(800,444), "S7561C12.s7561c12f4");
    check_field_offset(lv, s7561c12f5, ABISELECT(960,564), "S7561C12.s7561c12f5");
    set_bf_and_test(lv, s7561c12f6, ABISELECT(968,568), 0, 4, 1, "S7561C12");
    set_bf_and_test(lv, s7561c12f6, ABISELECT(968,568), 0, 4, hide_sll(1LL<<3), "S7561C12");
    check_field_offset(lv, s7561c12f8, ABISELECT(972,572), "S7561C12.s7561c12f8");
    check_field_offset(lv, s7561c12f9, ABISELECT(976,576), "S7561C12.s7561c12f9");
    check_field_offset(lv, s7561c12f10, ABISELECT(980,580), "S7561C12.s7561c12f10");
    test_class_info(&lv, &cd_S7561C12);
    dp->~S7561C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C12(Test_S7561C12, "S7561C12", ABISELECT(1968,1172));

#else // __cplusplus

extern void _ZN8S7561C12C1Ev();
extern void _ZN8S7561C12D1Ev();
Name_Map name_map_S7561C12[] = {
  NSPAIR(_ZN8S7561C12C1Ev),
  NSPAIR(_ZN8S7561C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7561C3;
extern VTBL_ENTRY _ZTI7S7561C3[];
extern  VTBL_ENTRY _ZTV7S7561C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C13;
extern VTBL_ENTRY _ZTI8S7561C13[];
extern  VTBL_ENTRY _ZTV8S7561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C13[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
static Base_Class bases_S7561C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7561C3,    ABISELECT(992,584), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //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_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(1728,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1728,1032), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7561C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7561C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7561C6,    ABISELECT(352,204), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7561C12[];
extern void _ZN8S7561C12D1Ev();
extern void _ZN8S7561C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev)();
extern void ABISELECT(_ZThn992_N8S7561C12D1Ev,_ZThn584_N8S7561C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev)();
extern void ABISELECT(_ZThn992_N8S7561C12D0Ev,_ZThn584_N8S7561C12D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY vtc_S7561C12[] = {
  ABISELECT(992,584),
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&_ZN8S7561C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7561C12D0Ev,
  ABISELECT(1376,828),
  ABISELECT(1376,828),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  0,
  0,
  ABISELECT(-992,-584),
  ABISELECT(-992,-584),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S7561C12[];
static  VTBL_ENTRY _tg__ZTV8S7561C13__8S7561C12[] = {
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C13__8S7561C12[] = {
  ABISELECT(1728,1032),
  ABISELECT(1728,1032),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__A1__8S7561C12[] = {
  ABISELECT(1376,828),
  ABISELECT(1376,828),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTT_ENTRY vtt_S7561C12[] = {
  {&(_ZTV8S7561C12[5]),  5,20},
  {&(_tg__ZTV8S7561C13__8S7561C12[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C13__8S7561C12[4]),  4,4},
  {&(_tg__ZTV7S7561C6__A1__8S7561C12[4]),  4,4},
  {&(_ZTV8S7561C12[16]),  16,20},
  {&(_ZTV8S7561C12[11]),  11,20},
};
extern VTBL_ENTRY _ZTI8S7561C12[];
extern  VTBL_ENTRY _ZTV8S7561C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C12[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N8S7561C12D0Ev,_ZThn584_N8S7561C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N8S7561C12D1Ev,_ZThn584_N8S7561C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7561C12 = {  "S7561C12", // class name
  bases_S7561C12, 8,
  &(vtc_S7561C12[0]), // expected_vtbl_contents
  &(vtt_S7561C12[0]), // expected_vtt_contents
  ABISELECT(1968,1172), // object size
  NSPAIRA(_ZTI8S7561C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7561C12),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7561C12),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7561C11  : S7561C8 , S7561C12 , virtual S7561C9 , S7561C13 {
  int s7561c11f0;
  short s7561c11f1;
  void *s7561c11f2;
  int s7561c11f3;
  void *s7561c11f4;
  int s7561c11f5;
  long double s7561c11f6;
  __tsi64 s7561c11f7;
  virtual  ~S7561C11(); // _ZN8S7561C11D2Ev
  virtual void  v5(); // _ZN8S7561C112v5Ev
  S7561C11(); // tgen
};
//SIG(-1 S7561C11) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi} BC6{ VBC7{ vd v2 v3 Fp FC5 FC5 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC9{ BC5 BC3 Fi Fp Fi Fs Fi:1 FC4 FC10{} Fi} BC4 BC3 FC3 Fp FD Fp FU8 Fp Fs:4 Fc:0 Fi Fs Fi} VBC11{ VBC4 VBC3 BC2 BC12{ VBC7 VBC3 VBC2 BC5 v4} Fi Fi Fi Fs Fi FC13{ VBC5 VBC14{ VBC4 VBC5 Fp[9]} BC15{ VBC16{ vd v5 v6 Fp FC5 FC5 Fi[3] Fp[6] Fs FU8} VBC14 VBC17{ VBC14 vd Fi:21 Fi} BC5 v7} BC17 BC16 vd Fi} FL Fp Fi} BC9 vd v1 Fi Fs Fp Fi Fp Fi FD FL}


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

static void Test_S7561C11()
{
  extern Class_Descriptor cd_S7561C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(310,732)];
    init_test(&cd_S7561C11, buf);
    S7561C11 *dp, &lv = *(dp=new (buf) S7561C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4944,2924), "sizeof(S7561C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C11)");
    /*is_ambiguous_... S7561C11::S7561C6 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*), 0, "S7561C11");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C13*)(S7561C12*), 0, "S7561C11");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C12*), 0, "S7561C11");
    check_base_class_offset(lv, (S22028C16*)(S7561C9*), 0, "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C13*), 0, "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C6 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(1520,884), "S7561C11");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C13*)(S7561C12*), ABISELECT(1520,884), "S7561C11");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C12*), ABISELECT(1520,884), "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C13*), ABISELECT(1520,884), "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*), ABISELECT(1432,844), "S7561C11");
    check_base_class_offset(lv, (S7561C6*)(S7561C9*), ABISELECT(1432,844), "S7561C11");
    /*is_ambiguous_... S7561C9::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*)(S7561C9*), ABISELECT(1432,844), "S7561C11");
    check_base_class_offset(lv, (S7561C6*)(S7561C2*)(S7561C9*), ABISELECT(1432,844), "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*), ABISELECT(1432,844), "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C8*), 0, "S7561C11");
    check_base_class_offset(lv, (S7561C3*)(S7561C12*), ABISELECT(1760,1024), "S7561C11");
    check_base_class_offset(lv, (S7561C3*)(S7561C2*)(S7561C9*), ABISELECT(1760,1024), "S7561C11");
    /*is_ambiguous_... S7561C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C13*)(S7561C12*), ABISELECT(96,52), "S7561C11");
    check_base_class_offset(lv, (S7561C6*)(S7561C13*)(S7561C12*), ABISELECT(16,12), "S7561C11");
    check_base_class_offset(lv, (S7561C13*)(S7561C12*), ABISELECT(16,12), "S7561C11");
    /*is_ambiguous_... S7561C12::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C12*), ABISELECT(16,12), "S7561C11");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C12*), ABISELECT(368,216), "S7561C11");
    check_base_class_offset(lv, (S7561C12*), ABISELECT(16,12), "S7561C11");
    /*is_ambiguous_... S7561C9::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C8*)(S7561C9*), ABISELECT(2496,1472), "S7561C11");
    check_base_class_offset(lv, (S7561C8*)(S7561C2*)(S7561C9*), ABISELECT(4920,2912), "S7561C11");
    /*is_ambiguous_... S7561C2::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C2*)(S7561C9*), ABISELECT(2528,1488), "S7561C11");
    check_base_class_offset(lv, (S7561C2*)(S7561C9*), ABISELECT(2512,1484), "S7561C11");
    check_base_class_offset(lv, (S7561C9*), ABISELECT(2496,1472), "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C13*), ABISELECT(1088,636), "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C13*), ABISELECT(1008,596), "S7561C11");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S7561C13*), ABISELECT(1008,596), "S7561C11");
    check_field_offset(lv, s7561c11f0, ABISELECT(1360,800), "S7561C11.s7561c11f0");
    check_field_offset(lv, s7561c11f1, ABISELECT(1364,804), "S7561C11.s7561c11f1");
    check_field_offset(lv, s7561c11f2, ABISELECT(1368,808), "S7561C11.s7561c11f2");
    check_field_offset(lv, s7561c11f3, ABISELECT(1376,812), "S7561C11.s7561c11f3");
    check_field_offset(lv, s7561c11f4, ABISELECT(1384,816), "S7561C11.s7561c11f4");
    check_field_offset(lv, s7561c11f5, ABISELECT(1392,820), "S7561C11.s7561c11f5");
    check_field_offset(lv, s7561c11f6, ABISELECT(1408,824), "S7561C11.s7561c11f6");
    check_field_offset(lv, s7561c11f7, ABISELECT(1424,836), "S7561C11.s7561c11f7");
    test_class_info(&lv, &cd_S7561C11);
    dp->~S7561C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C11(Test_S7561C11, "S7561C11", ABISELECT(4944,2924));

#else // __cplusplus

extern void _ZN8S7561C11C1Ev();
extern void _ZN8S7561C11D2Ev();
Name_Map name_map_S7561C11[] = {
  NSPAIR(_ZN8S7561C11C1Ev),
  NSPAIR(_ZN8S7561C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S7561C3;
extern VTBL_ENTRY _ZTI7S7561C3[];
extern  VTBL_ENTRY _ZTV7S7561C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C13;
extern VTBL_ENTRY _ZTI8S7561C13[];
extern  VTBL_ENTRY _ZTV8S7561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C13[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C12;
extern VTBL_ENTRY _ZTI8S7561C12[];
extern  VTBL_ENTRY _ZTV8S7561C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C12[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C2;
extern VTBL_ENTRY _ZTI7S7561C2[];
extern  VTBL_ENTRY _ZTV7S7561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C2[];
extern Class_Descriptor cd_S7561C9;
extern VTBL_ENTRY _ZTI7S7561C9[];
extern  VTBL_ENTRY _ZTV7S7561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C13;
extern VTBL_ENTRY _ZTI8S7561C13[];
extern  VTBL_ENTRY _ZTV8S7561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C13[];
static Base_Class bases_S7561C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(1520,884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7561C6,    ABISELECT(1432,844), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7561C8,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7561C3,    ABISELECT(1760,1024), //bcp->offset
    30, //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
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7561C13,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(16,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
    10, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(368,216), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7561C12,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7561C8,    ABISELECT(2496,1472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7561C8,    ABISELECT(4920,2912), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(2528,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7561C2,    ABISELECT(2512,1484), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7561C9,    ABISELECT(2496,1472), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(1088,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(1008,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7561C13,    ABISELECT(1008,596), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7561C11[];
extern void _ZN8S7561C11D1Ev();
extern void _ZN8S7561C11D0Ev();
extern void _ZN8S7561C112v5Ev();
extern void ABISELECT(_ZThn16_N8S7561C11D1Ev,_ZThn12_N8S7561C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7561C11D0Ev,_ZThn12_N8S7561C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7561C11D1Ev,_ZTv0_n12_N8S7561C11D1Ev)();
extern void ABISELECT(_ZThn1760_N8S7561C11D1Ev,_ZThn1024_N8S7561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7561C11D0Ev,_ZTv0_n12_N8S7561C11D0Ev)();
extern void ABISELECT(_ZThn1760_N8S7561C11D0Ev,_ZThn1024_N8S7561C11D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S7561C11D1Ev,_ZTv0_n32_N8S7561C11D1Ev)();
extern void ABISELECT(_ZThn2496_N8S7561C11D1Ev,_ZThn1472_N8S7561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7561C11D0Ev,_ZTv0_n32_N8S7561C11D0Ev)();
extern void ABISELECT(_ZThn2496_N8S7561C11D0Ev,_ZThn1472_N8S7561C11D0Ev)() __attribute__((weak));
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZTvn16_n64_N8S7561C11D1Ev,_ZTvn12_n32_N8S7561C11D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N8S7561C11D0Ev,_ZTvn12_n32_N8S7561C11D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7561C11D1Ev,_ZTv0_n24_N8S7561C11D1Ev)();
extern void ABISELECT(_ZThn4920_N8S7561C11D1Ev,_ZThn2912_N8S7561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7561C11D0Ev,_ZTv0_n24_N8S7561C11D0Ev)();
extern void ABISELECT(_ZThn4920_N8S7561C11D0Ev,_ZThn2912_N8S7561C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7561C11[] = {
  ABISELECT(4920,2912),
  ABISELECT(2496,1472),
  ABISELECT(1760,1024),
  ABISELECT(1520,884),
  0,
  ABISELECT(1432,844),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&_ZN8S7561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7561C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7561C112v5Ev,
  ABISELECT(1744,1012),
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7561C11D1Ev,_ZThn12_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7561C11D0Ev,_ZThn12_N8S7561C11D0Ev),
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  ABISELECT(-1008,-596),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(-1432,-844),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  0,
  0,
  ABISELECT(-1760,-1024),
  ABISELECT(-1760,-1024),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C11D1Ev,_ZTv0_n12_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C11D0Ev,_ZTv0_n12_N8S7561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
  ABISELECT(16,12),
  ABISELECT(-2496,-1472),
  ABISELECT(2424,1440),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  ABISELECT(-2496,-1472),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7561C11D1Ev,_ZTv0_n32_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7561C11D0Ev,_ZTv0_n32_N8S7561C11D0Ev),
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-2512,-1484),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S7561C11D1Ev,_ZTvn12_n32_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S7561C11D0Ev,_ZTvn12_n32_N8S7561C11D0Ev),
  ABISELECT(-4920,-2912),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-4920,-2912),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7561C11D1Ev,_ZTv0_n24_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7561C11D0Ev,_ZTv0_n24_N8S7561C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7561C11[];
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C8__A__8S7561C11[] = {
  ABISELECT(1520,884),
  0,
  ABISELECT(1432,844),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C8__A__8S7561C11[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(-1432,-844),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern void _ZN8S7561C12D1Ev();
extern void _ZN8S7561C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7561C12__8S7561C11[] = {
  ABISELECT(1744,1012),
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&_ZN8S7561C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7561C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7561C138S7561C12__8S7561C11[] = {
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C138S7561C12__A1__8S7561C11[] = {
  ABISELECT(1504,872),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C12__A2__8S7561C11[] = {
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev)();
extern void ABISELECT(_ZThn1744_N8S7561C12D1Ev,_ZThn1012_N8S7561C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev)();
extern void ABISELECT(_ZThn1744_N8S7561C12D0Ev,_ZThn1012_N8S7561C12D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__8S7561C12__8S7561C11[] = {
  0,
  0,
  ABISELECT(-1744,-1012),
  ABISELECT(-1744,-1012),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__A1__8S7561C12__8S7561C11[] = {
  ABISELECT(1152,668),
  ABISELECT(-368,-216),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7561C13__A1__8S7561C11[] = {
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C13__A3__8S7561C11[] = {
  ABISELECT(512,288),
  ABISELECT(-1008,-596),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__8S7561C11[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern void _ZN7S7561C9D1Ev();
extern void _ZN7S7561C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C9__8S7561C11[] = {
  ABISELECT(2424,1440),
  ABISELECT(-736,-448),
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C9D0Ev,
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C87S7561C9__A1__8S7561C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-2496,-1472),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C87S7561C9__A1__8S7561C11[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern void _ZN7S7561C22v4Ev();
extern void _ZN7S7561C2D1Ev();
extern void _ZN7S7561C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C27S7561C9__8S7561C11[] = {
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev)();
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C27S7561C9__8S7561C11[] = {
  0,
  0,
  ABISELECT(752,460),
  ABISELECT(752,460),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C27S7561C9__8S7561C11[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1080,640),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn2408_N7S7561C2D1Ev,_ZThn1428_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn2408_N7S7561C2D0Ev,_ZThn1428_N7S7561C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7561C8__7S7561C27S7561C9__8S7561C11[] = {
  ABISELECT(-2408,-1428),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C9__8S7561C11[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
};
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7561C2__7S7561C9__8S7561C11[] = {
  ABISELECT(2408,1428),
  ABISELECT(-992,-600),
  ABISELECT(-2512,-1484),
  ABISELECT(-1080,-640),
  ABISELECT(-752,-460),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev)();
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C9__8S7561C11[] = {
  0,
  0,
  ABISELECT(736,448),
  ABISELECT(736,448),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn2424_N7S7561C9D1Ev,_ZThn1440_N7S7561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev)();
extern void ABISELECT(_ZThn2424_N7S7561C9D0Ev,_ZThn1440_N7S7561C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7561C8__A1__7S7561C9__8S7561C11[] = {
  ABISELECT(-2424,-1440),
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev),
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C8__A2__8S7561C11[] = {
  ABISELECT(-3400,-2028),
  ABISELECT(-4920,-2912),
  ABISELECT(-3488,-2068),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C8__A2__8S7561C11[] = {
  ABISELECT(88,40),
  ABISELECT(-1432,-844),
  ABISELECT(3488,2068),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
static  VTT_ENTRY vtt_S7561C11[] = {
  {&(_ZTV8S7561C11[8]),  8,68},
  {&(_tg__ZTV7S7561C8__A__8S7561C11[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C8__A__8S7561C11[4]),  4,4},
  {&(_tg__ZTV8S7561C12__8S7561C11[5]),  5,7},
  {&(_tg__ZTV8S7561C138S7561C12__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C138S7561C12__A1__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C12__A2__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C3__8S7561C12__8S7561C11[5]),  5,9},
  {&(_tg__ZTV7S7561C6__A1__8S7561C12__8S7561C11[4]),  4,4},
  {&(_tg__ZTV8S7561C13__A1__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C13__A3__8S7561C11[4]),  4,4},
  {&(_ZTV8S7561C11[30]),  30,68},
  {&(_ZTV8S7561C11[16]),  16,68},
  {&(_ZTV8S7561C11[35]),  35,68},
  {&(_ZTV8S7561C11[22]),  22,68},
  {&(_ZTV8S7561C11[48]),  48,68},
  {&(_ZTV8S7561C11[57]),  57,68},
  {&(_ZTV8S7561C11[66]),  66,68},
  {&(_ZTV8S7561C11[26]),  26,68},
  {&(_tg__ZTV7S7561C6__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C9__8S7561C11[7]),  7,9},
  {&(_tg__ZTV7S7561C87S7561C9__A1__8S7561C11[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C87S7561C9__A1__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C27S7561C9__8S7561C11[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C27S7561C9__8S7561C11[5]),  5,9},
  {&(_tg__ZTV7S7561C6__7S7561C27S7561C9__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C8__7S7561C27S7561C9__8S7561C11[6]),  6,8},
  {&(_tg__ZTV7S7561C6__7S7561C9__8S7561C11[4]),  4,4},
  {&(_tg__ZTV7S7561C2__7S7561C9__8S7561C11[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C9__8S7561C11[5]),  5,9},
  {&(_tg__ZTV7S7561C8__A1__7S7561C9__8S7561C11[6]),  6,8},
  {&(_tg__ZTV7S7561C8__A2__8S7561C11[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C8__A2__8S7561C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7561C11[];
extern  VTBL_ENTRY _ZTV8S7561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C11[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2424_N7S7561C9D0Ev,_ZThn1440_N7S7561C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2424_N7S7561C9D1Ev,_ZThn1440_N7S7561C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2408_N7S7561C2D0Ev,_ZThn1428_N7S7561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2408_N7S7561C2D1Ev,_ZThn1428_N7S7561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N8S7561C12D0Ev,_ZThn1012_N8S7561C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1744_N8S7561C12D1Ev,_ZThn1012_N8S7561C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7561C11D0Ev,_ZTv0_n24_N8S7561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4920_N8S7561C11D0Ev,_ZThn2912_N8S7561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7561C11D1Ev,_ZTv0_n24_N8S7561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4920_N8S7561C11D1Ev,_ZThn2912_N8S7561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7561C11D0Ev,_ZTv0_n32_N8S7561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2496_N8S7561C11D0Ev,_ZThn1472_N8S7561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7561C11D1Ev,_ZTv0_n32_N8S7561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2496_N8S7561C11D1Ev,_ZThn1472_N8S7561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C11D0Ev,_ZTv0_n12_N8S7561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1760_N8S7561C11D0Ev,_ZThn1024_N8S7561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C11D1Ev,_ZTv0_n12_N8S7561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1760_N8S7561C11D1Ev,_ZThn1024_N8S7561C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7561C11 = {  "S7561C11", // class name
  bases_S7561C11, 19,
  &(vtc_S7561C11[0]), // expected_vtbl_contents
  &(vtt_S7561C11[0]), // expected_vtt_contents
  ABISELECT(4944,2924), // object size
  NSPAIRA(_ZTI8S7561C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7561C11),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7561C11),33, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7561C15  : S7561C6 {
  long double s7561c15f0[8];
  int s7561c15f1;
  short s7561c15f2;
  int s7561c15f3;
  short s7561c15f4;
  void *s7561c15f5;
  int s7561c15f6;
  int s7561c15f7;
  short s7561c15f8;
  int s7561c15f9[5];
  void *s7561c15f10;
  ~S7561C15(); // tgen
  S7561C15(); // tgen
};
//SIG(-1 S7561C15) C1{ BC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} FD[8] Fi Fs Fi Fs Fp Fi[2] Fs Fi[5] Fp}


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

static void Test_S7561C15()
{
  extern Class_Descriptor cd_S7561C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,84)];
    init_test(&cd_S7561C15, buf);
    S7561C15 *dp, &lv = *(dp=new (buf) S7561C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,332), "sizeof(S7561C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C15)");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*), 0, "S7561C15");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(272,192), "S7561C15");
    check_base_class_offset(lv, (S7561C6*), 0, "S7561C15");
    check_field_offset(lv, s7561c15f0, ABISELECT(80,40), "S7561C15.s7561c15f0");
    check_field_offset(lv, s7561c15f1, ABISELECT(208,136), "S7561C15.s7561c15f1");
    check_field_offset(lv, s7561c15f2, ABISELECT(212,140), "S7561C15.s7561c15f2");
    check_field_offset(lv, s7561c15f3, ABISELECT(216,144), "S7561C15.s7561c15f3");
    check_field_offset(lv, s7561c15f4, ABISELECT(220,148), "S7561C15.s7561c15f4");
    check_field_offset(lv, s7561c15f5, ABISELECT(224,152), "S7561C15.s7561c15f5");
    check_field_offset(lv, s7561c15f6, ABISELECT(232,156), "S7561C15.s7561c15f6");
    check_field_offset(lv, s7561c15f7, ABISELECT(236,160), "S7561C15.s7561c15f7");
    check_field_offset(lv, s7561c15f8, ABISELECT(240,164), "S7561C15.s7561c15f8");
    check_field_offset(lv, s7561c15f9, ABISELECT(244,168), "S7561C15.s7561c15f9");
    check_field_offset(lv, s7561c15f10, ABISELECT(264,188), "S7561C15.s7561c15f10");
    test_class_info(&lv, &cd_S7561C15);
    dp->~S7561C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C15(Test_S7561C15, "S7561C15", ABISELECT(512,332));

#else // __cplusplus

extern void _ZN8S7561C15C1Ev();
extern void _ZN8S7561C15D1Ev();
Name_Map name_map_S7561C15[] = {
  NSPAIR(_ZN8S7561C15C1Ev),
  NSPAIR(_ZN8S7561C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
static Base_Class bases_S7561C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(272,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
    2, //immediately_derived
  0, 1},
  {&cd_S7561C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7561C15[];
static  VTBL_ENTRY vtc_S7561C15[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C15[0]),
};
extern VTBL_ENTRY _ZTV8S7561C15[];
static  VTBL_ENTRY _tg__ZTV7S7561C6__8S7561C15[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTT_ENTRY vtt_S7561C15[] = {
  {&(_ZTV8S7561C15[4]),  4,4},
  {&(_tg__ZTV7S7561C6__8S7561C15[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7561C15[];
extern  VTBL_ENTRY _ZTV8S7561C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C15[];
Class_Descriptor cd_S7561C15 = {  "S7561C15", // class name
  bases_S7561C15, 3,
  &(vtc_S7561C15[0]), // expected_vtbl_contents
  &(vtt_S7561C15[0]), // expected_vtt_contents
  ABISELECT(512,332), // object size
  NSPAIRA(_ZTI8S7561C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7561C15),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7561C15),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  S7561C1  : S7561C2 , S7561C9 , virtual S7561C11 , virtual S7561C15 , S7561C12 {
  ::S7561C11 s7561c1f0;
  void *s7561c1f1;
  long double s7561c1f2;
  long double s7561c1f3;
  ::S3465C9_nt s7561c1f4;
  int s7561c1f5;
  ::S22028C16 s7561c1f6;
  int s7561c1f7;
  long s7561c1f8;
  int s7561c1f9[6];
  short s7561c1f10;
  char s7561c1f11:8;
  int s7561c1f12;
  virtual void  v1(); // _ZN7S7561C12v1Ev
  ~S7561C1(); // tgen
  S7561C1(); // tgen
};
//SIG(1 S7561C1) C1{ BC2{ VBC3{ vd v2 v3 Fp FC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC4 Fi[3] Fp[6] Fs FU5{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC6{ VBC7{ m} VBC4 Fp[9]} VBC8{ VBC6 vd Fi:21 Fi} BC4 v4} BC9{ VBC7 VBC6 BC8 BC2 Fi Fi Fi Fs Fi FC10{ VBC4 VBC11{ VBC7 VBC4 Fp[9]} BC12{ VBC13{ vd v6 v7 Fp FC4 FC4 Fi[3] Fp[6] Fs FU5} VBC11 VBC14{ VBC11 vd Fi:21 Fi} BC4 v8} BC14 BC13 vd Fi} FL Fp Fi} VBC15{ BC8 BC16{ VBC3 BC17{ BC4 BC6 Fi Fp Fi Fs Fi:1 FC7 FC18{} Fi} BC7 BC6 FC6 Fp FD Fp FU5 Fp Fs:4 Fc:0 Fi Fs Fi} VBC9 BC17 vd v5 Fi Fs Fp Fi Fp Fi FD FL} VBC19{ BC6 FD[8] Fi Fs Fi Fs Fp Fi Fi Fs Fi[5] Fp} BC16 v1 FC15 Fp FD FD FC18 Fi FC7 Fi Fl Fi[6] Fs Fc:8 Fi}


void  S7561C1 ::v1(){vfunc_called(this, "_ZN7S7561C12v1Ev");}
S7561C1 ::~S7561C1(){ note_dtor("S7561C1", this);} // tgen
S7561C1 ::S7561C1(){ note_ctor("S7561C1", this);} // tgen

static void Test_S7561C1()
{
  extern Class_Descriptor cd_S7561C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(873,2073)];
    init_test(&cd_S7561C1, buf);
    S7561C1 *dp, &lv = *(dp=new (buf) S7561C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13952,8288), "sizeof(S7561C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7561C1)");
    /*is_ambiguous_... S7561C1::S7561C2 */ AMB_check_base_class_offset(lv, (S7561C3*)(S7561C2*), ABISELECT(8736,5172), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C3*)(S7561C2*)(S7561C9*), ABISELECT(8736,5172), "S7561C1");
    check_base_class_offset(lv, (S7561C3*)(S7561C12*)(S7561C11*), ABISELECT(8736,5172), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C3*)(S7561C2*)(S7561C9*), ABISELECT(8736,5172), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S7561C3*)(S7561C12*), ABISELECT(8736,5172), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C6 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*), 0, "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C9*), 0, "S7561C1");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C13*)(S7561C12*)(S7561C11*), 0, "S7561C1");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C12*)(S7561C11*), 0, "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C9*), 0, "S7561C1");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C13*)(S7561C11*), 0, "S7561C1");
    check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C15*), 0, "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C13*)(S7561C12*), 0, "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C6*)(S7561C12*), 0, "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C6 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*), ABISELECT(9552,5660), "S7561C1");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C13*)(S7561C12*)(S7561C11*), ABISELECT(9552,5660), "S7561C1");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C12*)(S7561C11*), ABISELECT(9552,5660), "S7561C1");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C13*)(S7561C11*), ABISELECT(9552,5660), "S7561C1");
    check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C15*), ABISELECT(9552,5660), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C13*)(S7561C12*), ABISELECT(9552,5660), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C6*)(S7561C12*), ABISELECT(9552,5660), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C2 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C2*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C9*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*)(S7561C9*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C2*)(S7561C9*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C11::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*)(S7561C11*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C9*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C8*)(S7561C9*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C2*)(S7561C9*), ABISELECT(9472,5620), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C2 */ AMB_check_base_class_offset(lv, (S7561C8*)(S7561C2*), ABISELECT(9792,5800), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C8*)(S7561C2*)(S7561C9*), ABISELECT(9792,5800), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C8*)(S7561C2*)(S7561C9*), ABISELECT(9792,5800), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C2 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C2*), ABISELECT(16,4), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C2 */ AMB_check_base_class_offset(lv, (S7561C2*), 0, "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C8*)(S7561C9*), ABISELECT(256,144), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C2*)(S7561C9*), ABISELECT(288,160), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C2*)(S7561C9*), ABISELECT(272,156), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C9*), ABISELECT(256,144), "S7561C1");
    /*is_ambiguous_... S7561C11::S7561C8 */ AMB_check_base_class_offset(lv, (S7561C8*)(S7561C11*), ABISELECT(9808,5812), "S7561C1");
    /*is_ambiguous_... S7561C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C13*)(S7561C12*)(S7561C11*), ABISELECT(9904,5864), "S7561C1");
    check_base_class_offset(lv, (S7561C6*)(S7561C13*)(S7561C12*)(S7561C11*), ABISELECT(9824,5824), "S7561C1");
    check_base_class_offset(lv, (S7561C13*)(S7561C12*)(S7561C11*), ABISELECT(9824,5824), "S7561C1");
    /*is_ambiguous_... S7561C12::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C12*)(S7561C11*), ABISELECT(9824,5824), "S7561C1");
    /*is_ambiguous_... S7561C12::S7561C6 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C12*)(S7561C11*), ABISELECT(10176,6028), "S7561C1");
    check_base_class_offset(lv, (S7561C12*)(S7561C11*), ABISELECT(9824,5824), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C8*)(S7561C9*), ABISELECT(11248,6656), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C2*)(S7561C9*), ABISELECT(11280,6672), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C9 */ AMB_check_base_class_offset(lv, (S7561C2*)(S7561C9*), ABISELECT(11264,6668), "S7561C1");
    check_base_class_offset(lv, (S7561C9*)(S7561C11*), ABISELECT(11248,6656), "S7561C1");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C13*)(S7561C11*), ABISELECT(10896,6448), "S7561C1");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C13*)(S7561C11*), ABISELECT(10816,6408), "S7561C1");
    /*is_ambiguous_... S7561C11::S7561C13 */ AMB_check_base_class_offset(lv, (S7561C13*)(S7561C11*), ABISELECT(10816,6408), "S7561C1");
    check_base_class_offset(lv, (S7561C11*), ABISELECT(9808,5812), "S7561C1");
    check_base_class_offset(lv, (S7561C6*)(S7561C15*), ABISELECT(13680,8096), "S7561C1");
    check_base_class_offset(lv, (S7561C15*), ABISELECT(13680,8096), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7561C13*)(S7561C12*), ABISELECT(2768,1624), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C13*)(S7561C12*), ABISELECT(2688,1584), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S7561C13*)(S7561C12*), ABISELECT(2688,1584), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7561C12*), ABISELECT(2688,1584), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S7561C6*)(S7561C12*), ABISELECT(3040,1788), "S7561C1");
    /*is_ambiguous_... S7561C1::S7561C12 */ AMB_check_base_class_offset(lv, (S7561C12*), ABISELECT(2688,1584), "S7561C1");
    check_field_offset(lv, s7561c1f0, ABISELECT(3680,2168), "S7561C1.s7561c1f0");
    check_field_offset(lv, s7561c1f1, ABISELECT(8624,5092), "S7561C1.s7561c1f1");
    check_field_offset(lv, s7561c1f2, ABISELECT(8640,5096), "S7561C1.s7561c1f2");
    check_field_offset(lv, s7561c1f3, ABISELECT(8656,5108), "S7561C1.s7561c1f3");
    check_field_offset(lv, s7561c1f4, ABISELECT(8672,5120), "S7561C1.s7561c1f4");
    check_field_offset(lv, s7561c1f5, ABISELECT(8676,5124), "S7561C1.s7561c1f5");
    check_field_offset(lv, s7561c1f6, ABISELECT(8680,5128), "S7561C1.s7561c1f6");
    check_field_offset(lv, s7561c1f7, ABISELECT(8684,5132), "S7561C1.s7561c1f7");
    check_field_offset(lv, s7561c1f8, ABISELECT(8688,5136), "S7561C1.s7561c1f8");
    check_field_offset(lv, s7561c1f9, ABISELECT(8696,5140), "S7561C1.s7561c1f9");
    check_field_offset(lv, s7561c1f10, ABISELECT(8720,5164), "S7561C1.s7561c1f10");
    set_bf_and_test(lv, s7561c1f11, ABISELECT(8722,5166), 0, 8, 1, "S7561C1");
    set_bf_and_test(lv, s7561c1f11, ABISELECT(8722,5166), 0, 8, hide_sll(1LL<<7), "S7561C1");
    check_field_offset(lv, s7561c1f12, ABISELECT(8724,5168), "S7561C1.s7561c1f12");
    test_class_info(&lv, &cd_S7561C1);
    dp->~S7561C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7561C1(Test_S7561C1, "S7561C1", ABISELECT(13952,8288));

#else // __cplusplus

extern void _ZN7S7561C1C1Ev();
extern void _ZN7S7561C1D1Ev();
Name_Map name_map_S7561C1[] = {
  NSPAIR(_ZN7S7561C1C1Ev),
  NSPAIR(_ZN7S7561C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7561C3;
extern VTBL_ENTRY _ZTI7S7561C3[];
extern  VTBL_ENTRY _ZTV7S7561C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C2;
extern VTBL_ENTRY _ZTI7S7561C2[];
extern  VTBL_ENTRY _ZTV7S7561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C2[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C2;
extern VTBL_ENTRY _ZTI7S7561C2[];
extern  VTBL_ENTRY _ZTV7S7561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C2[];
extern Class_Descriptor cd_S7561C9;
extern VTBL_ENTRY _ZTI7S7561C9[];
extern  VTBL_ENTRY _ZTV7S7561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C9[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C13;
extern VTBL_ENTRY _ZTI8S7561C13[];
extern  VTBL_ENTRY _ZTV8S7561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C13[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C12;
extern VTBL_ENTRY _ZTI8S7561C12[];
extern  VTBL_ENTRY _ZTV8S7561C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C12[];
extern Class_Descriptor cd_S7561C8;
extern VTBL_ENTRY _ZTI7S7561C8[];
extern  VTBL_ENTRY _ZTV7S7561C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C8[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C2;
extern VTBL_ENTRY _ZTI7S7561C2[];
extern  VTBL_ENTRY _ZTV7S7561C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C2[];
extern Class_Descriptor cd_S7561C9;
extern VTBL_ENTRY _ZTI7S7561C9[];
extern  VTBL_ENTRY _ZTV7S7561C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C13;
extern VTBL_ENTRY _ZTI8S7561C13[];
extern  VTBL_ENTRY _ZTV8S7561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C13[];
extern Class_Descriptor cd_S7561C11;
extern VTBL_ENTRY _ZTI8S7561C11[];
extern  VTBL_ENTRY _ZTV8S7561C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C11[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C15;
extern VTBL_ENTRY _ZTI8S7561C15[];
extern  VTBL_ENTRY _ZTV8S7561C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C15[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C13;
extern VTBL_ENTRY _ZTI8S7561C13[];
extern  VTBL_ENTRY _ZTV8S7561C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C13[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7561C6;
extern VTBL_ENTRY _ZTI7S7561C6[];
extern  VTBL_ENTRY _ZTV7S7561C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C6[];
extern Class_Descriptor cd_S7561C12;
extern VTBL_ENTRY _ZTI8S7561C12[];
extern  VTBL_ENTRY _ZTV8S7561C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7561C12[];
static Base_Class bases_S7561C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7561C3,    ABISELECT(8736,5172), //bcp->offset
    44, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(9552,5660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7561C6,    ABISELECT(9472,5620), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7561C8,    ABISELECT(9792,5800), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7561C2,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7561C8,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7561C2,    ABISELECT(272,156), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7561C9,    ABISELECT(256,144), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7561C8,    ABISELECT(9808,5812), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(9904,5864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(9824,5824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7561C13,    ABISELECT(9824,5824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(9824,5824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(10176,6028), //bcp->offset
    85, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7561C12,    ABISELECT(9824,5824), //bcp->offset
    78, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7561C8,    ABISELECT(11248,6656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(11280,6672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7561C2,    ABISELECT(11264,6668), //bcp->offset
    104, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7561C9,    ABISELECT(11248,6656), //bcp->offset
    93, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(10896,6448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(10816,6408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7561C13,    ABISELECT(10816,6408), //bcp->offset
    89, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7561C11,    ABISELECT(9808,5812), //bcp->offset
    65, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7561C6,    ABISELECT(13680,8096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7561C15,    ABISELECT(13680,8096), //bcp->offset
    114, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(2768,1624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(2688,1584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7561C13,    ABISELECT(2688,1584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(2688,1584), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7561C6,    ABISELECT(3040,1788), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7561C12,    ABISELECT(2688,1584), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7561C1[];
extern void _ZN7S7561C22v4Ev();
extern void _ZN7S7561C1D1Ev();
extern void _ZN7S7561C1D0Ev();
extern void _ZN7S7561C12v1Ev();
extern void ABISELECT(_ZThn256_N7S7561C1D1Ev,_ZThn144_N7S7561C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S7561C1D0Ev,_ZThn144_N7S7561C1D0Ev)();
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZThn272_N7S7561C1D1Ev,_ZThn156_N7S7561C1D1Ev)();
extern void ABISELECT(_ZThn272_N7S7561C1D0Ev,_ZThn156_N7S7561C1D0Ev)();
extern void ABISELECT(_ZThn2688_N7S7561C1D1Ev,_ZThn1584_N7S7561C1D1Ev)();
extern void ABISELECT(_ZThn2688_N7S7561C1D0Ev,_ZThn1584_N7S7561C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7561C1D1Ev,_ZTv0_n12_N7S7561C1D1Ev)();
extern void ABISELECT(_ZThn8736_N7S7561C1D1Ev,_ZThn5172_N7S7561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7561C1D0Ev,_ZTv0_n12_N7S7561C1D0Ev)();
extern void ABISELECT(_ZThn8736_N7S7561C1D0Ev,_ZThn5172_N7S7561C1D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7561C1D1Ev,_ZTv0_n24_N7S7561C1D1Ev)();
extern void ABISELECT(_ZThn9792_N7S7561C1D1Ev,_ZThn5800_N7S7561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C1D0Ev,_ZTv0_n24_N7S7561C1D0Ev)();
extern void ABISELECT(_ZThn9792_N7S7561C1D0Ev,_ZThn5800_N7S7561C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7561C1D1Ev,_ZTv0_n36_N7S7561C1D1Ev)();
extern void ABISELECT(_ZThn9808_N7S7561C1D1Ev,_ZThn5812_N7S7561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7561C1D0Ev,_ZTv0_n36_N7S7561C1D0Ev)();
extern void ABISELECT(_ZThn9808_N7S7561C1D0Ev,_ZThn5812_N7S7561C1D0Ev)() __attribute__((weak));
extern void _ZN8S7561C112v5Ev();
extern void ABISELECT(_ZTvn16_n72_N7S7561C1D1Ev,_ZTvn12_n36_N7S7561C1D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N7S7561C1D0Ev,_ZTvn12_n36_N7S7561C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S7561C1D1Ev,_ZTv0_n32_N7S7561C1D1Ev)();
extern void ABISELECT(_ZThn11248_N7S7561C1D1Ev,_ZThn6656_N7S7561C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7561C1D0Ev,_ZTv0_n32_N7S7561C1D0Ev)();
extern void ABISELECT(_ZThn11248_N7S7561C1D0Ev,_ZThn6656_N7S7561C1D0Ev)() __attribute__((weak));
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZTvn16_n64_N7S7561C1D1Ev,_ZTvn12_n32_N7S7561C1D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N7S7561C1D0Ev,_ZTvn12_n32_N7S7561C1D0Ev)();
static  VTBL_ENTRY vtc_S7561C1[] = {
  ABISELECT(13680,8096),
  ABISELECT(11248,6656),
  ABISELECT(9808,5812),
  ABISELECT(9792,5800),
  ABISELECT(9552,5660),
  0,
  ABISELECT(9472,5620),
  ABISELECT(8736,5172),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7561C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7561C12v1Ev,
  ABISELECT(9536,5656),
  ABISELECT(8480,5028),
  ABISELECT(9296,5516),
  ABISELECT(-256,-144),
  ABISELECT(9216,5476),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7561C1D1Ev,_ZThn144_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7561C1D0Ev,_ZThn144_N7S7561C1D0Ev),
  ABISELECT(9520,5644),
  ABISELECT(9280,5504),
  ABISELECT(-272,-156),
  ABISELECT(9200,5464),
  ABISELECT(8464,5016),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7561C1D1Ev,_ZThn156_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7561C1D0Ev,_ZThn156_N7S7561C1D0Ev),
  ABISELECT(6048,3588),
  ABISELECT(6864,4076),
  ABISELECT(-2688,-1584),
  ABISELECT(-2688,-1584),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2688_N7S7561C1D1Ev,_ZThn1584_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2688_N7S7561C1D0Ev,_ZThn1584_N7S7561C1D0Ev),
  ABISELECT(6512,3872),
  ABISELECT(-3040,-1788),
  ABISELECT(-3040,-1788),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  0,
  0,
  ABISELECT(-8736,-5172),
  ABISELECT(-8736,-5172),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C1D1Ev,_ZTv0_n12_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C1D0Ev,_ZTv0_n12_N7S7561C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(-9472,-5620),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  ABISELECT(-9792,-5800),
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  ABISELECT(-9792,-5800),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C1D1Ev,_ZTv0_n24_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C1D0Ev,_ZTv0_n24_N7S7561C1D0Ev),
  0,
  ABISELECT(-9808,-5812),
  ABISELECT(-16,-12),
  ABISELECT(1440,844),
  ABISELECT(-1072,-640),
  ABISELECT(-256,-152),
  ABISELECT(-9808,-5812),
  ABISELECT(-336,-192),
  ABISELECT(-9808,-5812),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7561C1D1Ev,_ZTv0_n36_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7561C1D0Ev,_ZTv0_n36_N7S7561C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7561C112v5Ev,
  ABISELECT(-1088,-652),
  ABISELECT(-272,-164),
  ABISELECT(-9824,-5824),
  ABISELECT(-9824,-5824),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N7S7561C1D1Ev,_ZTvn12_n36_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N7S7561C1D0Ev,_ZTvn12_n36_N7S7561C1D0Ev),
  ABISELECT(-624,-368),
  ABISELECT(-10176,-6028),
  ABISELECT(-10176,-6028),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  ABISELECT(-1264,-748),
  ABISELECT(-10816,-6408),
  ABISELECT(-10816,-6408),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  ABISELECT(16,12),
  ABISELECT(-11248,-6656),
  ABISELECT(-1456,-856),
  ABISELECT(-2512,-1484),
  ABISELECT(-1696,-996),
  ABISELECT(-11248,-6656),
  ABISELECT(-1776,-1036),
  ABISELECT(-11248,-6656),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7561C1D1Ev,_ZTv0_n32_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7561C1D0Ev,_ZTv0_n32_N7S7561C1D0Ev),
  ABISELECT(-1472,-868),
  ABISELECT(-1712,-1008),
  ABISELECT(-11264,-6668),
  ABISELECT(-1792,-1048),
  ABISELECT(-2528,-1496),
  ABISELECT(-11264,-6668),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7561C1D1Ev,_ZTvn12_n32_N7S7561C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N7S7561C1D0Ev,_ZTvn12_n32_N7S7561C1D0Ev),
  ABISELECT(-4128,-2436),
  ABISELECT(-13680,-8096),
  ABISELECT(-13680,-8096),
  (VTBL_ENTRY)&(_ZTI7S7561C1[0]),
};
extern VTBL_ENTRY _ZTV7S7561C1[];
extern void _ZN7S7561C22v4Ev();
extern void _ZN7S7561C2D1Ev();
extern void _ZN7S7561C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C2__7S7561C1[] = {
  ABISELECT(9792,5800),
  ABISELECT(9552,5660),
  0,
  ABISELECT(9472,5620),
  ABISELECT(8736,5172),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn8736_N7S7561C2D1Ev,_ZThn5172_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn8736_N7S7561C2D0Ev,_ZThn5172_N7S7561C2D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C2__7S7561C1[] = {
  0,
  0,
  ABISELECT(-8736,-5172),
  ABISELECT(-8736,-5172),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C2__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(-9472,-5620),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn9792_N7S7561C2D1Ev,_ZThn5800_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn9792_N7S7561C2D0Ev,_ZThn5800_N7S7561C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7561C8__7S7561C2__7S7561C1[] = {
  ABISELECT(-9792,-5800),
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  ABISELECT(-9792,-5800),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev),
};
extern void _ZN7S7561C9D1Ev();
extern void _ZN7S7561C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C9__A__7S7561C1[] = {
  ABISELECT(9536,5656),
  ABISELECT(8480,5028),
  ABISELECT(9296,5516),
  ABISELECT(-256,-144),
  ABISELECT(9216,5476),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C9D0Ev,
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C87S7561C9__A1__7S7561C1[] = {
  ABISELECT(9296,5516),
  ABISELECT(-256,-144),
  ABISELECT(9216,5476),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C87S7561C9__A1__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(-9216,-5476),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern void _ZN7S7561C22v4Ev();
extern void _ZN7S7561C2D1Ev();
extern void _ZN7S7561C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C27S7561C9__A1__7S7561C1[] = {
  ABISELECT(9520,5644),
  ABISELECT(9280,5504),
  ABISELECT(-272,-156),
  ABISELECT(9200,5464),
  ABISELECT(8464,5016),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn8464_N7S7561C2D1Ev,_ZThn5016_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn8464_N7S7561C2D0Ev,_ZThn5016_N7S7561C2D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C27S7561C9__A1__7S7561C1[] = {
  0,
  0,
  ABISELECT(-8464,-5016),
  ABISELECT(-8464,-5016),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C27S7561C9__A1__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(-9200,-5464),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev)();
extern void ABISELECT(_ZThn9520_N7S7561C2D1Ev,_ZThn5644_N7S7561C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev)();
extern void ABISELECT(_ZThn9520_N7S7561C2D0Ev,_ZThn5644_N7S7561C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7561C8__7S7561C27S7561C9__A1__7S7561C1[] = {
  ABISELECT(-9520,-5644),
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  ABISELECT(-9520,-5644),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C9__A__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(-9216,-5476),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
};
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7561C2__7S7561C9__A__7S7561C1[] = {
  ABISELECT(9520,5644),
  ABISELECT(9280,5504),
  ABISELECT(-272,-156),
  ABISELECT(9200,5464),
  ABISELECT(8464,5016),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn8480_N7S7561C9D1Ev,_ZThn5028_N7S7561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev)();
extern void ABISELECT(_ZThn8480_N7S7561C9D0Ev,_ZThn5028_N7S7561C9D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C9__A__7S7561C1[] = {
  0,
  0,
  ABISELECT(-8480,-5028),
  ABISELECT(-8480,-5028),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn9536_N7S7561C9D1Ev,_ZThn5656_N7S7561C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev)();
extern void ABISELECT(_ZThn9536_N7S7561C9D0Ev,_ZThn5656_N7S7561C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7561C8__A1__7S7561C9__A__7S7561C1[] = {
  ABISELECT(-9536,-5656),
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  ABISELECT(-9536,-5656),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev),
};
extern void _ZN8S7561C12D1Ev();
extern void _ZN8S7561C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7561C12__A1__7S7561C1[] = {
  ABISELECT(6048,3588),
  ABISELECT(6864,4076),
  ABISELECT(-2688,-1584),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&_ZN8S7561C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7561C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7561C138S7561C12__A2__7S7561C1[] = {
  ABISELECT(6864,4076),
  ABISELECT(-2688,-1584),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C138S7561C12__A5__7S7561C1[] = {
  ABISELECT(6864,4076),
  ABISELECT(-2688,-1584),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C12__A6__7S7561C1[] = {
  ABISELECT(6512,3872),
  ABISELECT(-3040,-1788),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev)();
extern void ABISELECT(_ZThn6048_N8S7561C12D1Ev,_ZThn3588_N8S7561C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev)();
extern void ABISELECT(_ZThn6048_N8S7561C12D0Ev,_ZThn3588_N8S7561C12D0Ev)() __attribute__((weak));
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__8S7561C12__A1__7S7561C1[] = {
  0,
  0,
  ABISELECT(-6048,-3588),
  ABISELECT(-6048,-3588),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__A1__8S7561C12__A1__7S7561C1[] = {
  ABISELECT(6512,3872),
  ABISELECT(-3040,-1788),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C8__7S7561C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C8__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern void _ZN8S7561C11D1Ev();
extern void _ZN8S7561C11D0Ev();
extern void _ZN8S7561C112v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7561C11__7S7561C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(1440,844),
  ABISELECT(-1072,-640),
  ABISELECT(-256,-152),
  ABISELECT(-9808,-5812),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&_ZN8S7561C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7561C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7561C112v5Ev,
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C88S7561C11__A2__7S7561C1[] = {
  ABISELECT(-256,-152),
  ABISELECT(-9808,-5812),
  ABISELECT(-336,-192),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C88S7561C11__A2__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(336,192),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern void _ZN8S7561C12D1Ev();
extern void _ZN8S7561C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7561C128S7561C11__7S7561C1[] = {
  ABISELECT(-1088,-652),
  ABISELECT(-272,-164),
  ABISELECT(-9824,-5824),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&_ZN8S7561C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7561C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7561C138S7561C128S7561C11__7S7561C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-9824,-5824),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C138S7561C128S7561C11__A1__7S7561C1[] = {
  ABISELECT(-272,-164),
  ABISELECT(-9824,-5824),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C128S7561C11__A2__7S7561C1[] = {
  ABISELECT(-624,-368),
  ABISELECT(-10176,-6028),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev)();
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__8S7561C128S7561C11__7S7561C1[] = {
  0,
  0,
  ABISELECT(1088,652),
  ABISELECT(1088,652),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__A1__8S7561C128S7561C11__7S7561C1[] = {
  ABISELECT(-624,-368),
  ABISELECT(-10176,-6028),
  ABISELECT(-352,-204),
  (VTBL_ENTRY)&(_ZTI8S7561C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7561C138S7561C11__A1__7S7561C1[] = {
  ABISELECT(-1264,-748),
  ABISELECT(-10816,-6408),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C138S7561C11__A3__7S7561C1[] = {
  ABISELECT(-1264,-748),
  ABISELECT(-10816,-6408),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__8S7561C11__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(336,192),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
};
extern void ABISELECT(_ZThn16_N8S7561C11D1Ev,_ZThn12_N8S7561C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7561C11D0Ev,_ZThn12_N8S7561C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7561C12__8S7561C11__7S7561C1[] = {
  ABISELECT(-1088,-652),
  ABISELECT(-272,-164),
  ABISELECT(-9824,-5824),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7561C11D1Ev,_ZThn12_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7561C11D0Ev,_ZThn12_N8S7561C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7561C11D1Ev,_ZTv0_n12_N8S7561C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7561C11D0Ev,_ZTv0_n12_N8S7561C11D0Ev)();
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__8S7561C11__7S7561C1[] = {
  0,
  0,
  ABISELECT(1072,640),
  ABISELECT(1072,640),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C11D1Ev,_ZTv0_n12_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7561C11D0Ev,_ZTv0_n12_N8S7561C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C12__A2__8S7561C11__7S7561C1[] = {
  ABISELECT(-624,-368),
  ABISELECT(-10176,-6028),
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
};
extern void ABISELECT(_ZTv0_n64_N8S7561C11D1Ev,_ZTv0_n32_N8S7561C11D1Ev)();
extern void ABISELECT(_ZThn1440_N8S7561C11D1Ev,_ZThn844_N8S7561C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7561C11D0Ev,_ZTv0_n32_N8S7561C11D0Ev)();
extern void ABISELECT(_ZThn1440_N8S7561C11D0Ev,_ZThn844_N8S7561C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7561C9__8S7561C11__7S7561C1[] = {
  ABISELECT(16,12),
  ABISELECT(-1440,-844),
  ABISELECT(-1456,-856),
  ABISELECT(-2512,-1484),
  ABISELECT(-1696,-996),
  ABISELECT(-11248,-6656),
  ABISELECT(-1776,-1036),
  ABISELECT(-1440,-844),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7561C11D1Ev,_ZTv0_n32_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7561C11D0Ev,_ZTv0_n32_N8S7561C11D0Ev),
};
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZTvn16_n64_N8S7561C11D1Ev,_ZTvn12_n32_N8S7561C11D1Ev)();
extern void ABISELECT(_ZTvn16_n64_N8S7561C11D0Ev,_ZTvn12_n32_N8S7561C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7561C27S7561C9__8S7561C11__7S7561C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1712,-1008),
  ABISELECT(-11264,-6668),
  ABISELECT(-1792,-1048),
  ABISELECT(-2528,-1496),
  ABISELECT(-1456,-856),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S7561C11D1Ev,_ZTvn12_n32_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n64_N8S7561C11D0Ev,_ZTvn12_n32_N8S7561C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7561C11D1Ev,_ZTv0_n24_N8S7561C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S7561C11D0Ev,_ZTv0_n24_N8S7561C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7561C8__A2__8S7561C11__7S7561C1[] = {
  ABISELECT(16,12),
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7561C11D1Ev,_ZTv0_n24_N8S7561C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7561C11D0Ev,_ZTv0_n24_N8S7561C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7561C13__A1__8S7561C11__7S7561C1[] = {
  ABISELECT(-1264,-748),
  ABISELECT(-10816,-6408),
  ABISELECT(-1008,-596),
  (VTBL_ENTRY)&(_ZTI8S7561C11[0]),
};
extern void _ZN7S7561C9D1Ev();
extern void _ZN7S7561C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C9__A1__7S7561C1[] = {
  ABISELECT(-1456,-856),
  ABISELECT(-2512,-1484),
  ABISELECT(-1696,-996),
  ABISELECT(-11248,-6656),
  ABISELECT(-1776,-1036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C9D0Ev,
};
extern void _ZN7S7561C8D1Ev();
extern void _ZN7S7561C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C87S7561C9__A3__7S7561C1[] = {
  ABISELECT(-1696,-996),
  ABISELECT(-11248,-6656),
  ABISELECT(-1776,-1036),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
  (VTBL_ENTRY)&_ZN7S7561C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C87S7561C9__A3__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(1776,1036),
  (VTBL_ENTRY)&(_ZTI7S7561C8[0]),
};
extern void _ZN7S7561C22v4Ev();
extern void _ZN7S7561C2D1Ev();
extern void _ZN7S7561C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C27S7561C9__A2__7S7561C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1712,-1008),
  ABISELECT(-11264,-6668),
  ABISELECT(-1792,-1048),
  ABISELECT(-2528,-1496),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7561C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev)();
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C27S7561C9__A2__7S7561C1[] = {
  0,
  0,
  ABISELECT(2528,1496),
  ABISELECT(2528,1496),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C27S7561C9__A2__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(1792,1048),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7561C8__7S7561C27S7561C9__A2__7S7561C1[] = {
  ABISELECT(1472,868),
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  ABISELECT(1472,868),
  (VTBL_ENTRY)&(_ZTI7S7561C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7561C6__7S7561C9__A1__7S7561C1[] = {
  ABISELECT(80,40),
  ABISELECT(-9472,-5620),
  ABISELECT(1776,1036),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
};
extern void _ZN7S7561C22v4Ev();
extern void ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7561C2__7S7561C9__A1__7S7561C1[] = {
  ABISELECT(-1472,-868),
  ABISELECT(-1712,-1008),
  ABISELECT(-11264,-6668),
  ABISELECT(-1792,-1048),
  ABISELECT(-2528,-1496),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&_ZN7S7561C22v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D1Ev,_ZThn12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7561C9D0Ev,_ZThn12_N7S7561C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev)();
extern void _ZN7S7561C32v2Ev();
extern void _ZN7S7561C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7561C3__7S7561C9__A1__7S7561C1[] = {
  0,
  0,
  ABISELECT(2512,1484),
  ABISELECT(2512,1484),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev),
  (VTBL_ENTRY)&_ZN7S7561C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7561C32v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7561C8__A1__7S7561C9__A1__7S7561C1[] = {
  ABISELECT(1456,856),
  ABISELECT(-240,-140),
  ABISELECT(-9792,-5800),
  ABISELECT(-320,-180),
  ABISELECT(1456,856),
  (VTBL_ENTRY)&(_ZTI7S7561C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7561C15__7S7561C1[] = {
  ABISELECT(-4128,-2436),
  ABISELECT(-13680,-8096),
  0,
  (VTBL_ENTRY)&(_ZTI8S7561C15[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7561C68S7561C15__A4__7S7561C1[] = {
  ABISELECT(-4128,-2436),
  ABISELECT(-13680,-8096),
  0,
  (VTBL_ENTRY)&(_ZTI7S7561C6[0]),
};
static  VTT_ENTRY vtt_S7561C1[] = {
  {&(_ZTV7S7561C1[10]),  10,118},
  {&(_tg__ZTV7S7561C2__7S7561C1[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C2__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C6__7S7561C2__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C8__7S7561C2__7S7561C1[6]),  6,8},
  {&(_tg__ZTV7S7561C9__A__7S7561C1[7]),  7,9},
  {&(_tg__ZTV7S7561C87S7561C9__A1__7S7561C1[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C87S7561C9__A1__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C27S7561C9__A1__7S7561C1[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C27S7561C9__A1__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C6__7S7561C27S7561C9__A1__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C8__7S7561C27S7561C9__A1__7S7561C1[6]),  6,8},
  {&(_tg__ZTV7S7561C6__7S7561C9__A__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C2__7S7561C9__A__7S7561C1[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C9__A__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C8__A1__7S7561C9__A__7S7561C1[6]),  6,8},
  {&(_tg__ZTV8S7561C12__A1__7S7561C1[5]),  5,7},
  {&(_tg__ZTV8S7561C138S7561C12__A2__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C138S7561C12__A5__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C12__A6__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C3__8S7561C12__A1__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C6__A1__8S7561C12__A1__7S7561C1[4]),  4,4},
  {&(_ZTV7S7561C1[49]),  49,118},
  {&(_ZTV7S7561C1[57]),  57,118},
  {&(_ZTV7S7561C1[63]),  63,118},
  {&(_ZTV7S7561C1[21]),  21,118},
  {&(_ZTV7S7561C1[30]),  30,118},
  {&(_ZTV7S7561C1[75]),  75,118},
  {&(_ZTV7S7561C1[83]),  83,118},
  {&(_ZTV7S7561C1[89]),  89,118},
  {&(_ZTV7S7561C1[102]),  102,118},
  {&(_ZTV7S7561C1[111]),  111,118},
  {&(_ZTV7S7561C1[93]),  93,118},
  {&(_ZTV7S7561C1[118]),  118,118},
  {&(_ZTV7S7561C1[38]),  38,118},
  {&(_ZTV7S7561C1[44]),  44,118},
  {&(_tg__ZTV7S7561C6__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C8__7S7561C1[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C8__7S7561C1[4]),  4,4},
  {&(_tg__ZTV8S7561C11__7S7561C1[8]),  8,11},
  {&(_tg__ZTV7S7561C88S7561C11__A2__7S7561C1[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C88S7561C11__A2__7S7561C1[4]),  4,4},
  {&(_tg__ZTV8S7561C128S7561C11__7S7561C1[5]),  5,7},
  {&(_tg__ZTV8S7561C138S7561C128S7561C11__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C138S7561C128S7561C11__A1__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C128S7561C11__A2__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C3__8S7561C128S7561C11__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C6__A1__8S7561C128S7561C11__7S7561C1[4]),  4,4},
  {&(_tg__ZTV8S7561C138S7561C11__A1__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C138S7561C11__A3__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C6__8S7561C11__7S7561C1[4]),  4,4},
  {&(_tg__ZTV8S7561C12__8S7561C11__7S7561C1[5]),  5,7},
  {&(_tg__ZTV7S7561C3__8S7561C11__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C68S7561C12__A2__8S7561C11__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C9__8S7561C11__7S7561C1[9]),  9,11},
  {&(_tg__ZTV7S7561C27S7561C9__8S7561C11__7S7561C1[7]),  7,10},
  {&(_tg__ZTV7S7561C8__A2__8S7561C11__7S7561C1[6]),  6,8},
  {&(_tg__ZTV8S7561C13__A1__8S7561C11__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C9__A1__7S7561C1[7]),  7,9},
  {&(_tg__ZTV7S7561C87S7561C9__A3__7S7561C1[5]),  5,7},
  {&(_tg__ZTV7S7561C6__7S7561C87S7561C9__A3__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C27S7561C9__A2__7S7561C1[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C27S7561C9__A2__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C6__7S7561C27S7561C9__A2__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C8__7S7561C27S7561C9__A2__7S7561C1[6]),  6,8},
  {&(_tg__ZTV7S7561C6__7S7561C9__A1__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C2__7S7561C9__A1__7S7561C1[7]),  7,10},
  {&(_tg__ZTV7S7561C3__7S7561C9__A1__7S7561C1[5]),  5,9},
  {&(_tg__ZTV7S7561C8__A1__7S7561C9__A1__7S7561C1[6]),  6,8},
  {&(_tg__ZTV8S7561C15__7S7561C1[4]),  4,4},
  {&(_tg__ZTV7S7561C68S7561C15__A4__7S7561C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7561C1[];
extern  VTBL_ENTRY _ZTV7S7561C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7561C1[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7561C11D0Ev,_ZTv0_n32_N8S7561C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S7561C11D0Ev,_ZThn844_N8S7561C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7561C11D1Ev,_ZTv0_n32_N8S7561C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1440_N8S7561C11D1Ev,_ZThn844_N8S7561C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C12D0Ev,_ZTv0_n12_N8S7561C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6048_N8S7561C12D0Ev,_ZThn3588_N8S7561C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7561C12D1Ev,_ZTv0_n12_N8S7561C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6048_N8S7561C12D1Ev,_ZThn3588_N8S7561C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C9D0Ev,_ZTv0_n24_N7S7561C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9536_N7S7561C9D0Ev,_ZThn5656_N7S7561C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C9D1Ev,_ZTv0_n24_N7S7561C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9536_N7S7561C9D1Ev,_ZThn5656_N7S7561C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C9D0Ev,_ZTv0_n12_N7S7561C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8480_N7S7561C9D0Ev,_ZThn5028_N7S7561C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C9D1Ev,_ZTv0_n12_N7S7561C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8480_N7S7561C9D1Ev,_ZThn5028_N7S7561C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D0Ev,_ZTv0_n24_N7S7561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9520_N7S7561C2D0Ev,_ZThn5644_N7S7561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9792_N7S7561C2D0Ev,_ZThn5800_N7S7561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C2D1Ev,_ZTv0_n24_N7S7561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9520_N7S7561C2D1Ev,_ZThn5644_N7S7561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9792_N7S7561C2D1Ev,_ZThn5800_N7S7561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C2D0Ev,_ZTv0_n12_N7S7561C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N7S7561C2D0Ev,_ZThn5016_N7S7561C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8736_N7S7561C2D0Ev,_ZThn5172_N7S7561C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C2D1Ev,_ZTv0_n12_N7S7561C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8464_N7S7561C2D1Ev,_ZThn5016_N7S7561C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8736_N7S7561C2D1Ev,_ZThn5172_N7S7561C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7561C1D0Ev,_ZTv0_n32_N7S7561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N7S7561C1D0Ev,_ZThn6656_N7S7561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7561C1D1Ev,_ZTv0_n32_N7S7561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N7S7561C1D1Ev,_ZThn6656_N7S7561C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7561C1D0Ev,_ZTv0_n36_N7S7561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9808_N7S7561C1D0Ev,_ZThn5812_N7S7561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7561C1D1Ev,_ZTv0_n36_N7S7561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9808_N7S7561C1D1Ev,_ZThn5812_N7S7561C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C1D0Ev,_ZTv0_n24_N7S7561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9792_N7S7561C1D0Ev,_ZThn5800_N7S7561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7561C1D1Ev,_ZTv0_n24_N7S7561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9792_N7S7561C1D1Ev,_ZThn5800_N7S7561C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C1D0Ev,_ZTv0_n12_N7S7561C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8736_N7S7561C1D0Ev,_ZThn5172_N7S7561C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7561C1D1Ev,_ZTv0_n12_N7S7561C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8736_N7S7561C1D1Ev,_ZThn5172_N7S7561C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7561C1 = {  "S7561C1", // class name
  bases_S7561C1, 34,
  &(vtc_S7561C1[0]), // expected_vtbl_contents
  &(vtt_S7561C1[0]), // expected_vtt_contents
  ABISELECT(13952,8288), // object size
  NSPAIRA(_ZTI7S7561C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7561C1),118, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7561C1),71, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C6  {
  void *s7740c6f0;
  ::S19968C3 s7740c6f1;
  ::S19968C3 s7740c6f2;
  int s7740c6f3[3];
  void *s7740c6f4[6];
  short s7740c6f5;
  ::S19968C4 s7740c6f6;
  virtual  ~S7740C6(); // _ZN7S7740C6D1Ev
  virtual void  v2(); // _ZN7S7740C62v2Ev
  virtual void  v3(); // _ZN7S7740C62v3Ev
  S7740C6(); // tgen
};
//SIG(-1 S7740C6) C1{ vd v1 v2 Fp FC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC2 Fi[3] Fp[6] Fs FU3{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}}


 S7740C6 ::~S7740C6(){ note_dtor("S7740C6", this);}
void  S7740C6 ::v2(){vfunc_called(this, "_ZN7S7740C62v2Ev");}
void  S7740C6 ::v3(){vfunc_called(this, "_ZN7S7740C62v3Ev");}
S7740C6 ::S7740C6(){ note_ctor("S7740C6", this);} // tgen

static void Test_S7740C6()
{
  extern Class_Descriptor cd_S7740C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,113)];
    init_test(&cd_S7740C6, buf);
    S7740C6 *dp, &lv = *(dp=new (buf) S7740C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,448), "sizeof(S7740C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C6)");
    check_field_offset(lv, s7740c6f0, ABISELECT(8,4), "S7740C6.s7740c6f0");
    check_field_offset(lv, s7740c6f1, ABISELECT(16,8), "S7740C6.s7740c6f1");
    check_field_offset(lv, s7740c6f2, ABISELECT(256,148), "S7740C6.s7740c6f2");
    check_field_offset(lv, s7740c6f3, ABISELECT(496,288), "S7740C6.s7740c6f3");
    check_field_offset(lv, s7740c6f4, ABISELECT(512,300), "S7740C6.s7740c6f4");
    check_field_offset(lv, s7740c6f5, ABISELECT(560,324), "S7740C6.s7740c6f5");
    check_field_offset(lv, s7740c6f6, ABISELECT(576,328), "S7740C6.s7740c6f6");
    test_class_info(&lv, &cd_S7740C6);
    dp->~S7740C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C6(Test_S7740C6, "S7740C6", ABISELECT(736,448));

#else // __cplusplus

extern void _ZN7S7740C6C1Ev();
extern void _ZN7S7740C6D1Ev();
Name_Map name_map_S7740C6[] = {
  NSPAIR(_ZN7S7740C6C1Ev),
  NSPAIR(_ZN7S7740C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7740C6[];
extern void _ZN7S7740C6D1Ev();
extern void _ZN7S7740C6D0Ev();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY vtc_S7740C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C6[0]),
  (VTBL_ENTRY)&_ZN7S7740C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
Class_Descriptor cd_S7740C6 = {  "S7740C6", // class name
  0,0,//no base classes
  &(vtc_S7740C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,448), // object size
  NSPAIRA(_ZTI7S7740C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7740C6),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C8  : virtual S22028C16 , virtual S19968C3 {
  void *s7740c8f0[9];
  ~S7740C8(); // tgen
  S7740C8(); // tgen
};
//SIG(-1 S7740C8) C1{ VBC2{ m} VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]}


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

static void Test_S7740C8()
{
  extern Class_Descriptor cd_S7740C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,46)];
    init_test(&cd_S7740C8, buf);
    S7740C8 *dp, &lv = *(dp=new (buf) S7740C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,180), "sizeof(S7740C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C8)");
    check_base_class_offset(lv, (S22028C16*), 0, "S7740C8");
    check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S7740C8");
    check_field_offset(lv, s7740c8f0, ABISELECT(8,4), "S7740C8.s7740c8f0");
    test_class_info(&lv, &cd_S7740C8);
    dp->~S7740C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C8(Test_S7740C8, "S7740C8", ABISELECT(320,180));

#else // __cplusplus

extern void _ZN7S7740C8C1Ev();
extern void _ZN7S7740C8D1Ev();
Name_Map name_map_S7740C8[] = {
  NSPAIR(_ZN7S7740C8C1Ev),
  NSPAIR(_ZN7S7740C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S7740C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7740C8[];
static  VTBL_ENTRY vtc_S7740C8[] = {
  ABISELECT(80,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern VTBL_ENTRY _ZTV7S7740C8[];
static  VTT_ENTRY vtt_S7740C8[] = {
  {&(_ZTV7S7740C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
Class_Descriptor cd_S7740C8 = {  "S7740C8", // class name
  bases_S7740C8, 2,
  &(vtc_S7740C8[0]), // expected_vtbl_contents
  &(vtt_S7740C8[0]), // expected_vtt_contents
  ABISELECT(320,180), // object size
  NSPAIRA(_ZTI7S7740C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7740C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7740C8),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  S7740C10  : virtual S7740C8 {
  int s7740c10f0:21;
  int s7740c10f1;
  virtual  ~S7740C10(); // _ZN8S7740C10D2Ev
  S7740C10(); // tgen
};
//SIG(-1 S7740C10) C1{ VBC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi}


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

static void Test_S7740C10()
{
  extern Class_Descriptor cd_S7740C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S7740C10, buf);
    S7740C10 *dp, &lv = *(dp=new (buf) S7740C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S7740C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C10)");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C10");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(96,52), "S7740C10");
    check_base_class_offset(lv, (S7740C8*), ABISELECT(16,12), "S7740C10");
    set_bf_and_test(lv, s7740c10f0, ABISELECT(8,4), 0, 21, 1, "S7740C10");
    set_bf_and_test(lv, s7740c10f0, ABISELECT(8,4), 0, 21, hide_sll(1LL<<20), "S7740C10");
    check_field_offset(lv, s7740c10f1, ABISELECT(12,8), "S7740C10.s7740c10f1");
    test_class_info(&lv, &cd_S7740C10);
    dp->~S7740C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C10(Test_S7740C10, "S7740C10", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S7740C10C1Ev();
extern void _ZN8S7740C10D2Ev();
Name_Map name_map_S7740C10[] = {
  NSPAIR(_ZN8S7740C10C1Ev),
  NSPAIR(_ZN8S7740C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
static Base_Class bases_S7740C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(96,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
    2, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C10[];
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY vtc_S7740C10[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern VTBL_ENTRY _ZTV8S7740C10[];
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10[] = {
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
static  VTT_ENTRY vtt_S7740C10[] = {
  {&(_ZTV8S7740C10[5]),  5,11},
  {&(_ZTV8S7740C10[11]),  11,11},
  {&(_tg__ZTV7S7740C8__8S7740C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
Class_Descriptor cd_S7740C10 = {  "S7740C10", // class name
  bases_S7740C10, 3,
  &(vtc_S7740C10[0]), // expected_vtbl_contents
  &(vtt_S7740C10[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S7740C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7740C10),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C10),3, //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  S7740C5  : virtual S7740C6 , virtual S7740C8 , virtual S7740C10 , S19968C3 {
  virtual void  v4(); // _ZN7S7740C52v4Ev
  ~S7740C5(); // tgen
  S7740C5(); // tgen
};
//SIG(-1 S7740C5) C1{ VBC2{ vd v2 v3 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ VBC5 vd Fi:21 Fi} BC3 v1}


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

static void Test_S7740C5()
{
  extern Class_Descriptor cd_S7740C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(84,197)];
    init_test(&cd_S7740C5, buf);
    S7740C5 *dp, &lv = *(dp=new (buf) S7740C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,784), "sizeof(S7740C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C5)");
    check_base_class_offset(lv, (S7740C6*), ABISELECT(256,144), "S7740C5");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C5");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(1072,632), "S7740C5");
    check_base_class_offset(lv, (S7740C8*), ABISELECT(992,592), "S7740C5");
    check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(992,592), "S7740C5");
    check_base_class_offset(lv, (S7740C10*), ABISELECT(1312,772), "S7740C5");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(16,4), "S7740C5");
    test_class_info(&lv, &cd_S7740C5);
    dp->~S7740C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C5(Test_S7740C5, "S7740C5", ABISELECT(1328,784));

#else // __cplusplus

extern void _ZN7S7740C5C1Ev();
extern void _ZN7S7740C5D1Ev();
Name_Map name_map_S7740C5[] = {
  NSPAIR(_ZN7S7740C5C1Ev),
  NSPAIR(_ZN7S7740C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S7740C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7740C6,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1072,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(992,592), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7740C10,    ABISELECT(1312,772), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7740C5[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn256_N7S7740C5D1Ev,_ZThn144_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn256_N7S7740C5D0Ev,_ZThn144_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn1312_N7S7740C5D1Ev,_ZThn772_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn1312_N7S7740C5D0Ev,_ZThn772_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C5[] = {
  ABISELECT(1312,772),
  ABISELECT(1072,632),
  0,
  ABISELECT(992,592),
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
  0,
  0,
  ABISELECT(-256,-144),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  ABISELECT(-1312,-772),
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  ABISELECT(-1312,-772),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern VTBL_ENTRY _ZTV7S7740C5[];
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C5[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__7S7740C5[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C5[] = {
  {&(_ZTV7S7740C5[7]),  7,31},
  {&(_ZTV7S7740C5[15]),  15,31},
  {&(_ZTV7S7740C5[23]),  23,31},
  {&(_ZTV7S7740C5[29]),  29,31},
  {&(_tg__ZTV7S7740C8__7S7740C5[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C5[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__7S7740C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7740C5D0Ev,_ZThn772_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7740C5D1Ev,_ZThn772_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7740C5D0Ev,_ZThn144_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S7740C5D1Ev,_ZThn144_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C5 = {  "S7740C5", // class name
  bases_S7740C5, 6,
  &(vtc_S7740C5[0]), // expected_vtbl_contents
  &(vtt_S7740C5[0]), // expected_vtt_contents
  ABISELECT(1328,784), // object size
  NSPAIRA(_ZTI7S7740C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7740C5),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7740C5),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C12  : virtual S19968C3 , virtual S7740C8 , S7740C5 , S7740C10 , S7740C6 {
  int s7740c12f0;
  virtual  ~S7740C12(); // _ZN8S7740C12D2Ev
  S7740C12(); // tgen
};
//SIG(-1 S7740C12) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ VBC4{ m} VBC2 Fp[9]} BC5{ VBC6{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC8{ VBC3 vd Fi:21 Fi} BC2 v3} BC8 BC6 vd Fi}


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

static void Test_S7740C12()
{
  extern Class_Descriptor cd_S7740C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,313)];
    init_test(&cd_S7740C12, buf);
    S7740C12 *dp, &lv = *(dp=new (buf) S7740C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1248), "sizeof(S7740C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C12)");
    /*is_ambiguous_... S7740C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S7740C12");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(1024,608), "S7740C12");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C12");
    check_base_class_offset(lv, (S7740C8*), ABISELECT(1264,748), "S7740C12");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*), ABISELECT(1264,748), "S7740C12");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(1264,748), "S7740C12");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(1264,748), "S7740C12");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*), ABISELECT(1344,788), "S7740C12");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*), ABISELECT(2080,1236), "S7740C12");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*), ABISELECT(16,4), "S7740C12");
    check_base_class_offset(lv, (S7740C5*), 0, "S7740C12");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*), ABISELECT(256,144), "S7740C12");
    /*is_ambiguous_... S7740C12::S7740C6 */ AMB_check_base_class_offset(lv, (S7740C6*), ABISELECT(272,156), "S7740C12");
    check_field_offset(lv, s7740c12f0, ABISELECT(1008,604), "S7740C12.s7740c12f0");
    test_class_info(&lv, &cd_S7740C12);
    dp->~S7740C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C12(Test_S7740C12, "S7740C12", ABISELECT(2096,1248));

#else // __cplusplus

extern void _ZN8S7740C12C1Ev();
extern void _ZN8S7740C12D2Ev();
Name_Map name_map_S7740C12[] = {
  NSPAIR(_ZN8S7740C12C1Ev),
  NSPAIR(_ZN8S7740C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
static Base_Class bases_S7740C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7740C8,    ABISELECT(1264,748), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7740C6,    ABISELECT(1344,788), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(2080,1236), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7740C5,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7740C10,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7740C6,    ABISELECT(272,156), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C12[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn272_N8S7740C12D1Ev,_ZThn156_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn272_N8S7740C12D0Ev,_ZThn156_N8S7740C12D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn1344_N8S7740C12D1Ev,_ZThn788_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn1344_N8S7740C12D0Ev,_ZThn788_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn2080_N8S7740C12D1Ev,_ZThn1236_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn2080_N8S7740C12D0Ev,_ZThn1236_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C12[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C12D1Ev,_ZThn156_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C12D0Ev,_ZThn156_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7740C12[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C12[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn1344_N7S7740C5D1Ev,_ZThn788_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn1344_N7S7740C5D0Ev,_ZThn788_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C5__8S7740C12[] = {
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C5__8S7740C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2080_N7S7740C5D1Ev,_ZThn1236_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2080_N7S7740C5D0Ev,_ZThn1236_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C5__8S7740C12[] = {
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C12[] = {
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__A__8S7740C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1008,-604),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C12[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__8S7740C12[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(816,488),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C12[] = {
  {&(_ZTV8S7740C12[7]),  7,44},
  {&(_tg__ZTV7S7740C5__8S7740C12[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C5__8S7740C12[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C5__8S7740C12[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C5__8S7740C12[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C12[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__A__8S7740C12[4]),  4,4},
  {&(_ZTV8S7740C12[27]),  27,44},
  {&(_ZTV8S7740C12[32]),  32,44},
  {&(_ZTV8S7740C12[42]),  42,44},
  {&(_ZTV8S7740C12[15]),  15,44},
  {&(_tg__ZTV7S7740C8__8S7740C12[4]),  4,4},
  {&(_tg__ZTV8S7740C10__8S7740C12[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__8S7740C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N7S7740C5D0Ev,_ZThn1236_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N7S7740C5D1Ev,_ZThn1236_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N7S7740C5D0Ev,_ZThn788_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N7S7740C5D1Ev,_ZThn788_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S7740C12D0Ev,_ZThn1236_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S7740C12D1Ev,_ZThn1236_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S7740C12D0Ev,_ZThn788_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S7740C12D1Ev,_ZThn788_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C12 = {  "S7740C12", // class name
  bases_S7740C12, 9,
  &(vtc_S7740C12[0]), // expected_vtbl_contents
  &(vtt_S7740C12[0]), // expected_vtt_contents
  ABISELECT(2096,1248), // object size
  NSPAIRA(_ZTI8S7740C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7740C12),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C12),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C11  : virtual S22028C16 , virtual S7740C8 , S7740C10 , S7740C5 {
  int s7740c11f0;
  int s7740c11f1;
  int s7740c11f2;
  short s7740c11f3;
  int s7740c11f4;
  ::S7740C12 s7740c11f5;
  __tsi64 s7740c11f6;
  void *s7740c11f7;
  int s7740c11f8;
  ~S7740C11(); // tgen
  S7740C11(); // tgen
};
//SIG(-1 S7740C11) C1{ VBC2{ m} VBC3{ VBC2 VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} BC5{ VBC3 vd Fi:21 Fi} BC6{ VBC7{ vd v1 v2 Fp FC4 FC4 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC5 BC4 v3} Fi Fi Fi Fs Fi FC9{ VBC4 VBC3 BC6 BC5 BC7 vd Fi} FL Fp Fi}


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

static void Test_S7740C11()
{
  extern Class_Descriptor cd_S7740C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(220,521)];
    init_test(&cd_S7740C11, buf);
    S7740C11 *dp, &lv = *(dp=new (buf) S7740C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3504,2080), "sizeof(S7740C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C11)");
    check_base_class_offset(lv, (S22028C16*), 0, "S7740C11");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C11");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(2512,1480), "S7740C11");
    check_base_class_offset(lv, (S7740C8*), ABISELECT(2424,1440), "S7740C11");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(2424,1440), "S7740C11");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*), ABISELECT(2424,1440), "S7740C11");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(2424,1440), "S7740C11");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*), 0, "S7740C11");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*), ABISELECT(2752,1620), "S7740C11");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*), ABISELECT(3488,2068), "S7740C11");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*), ABISELECT(32,16), "S7740C11");
    check_base_class_offset(lv, (S7740C5*), ABISELECT(16,12), "S7740C11");
    check_field_offset(lv, s7740c11f0, ABISELECT(272,156), "S7740C11.s7740c11f0");
    check_field_offset(lv, s7740c11f1, ABISELECT(276,160), "S7740C11.s7740c11f1");
    check_field_offset(lv, s7740c11f2, ABISELECT(280,164), "S7740C11.s7740c11f2");
    check_field_offset(lv, s7740c11f3, ABISELECT(284,168), "S7740C11.s7740c11f3");
    check_field_offset(lv, s7740c11f4, ABISELECT(288,172), "S7740C11.s7740c11f4");
    check_field_offset(lv, s7740c11f5, ABISELECT(304,176), "S7740C11.s7740c11f5");
    check_field_offset(lv, s7740c11f6, ABISELECT(2400,1424), "S7740C11.s7740c11f6");
    check_field_offset(lv, s7740c11f7, ABISELECT(2408,1432), "S7740C11.s7740c11f7");
    check_field_offset(lv, s7740c11f8, ABISELECT(2416,1436), "S7740C11.s7740c11f8");
    test_class_info(&lv, &cd_S7740C11);
    dp->~S7740C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C11(Test_S7740C11, "S7740C11", ABISELECT(3504,2080));

#else // __cplusplus

extern void _ZN8S7740C11C1Ev();
extern void _ZN8S7740C11D1Ev();
Name_Map name_map_S7740C11[] = {
  NSPAIR(_ZN8S7740C11C1Ev),
  NSPAIR(_ZN8S7740C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
static Base_Class bases_S7740C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(2512,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7740C8,    ABISELECT(2424,1440), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7740C10,    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_S7740C6,    ABISELECT(2752,1620), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(3488,2068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C11[];
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn2752_N8S7740C11D1Ev,_ZThn1620_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn2752_N8S7740C11D0Ev,_ZThn1620_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2068_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2068_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C11[] = {
  ABISELECT(3488,2068),
  ABISELECT(2752,1620),
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  0,
  0,
  ABISELECT(-2752,-1620),
  ABISELECT(-2752,-1620),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-3488,-2068),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3488,-2068),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7740C11[];
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C11[] = {
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__A__8S7740C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C11[] = {
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2736_N7S7740C5D1Ev,_ZThn1608_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2736_N7S7740C5D0Ev,_ZThn1608_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C5__8S7740C11[] = {
  0,
  0,
  ABISELECT(-2736,-1608),
  ABISELECT(-2736,-1608),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C5__8S7740C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2056_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2056_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C5__8S7740C11[] = {
  ABISELECT(-3472,-2056),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3472,-2056),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__A1__8S7740C11[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C11[] = {
  {&(_ZTV8S7740C11[7]),  7,40},
  {&(_tg__ZTV8S7740C10__A__8S7740C11[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__A__8S7740C11[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C11[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C5__8S7740C11[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C5__8S7740C11[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C5__8S7740C11[6]),  6,8},
  {&(_ZTV8S7740C11[23]),  23,40},
  {&(_ZTV8S7740C11[16]),  16,40},
  {&(_ZTV8S7740C11[28]),  28,40},
  {&(_ZTV8S7740C11[38]),  38,40},
  {&(_tg__ZTV7S7740C8__8S7740C11[4]),  4,4},
  {&(_tg__ZTV8S7740C10__A1__8S7740C11[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__A1__8S7740C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2056_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2056_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N7S7740C5D0Ev,_ZThn1608_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N7S7740C5D1Ev,_ZThn1608_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2068_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2068_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S7740C11D0Ev,_ZThn1620_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S7740C11D1Ev,_ZThn1620_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C11 = {  "S7740C11", // class name
  bases_S7740C11, 8,
  &(vtc_S7740C11[0]), // expected_vtbl_contents
  &(vtt_S7740C11[0]), // expected_vtt_contents
  ABISELECT(3504,2080), // object size
  NSPAIRA(_ZTI8S7740C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7740C11),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C11),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C3  : virtual S19968C3 , S7740C5 , S7740C11 {
  int s7740c3f0;
  virtual  ~S7740C3(); // _ZN7S7740C3D2Ev
  S7740C3(); // tgen
};
//SIG(-1 S7740C3) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC3{ VBC4{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU5{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC6{ VBC7{ m} VBC2 Fp[9]} VBC8{ VBC6 vd Fi:21 Fi} BC2 v3} BC9{ VBC7 VBC6 BC8 BC3 Fi Fi Fi Fs Fi FC10{ VBC2 VBC6 BC3 BC8 BC4 vd Fi} FL Fp Fi} vd Fi}


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

static void Test_S7740C3()
{
  extern Class_Descriptor cd_S7740C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(236,558)];
    init_test(&cd_S7740C3, buf);
    S7740C3 *dp, &lv = *(dp=new (buf) S7740C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3760,2228), "sizeof(S7740C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C3)");
    /*is_ambiguous_... S7740C3::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2688,1588), "S7740C3");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(2688,1588), "S7740C3");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C5*), ABISELECT(2928,1728), "S7740C3");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*), ABISELECT(2928,1728), "S7740C3");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C3");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*), 0, "S7740C3");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C5*), ABISELECT(3664,2176), "S7740C3");
    /*is_ambiguous_... S7740C3::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(3664,2176), "S7740C3");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*), ABISELECT(3664,2176), "S7740C3");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*), ABISELECT(3664,2176), "S7740C3");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*), ABISELECT(3664,2176), "S7740C3");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C5*), ABISELECT(3744,2216), "S7740C3");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*), ABISELECT(3744,2216), "S7740C3");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*), ABISELECT(16,4), "S7740C3");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C5*), 0, "S7740C3");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*), ABISELECT(256,144), "S7740C3");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*), ABISELECT(288,160), "S7740C3");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*), ABISELECT(272,156), "S7740C3");
    check_base_class_offset(lv, (S7740C11*), ABISELECT(256,144), "S7740C3");
    check_field_offset(lv, s7740c3f0, ABISELECT(2676,1584), "S7740C3.s7740c3f0");
    test_class_info(&lv, &cd_S7740C3);
    dp->~S7740C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C3(Test_S7740C3, "S7740C3", ABISELECT(3760,2228));

#else // __cplusplus

extern void _ZN7S7740C3C1Ev();
extern void _ZN7S7740C3D2Ev();
Name_Map name_map_S7740C3[] = {
  NSPAIR(_ZN7S7740C3C1Ev),
  NSPAIR(_ZN7S7740C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
static Base_Class bases_S7740C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2688,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7740C6,    ABISELECT(2928,1728), //bcp->offset
    29, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(3664,2176), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(3744,2216), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7740C5,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7740C10,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(272,156), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7740C3[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C3D1Ev();
extern void _ZN7S7740C3D0Ev();
extern void ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C3[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D0Ev,
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev),
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S7740C3[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C5__7S7740C3[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C5__7S7740C3[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C5__7S7740C3[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C5__7S7740C3[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C11__7S7740C3[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C11__A1__7S7740C3[] = {
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C11__A1__7S7740C3[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__A1__7S7740C3[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C11__A1__7S7740C3[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C11__A1__7S7740C3[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C11__A1__7S7740C3[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C11__7S7740C3[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C11__7S7740C3[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C11__7S7740C3[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C11__7S7740C3[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C3[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C3[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__7S7740C3[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C3[] = {
  {&(_ZTV7S7740C3[7]),  7,50},
  {&(_tg__ZTV7S7740C5__7S7740C3[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C5__7S7740C3[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C5__7S7740C3[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C5__7S7740C3[6]),  6,8},
  {&(_tg__ZTV8S7740C11__7S7740C3[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C11__A1__7S7740C3[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C11__A1__7S7740C3[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C11__A1__7S7740C3[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C11__A1__7S7740C3[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C11__A1__7S7740C3[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C11__A1__7S7740C3[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C11__7S7740C3[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C11__7S7740C3[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C11__7S7740C3[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C11__7S7740C3[6]),  6,8},
  {&(_ZTV7S7740C3[34]),  34,50},
  {&(_ZTV7S7740C3[42]),  42,50},
  {&(_ZTV7S7740C3[48]),  48,50},
  {&(_ZTV7S7740C3[17]),  17,50},
  {&(_ZTV7S7740C3[26]),  26,50},
  {&(_tg__ZTV7S7740C8__7S7740C3[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C3[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__7S7740C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7740C3[];
extern  VTBL_ENTRY _ZTV7S7740C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C3[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C3 = {  "S7740C3", // class name
  bases_S7740C3, 11,
  &(vtc_S7740C3[0]), // expected_vtbl_contents
  &(vtt_S7740C3[0]), // expected_vtt_contents
  ABISELECT(3760,2228), // object size
  NSPAIRA(_ZTI7S7740C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7740C3),50, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7740C3),24, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C13  : S7740C8 {
  long double s7740c13f0[8];
  int s7740c13f1;
  short s7740c13f2;
  int s7740c13f3;
  short s7740c13f4;
  void *s7740c13f5;
  int s7740c13f6;
  int s7740c13f7;
  short s7740c13f8;
  int s7740c13f9[5];
  void *s7740c13f10;
  ~S7740C13(); // tgen
  S7740C13(); // tgen
};
//SIG(-1 S7740C13) C1{ BC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} FD[8] Fi Fs Fi Fs Fp Fi[2] Fs Fi[5] Fp}


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

static void Test_S7740C13()
{
  extern Class_Descriptor cd_S7740C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33,84)];
    init_test(&cd_S7740C13, buf);
    S7740C13 *dp, &lv = *(dp=new (buf) S7740C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(512,332), "sizeof(S7740C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C13)");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C13");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(272,192), "S7740C13");
    check_base_class_offset(lv, (S7740C8*), 0, "S7740C13");
    check_field_offset(lv, s7740c13f0, ABISELECT(80,40), "S7740C13.s7740c13f0");
    check_field_offset(lv, s7740c13f1, ABISELECT(208,136), "S7740C13.s7740c13f1");
    check_field_offset(lv, s7740c13f2, ABISELECT(212,140), "S7740C13.s7740c13f2");
    check_field_offset(lv, s7740c13f3, ABISELECT(216,144), "S7740C13.s7740c13f3");
    check_field_offset(lv, s7740c13f4, ABISELECT(220,148), "S7740C13.s7740c13f4");
    check_field_offset(lv, s7740c13f5, ABISELECT(224,152), "S7740C13.s7740c13f5");
    check_field_offset(lv, s7740c13f6, ABISELECT(232,156), "S7740C13.s7740c13f6");
    check_field_offset(lv, s7740c13f7, ABISELECT(236,160), "S7740C13.s7740c13f7");
    check_field_offset(lv, s7740c13f8, ABISELECT(240,164), "S7740C13.s7740c13f8");
    check_field_offset(lv, s7740c13f9, ABISELECT(244,168), "S7740C13.s7740c13f9");
    check_field_offset(lv, s7740c13f10, ABISELECT(264,188), "S7740C13.s7740c13f10");
    test_class_info(&lv, &cd_S7740C13);
    dp->~S7740C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C13(Test_S7740C13, "S7740C13", ABISELECT(512,332));

#else // __cplusplus

extern void _ZN8S7740C13C1Ev();
extern void _ZN8S7740C13D1Ev();
Name_Map name_map_S7740C13[] = {
  NSPAIR(_ZN8S7740C13C1Ev),
  NSPAIR(_ZN8S7740C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
static Base_Class bases_S7740C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(272,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
    2, //immediately_derived
  0, 1},
  {&cd_S7740C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C13[];
static  VTBL_ENTRY vtc_S7740C13[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C13[0]),
};
extern VTBL_ENTRY _ZTV8S7740C13[];
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C13[] = {
  ABISELECT(272,192),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
static  VTT_ENTRY vtt_S7740C13[] = {
  {&(_ZTV8S7740C13[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C13[];
extern  VTBL_ENTRY _ZTV8S7740C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C13[];
Class_Descriptor cd_S7740C13 = {  "S7740C13", // class name
  bases_S7740C13, 3,
  &(vtc_S7740C13[0]), // expected_vtbl_contents
  &(vtt_S7740C13[0]), // expected_vtt_contents
  ABISELECT(512,332), // object size
  NSPAIRA(_ZTI8S7740C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7740C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C13),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  S7740C14  : S19968C3 , virtual S7740C6 , S7740C11 , S7740C10 {
  short s7740c14f0;
  short s7740c14f1[4];
  short s7740c14f2;
  ::S7740C6 s7740c14f3;
  virtual  ~S7740C14(); // _ZN8S7740C14D2Ev
  S7740C14(); // tgen
};
//SIG(-1 S7740C14) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ VBC6{ m} VBC7{ VBC6 VBC2 Fp[9]} BC8{ VBC7 vd Fi:21 Fi} BC9{ VBC3 VBC7 VBC8 BC2 v3} Fi Fi Fi Fs Fi FC10{ VBC2 VBC7 BC9 BC8 BC3 vd Fi} FL Fp Fi} BC8 vd Fs Fs[4] Fs FC3}


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

static void Test_S7740C14()
{
  extern Class_Descriptor cd_S7740C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(283,674)];
    init_test(&cd_S7740C14, buf);
    S7740C14 *dp, &lv = *(dp=new (buf) S7740C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4512,2692), "sizeof(S7740C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C14)");
    /*is_ambiguous_... S7740C14::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2432,1440), "S7740C14");
    check_base_class_offset(lv, (S7740C6*), ABISELECT(3440,2052), "S7740C14");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*), ABISELECT(3440,2052), "S7740C14");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*), 0, "S7740C14");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C14");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(4256,2540), "S7740C14");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*), ABISELECT(4176,2500), "S7740C14");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*), ABISELECT(4176,2500), "S7740C14");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*), ABISELECT(4176,2500), "S7740C14");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(4176,2500), "S7740C14");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(4176,2500), "S7740C14");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*), 0, "S7740C14");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*), ABISELECT(4496,2680), "S7740C14");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*), ABISELECT(32,16), "S7740C14");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*), ABISELECT(16,12), "S7740C14");
    check_base_class_offset(lv, (S7740C11*), 0, "S7740C14");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*), ABISELECT(2672,1580), "S7740C14");
    check_field_offset(lv, s7740c14f0, ABISELECT(2688,1592), "S7740C14.s7740c14f0");
    check_field_offset(lv, s7740c14f1, ABISELECT(2690,1594), "S7740C14.s7740c14f1");
    check_field_offset(lv, s7740c14f2, ABISELECT(2698,1602), "S7740C14.s7740c14f2");
    check_field_offset(lv, s7740c14f3, ABISELECT(2704,1604), "S7740C14.s7740c14f3");
    test_class_info(&lv, &cd_S7740C14);
    dp->~S7740C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C14(Test_S7740C14, "S7740C14", ABISELECT(4512,2692));

#else // __cplusplus

extern void _ZN8S7740C14C1Ev();
extern void _ZN8S7740C14D2Ev();
Name_Map name_map_S7740C14[] = {
  NSPAIR(_ZN8S7740C14C1Ev),
  NSPAIR(_ZN8S7740C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
static Base_Class bases_S7740C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2432,1440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7740C6,    ABISELECT(3440,2052), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //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_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(4256,2540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(4176,2500), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7740C10,    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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(4496,2680), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7740C10,    ABISELECT(2672,1580), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C14[];
extern void _ZN8S7740C14D1Ev();
extern void _ZN8S7740C14D0Ev();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn3440_N8S7740C14D1Ev,_ZThn2052_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn3440_N8S7740C14D0Ev,_ZThn2052_N8S7740C14D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn4496_N8S7740C14D1Ev,_ZThn2680_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn4496_N8S7740C14D0Ev,_ZThn2680_N8S7740C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C14[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN8S7740C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C14D0Ev,
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev),
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev),
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S7740C14[];
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C11__8S7740C14[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C11__8S7740C14[] = {
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C11__8S7740C14[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__8S7740C14[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3424_N7S7740C5D1Ev,_ZThn2040_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3424_N7S7740C5D0Ev,_ZThn2040_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C11__8S7740C14[] = {
  0,
  0,
  ABISELECT(-3424,-2040),
  ABISELECT(-3424,-2040),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C11__8S7740C14[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4160,-2488),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn4480_N7S7740C5D1Ev,_ZThn2668_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn4480_N7S7740C5D0Ev,_ZThn2668_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C11__8S7740C14[] = {
  ABISELECT(-4480,-2668),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4480,-2668),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C11__8S7740C14[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C11__8S7740C14[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn3440_N8S7740C11D1Ev,_ZThn2052_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn3440_N8S7740C11D0Ev,_ZThn2052_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C11__8S7740C14[] = {
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn4496_N8S7740C11D1Ev,_ZThn2680_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn4496_N8S7740C11D0Ev,_ZThn2680_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C11__8S7740C14[] = {
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C14[] = {
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__A__8S7740C14[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-1504,-920),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C14[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C14[] = {
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__A1__8S7740C14[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C14[] = {
  {&(_ZTV8S7740C14[7]),  7,47},
  {&(_tg__ZTV8S7740C11__8S7740C14[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C11__8S7740C14[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C11__8S7740C14[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C11__8S7740C14[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C11__8S7740C14[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C11__8S7740C14[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C11__8S7740C14[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C11__8S7740C14[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C11__8S7740C14[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C11__8S7740C14[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C11__8S7740C14[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C14[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__A__8S7740C14[4]),  4,4},
  {&(_ZTV8S7740C14[31]),  31,47},
  {&(_ZTV8S7740C14[39]),  39,47},
  {&(_ZTV8S7740C14[16]),  16,47},
  {&(_ZTV8S7740C14[45]),  45,47},
  {&(_ZTV8S7740C14[24]),  24,47},
  {&(_tg__ZTV7S7740C8__8S7740C14[4]),  4,4},
  {&(_tg__ZTV8S7740C10__A1__8S7740C14[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__A1__8S7740C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C14[];
extern  VTBL_ENTRY _ZTV8S7740C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C14[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S7740C11D0Ev,_ZThn2680_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S7740C11D1Ev,_ZThn2680_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S7740C11D0Ev,_ZThn2052_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S7740C11D1Ev,_ZThn2052_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N7S7740C5D0Ev,_ZThn2668_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N7S7740C5D1Ev,_ZThn2668_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N7S7740C5D0Ev,_ZThn2040_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N7S7740C5D1Ev,_ZThn2040_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S7740C14D0Ev,_ZThn2680_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S7740C14D1Ev,_ZThn2680_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S7740C14D0Ev,_ZThn2052_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S7740C14D1Ev,_ZThn2052_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C14 = {  "S7740C14", // class name
  bases_S7740C14, 11,
  &(vtc_S7740C14[0]), // expected_vtbl_contents
  &(vtt_S7740C14[0]), // expected_vtt_contents
  ABISELECT(4512,2692), // object size
  NSPAIRA(_ZTI8S7740C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7740C14),47, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C14),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C15  : S7740C12 {
  ::S3465C9_nt s7740c15f0;
  void *s7740c15f1;
  int s7740c15f2[4];
  int s7740c15f3;
  void *s7740c15f4;
  virtual  ~S7740C15(); // _ZN8S7740C15D2Ev
  virtual void  v5(); // _ZN8S7740C152v5Ev
  S7740C15(); // tgen
};
//SIG(-1 S7740C15) C1{ BC2{ VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC4{ VBC5{ m} VBC3 Fp[9]} BC6{ VBC7{ vd v2 v3 Fp FC3 FC3 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC4 VBC9{ VBC4 vd Fi:21 Fi} BC3 v4} BC9 BC7 vd Fi} vd v1 FC10{} Fp Fi[4] Fi Fp}


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

static void Test_S7740C15()
{
  extern Class_Descriptor cd_S7740C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(134,321)];
    init_test(&cd_S7740C15, buf);
    S7740C15 *dp, &lv = *(dp=new (buf) S7740C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2128,1280), "sizeof(S7740C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C15)");
    /*is_ambiguous_... S7740C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C12*), ABISELECT(1056,640), "S7740C15");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(1056,640), "S7740C15");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C15");
    check_base_class_offset(lv, (S7740C8*)(S7740C12*), ABISELECT(1296,780), "S7740C15");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C12*), ABISELECT(1296,780), "S7740C15");
    /*is_ambiguous_... S7740C15::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(1296,780), "S7740C15");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C12*), ABISELECT(1296,780), "S7740C15");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C12*), ABISELECT(1376,820), "S7740C15");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C12*), ABISELECT(2112,1268), "S7740C15");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C12*), ABISELECT(16,4), "S7740C15");
    check_base_class_offset(lv, (S7740C5*)(S7740C12*), 0, "S7740C15");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C12*), ABISELECT(256,144), "S7740C15");
    /*is_ambiguous_... S7740C12::S7740C6 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C12*), ABISELECT(272,156), "S7740C15");
    check_base_class_offset(lv, (S7740C12*), 0, "S7740C15");
    check_field_offset(lv, s7740c15f0, ABISELECT(1012,608), "S7740C15.s7740c15f0");
    check_field_offset(lv, s7740c15f1, ABISELECT(1016,612), "S7740C15.s7740c15f1");
    check_field_offset(lv, s7740c15f2, ABISELECT(1024,616), "S7740C15.s7740c15f2");
    check_field_offset(lv, s7740c15f3, ABISELECT(1040,632), "S7740C15.s7740c15f3");
    check_field_offset(lv, s7740c15f4, ABISELECT(1048,636), "S7740C15.s7740c15f4");
    test_class_info(&lv, &cd_S7740C15);
    dp->~S7740C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C15(Test_S7740C15, "S7740C15", ABISELECT(2128,1280));

#else // __cplusplus

extern void _ZN8S7740C15C1Ev();
extern void _ZN8S7740C15D2Ev();
Name_Map name_map_S7740C15[] = {
  NSPAIR(_ZN8S7740C15C1Ev),
  NSPAIR(_ZN8S7740C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C12;
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
static Base_Class bases_S7740C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(1056,640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7740C8,    ABISELECT(1296,780), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7740C6,    ABISELECT(1376,820), //bcp->offset
    28, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(2112,1268), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7740C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(256,144), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C6,    ABISELECT(272,156), //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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C15[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C15D1Ev();
extern void _ZN8S7740C15D0Ev();
extern void _ZN8S7740C152v5Ev();
extern void ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn272_N8S7740C15D1Ev,_ZThn156_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn272_N8S7740C15D0Ev,_ZThn156_N8S7740C15D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn1376_N8S7740C15D1Ev,_ZThn820_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn1376_N8S7740C15D0Ev,_ZThn820_N8S7740C15D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn2112_N8S7740C15D1Ev,_ZThn1268_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn2112_N8S7740C15D0Ev,_ZThn1268_N8S7740C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C15[] = {
  ABISELECT(2112,1268),
  ABISELECT(1056,640),
  0,
  ABISELECT(1296,780),
  ABISELECT(1376,820),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
  ABISELECT(800,496),
  ABISELECT(-256,-144),
  ABISELECT(1040,636),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C15D1Ev,_ZThn156_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C15D0Ev,_ZThn156_N8S7740C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-240,-140),
  ABISELECT(-1296,-780),
  ABISELECT(-1296,-780),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  0,
  0,
  ABISELECT(-1376,-820),
  ABISELECT(-1376,-820),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-2112,-1268),
  ABISELECT(-1056,-628),
  ABISELECT(-2112,-1268),
  ABISELECT(-816,-488),
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev),
};
extern VTBL_ENTRY _ZTV8S7740C15[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C12__8S7740C15[] = {
  ABISELECT(2112,1268),
  ABISELECT(1056,640),
  0,
  ABISELECT(1296,780),
  ABISELECT(1376,820),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C12__8S7740C15[] = {
  ABISELECT(2112,1268),
  ABISELECT(1056,640),
  0,
  ABISELECT(1296,780),
  ABISELECT(1376,820),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn1376_N7S7740C5D1Ev,_ZThn820_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn1376_N7S7740C5D0Ev,_ZThn820_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C12__8S7740C15[] = {
  0,
  0,
  ABISELECT(-1376,-820),
  ABISELECT(-1376,-820),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C12__8S7740C15[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1296,-780),
  ABISELECT(-1296,-780),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2112_N7S7740C5D1Ev,_ZThn1268_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2112_N7S7740C5D0Ev,_ZThn1268_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C12__8S7740C15[] = {
  ABISELECT(-2112,-1268),
  ABISELECT(-1056,-628),
  ABISELECT(-2112,-1268),
  ABISELECT(-816,-488),
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C12__A1__8S7740C15[] = {
  ABISELECT(800,496),
  ABISELECT(-256,-144),
  ABISELECT(1040,636),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C12__A1__8S7740C15[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1296,-780),
  ABISELECT(-1040,-636),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C12__8S7740C15[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1296,-780),
  ABISELECT(-1296,-780),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn1376_N8S7740C12D1Ev,_ZThn820_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn1376_N8S7740C12D0Ev,_ZThn820_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C12__8S7740C15[] = {
  0,
  0,
  ABISELECT(-1376,-820),
  ABISELECT(-1376,-820),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn2112_N8S7740C12D1Ev,_ZThn1268_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn2112_N8S7740C12D0Ev,_ZThn1268_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C12__8S7740C15[] = {
  ABISELECT(-2112,-1268),
  ABISELECT(-1056,-628),
  ABISELECT(-2112,-1268),
  ABISELECT(-816,-488),
  ABISELECT(-2112,-1268),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C12__8S7740C15[] = {
  ABISELECT(800,496),
  ABISELECT(-256,-144),
  ABISELECT(1040,636),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C15[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1296,-780),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C15[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-2112,-1268),
  ABISELECT(-816,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__8S7740C15[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1296,-780),
  ABISELECT(816,488),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C15[] = {
  {&(_ZTV8S7740C15[7]),  7,45},
  {&(_tg__ZTV8S7740C12__8S7740C15[7]),  7,10},
  {&(_tg__ZTV7S7740C58S7740C12__8S7740C15[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C12__8S7740C15[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C12__8S7740C15[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C12__8S7740C15[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C12__A1__8S7740C15[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C12__A1__8S7740C15[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C12__8S7740C15[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C12__8S7740C15[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C12__8S7740C15[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C12__8S7740C15[5]),  5,7},
  {&(_ZTV8S7740C15[28]),  28,45},
  {&(_ZTV8S7740C15[33]),  33,45},
  {&(_ZTV8S7740C15[43]),  43,45},
  {&(_ZTV8S7740C15[16]),  16,45},
  {&(_tg__ZTV7S7740C8__8S7740C15[4]),  4,4},
  {&(_tg__ZTV8S7740C10__8S7740C15[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__8S7740C15[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C15[];
extern  VTBL_ENTRY _ZTV8S7740C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C15[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S7740C12D0Ev,_ZThn1268_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S7740C12D1Ev,_ZThn1268_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N8S7740C12D0Ev,_ZThn820_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N8S7740C12D1Ev,_ZThn820_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S7740C5D0Ev,_ZThn1268_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N7S7740C5D1Ev,_ZThn1268_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N7S7740C5D0Ev,_ZThn820_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N7S7740C5D1Ev,_ZThn820_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S7740C15D0Ev,_ZThn1268_N8S7740C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S7740C15D1Ev,_ZThn1268_N8S7740C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N8S7740C15D0Ev,_ZThn820_N8S7740C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N8S7740C15D1Ev,_ZThn820_N8S7740C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C15 = {  "S7740C15", // class name
  bases_S7740C15, 10,
  &(vtc_S7740C15[0]), // expected_vtbl_contents
  &(vtt_S7740C15[0]), // expected_vtt_contents
  ABISELECT(2128,1280), // object size
  NSPAIRA(_ZTI8S7740C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7740C15),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C15),19, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C2  : virtual S7740C3 , virtual S7740C13 , S7740C14 , S22028C16 , S7740C15 {
  short s7740c2f0;
  ~S7740C2(); // tgen
  S7740C2(); // tgen
};
//SIG(-1 S7740C2) C1{ VBC2{ VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC4{ VBC5{ vd v1 v2 Fp FC3 FC3 Fi[3] Fp[6] Fs FU6{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC7{ VBC8{ m} VBC3 Fp[9]} VBC9{ VBC7 vd Fi:21 Fi} BC3 v3} BC10{ VBC8 VBC7 BC9 BC4 Fi Fi Fi Fs Fi FC11{ VBC3 VBC7 BC4 BC9 BC5 vd Fi} FL Fp Fi} vd Fi} VBC12{ BC7 FD[8] Fi Fs Fi Fs Fp Fi Fi Fs Fi[5] Fp} BC13{ BC3 VBC5 BC10 BC9 vd Fs Fs[4] Fs FC5} BC8 BC14{ BC11 vd v4 FC15{} Fp Fi[4] Fi Fp} Fs}


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

static void Test_S7740C2()
{
  extern Class_Descriptor cd_S7740C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(535,1280)];
    init_test(&cd_S7740C2, buf);
    S7740C2 *dp, &lv = *(dp=new (buf) S7740C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8544,5116), "sizeof(S7740C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C2)");
    /*is_ambiguous_... S7740C3::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C3*), ABISELECT(7200,4284), "S7740C2");
    /*is_ambiguous_... S7740C2::S7740C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(7200,4284), "S7740C2");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*)(S7740C13*), ABISELECT(7200,4284), "S7740C2");
    /*is_ambiguous_... S7740C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C12*)(S7740C15*), ABISELECT(7200,4284), "S7740C2");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C3*), ABISELECT(7440,4424), "S7740C2");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(7440,4424), "S7740C2");
    check_base_class_offset(lv, (S7740C6*)(S7740C14*), ABISELECT(7440,4424), "S7740C2");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(7440,4424), "S7740C2");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(7440,4424), "S7740C2");
    /*is_ambiguous_... S7740C2::S7740C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7740C8*), ABISELECT(8256,4912), "S7740C2");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C3*), ABISELECT(8256,4912), "S7740C2");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*)(S7740C13*), ABISELECT(8256,4912), "S7740C2");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C14*), ABISELECT(8256,4912), "S7740C2");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C3*), ABISELECT(8176,4872), "S7740C2");
    /*is_ambiguous_... S7740C2::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(8176,4872), "S7740C2");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C3*), ABISELECT(8176,4872), "S7740C2");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(8176,4872), "S7740C2");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(8176,4872), "S7740C2");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C14*), ABISELECT(8176,4872), "S7740C2");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C14*), ABISELECT(8176,4872), "S7740C2");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(8176,4872), "S7740C2");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C14*), ABISELECT(8176,4872), "S7740C2");
    check_base_class_offset(lv, (S7740C8*)(S7740C12*)(S7740C15*), ABISELECT(8176,4872), "S7740C2");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(8176,4872), "S7740C2");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C12*)(S7740C15*), ABISELECT(8176,4872), "S7740C2");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C3*), ABISELECT(8256,4912), "S7740C2");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(8256,4912), "S7740C2");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(8256,4912), "S7740C2");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(8256,4912), "S7740C2");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C3*), ABISELECT(4528,2700), "S7740C2");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C5*)(S7740C3*), ABISELECT(4512,2696), "S7740C2");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(4768,2840), "S7740C2");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(4800,2856), "S7740C2");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(4784,2852), "S7740C2");
    check_base_class_offset(lv, (S7740C11*)(S7740C3*), ABISELECT(4768,2840), "S7740C2");
    check_base_class_offset(lv, (S7740C3*), ABISELECT(4512,2696), "S7740C2");
    check_base_class_offset(lv, (S7740C8*)(S7740C13*), ABISELECT(8272,4924), "S7740C2");
    check_base_class_offset(lv, (S7740C13*), ABISELECT(8272,4924), "S7740C2");
    /*is_ambiguous_... S7740C14::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C14*), ABISELECT(2432,1440), "S7740C2");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C14*), 0, "S7740C2");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(32,16), "S7740C2");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(16,12), "S7740C2");
    check_base_class_offset(lv, (S7740C11*)(S7740C14*), 0, "S7740C2");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C14*), ABISELECT(2672,1580), "S7740C2");
    check_base_class_offset(lv, (S7740C14*), 0, "S7740C2");
    /*is_ambiguous_... S7740C2::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*), 0, "S7740C2");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(3456,2056), "S7740C2");
    check_base_class_offset(lv, (S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(3440,2052), "S7740C2");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C12*)(S7740C15*), ABISELECT(3696,2196), "S7740C2");
    /*is_ambiguous_... S7740C12::S7740C6 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C12*)(S7740C15*), ABISELECT(3712,2208), "S7740C2");
    check_base_class_offset(lv, (S7740C12*)(S7740C15*), ABISELECT(3440,2052), "S7740C2");
    check_base_class_offset(lv, (S7740C15*), ABISELECT(3440,2052), "S7740C2");
    check_field_offset(lv, s7740c2f0, ABISELECT(4496,2692), "S7740C2.s7740c2f0");
    test_class_info(&lv, &cd_S7740C2);
    dp->~S7740C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C2(Test_S7740C2, "S7740C2", ABISELECT(8544,5116));

#else // __cplusplus

extern void _ZN7S7740C2C1Ev();
extern void _ZN7S7740C2D1Ev();
Name_Map name_map_S7740C2[] = {
  NSPAIR(_ZN7S7740C2C1Ev),
  NSPAIR(_ZN7S7740C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C3;
extern VTBL_ENTRY _ZTI7S7740C3[];
extern  VTBL_ENTRY _ZTV7S7740C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C3[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C13;
extern VTBL_ENTRY _ZTI8S7740C13[];
extern  VTBL_ENTRY _ZTV8S7740C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C13[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C14;
extern VTBL_ENTRY _ZTI8S7740C14[];
extern  VTBL_ENTRY _ZTV8S7740C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C14[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C12;
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
extern Class_Descriptor cd_S7740C15;
extern VTBL_ENTRY _ZTI8S7740C15[];
extern  VTBL_ENTRY _ZTV8S7740C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C15[];
static Base_Class bases_S7740C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(7200,4284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C6,    ABISELECT(7440,4424), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    ABISELECT(8256,4912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(8176,4872), //bcp->offset
    92, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(8256,4912), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(4528,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7740C5,    ABISELECT(4512,2696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(4768,2840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(4800,2856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(4784,2852), //bcp->offset
    73, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(4768,2840), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C3,    ABISELECT(4512,2696), //bcp->offset
    52, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7740C8,    ABISELECT(8272,4924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7740C13,    ABISELECT(8272,4924), //bcp->offset
    104, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(2432,1440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7740C10,    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
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19968C3,    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
    17, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7740C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(2672,1580), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7740C14,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19968C3,    ABISELECT(3456,2056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(3440,2052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(3696,2196), //bcp->offset
    39, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7740C6,    ABISELECT(3712,2208), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7740C12,    ABISELECT(3440,2052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7740C15,    ABISELECT(3440,2052), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7740C2[];
extern void _ZN7S7740C2D1Ev();
extern void _ZN7S7740C2D0Ev();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N7S7740C2D1Ev,_ZThn12_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7740C2D0Ev,_ZThn12_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn2672_N7S7740C2D1Ev,_ZThn1580_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn2672_N7S7740C2D0Ev,_ZThn1580_N7S7740C2D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn3440_N7S7740C2D1Ev,_ZThn2052_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn3440_N7S7740C2D0Ev,_ZThn2052_N7S7740C2D0Ev)();
extern void _ZN8S7740C152v5Ev();
extern void ABISELECT(_ZThn3696_N7S7740C2D1Ev,_ZThn2196_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn3696_N7S7740C2D0Ev,_ZThn2196_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn3712_N7S7740C2D1Ev,_ZThn2208_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn3712_N7S7740C2D0Ev,_ZThn2208_N7S7740C2D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N7S7740C2D1Ev,_ZTv0_n36_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn4512_N7S7740C2D1Ev,_ZThn2696_N7S7740C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7740C2D0Ev,_ZTv0_n36_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn4512_N7S7740C2D0Ev,_ZThn2696_N7S7740C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N7S7740C2D1Ev,_ZTvn144_n36_N7S7740C2D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N7S7740C2D0Ev,_ZTvn144_n36_N7S7740C2D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N7S7740C2D1Ev,_ZTvn156_n36_N7S7740C2D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N7S7740C2D0Ev,_ZTvn156_n36_N7S7740C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7740C2D1Ev,_ZTv0_n12_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn7440_N7S7740C2D1Ev,_ZThn4424_N7S7740C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C2D0Ev,_ZTv0_n12_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn7440_N7S7740C2D0Ev,_ZThn4424_N7S7740C2D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7740C2D1Ev,_ZTv0_n24_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn8256_N7S7740C2D1Ev,_ZThn4912_N7S7740C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C2D0Ev,_ZTv0_n24_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn8256_N7S7740C2D0Ev,_ZThn4912_N7S7740C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C2[] = {
  ABISELECT(8272,4924),
  ABISELECT(4512,2696),
  ABISELECT(8256,4912),
  ABISELECT(7440,4424),
  ABISELECT(7200,4284),
  ABISELECT(8256,4912),
  ABISELECT(8176,4872),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C2D0Ev,
  ABISELECT(8240,4900),
  ABISELECT(7184,4272),
  ABISELECT(8240,4900),
  ABISELECT(8160,4860),
  ABISELECT(7424,4412),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7740C2D1Ev,_ZThn12_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7740C2D0Ev,_ZThn12_N7S7740C2D0Ev),
  ABISELECT(4528,2704),
  ABISELECT(5584,3332),
  ABISELECT(5504,3292),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N7S7740C2D1Ev,_ZThn1580_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N7S7740C2D0Ev,_ZThn1580_N7S7740C2D0Ev),
  ABISELECT(4816,2860),
  ABISELECT(3760,2232),
  ABISELECT(4816,2860),
  ABISELECT(4736,2820),
  ABISELECT(4000,2372),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3440_N7S7740C2D1Ev,_ZThn2052_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3440_N7S7740C2D0Ev,_ZThn2052_N7S7740C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
  ABISELECT(3504,2088),
  ABISELECT(4560,2716),
  ABISELECT(4480,2676),
  ABISELECT(-3696,-2196),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3696_N7S7740C2D1Ev,_ZThn2196_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3696_N7S7740C2D0Ev,_ZThn2196_N7S7740C2D0Ev),
  ABISELECT(-3712,-2208),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3712_N7S7740C2D1Ev,_ZThn2208_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3712_N7S7740C2D0Ev,_ZThn2208_N7S7740C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-4512,-2696),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-4512,-2696),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7740C2D1Ev,_ZTv0_n36_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7740C2D0Ev,_ZTv0_n36_N7S7740C2D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  ABISELECT(-4768,-2840),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S7740C2D1Ev,_ZTvn144_n36_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S7740C2D0Ev,_ZTvn144_n36_N7S7740C2D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-4784,-2852),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S7740C2D1Ev,_ZTvn156_n36_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S7740C2D0Ev,_ZTvn156_n36_N7S7740C2D0Ev),
  0,
  0,
  ABISELECT(-7440,-4424),
  ABISELECT(-7440,-4424),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C2D1Ev,_ZTv0_n12_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C2D0Ev,_ZTv0_n12_N7S7740C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-8176,-4872),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  ABISELECT(-8256,-4912),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-8256,-4912),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C2D1Ev,_ZTv0_n24_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C2D0Ev,_ZTv0_n24_N7S7740C2D0Ev),
  ABISELECT(-1072,-640),
  ABISELECT(-16,-12),
  ABISELECT(-8272,-4924),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
};
extern VTBL_ENTRY _ZTV7S7740C2[];
extern void _ZN8S7740C14D1Ev();
extern void _ZN8S7740C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C14__7S7740C2[] = {
  ABISELECT(8256,4912),
  ABISELECT(7440,4424),
  ABISELECT(7200,4284),
  ABISELECT(8256,4912),
  ABISELECT(8176,4872),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN8S7740C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C14D0Ev,
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C118S7740C14__A1__7S7740C2[] = {
  ABISELECT(8256,4912),
  ABISELECT(7440,4424),
  ABISELECT(7200,4284),
  ABISELECT(8256,4912),
  ABISELECT(8176,4872),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C118S7740C14__A2__7S7740C2[] = {
  ABISELECT(7200,4284),
  ABISELECT(8256,4912),
  ABISELECT(8176,4872),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C118S7740C14__A2__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-8176,-4872),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C14__A2__7S7740C2[] = {
  ABISELECT(8240,4900),
  ABISELECT(7184,4272),
  ABISELECT(8240,4900),
  ABISELECT(8160,4860),
  ABISELECT(7424,4412),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn7424_N7S7740C5D1Ev,_ZThn4412_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn7424_N7S7740C5D0Ev,_ZThn4412_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C118S7740C14__A2__7S7740C2[] = {
  0,
  0,
  ABISELECT(-7424,-4412),
  ABISELECT(-7424,-4412),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C118S7740C14__A2__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-8160,-4860),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn8240_N7S7740C5D1Ev,_ZThn4900_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn8240_N7S7740C5D0Ev,_ZThn4900_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C118S7740C14__A2__7S7740C2[] = {
  ABISELECT(-8240,-4900),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-8240,-4900),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C118S7740C14__A1__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-8176,-4872),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C118S7740C14__A1__7S7740C2[] = {
  ABISELECT(8240,4900),
  ABISELECT(7184,4272),
  ABISELECT(8240,4900),
  ABISELECT(8160,4860),
  ABISELECT(7424,4412),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn7440_N8S7740C11D1Ev,_ZThn4424_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn7440_N8S7740C11D0Ev,_ZThn4424_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C118S7740C14__A1__7S7740C2[] = {
  0,
  0,
  ABISELECT(-7440,-4424),
  ABISELECT(-7440,-4424),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn8256_N8S7740C11D1Ev,_ZThn4912_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn8256_N8S7740C11D0Ev,_ZThn4912_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C118S7740C14__A1__7S7740C2[] = {
  ABISELECT(-8256,-4912),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-8256,-4912),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C14__A3__7S7740C2[] = {
  ABISELECT(4528,2704),
  ABISELECT(5584,3332),
  ABISELECT(5504,3292),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C14__A3__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-5504,-3292),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn7440_N8S7740C14D1Ev,_ZThn4424_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn7440_N8S7740C14D0Ev,_ZThn4424_N8S7740C14D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C14__7S7740C2[] = {
  0,
  0,
  ABISELECT(-7440,-4424),
  ABISELECT(-7440,-4424),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C14__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-8176,-4872),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__8S7740C14__7S7740C2[] = {
  ABISELECT(8240,4900),
  ABISELECT(7184,4272),
  ABISELECT(8240,4900),
  ABISELECT(8160,4860),
  ABISELECT(7424,4412),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn8256_N8S7740C14D1Ev,_ZThn4912_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn8256_N8S7740C14D0Ev,_ZThn4912_N8S7740C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C14__7S7740C2[] = {
  ABISELECT(-8256,-4912),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-8256,-4912),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C14__7S7740C2[] = {
  ABISELECT(4528,2704),
  ABISELECT(5584,3332),
  ABISELECT(5504,3292),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C15D1Ev();
extern void _ZN8S7740C15D0Ev();
extern void _ZN8S7740C152v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C15__7S7740C2[] = {
  ABISELECT(4816,2860),
  ABISELECT(3760,2232),
  ABISELECT(4816,2860),
  ABISELECT(4736,2820),
  ABISELECT(4000,2372),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C128S7740C15__7S7740C2[] = {
  ABISELECT(4816,2860),
  ABISELECT(3760,2232),
  ABISELECT(4816,2860),
  ABISELECT(4736,2820),
  ABISELECT(4000,2372),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C128S7740C15__A3__7S7740C2[] = {
  ABISELECT(4816,2860),
  ABISELECT(3760,2232),
  ABISELECT(4816,2860),
  ABISELECT(4736,2820),
  ABISELECT(4000,2372),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn4000_N7S7740C5D1Ev,_ZThn2372_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn4000_N7S7740C5D0Ev,_ZThn2372_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C128S7740C15__A3__7S7740C2[] = {
  0,
  0,
  ABISELECT(-4000,-2372),
  ABISELECT(-4000,-2372),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C128S7740C15__A3__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-4736,-2820),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn4816_N7S7740C5D1Ev,_ZThn2860_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn4816_N7S7740C5D0Ev,_ZThn2860_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C128S7740C15__A3__7S7740C2[] = {
  ABISELECT(-4816,-2860),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-4816,-2860),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C128S7740C15__A4__7S7740C2[] = {
  ABISELECT(3504,2088),
  ABISELECT(4560,2716),
  ABISELECT(4480,2676),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C128S7740C15__A4__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-4480,-2676),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C128S7740C15__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-4736,-2820),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn4000_N8S7740C12D1Ev,_ZThn2372_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn4000_N8S7740C12D0Ev,_ZThn2372_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C128S7740C15__7S7740C2[] = {
  0,
  0,
  ABISELECT(-4000,-2372),
  ABISELECT(-4000,-2372),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn4816_N8S7740C12D1Ev,_ZThn2860_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn4816_N8S7740C12D0Ev,_ZThn2860_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C128S7740C15__7S7740C2[] = {
  ABISELECT(-4816,-2860),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-4816,-2860),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C128S7740C15__7S7740C2[] = {
  ABISELECT(3504,2088),
  ABISELECT(4560,2716),
  ABISELECT(4480,2676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C15__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-4736,-2820),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn4000_N8S7740C15D1Ev,_ZThn2372_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn4000_N8S7740C15D0Ev,_ZThn2372_N8S7740C15D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C15__7S7740C2[] = {
  0,
  0,
  ABISELECT(-4000,-2372),
  ABISELECT(-4000,-2372),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn4816_N8S7740C15D1Ev,_ZThn2860_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn4816_N8S7740C15D0Ev,_ZThn2860_N8S7740C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C15__7S7740C2[] = {
  ABISELECT(-4816,-2860),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-4816,-2860),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C12__A1__8S7740C15__7S7740C2[] = {
  ABISELECT(3504,2088),
  ABISELECT(4560,2716),
  ABISELECT(4480,2676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C3D1Ev();
extern void _ZN7S7740C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C3__7S7740C2[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C57S7740C3__7S7740C2[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C57S7740C3__7S7740C2[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C57S7740C3__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C57S7740C3__7S7740C2[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__7S7740C2[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C117S7740C3__A1__7S7740C2[] = {
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__7S7740C2[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__7S7740C2[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__7S7740C2[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C117S7740C3__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C117S7740C3__7S7740C2[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C117S7740C3__7S7740C2[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C117S7740C3__7S7740C2[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C3__7S7740C2[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C3__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C3__7S7740C2[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev),
};
extern void ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C11__7S7740C3__7S7740C2[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__A1__7S7740C3__7S7740C2[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C2[] = {
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__7S7740C2[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7740C13__7S7740C2[] = {
  ABISELECT(-1072,-640),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C88S7740C13__A1__7S7740C2[] = {
  ABISELECT(-1072,-640),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
static  VTT_ENTRY vtt_S7740C2[] = {
  {&(_ZTV7S7740C2[9]),  9,108},
  {&(_tg__ZTV8S7740C14__7S7740C2[7]),  7,9},
  {&(_tg__ZTV8S7740C118S7740C14__A1__7S7740C2[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C118S7740C14__A2__7S7740C2[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C118S7740C14__A2__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C118S7740C14__A2__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C118S7740C14__A2__7S7740C2[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C118S7740C14__A2__7S7740C2[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C118S7740C14__A2__7S7740C2[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C118S7740C14__A1__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C118S7740C14__A1__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C118S7740C14__A1__7S7740C2[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C118S7740C14__A1__7S7740C2[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C14__A3__7S7740C2[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C14__A3__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C14__7S7740C2[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C14__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C11__8S7740C14__7S7740C2[7]),  7,10},
  {&(_tg__ZTV8S7740C10__A1__8S7740C14__7S7740C2[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C14__7S7740C2[5]),  5,7},
  {&(_tg__ZTV8S7740C15__7S7740C2[7]),  7,11},
  {&(_tg__ZTV8S7740C128S7740C15__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C58S7740C128S7740C15__A3__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C128S7740C15__A3__7S7740C2[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C128S7740C15__A3__7S7740C2[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C128S7740C15__A3__7S7740C2[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C128S7740C15__A4__7S7740C2[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C128S7740C15__A4__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C128S7740C15__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C128S7740C15__7S7740C2[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C128S7740C15__7S7740C2[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C128S7740C15__7S7740C2[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C15__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C15__7S7740C2[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C15__7S7740C2[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C12__A1__8S7740C15__7S7740C2[5]),  5,7},
  {&(_ZTV7S7740C2[61]),  61,108},
  {&(_ZTV7S7740C2[88]),  88,108},
  {&(_ZTV7S7740C2[96]),  96,108},
  {&(_ZTV7S7740C2[102]),  102,108},
  {&(_ZTV7S7740C2[71]),  71,108},
  {&(_ZTV7S7740C2[80]),  80,108},
  {&(_ZTV7S7740C2[108]),  108,108},
  {&(_ZTV7S7740C2[18]),  18,108},
  {&(_ZTV7S7740C2[26]),  26,108},
  {&(_ZTV7S7740C2[35]),  35,108},
  {&(_ZTV7S7740C2[44]),  44,108},
  {&(_tg__ZTV7S7740C3__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C57S7740C3__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C57S7740C3__7S7740C2[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C57S7740C3__7S7740C2[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C57S7740C3__7S7740C2[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__7S7740C2[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C117S7740C3__A1__7S7740C2[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__7S7740C2[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__7S7740C2[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__7S7740C2[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C117S7740C3__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C117S7740C3__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C117S7740C3__7S7740C2[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C117S7740C3__7S7740C2[6]),  6,8},
  {&(_tg__ZTV7S7740C6__7S7740C3__7S7740C2[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C3__7S7740C2[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C3__7S7740C2[6]),  6,8},
  {&(_tg__ZTV8S7740C11__7S7740C3__7S7740C2[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C11__A1__7S7740C3__7S7740C2[7]),  7,10},
  {&(_tg__ZTV7S7740C8__7S7740C2[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C2[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__7S7740C2[4]),  4,4},
  {&(_tg__ZTV8S7740C13__7S7740C2[4]),  4,4},
  {&(_tg__ZTV7S7740C88S7740C13__A1__7S7740C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7740C2[];
extern  VTBL_ENTRY _ZTV7S7740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C2[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N8S7740C15D0Ev,_ZThn2860_N8S7740C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N8S7740C15D1Ev,_ZThn2860_N8S7740C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N8S7740C15D0Ev,_ZThn2372_N8S7740C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N8S7740C15D1Ev,_ZThn2372_N8S7740C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N8S7740C12D0Ev,_ZThn2860_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N8S7740C12D1Ev,_ZThn2860_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N8S7740C12D0Ev,_ZThn2372_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N8S7740C12D1Ev,_ZThn2372_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8256_N8S7740C14D0Ev,_ZThn4912_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8256_N8S7740C14D1Ev,_ZThn4912_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S7740C14D0Ev,_ZThn4424_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S7740C14D1Ev,_ZThn4424_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8256_N8S7740C11D0Ev,_ZThn4912_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8256_N8S7740C11D1Ev,_ZThn4912_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S7740C11D0Ev,_ZThn4424_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N8S7740C11D1Ev,_ZThn4424_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N7S7740C5D0Ev,_ZThn2860_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8240_N7S7740C5D0Ev,_ZThn4900_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4816_N7S7740C5D1Ev,_ZThn2860_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8240_N7S7740C5D1Ev,_ZThn4900_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N7S7740C5D0Ev,_ZThn2372_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7424_N7S7740C5D0Ev,_ZThn4412_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn4000_N7S7740C5D1Ev,_ZThn2372_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7424_N7S7740C5D1Ev,_ZThn4412_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C2D0Ev,_ZTv0_n24_N7S7740C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8256_N7S7740C2D0Ev,_ZThn4912_N7S7740C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C2D1Ev,_ZTv0_n24_N7S7740C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8256_N7S7740C2D1Ev,_ZThn4912_N7S7740C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C2D0Ev,_ZTv0_n12_N7S7740C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N7S7740C2D0Ev,_ZThn4424_N7S7740C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C2D1Ev,_ZTv0_n12_N7S7740C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7440_N7S7740C2D1Ev,_ZThn4424_N7S7740C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7740C2D0Ev,_ZTv0_n36_N7S7740C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N7S7740C2D0Ev,_ZThn2696_N7S7740C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7740C2D1Ev,_ZTv0_n36_N7S7740C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4512_N7S7740C2D1Ev,_ZThn2696_N7S7740C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C2 = {  "S7740C2", // class name
  bases_S7740C2, 28,
  &(vtc_S7740C2[0]), // expected_vtbl_contents
  &(vtt_S7740C2[0]), // expected_vtt_contents
  ABISELECT(8544,5116), // object size
  NSPAIRA(_ZTI7S7740C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7740C2),108, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7740C2),73, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C18  : virtual S7740C3 , S7740C12 , S19968C3 , S7740C14 {
  char s7740c18f0;
  short s7740c18f1;
  ::S19968C3 s7740c18f2[6];
  virtual  ~S7740C18(); // _ZN8S7740C18D2Ev
  S7740C18(); // tgen
};
//SIG(-1 S7740C18) C1{ VBC2{ VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC4{ VBC5{ vd v1 v2 Fp FC3 FC3 Fi[3] Fp[6] Fs FU6{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC7{ VBC8{ m} VBC3 Fp[9]} VBC9{ VBC7 vd Fi:21 Fi} BC3 v3} BC10{ VBC8 VBC7 BC9 BC4 Fi Fi Fi Fs Fi FC11{ VBC3 VBC7 BC4 BC9 BC5 vd Fi} FL Fp Fi} vd Fi} BC11 BC3 BC12{ BC3 VBC5 BC10 BC9 vd Fs Fs[4] Fs FC5} vd Fc Fs FC3[6]}


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

static void Test_S7740C18()
{
  extern Class_Descriptor cd_S7740C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(621,1469)];
    init_test(&cd_S7740C18, buf);
    S7740C18 *dp, &lv = *(dp=new (buf) S7740C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9920,5872), "sizeof(S7740C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C18)");
    /*is_ambiguous_... S7740C3::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C3*), ABISELECT(8848,5232), "S7740C18");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(8848,5232), "S7740C18");
    /*is_ambiguous_... S7740C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C12*), ABISELECT(8848,5232), "S7740C18");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C3*), ABISELECT(9088,5372), "S7740C18");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(9088,5372), "S7740C18");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C12*), ABISELECT(9088,5372), "S7740C18");
    check_base_class_offset(lv, (S7740C6*)(S7740C14*), ABISELECT(9088,5372), "S7740C18");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(9088,5372), "S7740C18");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C18");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C3*), 0, "S7740C18");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C14*), 0, "S7740C18");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C3*), ABISELECT(9824,5820), "S7740C18");
    /*is_ambiguous_... S7740C18::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(9824,5820), "S7740C18");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C3*), ABISELECT(9824,5820), "S7740C18");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(9824,5820), "S7740C18");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(9824,5820), "S7740C18");
    check_base_class_offset(lv, (S7740C8*)(S7740C12*), ABISELECT(9824,5820), "S7740C18");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C12*), ABISELECT(9824,5820), "S7740C18");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C12*), ABISELECT(9824,5820), "S7740C18");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C14*), ABISELECT(9824,5820), "S7740C18");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C14*), ABISELECT(9824,5820), "S7740C18");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(9824,5820), "S7740C18");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C14*), ABISELECT(9824,5820), "S7740C18");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C3*), ABISELECT(9904,5860), "S7740C18");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(9904,5860), "S7740C18");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C12*), ABISELECT(9904,5860), "S7740C18");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(9904,5860), "S7740C18");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C3*), ABISELECT(6176,3648), "S7740C18");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C5*)(S7740C3*), ABISELECT(6160,3644), "S7740C18");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(6416,3788), "S7740C18");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(6448,3804), "S7740C18");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(6432,3800), "S7740C18");
    check_base_class_offset(lv, (S7740C11*)(S7740C3*), ABISELECT(6416,3788), "S7740C18");
    check_base_class_offset(lv, (S7740C3*), ABISELECT(6160,3644), "S7740C18");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C12*), ABISELECT(16,4), "S7740C18");
    check_base_class_offset(lv, (S7740C5*)(S7740C12*), 0, "S7740C18");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C12*), ABISELECT(256,144), "S7740C18");
    /*is_ambiguous_... S7740C12::S7740C6 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C12*), ABISELECT(272,156), "S7740C18");
    check_base_class_offset(lv, (S7740C12*), 0, "S7740C18");
    /*is_ambiguous_... S7740C18::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S7740C18");
    /*is_ambiguous_... S7740C14::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C14*), ABISELECT(3696,2188), "S7740C18");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C14*), ABISELECT(1264,748), "S7740C18");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(1296,764), "S7740C18");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C14*), ABISELECT(1280,760), "S7740C18");
    check_base_class_offset(lv, (S7740C11*)(S7740C14*), ABISELECT(1264,748), "S7740C18");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C14*), ABISELECT(3936,2328), "S7740C18");
    check_base_class_offset(lv, (S7740C14*), ABISELECT(1264,748), "S7740C18");
    check_field_offset(lv, s7740c18f0, ABISELECT(4704,2800), "S7740C18.s7740c18f0");
    check_field_offset(lv, s7740c18f1, ABISELECT(4706,2802), "S7740C18.s7740c18f1");
    check_field_offset(lv, s7740c18f2, ABISELECT(4720,2804), "S7740C18.s7740c18f2");
    test_class_info(&lv, &cd_S7740C18);
    dp->~S7740C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C18(Test_S7740C18, "S7740C18", ABISELECT(9920,5872));

#else // __cplusplus

extern void _ZN8S7740C18C1Ev();
extern void _ZN8S7740C18D2Ev();
Name_Map name_map_S7740C18[] = {
  NSPAIR(_ZN8S7740C18C1Ev),
  NSPAIR(_ZN8S7740C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C3;
extern VTBL_ENTRY _ZTI7S7740C3[];
extern  VTBL_ENTRY _ZTV7S7740C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C12;
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C14;
extern VTBL_ENTRY _ZTI8S7740C14[];
extern  VTBL_ENTRY _ZTV8S7740C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C14[];
static Base_Class bases_S7740C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(8848,5232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C6,    ABISELECT(9088,5372), //bcp->offset
    81, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(9824,5820), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(9904,5860), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(6176,3648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7740C5,    ABISELECT(6160,3644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(6416,3788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6448,3804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(6432,3800), //bcp->offset
    71, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(6416,3788), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C3,    ABISELECT(6160,3644), //bcp->offset
    50, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7740C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(256,144), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7740C6,    ABISELECT(272,156), //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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7740C12,    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_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19968C3,    ABISELECT(3696,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1296,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(1280,760), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(3936,2328), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7740C14,    ABISELECT(1264,748), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C18[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C18D1Ev();
extern void _ZN8S7740C18D0Ev();
extern void ABISELECT(_ZThn256_N8S7740C18D1Ev,_ZThn144_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C18D0Ev,_ZThn144_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn272_N8S7740C18D1Ev,_ZThn156_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn272_N8S7740C18D0Ev,_ZThn156_N8S7740C18D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZThn1264_N8S7740C18D1Ev,_ZThn748_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn1264_N8S7740C18D0Ev,_ZThn748_N8S7740C18D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn1280_N8S7740C18D1Ev,_ZThn760_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn1280_N8S7740C18D0Ev,_ZThn760_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn3936_N8S7740C18D1Ev,_ZThn2328_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn3936_N8S7740C18D0Ev,_ZThn2328_N8S7740C18D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn6160_N8S7740C18D1Ev,_ZThn3644_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn6160_N8S7740C18D0Ev,_ZThn3644_N8S7740C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N8S7740C18D1Ev,_ZTvn144_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S7740C18D0Ev,_ZTvn144_n36_N8S7740C18D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N8S7740C18D1Ev,_ZTvn156_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S7740C18D0Ev,_ZTvn156_n36_N8S7740C18D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn9088_N8S7740C18D1Ev,_ZThn5372_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn9088_N8S7740C18D0Ev,_ZThn5372_N8S7740C18D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn9904_N8S7740C18D1Ev,_ZThn5860_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn9904_N8S7740C18D0Ev,_ZThn5860_N8S7740C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C18[] = {
  ABISELECT(6160,3644),
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C18D0Ev,
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C18D1Ev,_ZThn144_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C18D0Ev,_ZThn144_N8S7740C18D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C18D1Ev,_ZThn156_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C18D0Ev,_ZThn156_N8S7740C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C18D1Ev,_ZThn748_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C18D0Ev,_ZThn748_N8S7740C18D0Ev),
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C18D1Ev,_ZThn760_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C18D0Ev,_ZThn760_N8S7740C18D0Ev),
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C18D1Ev,_ZThn2328_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C18D0Ev,_ZThn2328_N8S7740C18D0Ev),
  ABISELECT(-6160,-3644),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-6160,-3644),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-6416,-3788),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C18D1Ev,_ZTvn144_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C18D0Ev,_ZTvn144_n36_N8S7740C18D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-6432,-3800),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C18D1Ev,_ZTvn156_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C18D0Ev,_ZTvn156_n36_N8S7740C18D0Ev),
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev),
};
extern VTBL_ENTRY _ZTV8S7740C18[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C12__8S7740C18[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C12__A2__8S7740C18[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn9088_N7S7740C5D1Ev,_ZThn5372_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn9088_N7S7740C5D0Ev,_ZThn5372_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C12__A2__8S7740C18[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C12__A2__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn9904_N7S7740C5D1Ev,_ZThn5860_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn9904_N7S7740C5D0Ev,_ZThn5860_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C12__A2__8S7740C18[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C12__A2__8S7740C18[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C12__A2__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9568,-5676),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C12__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn9088_N8S7740C12D1Ev,_ZThn5372_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn9088_N8S7740C12D0Ev,_ZThn5372_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C12__8S7740C18[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn9904_N8S7740C12D1Ev,_ZThn5860_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn9904_N8S7740C12D0Ev,_ZThn5860_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C12__8S7740C18[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C12__8S7740C18[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
};
extern void _ZN8S7740C14D1Ev();
extern void _ZN8S7740C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C14__8S7740C18[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN8S7740C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C14D0Ev,
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C118S7740C14__A1__8S7740C18[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C118S7740C14__A3__8S7740C18[] = {
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C118S7740C14__A3__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C14__A3__8S7740C18[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn7808_N7S7740C5D1Ev,_ZThn4612_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn7808_N7S7740C5D0Ev,_ZThn4612_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C118S7740C14__A3__8S7740C18[] = {
  0,
  0,
  ABISELECT(-7808,-4612),
  ABISELECT(-7808,-4612),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C118S7740C14__A3__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8544,-5060),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn8624_N7S7740C5D1Ev,_ZThn5100_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn8624_N7S7740C5D0Ev,_ZThn5100_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C118S7740C14__A3__8S7740C18[] = {
  ABISELECT(-8624,-5100),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8624,-5100),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C118S7740C14__A1__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C118S7740C14__A1__8S7740C18[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn7824_N8S7740C11D1Ev,_ZThn4624_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn7824_N8S7740C11D0Ev,_ZThn4624_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C118S7740C14__A1__8S7740C18[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn8640_N8S7740C11D1Ev,_ZThn5112_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn8640_N8S7740C11D0Ev,_ZThn5112_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C118S7740C14__A1__8S7740C18[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C14__A4__8S7740C18[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C14__A4__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-5888,-3492),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn7824_N8S7740C14D1Ev,_ZThn4624_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn7824_N8S7740C14D0Ev,_ZThn4624_N8S7740C14D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C14__8S7740C18[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C14__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__8S7740C14__8S7740C18[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn8640_N8S7740C14D1Ev,_ZThn5112_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn8640_N8S7740C14D0Ev,_ZThn5112_N8S7740C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C14__8S7740C18[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C14__8S7740C18[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C3D1Ev();
extern void _ZN7S7740C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C3__8S7740C18[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C57S7740C3__8S7740C18[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C57S7740C3__8S7740C18[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C57S7740C3__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C57S7740C3__8S7740C18[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__8S7740C18[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C117S7740C3__A1__8S7740C18[] = {
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C18[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__8S7740C18[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__8S7740C18[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C117S7740C3__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C117S7740C3__8S7740C18[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C117S7740C3__8S7740C18[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C117S7740C3__8S7740C18[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C3__8S7740C18[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C3__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C3__8S7740C18[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev),
};
extern void ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C11__7S7740C3__8S7740C18[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__A1__7S7740C3__8S7740C18[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C18[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__8S7740C18[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C18[] = {
  {&(_ZTV8S7740C18[8]),  8,102},
  {&(_tg__ZTV8S7740C12__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C58S7740C12__A2__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C12__A2__8S7740C18[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C12__A2__8S7740C18[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C12__A2__8S7740C18[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C12__A2__8S7740C18[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C12__A2__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C12__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C12__8S7740C18[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C12__8S7740C18[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C12__8S7740C18[5]),  5,7},
  {&(_tg__ZTV8S7740C14__8S7740C18[7]),  7,9},
  {&(_tg__ZTV8S7740C118S7740C14__A1__8S7740C18[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C118S7740C14__A3__8S7740C18[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C118S7740C14__A3__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C118S7740C14__A3__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C118S7740C14__A3__8S7740C18[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C118S7740C14__A3__8S7740C18[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C118S7740C14__A3__8S7740C18[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C118S7740C14__A1__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C118S7740C14__A1__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C118S7740C14__A1__8S7740C18[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C118S7740C14__A1__8S7740C18[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C14__A4__8S7740C18[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C14__A4__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C14__8S7740C18[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C14__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C11__8S7740C14__8S7740C18[7]),  7,10},
  {&(_tg__ZTV8S7740C10__A1__8S7740C14__8S7740C18[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C14__8S7740C18[5]),  5,7},
  {&(_ZTV8S7740C18[59]),  59,102},
  {&(_ZTV8S7740C18[86]),  86,102},
  {&(_ZTV8S7740C18[94]),  94,102},
  {&(_ZTV8S7740C18[100]),  100,102},
  {&(_ZTV8S7740C18[69]),  69,102},
  {&(_ZTV8S7740C18[78]),  78,102},
  {&(_ZTV8S7740C18[16]),  16,102},
  {&(_ZTV8S7740C18[31]),  31,102},
  {&(_ZTV8S7740C18[40]),  40,102},
  {&(_ZTV8S7740C18[48]),  48,102},
  {&(_tg__ZTV7S7740C3__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C57S7740C3__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C57S7740C3__8S7740C18[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C57S7740C3__8S7740C18[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C57S7740C3__8S7740C18[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__8S7740C18[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C117S7740C3__A1__8S7740C18[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__8S7740C18[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__8S7740C18[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__8S7740C18[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C117S7740C3__8S7740C18[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C117S7740C3__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C117S7740C3__8S7740C18[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C117S7740C3__8S7740C18[6]),  6,8},
  {&(_tg__ZTV7S7740C6__7S7740C3__8S7740C18[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C3__8S7740C18[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C3__8S7740C18[6]),  6,8},
  {&(_tg__ZTV8S7740C11__7S7740C3__8S7740C18[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C11__A1__7S7740C3__8S7740C18[7]),  7,10},
  {&(_tg__ZTV7S7740C8__8S7740C18[4]),  4,4},
  {&(_tg__ZTV8S7740C10__8S7740C18[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__8S7740C18[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C18[];
extern  VTBL_ENTRY _ZTV8S7740C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C18[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7740C14D0Ev,_ZThn5112_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7740C14D1Ev,_ZThn5112_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7740C14D0Ev,_ZThn4624_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7740C14D1Ev,_ZThn4624_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7740C11D0Ev,_ZThn5112_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7740C11D1Ev,_ZThn5112_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7740C11D0Ev,_ZThn4624_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S7740C11D1Ev,_ZThn4624_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S7740C12D0Ev,_ZThn5860_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S7740C12D1Ev,_ZThn5860_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S7740C12D0Ev,_ZThn5372_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S7740C12D1Ev,_ZThn5372_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S7740C5D0Ev,_ZThn5100_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N7S7740C5D0Ev,_ZThn5860_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S7740C5D1Ev,_ZThn5100_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N7S7740C5D1Ev,_ZThn5860_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N7S7740C5D0Ev,_ZThn4612_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N7S7740C5D0Ev,_ZThn5372_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N7S7740C5D1Ev,_ZThn4612_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N7S7740C5D1Ev,_ZThn5372_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S7740C18D0Ev,_ZThn5860_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S7740C18D1Ev,_ZThn5860_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S7740C18D0Ev,_ZThn5372_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S7740C18D1Ev,_ZThn5372_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S7740C18D0Ev,_ZThn3644_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S7740C18D1Ev,_ZThn3644_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C18 = {  "S7740C18", // class name
  bases_S7740C18, 25,
  &(vtc_S7740C18[0]), // expected_vtbl_contents
  &(vtt_S7740C18[0]), // expected_vtt_contents
  ABISELECT(9920,5872), // object size
  NSPAIRA(_ZTI8S7740C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7740C18),102, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C18),65, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C17  : S7740C18 {
  int s7740c17f0;
  short s7740c17f1;
  int s7740c17f2[8];
  ::S7740C12 s7740c17f3;
  int s7740c17f4;
  int s7740c17f5:9;
  virtual  ~S7740C17(); // _ZN8S7740C17D2Ev
  virtual void  v6(); // _ZN8S7740C172v6Ev
  virtual void  v7(); // _ZN8S7740C172v7Ev
  S7740C17(); // tgen
};
//SIG(-1 S7740C17) C1{ BC2{ VBC3{ VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC5{ VBC6{ vd v3 v4 Fp FC4 FC4 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC8{ VBC9{ m} VBC4 Fp[9]} VBC10{ VBC8 vd Fi:21 Fi} BC4 v5} BC11{ VBC9 VBC8 BC10 BC5 Fi Fi Fi Fs Fi FC12{ VBC4 VBC8 BC5 BC10 BC6 vd Fi} FL Fp Fi} vd Fi} BC12 BC4 BC13{ BC4 VBC6 BC11 BC10 vd Fs Fs[4] Fs FC6} vd Fc Fs FC4[6]} vd v1 v2 Fi Fs Fi[8] FC12 Fi Fi:9}


 S7740C17 ::~S7740C17(){ note_dtor("S7740C17", this);}
void  S7740C17 ::v6(){vfunc_called(this, "_ZN8S7740C172v6Ev");}
void  S7740C17 ::v7(){vfunc_called(this, "_ZN8S7740C172v7Ev");}
S7740C17 ::S7740C17(){ note_ctor("S7740C17", this);} // tgen

static void Test_S7740C17()
{
  extern Class_Descriptor cd_S7740C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(756,1793)];
    init_test(&cd_S7740C17, buf);
    S7740C17 *dp, &lv = *(dp=new (buf) S7740C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12080,7168), "sizeof(S7740C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C17)");
    /*is_ambiguous_... S7740C3::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C3*), ABISELECT(11008,6528), "S7740C17");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(11008,6528), "S7740C17");
    /*is_ambiguous_... S7740C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C12*)(S7740C18*), ABISELECT(11008,6528), "S7740C17");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C3*), ABISELECT(11248,6668), "S7740C17");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(11248,6668), "S7740C17");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C12*)(S7740C18*), ABISELECT(11248,6668), "S7740C17");
    check_base_class_offset(lv, (S7740C6*)(S7740C14*)(S7740C18*), ABISELECT(11248,6668), "S7740C17");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(11248,6668), "S7740C17");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*), 0, "S7740C17");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C3*), 0, "S7740C17");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C14*)(S7740C18*), 0, "S7740C17");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C3*), ABISELECT(11984,7116), "S7740C17");
    /*is_ambiguous_... S7740C17::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(11984,7116), "S7740C17");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C3*), ABISELECT(11984,7116), "S7740C17");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(11984,7116), "S7740C17");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(11984,7116), "S7740C17");
    check_base_class_offset(lv, (S7740C8*)(S7740C12*)(S7740C18*), ABISELECT(11984,7116), "S7740C17");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C12*)(S7740C18*), ABISELECT(11984,7116), "S7740C17");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C12*)(S7740C18*), ABISELECT(11984,7116), "S7740C17");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(11984,7116), "S7740C17");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(11984,7116), "S7740C17");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(11984,7116), "S7740C17");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C14*)(S7740C18*), ABISELECT(11984,7116), "S7740C17");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C3*), ABISELECT(12064,7156), "S7740C17");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(12064,7156), "S7740C17");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C12*)(S7740C18*), ABISELECT(12064,7156), "S7740C17");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(12064,7156), "S7740C17");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C3*), ABISELECT(8336,4944), "S7740C17");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C5*)(S7740C3*), ABISELECT(8320,4940), "S7740C17");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(8576,5084), "S7740C17");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(8608,5100), "S7740C17");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(8592,5096), "S7740C17");
    check_base_class_offset(lv, (S7740C11*)(S7740C3*), ABISELECT(8576,5084), "S7740C17");
    check_base_class_offset(lv, (S7740C3*)(S7740C18*), ABISELECT(8320,4940), "S7740C17");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C12*)(S7740C18*), ABISELECT(16,4), "S7740C17");
    check_base_class_offset(lv, (S7740C5*)(S7740C12*)(S7740C18*), 0, "S7740C17");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C12*)(S7740C18*), ABISELECT(256,144), "S7740C17");
    /*is_ambiguous_... S7740C12::S7740C6 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C12*)(S7740C18*), ABISELECT(272,156), "S7740C17");
    check_base_class_offset(lv, (S7740C12*)(S7740C18*), 0, "S7740C17");
    /*is_ambiguous_... S7740C18::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C18*), ABISELECT(1024,608), "S7740C17");
    /*is_ambiguous_... S7740C14::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C14*)(S7740C18*), ABISELECT(3696,2188), "S7740C17");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(1264,748), "S7740C17");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(1296,764), "S7740C17");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(1280,760), "S7740C17");
    check_base_class_offset(lv, (S7740C11*)(S7740C14*)(S7740C18*), ABISELECT(1264,748), "S7740C17");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C14*)(S7740C18*), ABISELECT(3936,2328), "S7740C17");
    check_base_class_offset(lv, (S7740C14*)(S7740C18*), ABISELECT(1264,748), "S7740C17");
    check_base_class_offset(lv, (S7740C18*), 0, "S7740C17");
    check_field_offset(lv, s7740c17f0, ABISELECT(6160,3644), "S7740C17.s7740c17f0");
    check_field_offset(lv, s7740c17f1, ABISELECT(6164,3648), "S7740C17.s7740c17f1");
    check_field_offset(lv, s7740c17f2, ABISELECT(6168,3652), "S7740C17.s7740c17f2");
    check_field_offset(lv, s7740c17f3, ABISELECT(6208,3684), "S7740C17.s7740c17f3");
    check_field_offset(lv, s7740c17f4, ABISELECT(8304,4932), "S7740C17.s7740c17f4");
    set_bf_and_test(lv, s7740c17f5, ABISELECT(8308,4936), 0, 9, 1, "S7740C17");
    set_bf_and_test(lv, s7740c17f5, ABISELECT(8308,4936), 0, 9, hide_sll(1LL<<8), "S7740C17");
    test_class_info(&lv, &cd_S7740C17);
    dp->~S7740C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C17(Test_S7740C17, "S7740C17", ABISELECT(12080,7168));

#else // __cplusplus

extern void _ZN8S7740C17C1Ev();
extern void _ZN8S7740C17D2Ev();
Name_Map name_map_S7740C17[] = {
  NSPAIR(_ZN8S7740C17C1Ev),
  NSPAIR(_ZN8S7740C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C3;
extern VTBL_ENTRY _ZTI7S7740C3[];
extern  VTBL_ENTRY _ZTV7S7740C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C12;
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C14;
extern VTBL_ENTRY _ZTI8S7740C14[];
extern  VTBL_ENTRY _ZTV8S7740C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C14[];
extern Class_Descriptor cd_S7740C18;
extern VTBL_ENTRY _ZTI8S7740C18[];
extern  VTBL_ENTRY _ZTV8S7740C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C18[];
static Base_Class bases_S7740C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(11008,6528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C6,    ABISELECT(11248,6668), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(11984,7116), //bcp->offset
    92, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(12064,7156), //bcp->offset
    96, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(8336,4944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7740C5,    ABISELECT(8320,4940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(8576,5084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(8608,5100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(8592,5096), //bcp->offset
    73, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(8576,5084), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C3,    ABISELECT(8320,4940), //bcp->offset
    52, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7740C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(256,144), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7740C6,    ABISELECT(272,156), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7740C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(3696,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1296,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(1280,760), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(3936,2328), //bcp->offset
    45, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7740C14,    ABISELECT(1264,748), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S7740C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7740C17[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C17D1Ev();
extern void _ZN8S7740C17D0Ev();
extern void _ZN8S7740C172v6Ev();
extern void _ZN8S7740C172v7Ev();
extern void ABISELECT(_ZThn256_N8S7740C17D1Ev,_ZThn144_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C17D0Ev,_ZThn144_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn272_N8S7740C17D1Ev,_ZThn156_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn272_N8S7740C17D0Ev,_ZThn156_N8S7740C17D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZThn1264_N8S7740C17D1Ev,_ZThn748_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn1264_N8S7740C17D0Ev,_ZThn748_N8S7740C17D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn1280_N8S7740C17D1Ev,_ZThn760_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn1280_N8S7740C17D0Ev,_ZThn760_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn3936_N8S7740C17D1Ev,_ZThn2328_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn3936_N8S7740C17D0Ev,_ZThn2328_N8S7740C17D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S7740C17D1Ev,_ZTv0_n36_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C17D1Ev,_ZThn4940_N8S7740C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7740C17D0Ev,_ZTv0_n36_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C17D0Ev,_ZThn4940_N8S7740C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N8S7740C17D1Ev,_ZTvn144_n36_N8S7740C17D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S7740C17D0Ev,_ZTvn144_n36_N8S7740C17D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N8S7740C17D1Ev,_ZTvn156_n36_N8S7740C17D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S7740C17D0Ev,_ZTvn156_n36_N8S7740C17D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S7740C17D1Ev,_ZTv0_n12_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C17D1Ev,_ZThn6668_N8S7740C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C17D0Ev,_ZTv0_n12_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C17D0Ev,_ZThn6668_N8S7740C17D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S7740C17D1Ev,_ZTv0_n24_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C17D1Ev,_ZThn7156_N8S7740C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C17D0Ev,_ZTv0_n24_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C17D0Ev,_ZThn7156_N8S7740C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C17[] = {
  ABISELECT(8320,4940),
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C17D0Ev,
  (VTBL_ENTRY)&_ZN8S7740C172v6Ev,
  (VTBL_ENTRY)&_ZN8S7740C172v7Ev,
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C17D1Ev,_ZThn144_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C17D0Ev,_ZThn144_N8S7740C17D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C17D1Ev,_ZThn156_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S7740C17D0Ev,_ZThn156_N8S7740C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C17D1Ev,_ZThn748_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C17D0Ev,_ZThn748_N8S7740C17D0Ev),
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C17D1Ev,_ZThn760_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C17D0Ev,_ZThn760_N8S7740C17D0Ev),
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C17D1Ev,_ZThn2328_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C17D0Ev,_ZThn2328_N8S7740C17D0Ev),
  ABISELECT(-8320,-4940),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4940),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C17D1Ev,_ZTv0_n36_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C17D0Ev,_ZTv0_n36_N8S7740C17D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5084),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C17D1Ev,_ZTvn144_n36_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C17D0Ev,_ZTvn144_n36_N8S7740C17D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5096),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C17D1Ev,_ZTvn156_n36_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C17D0Ev,_ZTvn156_n36_N8S7740C17D0Ev),
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C17D1Ev,_ZTv0_n12_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C17D0Ev,_ZTv0_n12_N8S7740C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C17D1Ev,_ZTv0_n24_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C17D0Ev,_ZTv0_n24_N8S7740C17D0Ev),
};
extern VTBL_ENTRY _ZTV8S7740C17[];
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C18D1Ev();
extern void _ZN8S7740C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C18__8S7740C17[] = {
  ABISELECT(8320,4940),
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C18D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C128S7740C18__8S7740C17[] = {
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C128S7740C18__A2__8S7740C17[] = {
  ABISELECT(12064,7156),
  ABISELECT(11008,6528),
  0,
  ABISELECT(11984,7116),
  ABISELECT(11248,6668),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn11248_N7S7740C5D1Ev,_ZThn6668_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn11248_N7S7740C5D0Ev,_ZThn6668_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C128S7740C18__A2__8S7740C17[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C128S7740C18__A2__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn12064_N7S7740C5D1Ev,_ZThn7156_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn12064_N7S7740C5D0Ev,_ZThn7156_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C128S7740C18__A2__8S7740C17[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C128S7740C18__A2__8S7740C17[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C128S7740C18__A2__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11728,-6972),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C128S7740C18__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C12D1Ev,_ZThn6668_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C12D0Ev,_ZThn6668_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C128S7740C18__8S7740C17[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C12D1Ev,_ZThn7156_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C12D0Ev,_ZThn7156_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C128S7740C18__8S7740C17[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C128S7740C18__8S7740C17[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
};
extern void _ZN8S7740C14D1Ev();
extern void _ZN8S7740C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C148S7740C18__8S7740C17[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN8S7740C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C14D0Ev,
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C118S7740C148S7740C18__A1__8S7740C17[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C118S7740C148S7740C18__A3__8S7740C17[] = {
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C118S7740C148S7740C18__A3__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn9968_N7S7740C5D1Ev,_ZThn5908_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn9968_N7S7740C5D0Ev,_ZThn5908_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[] = {
  0,
  0,
  ABISELECT(-9968,-5908),
  ABISELECT(-9968,-5908),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10704,-6356),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn10784_N7S7740C5D1Ev,_ZThn6396_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn10784_N7S7740C5D0Ev,_ZThn6396_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[] = {
  ABISELECT(-10784,-6396),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10784,-6396),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C118S7740C148S7740C18__A1__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C118S7740C148S7740C18__A1__8S7740C17[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C11D1Ev,_ZThn5920_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C11D0Ev,_ZThn5920_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C118S7740C148S7740C18__A1__8S7740C17[] = {
  0,
  0,
  ABISELECT(-9984,-5920),
  ABISELECT(-9984,-5920),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C11D1Ev,_ZThn6408_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C11D0Ev,_ZThn6408_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C118S7740C148S7740C18__A1__8S7740C17[] = {
  ABISELECT(-10800,-6408),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6408),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C148S7740C18__A4__8S7740C17[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C148S7740C18__A4__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-8048,-4788),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C14D1Ev,_ZThn5920_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C14D0Ev,_ZThn5920_N8S7740C14D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C148S7740C18__8S7740C17[] = {
  0,
  0,
  ABISELECT(-9984,-5920),
  ABISELECT(-9984,-5920),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C148S7740C18__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-10720,-6368),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__8S7740C148S7740C18__8S7740C17[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C14D1Ev,_ZThn6408_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C14D0Ev,_ZThn6408_N8S7740C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C148S7740C18__8S7740C17[] = {
  ABISELECT(-10800,-6408),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6408),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C148S7740C18__8S7740C17[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C18D1Ev,_ZThn4940_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C18D0Ev,_ZThn4940_N8S7740C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7740C3__8S7740C18__8S7740C17[] = {
  ABISELECT(-8320,-4940),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4940),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C18D1Ev,_ZThn6668_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C18D0Ev,_ZThn6668_N8S7740C18D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C18__8S7740C17[] = {
  0,
  0,
  ABISELECT(-11248,-6668),
  ABISELECT(-11248,-6668),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C18__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-11984,-7116),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C18D1Ev,_ZThn7156_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C18D0Ev,_ZThn7156_N8S7740C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C18__8S7740C17[] = {
  ABISELECT(-12064,-7156),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7156),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S7740C18D1Ev,_ZTvn144_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S7740C18D0Ev,_ZTvn144_n36_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__8S7740C18__8S7740C17[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5084),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C18D1Ev,_ZTvn144_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C18D0Ev,_ZTvn144_n36_N8S7740C18D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N8S7740C18D1Ev,_ZTvn156_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S7740C18D0Ev,_ZTvn156_n36_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C18__8S7740C17[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5096),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C18D1Ev,_ZTvn156_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C18D0Ev,_ZTvn156_n36_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C18D1Ev,_ZThn144_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C18D0Ev,_ZThn144_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C12__A2__8S7740C18__8S7740C17[] = {
  ABISELECT(10752,6384),
  ABISELECT(-256,-144),
  ABISELECT(11728,6972),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C18D1Ev,_ZThn144_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C18D0Ev,_ZThn144_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S7740C18D1Ev,_ZThn748_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn1264_N8S7740C18D0Ev,_ZThn748_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C14__8S7740C18__8S7740C17[] = {
  ABISELECT(10800,6408),
  ABISELECT(9984,5920),
  ABISELECT(9744,5780),
  ABISELECT(-1264,-748),
  ABISELECT(10720,6368),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C18D1Ev,_ZThn748_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C18D0Ev,_ZThn748_N8S7740C18D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn1280_N8S7740C18D1Ev,_ZThn760_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn1280_N8S7740C18D0Ev,_ZThn760_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C14__A3__8S7740C18__8S7740C17[] = {
  ABISELECT(10784,6396),
  ABISELECT(9728,5768),
  ABISELECT(-1280,-760),
  ABISELECT(10704,6356),
  ABISELECT(9968,5908),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C18D1Ev,_ZThn760_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C18D0Ev,_ZThn760_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S7740C18D1Ev,_ZThn2328_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn3936_N8S7740C18D0Ev,_ZThn2328_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C14__A4__8S7740C18__8S7740C17[] = {
  ABISELECT(7072,4200),
  ABISELECT(-3936,-2328),
  ABISELECT(8048,4788),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C18D1Ev,_ZThn2328_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C18D0Ev,_ZThn2328_N8S7740C18D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C3D1Ev();
extern void _ZN7S7740C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C3__8S7740C17[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C57S7740C3__8S7740C17[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-8320,-4940),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C57S7740C3__8S7740C17[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C57S7740C3__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C57S7740C3__8S7740C17[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__8S7740C17[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C117S7740C3__A1__8S7740C17[] = {
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C17[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__8S7740C17[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__8S7740C17[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C117S7740C3__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C117S7740C3__8S7740C17[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C117S7740C3__8S7740C17[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C117S7740C3__8S7740C17[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C3__8S7740C17[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C3__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C3__8S7740C17[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev),
};
extern void ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C11__7S7740C3__8S7740C17[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-8576,-5084),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__A1__7S7740C3__8S7740C17[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-8592,-5096),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C17[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-12064,-7156),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__8S7740C17[] = {
  ABISELECT(-976,-588),
  ABISELECT(-11984,-7116),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTT_ENTRY vtt_S7740C17[] = {
  {&(_ZTV8S7740C17[8]),  8,104},
  {&(_tg__ZTV8S7740C18__8S7740C17[8]),  8,11},
  {&(_tg__ZTV8S7740C128S7740C18__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C58S7740C128S7740C18__A2__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C128S7740C18__A2__8S7740C17[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C128S7740C18__A2__8S7740C17[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C128S7740C18__A2__8S7740C17[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C128S7740C18__A2__8S7740C17[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C128S7740C18__A2__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C128S7740C18__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C128S7740C18__8S7740C17[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C128S7740C18__8S7740C17[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C128S7740C18__8S7740C17[5]),  5,7},
  {&(_tg__ZTV8S7740C148S7740C18__8S7740C17[7]),  7,9},
  {&(_tg__ZTV8S7740C118S7740C148S7740C18__A1__8S7740C17[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C118S7740C148S7740C18__A3__8S7740C17[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C118S7740C148S7740C18__A3__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C118S7740C148S7740C18__A1__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C118S7740C148S7740C18__A1__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C118S7740C148S7740C18__A1__8S7740C17[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C118S7740C148S7740C18__A1__8S7740C17[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C148S7740C18__A4__8S7740C17[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C148S7740C18__A4__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C148S7740C18__8S7740C17[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C148S7740C18__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C11__8S7740C148S7740C18__8S7740C17[7]),  7,10},
  {&(_tg__ZTV8S7740C10__A1__8S7740C148S7740C18__8S7740C17[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C148S7740C18__8S7740C17[5]),  5,7},
  {&(_tg__ZTV7S7740C3__8S7740C18__8S7740C17[9]),  9,12},
  {&(_tg__ZTV7S7740C6__8S7740C18__8S7740C17[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C18__8S7740C17[4]),  4,4},
  {&(_tg__ZTV8S7740C10__8S7740C18__8S7740C17[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__8S7740C18__8S7740C17[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C18__8S7740C17[7]),  7,10},
  {&(_tg__ZTV8S7740C108S7740C12__A2__8S7740C18__8S7740C17[5]),  5,7},
  {&(_tg__ZTV8S7740C14__8S7740C18__8S7740C17[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C118S7740C14__A3__8S7740C18__8S7740C17[7]),  7,10},
  {&(_tg__ZTV8S7740C108S7740C14__A4__8S7740C18__8S7740C17[5]),  5,7},
  {&(_ZTV8S7740C17[61]),  61,104},
  {&(_ZTV8S7740C17[88]),  88,104},
  {&(_ZTV8S7740C17[96]),  96,104},
  {&(_ZTV8S7740C17[102]),  102,104},
  {&(_ZTV8S7740C17[71]),  71,104},
  {&(_ZTV8S7740C17[80]),  80,104},
  {&(_ZTV8S7740C17[18]),  18,104},
  {&(_ZTV8S7740C17[33]),  33,104},
  {&(_ZTV8S7740C17[42]),  42,104},
  {&(_ZTV8S7740C17[50]),  50,104},
  {&(_tg__ZTV7S7740C3__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C57S7740C3__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C57S7740C3__8S7740C17[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C57S7740C3__8S7740C17[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C57S7740C3__8S7740C17[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__8S7740C17[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C117S7740C3__A1__8S7740C17[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__8S7740C17[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__8S7740C17[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__8S7740C17[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C117S7740C3__8S7740C17[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C117S7740C3__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C117S7740C3__8S7740C17[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C117S7740C3__8S7740C17[6]),  6,8},
  {&(_tg__ZTV7S7740C6__7S7740C3__8S7740C17[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C3__8S7740C17[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C3__8S7740C17[6]),  6,8},
  {&(_tg__ZTV8S7740C11__7S7740C3__8S7740C17[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C11__A1__7S7740C3__8S7740C17[7]),  7,10},
  {&(_tg__ZTV7S7740C8__8S7740C17[4]),  4,4},
  {&(_tg__ZTV8S7740C10__8S7740C17[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__8S7740C17[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7740C17[];
extern  VTBL_ENTRY _ZTV8S7740C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C17[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C18D0Ev,_ZThn7156_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C18D1Ev,_ZThn7156_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C18D0Ev,_ZThn6668_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C18D1Ev,_ZThn6668_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C18D0Ev,_ZThn4940_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C18D1Ev,_ZThn4940_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C14D0Ev,_ZThn6408_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C14D1Ev,_ZThn6408_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C14D0Ev,_ZThn5920_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C14D1Ev,_ZThn5920_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C11D0Ev,_ZThn6408_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C11D1Ev,_ZThn6408_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C11D0Ev,_ZThn5920_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C11D1Ev,_ZThn5920_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C12D0Ev,_ZThn7156_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C12D1Ev,_ZThn7156_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C12D0Ev,_ZThn6668_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C12D1Ev,_ZThn6668_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N7S7740C5D0Ev,_ZThn6396_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N7S7740C5D0Ev,_ZThn7156_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N7S7740C5D1Ev,_ZThn6396_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N7S7740C5D1Ev,_ZThn7156_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N7S7740C5D0Ev,_ZThn5908_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N7S7740C5D0Ev,_ZThn6668_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N7S7740C5D1Ev,_ZThn5908_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N7S7740C5D1Ev,_ZThn6668_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C17D0Ev,_ZTv0_n24_N8S7740C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C17D0Ev,_ZThn7156_N8S7740C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C17D1Ev,_ZTv0_n24_N8S7740C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C17D1Ev,_ZThn7156_N8S7740C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C17D0Ev,_ZTv0_n12_N8S7740C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C17D0Ev,_ZThn6668_N8S7740C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C17D1Ev,_ZTv0_n12_N8S7740C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C17D1Ev,_ZThn6668_N8S7740C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C17D0Ev,_ZTv0_n36_N8S7740C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C17D0Ev,_ZThn4940_N8S7740C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C17D1Ev,_ZTv0_n36_N8S7740C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C17D1Ev,_ZThn4940_N8S7740C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C17 = {  "S7740C17", // class name
  bases_S7740C17, 26,
  &(vtc_S7740C17[0]), // expected_vtbl_contents
  &(vtt_S7740C17[0]), // expected_vtt_contents
  ABISELECT(12080,7168), // object size
  NSPAIRA(_ZTI8S7740C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7740C17),104, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7740C17),76, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7740C1  : S7740C2 , S7740C15 , S7740C17 {
  void *s7740c1f0;
  virtual void  v1(); // _ZN7S7740C12v1Ev
  ~S7740C1(); // tgen
  S7740C1(); // tgen
};
//SIG(1 S7740C1) C1{ BC2{ VBC3{ VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC5{ VBC6{ vd v2 v3 Fp FC4 FC4 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC8{ VBC9{ m} VBC4 Fp[9]} VBC10{ VBC8 vd Fi:21 Fi} BC4 v4} BC11{ VBC9 VBC8 BC10 BC5 Fi Fi Fi Fs Fi FC12{ VBC4 VBC8 BC5 BC10 BC6 vd Fi} FL Fp Fi} vd Fi} VBC13{ BC8 FD[8] Fi Fs Fi Fs Fp Fi Fi Fs Fi[5] Fp} BC14{ BC4 VBC6 BC11 BC10 vd Fs Fs[4] Fs FC6} BC9 BC15{ BC12 vd v5 FC16{} Fp Fi[4] Fi Fp} Fs} BC15 BC17{ BC18{ VBC3 BC12 BC4 BC14 vd Fc Fs FC4[6]} vd v6 v7 Fi Fs Fi[8] FC12 Fi Fi:9} v1 Fp}


void  S7740C1 ::v1(){vfunc_called(this, "_ZN7S7740C12v1Ev");}
S7740C1 ::~S7740C1(){ note_dtor("S7740C1", this);} // tgen
S7740C1 ::S7740C1(){ note_ctor("S7740C1", this);} // tgen

static void Test_S7740C1()
{
  extern Class_Descriptor cd_S7740C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1121,2676)];
    init_test(&cd_S7740C1, buf);
    S7740C1 *dp, &lv = *(dp=new (buf) S7740C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17920,10700), "sizeof(S7740C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7740C1)");
    /*is_ambiguous_... S7740C3::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C3*), ABISELECT(16576,9868), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C8*), ABISELECT(16576,9868), "S7740C1");
    check_base_class_offset(lv, (S19968C3*)(S7740C8*)(S7740C13*), ABISELECT(16576,9868), "S7740C1");
    /*is_ambiguous_... S7740C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(16576,9868), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C12*)(S7740C15*), ABISELECT(16576,9868), "S7740C1");
    /*is_ambiguous_... S7740C12::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(16576,9868), "S7740C1");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C3*), ABISELECT(16816,10008), "S7740C1");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(16816,10008), "S7740C1");
    check_base_class_offset(lv, (S7740C6*)(S7740C14*)(S7740C2*), ABISELECT(16816,10008), "S7740C1");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(16816,10008), "S7740C1");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(16816,10008), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(16816,10008), "S7740C1");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(16816,10008), "S7740C1");
    check_base_class_offset(lv, (S7740C6*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(16816,10008), "S7740C1");
    check_base_class_offset(lv, (S7740C6*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(16816,10008), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7740C8*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C3*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S22028C16*)(S7740C8*)(S7740C13*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S22028C16*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(17632,10496), "S7740C1");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C3*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C3*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C14*)(S7740C2*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C12*)(S7740C15*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C12*)(S7740C15*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(17552,10456), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C8*)(S7740C10*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(17552,10456), "S7740C1");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C3*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(17632,10496), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(17632,10496), "S7740C1");
    check_base_class_offset(lv, (S7740C10*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(17632,10496), "S7740C1");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C3*), ABISELECT(13904,8284), "S7740C1");
    /*is_ambiguous_... S7740C3::S7740C5 */ AMB_check_base_class_offset(lv, (S7740C5*)(S7740C3*), ABISELECT(13888,8280), "S7740C1");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C3*), ABISELECT(14144,8424), "S7740C1");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(14176,8440), "S7740C1");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C3*), ABISELECT(14160,8436), "S7740C1");
    check_base_class_offset(lv, (S7740C11*)(S7740C3*), ABISELECT(14144,8424), "S7740C1");
    check_base_class_offset(lv, (S7740C3*)(S7740C2*), ABISELECT(13888,8280), "S7740C1");
    check_base_class_offset(lv, (S7740C3*)(S7740C18*)(S7740C17*), ABISELECT(13888,8280), "S7740C1");
    check_base_class_offset(lv, (S7740C8*)(S7740C13*), ABISELECT(17648,10508), "S7740C1");
    check_base_class_offset(lv, (S7740C13*)(S7740C2*), ABISELECT(17648,10508), "S7740C1");
    /*is_ambiguous_... S7740C14::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C14*)(S7740C2*), ABISELECT(2432,1440), "S7740C1");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C14*)(S7740C2*), 0, "S7740C1");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(32,16), "S7740C1");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C14*)(S7740C2*), ABISELECT(16,12), "S7740C1");
    check_base_class_offset(lv, (S7740C11*)(S7740C14*)(S7740C2*), 0, "S7740C1");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C14*)(S7740C2*), ABISELECT(2672,1580), "S7740C1");
    check_base_class_offset(lv, (S7740C14*)(S7740C2*), 0, "S7740C1");
    /*is_ambiguous_... S7740C2::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S7740C2*), 0, "S7740C1");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(3456,2056), "S7740C1");
    check_base_class_offset(lv, (S7740C5*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(3440,2052), "S7740C1");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(3696,2196), "S7740C1");
    /*is_ambiguous_... S7740C12::S7740C6 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(3712,2208), "S7740C1");
    check_base_class_offset(lv, (S7740C12*)(S7740C15*)(S7740C2*), ABISELECT(3440,2052), "S7740C1");
    check_base_class_offset(lv, (S7740C15*)(S7740C2*), ABISELECT(3440,2052), "S7740C1");
    check_base_class_offset(lv, (S7740C2*), 0, "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(4528,2700), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C5*)(S7740C12*)(S7740C15*), ABISELECT(4512,2696), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C12*)(S7740C15*), ABISELECT(4768,2840), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C12*)(S7740C15*), ABISELECT(4784,2852), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C12*)(S7740C15*), ABISELECT(4512,2696), "S7740C1");
    /*is_ambiguous_... S7740C1::S7740C15 */ AMB_check_base_class_offset(lv, (S7740C15*), ABISELECT(4512,2696), "S7740C1");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(5584,3340), "S7740C1");
    check_base_class_offset(lv, (S7740C5*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(5568,3336), "S7740C1");
    /*is_ambiguous_... S7740C12::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(5824,3480), "S7740C1");
    /*is_ambiguous_... S7740C12::S7740C6 */ AMB_check_base_class_offset(lv, (S7740C6*)(S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(5840,3492), "S7740C1");
    check_base_class_offset(lv, (S7740C12*)(S7740C18*)(S7740C17*), ABISELECT(5568,3336), "S7740C1");
    /*is_ambiguous_... S7740C18::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C18*)(S7740C17*), ABISELECT(6592,3944), "S7740C1");
    /*is_ambiguous_... S7740C14::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(9264,5524), "S7740C1");
    /*is_ambiguous_... S7740C11::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(6832,4084), "S7740C1");
    /*is_ambiguous_... S7740C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(6864,4100), "S7740C1");
    check_base_class_offset(lv, (S7740C5*)(S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(6848,4096), "S7740C1");
    check_base_class_offset(lv, (S7740C11*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(6832,4084), "S7740C1");
    /*is_ambiguous_... S7740C14::S7740C10 */ AMB_check_base_class_offset(lv, (S7740C10*)(S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(9504,5664), "S7740C1");
    check_base_class_offset(lv, (S7740C14*)(S7740C18*)(S7740C17*), ABISELECT(6832,4084), "S7740C1");
    check_base_class_offset(lv, (S7740C18*)(S7740C17*), ABISELECT(5568,3336), "S7740C1");
    check_base_class_offset(lv, (S7740C17*), ABISELECT(5568,3336), "S7740C1");
    check_field_offset(lv, s7740c1f0, ABISELECT(13880,8276), "S7740C1.s7740c1f0");
    test_class_info(&lv, &cd_S7740C1);
    dp->~S7740C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7740C1(Test_S7740C1, "S7740C1", ABISELECT(17920,10700));

#else // __cplusplus

extern void _ZN7S7740C1C1Ev();
extern void _ZN7S7740C1D1Ev();
Name_Map name_map_S7740C1[] = {
  NSPAIR(_ZN7S7740C1C1Ev),
  NSPAIR(_ZN7S7740C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C3;
extern VTBL_ENTRY _ZTI7S7740C3[];
extern  VTBL_ENTRY _ZTV7S7740C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C3[];
extern Class_Descriptor cd_S7740C8;
extern VTBL_ENTRY _ZTI7S7740C8[];
extern  VTBL_ENTRY _ZTV7S7740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C8[];
extern Class_Descriptor cd_S7740C13;
extern VTBL_ENTRY _ZTI8S7740C13[];
extern  VTBL_ENTRY _ZTV8S7740C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C13[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C14;
extern VTBL_ENTRY _ZTI8S7740C14[];
extern  VTBL_ENTRY _ZTV8S7740C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C14[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C12;
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
extern Class_Descriptor cd_S7740C15;
extern VTBL_ENTRY _ZTI8S7740C15[];
extern  VTBL_ENTRY _ZTV8S7740C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C15[];
extern Class_Descriptor cd_S7740C2;
extern VTBL_ENTRY _ZTI7S7740C2[];
extern  VTBL_ENTRY _ZTV7S7740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C2[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C12;
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
extern Class_Descriptor cd_S7740C15;
extern VTBL_ENTRY _ZTI8S7740C15[];
extern  VTBL_ENTRY _ZTV8S7740C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C15[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C6;
extern VTBL_ENTRY _ZTI7S7740C6[];
extern  VTBL_ENTRY _ZTV7S7740C6[];
extern Class_Descriptor cd_S7740C12;
extern VTBL_ENTRY _ZTI8S7740C12[];
extern  VTBL_ENTRY _ZTV8S7740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C12[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S7740C5;
extern VTBL_ENTRY _ZTI7S7740C5[];
extern  VTBL_ENTRY _ZTV7S7740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C5[];
extern Class_Descriptor cd_S7740C11;
extern VTBL_ENTRY _ZTI8S7740C11[];
extern  VTBL_ENTRY _ZTV8S7740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C11[];
extern Class_Descriptor cd_S7740C10;
extern VTBL_ENTRY _ZTI8S7740C10[];
extern  VTBL_ENTRY _ZTV8S7740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C10[];
extern Class_Descriptor cd_S7740C14;
extern VTBL_ENTRY _ZTI8S7740C14[];
extern  VTBL_ENTRY _ZTV8S7740C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C14[];
extern Class_Descriptor cd_S7740C18;
extern VTBL_ENTRY _ZTI8S7740C18[];
extern  VTBL_ENTRY _ZTV8S7740C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C18[];
extern Class_Descriptor cd_S7740C17;
extern VTBL_ENTRY _ZTI8S7740C17[];
extern  VTBL_ENTRY _ZTV8S7740C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7740C17[];
static Base_Class bases_S7740C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(16576,9868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C6,    ABISELECT(16816,10008), //bcp->offset
    160, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    118, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    ABISELECT(17632,10496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(17552,10456), //bcp->offset
    169, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    119, //bcp->index_in_construction_vtbl_array
    156, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7740C10,    ABISELECT(17632,10496), //bcp->offset
    173, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    120, //bcp->index_in_construction_vtbl_array
    157, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(13904,8284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7740C5,    ABISELECT(13888,8280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    136, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(14144,8424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    141, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(14176,8440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(14160,8436), //bcp->offset
    150, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    122, //bcp->index_in_construction_vtbl_array
    143, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(14144,8424), //bcp->offset
    141, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    121, //bcp->index_in_construction_vtbl_array
    140, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7740C3,    ABISELECT(13888,8280), //bcp->offset
    129, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    117, //bcp->index_in_construction_vtbl_array
    135, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S7740C8,    ABISELECT(17648,10508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    160, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7740C13,    ABISELECT(17648,10508), //bcp->offset
    181, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    123, //bcp->index_in_construction_vtbl_array
    159, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(2432,1440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7740C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19968C3,    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
    17, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(16,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    124, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7740C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(2672,1580), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    125, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S7740C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(3456,2056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(3440,2052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(3696,2196), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    127, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7740C6,    ABISELECT(3712,2208), //bcp->offset
    47, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7740C12,    ABISELECT(3440,2052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7740C15,    ABISELECT(3440,2052), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    126, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7740C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C3,    ABISELECT(4528,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(4512,2696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(4768,2840), //bcp->offset
    64, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    129, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7740C6,    ABISELECT(4784,2852), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S7740C12,    ABISELECT(4512,2696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7740C15,    ABISELECT(4512,2696), //bcp->offset
    53, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    128, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19968C3,    ABISELECT(5584,3340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(5568,3336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(5824,3480), //bcp->offset
    90, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    131, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7740C6,    ABISELECT(5840,3492), //bcp->offset
    97, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S7740C12,    ABISELECT(5568,3336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6592,3944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(9264,5524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(6832,4084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6864,4100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S7740C5,    ABISELECT(6848,4096), //bcp->offset
    112, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    133, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7740C11,    ABISELECT(6832,4084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7740C10,    ABISELECT(9504,5664), //bcp->offset
    122, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    134, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S7740C14,    ABISELECT(6832,4084), //bcp->offset
    103, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    132, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7740C18,    ABISELECT(5568,3336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S7740C17,    ABISELECT(5568,3336), //bcp->offset
    77, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    130, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7740C1[];
extern void _ZN7S7740C1D1Ev();
extern void _ZN7S7740C1D0Ev();
extern void _ZN7S7740C12v1Ev();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N7S7740C1D1Ev,_ZThn12_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7740C1D0Ev,_ZThn12_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn2672_N7S7740C1D1Ev,_ZThn1580_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn2672_N7S7740C1D0Ev,_ZThn1580_N7S7740C1D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn3440_N7S7740C1D1Ev,_ZThn2052_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn3440_N7S7740C1D0Ev,_ZThn2052_N7S7740C1D0Ev)();
extern void _ZN8S7740C152v5Ev();
extern void ABISELECT(_ZThn3696_N7S7740C1D1Ev,_ZThn2196_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn3696_N7S7740C1D0Ev,_ZThn2196_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn3712_N7S7740C1D1Ev,_ZThn2208_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn3712_N7S7740C1D0Ev,_ZThn2208_N7S7740C1D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn4512_N7S7740C1D1Ev,_ZThn2696_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn4512_N7S7740C1D0Ev,_ZThn2696_N7S7740C1D0Ev)();
extern void _ZN8S7740C152v5Ev();
extern void ABISELECT(_ZThn4768_N7S7740C1D1Ev,_ZThn2840_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn4768_N7S7740C1D0Ev,_ZThn2840_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn4784_N7S7740C1D1Ev,_ZThn2852_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn4784_N7S7740C1D0Ev,_ZThn2852_N7S7740C1D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn5568_N7S7740C1D1Ev,_ZThn3336_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn5568_N7S7740C1D0Ev,_ZThn3336_N7S7740C1D0Ev)();
extern void _ZN8S7740C172v6Ev();
extern void _ZN8S7740C172v7Ev();
extern void ABISELECT(_ZThn5824_N7S7740C1D1Ev,_ZThn3480_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn5824_N7S7740C1D0Ev,_ZThn3480_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn5840_N7S7740C1D1Ev,_ZThn3492_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn5840_N7S7740C1D0Ev,_ZThn3492_N7S7740C1D0Ev)();
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZThn6832_N7S7740C1D1Ev,_ZThn4084_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn6832_N7S7740C1D0Ev,_ZThn4084_N7S7740C1D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn6848_N7S7740C1D1Ev,_ZThn4096_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn6848_N7S7740C1D0Ev,_ZThn4096_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn9504_N7S7740C1D1Ev,_ZThn5664_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn9504_N7S7740C1D0Ev,_ZThn5664_N7S7740C1D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N7S7740C1D1Ev,_ZTv0_n36_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn13888_N7S7740C1D1Ev,_ZThn8280_N7S7740C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7740C1D0Ev,_ZTv0_n36_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn13888_N7S7740C1D0Ev,_ZThn8280_N7S7740C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N7S7740C1D1Ev,_ZTvn144_n36_N7S7740C1D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N7S7740C1D0Ev,_ZTvn144_n36_N7S7740C1D0Ev)();
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N7S7740C1D1Ev,_ZTvn156_n36_N7S7740C1D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N7S7740C1D0Ev,_ZTvn156_n36_N7S7740C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7740C1D1Ev,_ZTv0_n12_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn16816_N7S7740C1D1Ev,_ZThn10008_N7S7740C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C1D0Ev,_ZTv0_n12_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn16816_N7S7740C1D0Ev,_ZThn10008_N7S7740C1D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N7S7740C1D1Ev,_ZTv0_n24_N7S7740C1D1Ev)();
extern void ABISELECT(_ZThn17632_N7S7740C1D1Ev,_ZThn10496_N7S7740C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C1D0Ev,_ZTv0_n24_N7S7740C1D0Ev)();
extern void ABISELECT(_ZThn17632_N7S7740C1D0Ev,_ZThn10496_N7S7740C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7740C1[] = {
  ABISELECT(17648,10508),
  ABISELECT(13888,8280),
  ABISELECT(17632,10496),
  ABISELECT(16816,10008),
  ABISELECT(16576,9868),
  ABISELECT(17632,10496),
  ABISELECT(17552,10456),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7740C12v1Ev,
  ABISELECT(17616,10484),
  ABISELECT(16560,9856),
  ABISELECT(17616,10484),
  ABISELECT(17536,10444),
  ABISELECT(16800,9996),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7740C1D1Ev,_ZThn12_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7740C1D0Ev,_ZThn12_N7S7740C1D0Ev),
  ABISELECT(13904,8288),
  ABISELECT(14960,8916),
  ABISELECT(14880,8876),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N7S7740C1D1Ev,_ZThn1580_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N7S7740C1D0Ev,_ZThn1580_N7S7740C1D0Ev),
  ABISELECT(14192,8444),
  ABISELECT(13136,7816),
  ABISELECT(14192,8444),
  ABISELECT(14112,8404),
  ABISELECT(13376,7956),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3440_N7S7740C1D1Ev,_ZThn2052_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3440_N7S7740C1D0Ev,_ZThn2052_N7S7740C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
  ABISELECT(12880,7672),
  ABISELECT(13936,8300),
  ABISELECT(13856,8260),
  ABISELECT(-3696,-2196),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3696_N7S7740C1D1Ev,_ZThn2196_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3696_N7S7740C1D0Ev,_ZThn2196_N7S7740C1D0Ev),
  ABISELECT(-3712,-2208),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3712_N7S7740C1D1Ev,_ZThn2208_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3712_N7S7740C1D0Ev,_ZThn2208_N7S7740C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(13120,7800),
  ABISELECT(12064,7172),
  ABISELECT(13120,7800),
  ABISELECT(13040,7760),
  ABISELECT(12304,7312),
  ABISELECT(-4512,-2696),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4512_N7S7740C1D1Ev,_ZThn2696_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4512_N7S7740C1D0Ev,_ZThn2696_N7S7740C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
  ABISELECT(11808,7028),
  ABISELECT(12864,7656),
  ABISELECT(12784,7616),
  ABISELECT(-4768,-2840),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4768_N7S7740C1D1Ev,_ZThn2840_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4768_N7S7740C1D0Ev,_ZThn2840_N7S7740C1D0Ev),
  ABISELECT(-4784,-2852),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4784_N7S7740C1D1Ev,_ZThn2852_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4784_N7S7740C1D0Ev,_ZThn2852_N7S7740C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(8320,4944),
  ABISELECT(12064,7160),
  ABISELECT(11008,6532),
  ABISELECT(12064,7160),
  ABISELECT(11984,7120),
  ABISELECT(11248,6672),
  ABISELECT(-5568,-3336),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn5568_N7S7740C1D1Ev,_ZThn3336_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5568_N7S7740C1D0Ev,_ZThn3336_N7S7740C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7740C172v6Ev,
  (VTBL_ENTRY)&_ZN8S7740C172v7Ev,
  ABISELECT(10752,6388),
  ABISELECT(11808,7016),
  ABISELECT(11728,6976),
  ABISELECT(-5824,-3480),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5824_N7S7740C1D1Ev,_ZThn3480_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5824_N7S7740C1D0Ev,_ZThn3480_N7S7740C1D0Ev),
  ABISELECT(-5840,-3492),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5840_N7S7740C1D1Ev,_ZThn3492_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5840_N7S7740C1D0Ev,_ZThn3492_N7S7740C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(10800,6412),
  ABISELECT(9984,5924),
  ABISELECT(9744,5784),
  ABISELECT(10800,6412),
  ABISELECT(10720,6372),
  ABISELECT(-6832,-4084),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn6832_N7S7740C1D1Ev,_ZThn4084_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6832_N7S7740C1D0Ev,_ZThn4084_N7S7740C1D0Ev),
  ABISELECT(10784,6400),
  ABISELECT(9728,5772),
  ABISELECT(10784,6400),
  ABISELECT(10704,6360),
  ABISELECT(9968,5912),
  ABISELECT(-6848,-4096),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn6848_N7S7740C1D1Ev,_ZThn4096_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn6848_N7S7740C1D0Ev,_ZThn4096_N7S7740C1D0Ev),
  ABISELECT(7072,4204),
  ABISELECT(8128,4832),
  ABISELECT(8048,4792),
  ABISELECT(-9504,-5664),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn9504_N7S7740C1D1Ev,_ZThn5664_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn9504_N7S7740C1D0Ev,_ZThn5664_N7S7740C1D0Ev),
  ABISELECT(-13888,-8280),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-13888,-8280),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7740C1D1Ev,_ZTv0_n36_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7740C1D0Ev,_ZTv0_n36_N7S7740C1D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  ABISELECT(-14144,-8424),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S7740C1D1Ev,_ZTvn144_n36_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S7740C1D0Ev,_ZTvn144_n36_N7S7740C1D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-14160,-8436),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S7740C1D1Ev,_ZTvn156_n36_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S7740C1D0Ev,_ZTvn156_n36_N7S7740C1D0Ev),
  0,
  0,
  ABISELECT(-16816,-10008),
  ABISELECT(-16816,-10008),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C1D1Ev,_ZTv0_n12_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C1D0Ev,_ZTv0_n12_N7S7740C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-17552,-10456),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  ABISELECT(-17632,-10496),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-17632,-10496),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C1D1Ev,_ZTv0_n24_N7S7740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C1D0Ev,_ZTv0_n24_N7S7740C1D0Ev),
  ABISELECT(-1072,-640),
  ABISELECT(-16,-12),
  ABISELECT(-17648,-10508),
  (VTBL_ENTRY)&(_ZTI7S7740C1[0]),
};
extern VTBL_ENTRY _ZTV7S7740C1[];
extern void _ZN7S7740C2D1Ev();
extern void _ZN7S7740C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C2__7S7740C1[] = {
  ABISELECT(17648,10508),
  ABISELECT(13888,8280),
  ABISELECT(17632,10496),
  ABISELECT(16816,10008),
  ABISELECT(16576,9868),
  ABISELECT(17632,10496),
  ABISELECT(17552,10456),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C2D0Ev,
};
extern void _ZN8S7740C14D1Ev();
extern void _ZN8S7740C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C147S7740C2__7S7740C1[] = {
  ABISELECT(17632,10496),
  ABISELECT(16816,10008),
  ABISELECT(16576,9868),
  ABISELECT(17632,10496),
  ABISELECT(17552,10456),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN8S7740C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C14D0Ev,
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C118S7740C147S7740C2__A1__7S7740C1[] = {
  ABISELECT(17632,10496),
  ABISELECT(16816,10008),
  ABISELECT(16576,9868),
  ABISELECT(17632,10496),
  ABISELECT(17552,10456),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C118S7740C147S7740C2__A2__7S7740C1[] = {
  ABISELECT(16576,9868),
  ABISELECT(17632,10496),
  ABISELECT(17552,10456),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C118S7740C147S7740C2__A2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-17552,-10456),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[] = {
  ABISELECT(17616,10484),
  ABISELECT(16560,9856),
  ABISELECT(17616,10484),
  ABISELECT(17536,10444),
  ABISELECT(16800,9996),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn16800_N7S7740C5D1Ev,_ZThn9996_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn16800_N7S7740C5D0Ev,_ZThn9996_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[] = {
  0,
  0,
  ABISELECT(-16800,-9996),
  ABISELECT(-16800,-9996),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-17536,-10444),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn17616_N7S7740C5D1Ev,_ZThn10484_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn17616_N7S7740C5D0Ev,_ZThn10484_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[] = {
  ABISELECT(-17616,-10484),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-17616,-10484),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C118S7740C147S7740C2__A1__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-17552,-10456),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C118S7740C147S7740C2__A1__7S7740C1[] = {
  ABISELECT(17616,10484),
  ABISELECT(16560,9856),
  ABISELECT(17616,10484),
  ABISELECT(17536,10444),
  ABISELECT(16800,9996),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16816_N8S7740C11D1Ev,_ZThn10008_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn16816_N8S7740C11D0Ev,_ZThn10008_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C118S7740C147S7740C2__A1__7S7740C1[] = {
  0,
  0,
  ABISELECT(-16816,-10008),
  ABISELECT(-16816,-10008),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn17632_N8S7740C11D1Ev,_ZThn10496_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn17632_N8S7740C11D0Ev,_ZThn10496_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C118S7740C147S7740C2__A1__7S7740C1[] = {
  ABISELECT(-17632,-10496),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-17632,-10496),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C147S7740C2__A3__7S7740C1[] = {
  ABISELECT(13904,8288),
  ABISELECT(14960,8916),
  ABISELECT(14880,8876),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C147S7740C2__A3__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-14880,-8876),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn16816_N8S7740C14D1Ev,_ZThn10008_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn16816_N8S7740C14D0Ev,_ZThn10008_N8S7740C14D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C147S7740C2__7S7740C1[] = {
  0,
  0,
  ABISELECT(-16816,-10008),
  ABISELECT(-16816,-10008),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C147S7740C2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-17552,-10456),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__8S7740C147S7740C2__7S7740C1[] = {
  ABISELECT(17616,10484),
  ABISELECT(16560,9856),
  ABISELECT(17616,10484),
  ABISELECT(17536,10444),
  ABISELECT(16800,9996),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn17632_N8S7740C14D1Ev,_ZThn10496_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn17632_N8S7740C14D0Ev,_ZThn10496_N8S7740C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C147S7740C2__7S7740C1[] = {
  ABISELECT(-17632,-10496),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-17632,-10496),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C147S7740C2__7S7740C1[] = {
  ABISELECT(13904,8288),
  ABISELECT(14960,8916),
  ABISELECT(14880,8876),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C15D1Ev();
extern void _ZN8S7740C15D0Ev();
extern void _ZN8S7740C152v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(14192,8444),
  ABISELECT(13136,7816),
  ABISELECT(14192,8444),
  ABISELECT(14112,8404),
  ABISELECT(13376,7956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C128S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(14192,8444),
  ABISELECT(13136,7816),
  ABISELECT(14192,8444),
  ABISELECT(14112,8404),
  ABISELECT(13376,7956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[] = {
  ABISELECT(14192,8444),
  ABISELECT(13136,7816),
  ABISELECT(14192,8444),
  ABISELECT(14112,8404),
  ABISELECT(13376,7956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn13376_N7S7740C5D1Ev,_ZThn7956_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn13376_N7S7740C5D0Ev,_ZThn7956_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[] = {
  0,
  0,
  ABISELECT(-13376,-7956),
  ABISELECT(-13376,-7956),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-14112,-8404),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn14192_N7S7740C5D1Ev,_ZThn8444_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn14192_N7S7740C5D0Ev,_ZThn8444_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[] = {
  ABISELECT(-14192,-8444),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-14192,-8444),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C128S7740C157S7740C2__A4__7S7740C1[] = {
  ABISELECT(12880,7672),
  ABISELECT(13936,8300),
  ABISELECT(13856,8260),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C128S7740C157S7740C2__A4__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-13856,-8260),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C128S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-14112,-8404),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn13376_N8S7740C12D1Ev,_ZThn7956_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn13376_N8S7740C12D0Ev,_ZThn7956_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C128S7740C157S7740C2__7S7740C1[] = {
  0,
  0,
  ABISELECT(-13376,-7956),
  ABISELECT(-13376,-7956),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn14192_N8S7740C12D1Ev,_ZThn8444_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn14192_N8S7740C12D0Ev,_ZThn8444_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C128S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(-14192,-8444),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-14192,-8444),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C128S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(12880,7672),
  ABISELECT(13936,8300),
  ABISELECT(13856,8260),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-14112,-8404),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn13376_N8S7740C15D1Ev,_ZThn7956_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn13376_N8S7740C15D0Ev,_ZThn7956_N8S7740C15D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C157S7740C2__7S7740C1[] = {
  0,
  0,
  ABISELECT(-13376,-7956),
  ABISELECT(-13376,-7956),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn14192_N8S7740C15D1Ev,_ZThn8444_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn14192_N8S7740C15D0Ev,_ZThn8444_N8S7740C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(-14192,-8444),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-14192,-8444),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C12__A1__8S7740C157S7740C2__7S7740C1[] = {
  ABISELECT(12880,7672),
  ABISELECT(13936,8300),
  ABISELECT(13856,8260),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N7S7740C2D1Ev,_ZTv0_n36_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn13888_N7S7740C2D1Ev,_ZThn8280_N7S7740C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7740C2D0Ev,_ZTv0_n36_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn13888_N7S7740C2D0Ev,_ZThn8280_N7S7740C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7740C3__7S7740C2__7S7740C1[] = {
  ABISELECT(-13888,-8280),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-13888,-8280),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7740C2D1Ev,_ZTv0_n36_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7740C2D0Ev,_ZTv0_n36_N7S7740C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7740C2D1Ev,_ZTv0_n12_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn16816_N7S7740C2D1Ev,_ZThn10008_N7S7740C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C2D0Ev,_ZTv0_n12_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn16816_N7S7740C2D0Ev,_ZThn10008_N7S7740C2D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C2__7S7740C1[] = {
  0,
  0,
  ABISELECT(-16816,-10008),
  ABISELECT(-16816,-10008),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C2D1Ev,_ZTv0_n12_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C2D0Ev,_ZTv0_n12_N7S7740C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-17552,-10456),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C2D1Ev,_ZTv0_n24_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn17632_N7S7740C2D1Ev,_ZThn10496_N7S7740C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C2D0Ev,_ZTv0_n24_N7S7740C2D0Ev)();
extern void ABISELECT(_ZThn17632_N7S7740C2D0Ev,_ZThn10496_N7S7740C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C2__7S7740C1[] = {
  ABISELECT(-17632,-10496),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-17632,-10496),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C2D1Ev,_ZTv0_n24_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C2D0Ev,_ZTv0_n24_N7S7740C2D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N7S7740C2D1Ev,_ZTvn144_n36_N7S7740C2D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N7S7740C2D0Ev,_ZTvn144_n36_N7S7740C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__7S7740C2__7S7740C1[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  ABISELECT(-14144,-8424),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S7740C2D1Ev,_ZTvn144_n36_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S7740C2D0Ev,_ZTvn144_n36_N7S7740C2D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N7S7740C2D1Ev,_ZTvn156_n36_N7S7740C2D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N7S7740C2D0Ev,_ZTvn156_n36_N7S7740C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__7S7740C2__7S7740C1[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-14160,-8436),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S7740C2D1Ev,_ZTvn156_n36_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S7740C2D0Ev,_ZTvn156_n36_N7S7740C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7740C13__7S7740C2__7S7740C1[] = {
  ABISELECT(-1072,-640),
  ABISELECT(-16,-12),
  ABISELECT(-17648,-10508),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N7S7740C2D1Ev,_ZThn12_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7740C2D0Ev,_ZThn12_N7S7740C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C14__A2__7S7740C2__7S7740C1[] = {
  ABISELECT(17616,10484),
  ABISELECT(16560,9856),
  ABISELECT(17616,10484),
  ABISELECT(17536,10444),
  ABISELECT(16800,9996),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7740C2D1Ev,_ZThn12_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7740C2D0Ev,_ZThn12_N7S7740C2D0Ev),
};
extern void ABISELECT(_ZThn2672_N7S7740C2D1Ev,_ZThn1580_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn2672_N7S7740C2D0Ev,_ZThn1580_N7S7740C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C14__A3__7S7740C2__7S7740C1[] = {
  ABISELECT(13904,8288),
  ABISELECT(14960,8916),
  ABISELECT(14880,8876),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N7S7740C2D1Ev,_ZThn1580_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N7S7740C2D0Ev,_ZThn1580_N7S7740C2D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn3440_N7S7740C2D1Ev,_ZThn2052_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn3440_N7S7740C2D0Ev,_ZThn2052_N7S7740C2D0Ev)();
extern void _ZN8S7740C152v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C15__7S7740C2__7S7740C1[] = {
  ABISELECT(14192,8444),
  ABISELECT(13136,7816),
  ABISELECT(14192,8444),
  ABISELECT(14112,8404),
  ABISELECT(13376,7956),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3440_N7S7740C2D1Ev,_ZThn2052_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3440_N7S7740C2D0Ev,_ZThn2052_N7S7740C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
};
extern void ABISELECT(_ZThn3696_N7S7740C2D1Ev,_ZThn2196_N7S7740C2D1Ev)();
extern void ABISELECT(_ZThn3696_N7S7740C2D0Ev,_ZThn2196_N7S7740C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C128S7740C15__A4__7S7740C2__7S7740C1[] = {
  ABISELECT(12880,7672),
  ABISELECT(13936,8300),
  ABISELECT(13856,8260),
  ABISELECT(-3696,-2196),
  (VTBL_ENTRY)&(_ZTI7S7740C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3696_N7S7740C2D1Ev,_ZThn2196_N7S7740C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3696_N7S7740C2D0Ev,_ZThn2196_N7S7740C2D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C15D1Ev();
extern void _ZN8S7740C15D0Ev();
extern void _ZN8S7740C152v5Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C15__A1__7S7740C1[] = {
  ABISELECT(13120,7800),
  ABISELECT(12064,7172),
  ABISELECT(13120,7800),
  ABISELECT(13040,7760),
  ABISELECT(12304,7312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C15D0Ev,
  (VTBL_ENTRY)&_ZN8S7740C152v5Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C128S7740C15__A1__7S7740C1[] = {
  ABISELECT(13120,7800),
  ABISELECT(12064,7172),
  ABISELECT(13120,7800),
  ABISELECT(13040,7760),
  ABISELECT(12304,7312),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C128S7740C15__A4__7S7740C1[] = {
  ABISELECT(13120,7800),
  ABISELECT(12064,7172),
  ABISELECT(13120,7800),
  ABISELECT(13040,7760),
  ABISELECT(12304,7312),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn12304_N7S7740C5D1Ev,_ZThn7312_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn12304_N7S7740C5D0Ev,_ZThn7312_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C128S7740C15__A4__7S7740C1[] = {
  0,
  0,
  ABISELECT(-12304,-7312),
  ABISELECT(-12304,-7312),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C128S7740C15__A4__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-13040,-7760),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn13120_N7S7740C5D1Ev,_ZThn7800_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn13120_N7S7740C5D0Ev,_ZThn7800_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C128S7740C15__A4__7S7740C1[] = {
  ABISELECT(-13120,-7800),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-13120,-7800),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C128S7740C15__A5__7S7740C1[] = {
  ABISELECT(11808,7028),
  ABISELECT(12864,7656),
  ABISELECT(12784,7616),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C128S7740C15__A5__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-12784,-7616),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C128S7740C15__A1__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-13040,-7760),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn12304_N8S7740C12D1Ev,_ZThn7312_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn12304_N8S7740C12D0Ev,_ZThn7312_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C128S7740C15__A1__7S7740C1[] = {
  0,
  0,
  ABISELECT(-12304,-7312),
  ABISELECT(-12304,-7312),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn13120_N8S7740C12D1Ev,_ZThn7800_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn13120_N8S7740C12D0Ev,_ZThn7800_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C128S7740C15__A1__7S7740C1[] = {
  ABISELECT(-13120,-7800),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-13120,-7800),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C128S7740C15__A1__7S7740C1[] = {
  ABISELECT(11808,7028),
  ABISELECT(12864,7656),
  ABISELECT(12784,7616),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C15__A1__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-13040,-7760),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn12304_N8S7740C15D1Ev,_ZThn7312_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn12304_N8S7740C15D0Ev,_ZThn7312_N8S7740C15D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C15__A1__7S7740C1[] = {
  0,
  0,
  ABISELECT(-12304,-7312),
  ABISELECT(-12304,-7312),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn13120_N8S7740C15D1Ev,_ZThn7800_N8S7740C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev)();
extern void ABISELECT(_ZThn13120_N8S7740C15D0Ev,_ZThn7800_N8S7740C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C15__A1__7S7740C1[] = {
  ABISELECT(-13120,-7800),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-13120,-7800),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C12__A1__8S7740C15__A1__7S7740C1[] = {
  ABISELECT(11808,7028),
  ABISELECT(12864,7656),
  ABISELECT(12784,7616),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D1Ev,_ZThn144_N8S7740C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C15D0Ev,_ZThn144_N8S7740C15D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C17D1Ev();
extern void _ZN8S7740C17D0Ev();
extern void _ZN8S7740C172v6Ev();
extern void _ZN8S7740C172v7Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C17__7S7740C1[] = {
  ABISELECT(8320,4944),
  ABISELECT(12064,7160),
  ABISELECT(11008,6532),
  ABISELECT(12064,7160),
  ABISELECT(11984,7120),
  ABISELECT(11248,6672),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C17D0Ev,
  (VTBL_ENTRY)&_ZN8S7740C172v6Ev,
  (VTBL_ENTRY)&_ZN8S7740C172v7Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C18D1Ev();
extern void _ZN8S7740C18D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(8320,4944),
  ABISELECT(12064,7160),
  ABISELECT(11008,6532),
  ABISELECT(12064,7160),
  ABISELECT(11984,7120),
  ABISELECT(11248,6672),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C18D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C18D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN8S7740C12D1Ev();
extern void _ZN8S7740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C128S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(12064,7160),
  ABISELECT(11008,6532),
  ABISELECT(12064,7160),
  ABISELECT(11984,7120),
  ABISELECT(11248,6672),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C12D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[] = {
  ABISELECT(12064,7160),
  ABISELECT(11008,6532),
  ABISELECT(12064,7160),
  ABISELECT(11984,7120),
  ABISELECT(11248,6672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn11248_N7S7740C5D1Ev,_ZThn6672_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn11248_N7S7740C5D0Ev,_ZThn6672_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[] = {
  0,
  0,
  ABISELECT(-11248,-6672),
  ABISELECT(-11248,-6672),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-11984,-7120),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn12064_N7S7740C5D1Ev,_ZThn7160_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn12064_N7S7740C5D0Ev,_ZThn7160_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[] = {
  ABISELECT(-12064,-7160),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7160),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C128S7740C188S7740C17__A6__7S7740C1[] = {
  ABISELECT(10752,6388),
  ABISELECT(11808,7016),
  ABISELECT(11728,6976),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C128S7740C188S7740C17__A6__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-11728,-6976),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C128S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-11984,-7120),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C12D1Ev,_ZThn6672_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C12D0Ev,_ZThn6672_N8S7740C12D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C128S7740C188S7740C17__A2__7S7740C1[] = {
  0,
  0,
  ABISELECT(-11248,-6672),
  ABISELECT(-11248,-6672),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C12D1Ev,_ZThn7160_N8S7740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C12D0Ev,_ZThn7160_N8S7740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C128S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(-12064,-7160),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7160),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C128S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(10752,6388),
  ABISELECT(11808,7016),
  ABISELECT(11728,6976),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D1Ev,_ZThn144_N8S7740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C12D0Ev,_ZThn144_N8S7740C12D0Ev),
};
extern void _ZN8S7740C14D1Ev();
extern void _ZN8S7740C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C148S7740C188S7740C17__A1__7S7740C1[] = {
  ABISELECT(10800,6412),
  ABISELECT(9984,5924),
  ABISELECT(9744,5784),
  ABISELECT(10800,6412),
  ABISELECT(10720,6372),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN8S7740C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C14D0Ev,
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(10800,6412),
  ABISELECT(9984,5924),
  ABISELECT(9744,5784),
  ABISELECT(10800,6412),
  ABISELECT(10720,6372),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C118S7740C148S7740C188S7740C17__A7__7S7740C1[] = {
  ABISELECT(9744,5784),
  ABISELECT(10800,6412),
  ABISELECT(10720,6372),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C118S7740C148S7740C188S7740C17__A7__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-10720,-6372),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[] = {
  ABISELECT(10784,6400),
  ABISELECT(9728,5772),
  ABISELECT(10784,6400),
  ABISELECT(10704,6360),
  ABISELECT(9968,5912),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn9968_N7S7740C5D1Ev,_ZThn5912_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn9968_N7S7740C5D0Ev,_ZThn5912_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[] = {
  0,
  0,
  ABISELECT(-9968,-5912),
  ABISELECT(-9968,-5912),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-10704,-6360),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn10784_N7S7740C5D1Ev,_ZThn6400_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn10784_N7S7740C5D0Ev,_ZThn6400_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[] = {
  ABISELECT(-10784,-6400),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-10784,-6400),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-10720,-6372),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(10784,6400),
  ABISELECT(9728,5772),
  ABISELECT(10784,6400),
  ABISELECT(10704,6360),
  ABISELECT(9968,5912),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C11D1Ev,_ZThn5924_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C11D0Ev,_ZThn5924_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[] = {
  0,
  0,
  ABISELECT(-9984,-5924),
  ABISELECT(-9984,-5924),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C11D1Ev,_ZThn6412_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C11D0Ev,_ZThn6412_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[] = {
  ABISELECT(-10800,-6412),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6412),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C148S7740C188S7740C17__A8__7S7740C1[] = {
  ABISELECT(7072,4204),
  ABISELECT(8128,4832),
  ABISELECT(8048,4792),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C148S7740C188S7740C17__A8__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-8048,-4792),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C14D1Ev,_ZThn5924_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn9984_N8S7740C14D0Ev,_ZThn5924_N8S7740C14D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C148S7740C188S7740C17__A1__7S7740C1[] = {
  0,
  0,
  ABISELECT(-9984,-5924),
  ABISELECT(-9984,-5924),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C148S7740C188S7740C17__A1__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-10720,-6372),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__8S7740C148S7740C188S7740C17__A1__7S7740C1[] = {
  ABISELECT(10784,6400),
  ABISELECT(9728,5772),
  ABISELECT(10784,6400),
  ABISELECT(10704,6360),
  ABISELECT(9968,5912),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D1Ev,_ZThn12_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C14D0Ev,_ZThn12_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C14D1Ev,_ZThn6412_N8S7740C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev)();
extern void ABISELECT(_ZThn10800_N8S7740C14D0Ev,_ZThn6412_N8S7740C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C148S7740C188S7740C17__A1__7S7740C1[] = {
  ABISELECT(-10800,-6412),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-10800,-6412),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev),
};
extern void ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C10__A__8S7740C148S7740C188S7740C17__A1__7S7740C1[] = {
  ABISELECT(7072,4204),
  ABISELECT(8128,4832),
  ABISELECT(8048,4792),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S7740C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D1Ev,_ZThn1580_N8S7740C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S7740C14D0Ev,_ZThn1580_N8S7740C14D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C18D1Ev,_ZThn4944_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C18D0Ev,_ZThn4944_N8S7740C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7740C3__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(-8320,-4944),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4944),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C18D1Ev,_ZThn6672_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C18D0Ev,_ZThn6672_N8S7740C18D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C188S7740C17__7S7740C1[] = {
  0,
  0,
  ABISELECT(-11248,-6672),
  ABISELECT(-11248,-6672),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-11984,-7120),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C18D1Ev,_ZThn7160_N8S7740C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C18D0Ev,_ZThn7160_N8S7740C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(-12064,-7160),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7160),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S7740C18D1Ev,_ZTvn144_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S7740C18D0Ev,_ZTvn144_n36_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5088),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C18D1Ev,_ZTvn144_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C18D0Ev,_ZTvn144_n36_N8S7740C18D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N8S7740C18D1Ev,_ZTvn156_n36_N8S7740C18D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S7740C18D0Ev,_ZTvn156_n36_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5100),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C18D1Ev,_ZTvn156_n36_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C18D0Ev,_ZTvn156_n36_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C18D1Ev,_ZThn144_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C18D0Ev,_ZThn144_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C12__A2__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(10752,6388),
  ABISELECT(11808,7016),
  ABISELECT(11728,6976),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C18D1Ev,_ZThn144_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C18D0Ev,_ZThn144_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S7740C18D1Ev,_ZThn748_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn1264_N8S7740C18D0Ev,_ZThn748_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C14__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(10800,6412),
  ABISELECT(9984,5924),
  ABISELECT(9744,5784),
  ABISELECT(10800,6412),
  ABISELECT(10720,6372),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C18D1Ev,_ZThn748_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C18D0Ev,_ZThn748_N8S7740C18D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn1280_N8S7740C18D1Ev,_ZThn760_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn1280_N8S7740C18D0Ev,_ZThn760_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C14__A3__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(10784,6400),
  ABISELECT(9728,5772),
  ABISELECT(10784,6400),
  ABISELECT(10704,6360),
  ABISELECT(9968,5912),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C18D1Ev,_ZThn760_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C18D0Ev,_ZThn760_N8S7740C18D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S7740C18D1Ev,_ZThn2328_N8S7740C18D1Ev)();
extern void ABISELECT(_ZThn3936_N8S7740C18D0Ev,_ZThn2328_N8S7740C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C14__A4__8S7740C188S7740C17__7S7740C1[] = {
  ABISELECT(7072,4204),
  ABISELECT(8128,4832),
  ABISELECT(8048,4792),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S7740C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C18D1Ev,_ZThn2328_N8S7740C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C18D0Ev,_ZThn2328_N8S7740C18D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S7740C17D1Ev,_ZTv0_n36_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C17D1Ev,_ZThn4944_N8S7740C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7740C17D0Ev,_ZTv0_n36_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn8320_N8S7740C17D0Ev,_ZThn4944_N8S7740C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7740C3__8S7740C17__7S7740C1[] = {
  ABISELECT(-8320,-4944),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-8320,-4944),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C17D1Ev,_ZTv0_n36_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7740C17D0Ev,_ZTv0_n36_N8S7740C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C17D1Ev,_ZTv0_n12_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C17D1Ev,_ZThn6672_N8S7740C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C17D0Ev,_ZTv0_n12_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn11248_N8S7740C17D0Ev,_ZThn6672_N8S7740C17D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C17__7S7740C1[] = {
  0,
  0,
  ABISELECT(-11248,-6672),
  ABISELECT(-11248,-6672),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C17D1Ev,_ZTv0_n12_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C17D0Ev,_ZTv0_n12_N8S7740C17D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C17__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-11984,-7120),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S7740C17D1Ev,_ZTv0_n24_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C17D1Ev,_ZThn7160_N8S7740C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C17D0Ev,_ZTv0_n24_N8S7740C17D0Ev)();
extern void ABISELECT(_ZThn12064_N8S7740C17D0Ev,_ZThn7160_N8S7740C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__8S7740C17__7S7740C1[] = {
  ABISELECT(-12064,-7160),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-12064,-7160),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C17D1Ev,_ZTv0_n24_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C17D0Ev,_ZTv0_n24_N8S7740C17D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S7740C17D1Ev,_ZTvn144_n36_N8S7740C17D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S7740C17D0Ev,_ZTvn144_n36_N8S7740C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__8S7740C17__7S7740C1[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  ABISELECT(-8576,-5088),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C17D1Ev,_ZTvn144_n36_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S7740C17D0Ev,_ZTvn144_n36_N8S7740C17D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZTvn272_n72_N8S7740C17D1Ev,_ZTvn156_n36_N8S7740C17D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S7740C17D0Ev,_ZTvn156_n36_N8S7740C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C17__7S7740C1[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-8592,-5100),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C17D1Ev,_ZTvn156_n36_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S7740C17D0Ev,_ZTvn156_n36_N8S7740C17D0Ev),
};
extern void ABISELECT(_ZThn256_N8S7740C17D1Ev,_ZThn144_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn256_N8S7740C17D0Ev,_ZThn144_N8S7740C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C128S7740C18__A2__8S7740C17__7S7740C1[] = {
  ABISELECT(10752,6388),
  ABISELECT(11808,7016),
  ABISELECT(11728,6976),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C17D1Ev,_ZThn144_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S7740C17D0Ev,_ZThn144_N8S7740C17D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S7740C17D1Ev,_ZThn748_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn1264_N8S7740C17D0Ev,_ZThn748_N8S7740C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C148S7740C18__8S7740C17__7S7740C1[] = {
  ABISELECT(10800,6412),
  ABISELECT(9984,5924),
  ABISELECT(9744,5784),
  ABISELECT(10800,6412),
  ABISELECT(10720,6372),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C17D1Ev,_ZThn748_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S7740C17D0Ev,_ZThn748_N8S7740C17D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn1280_N8S7740C17D1Ev,_ZThn760_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn1280_N8S7740C17D0Ev,_ZThn760_N8S7740C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17__7S7740C1[] = {
  ABISELECT(10784,6400),
  ABISELECT(9728,5772),
  ABISELECT(10784,6400),
  ABISELECT(10704,6360),
  ABISELECT(9968,5912),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C17D1Ev,_ZThn760_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S7740C17D0Ev,_ZThn760_N8S7740C17D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S7740C17D1Ev,_ZThn2328_N8S7740C17D1Ev)();
extern void ABISELECT(_ZThn3936_N8S7740C17D0Ev,_ZThn2328_N8S7740C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C148S7740C18__A4__8S7740C17__7S7740C1[] = {
  ABISELECT(7072,4204),
  ABISELECT(8128,4832),
  ABISELECT(8048,4792),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S7740C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C17D1Ev,_ZThn2328_N8S7740C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S7740C17D0Ev,_ZThn2328_N8S7740C17D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C3D1Ev();
extern void _ZN7S7740C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C3__7S7740C1[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C3D0Ev,
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C57S7740C3__7S7740C1[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(3744,2216),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C57S7740C3__7S7740C1[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C57S7740C3__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C57S7740C3__7S7740C1[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
extern void _ZN8S7740C11D1Ev();
extern void _ZN8S7740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C117S7740C3__7S7740C1[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN8S7740C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C11D0Ev,
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C108S7740C117S7740C3__A1__7S7740C1[] = {
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void _ZN7S7740C5D1Ev();
extern void _ZN7S7740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C117S7740C3__A1__7S7740C1[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7740C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__7S7740C1[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev)();
extern void ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__7S7740C1[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI7S7740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C117S7740C3__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C5__8S7740C117S7740C3__7S7740C1[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D1Ev,_ZThn12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S7740C11D0Ev,_ZThn12_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__8S7740C117S7740C3__7S7740C1[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev)();
extern void ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__A1__8S7740C117S7740C3__7S7740C1[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI8S7740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev)() __attribute__((weak));
extern void _ZN7S7740C62v2Ev();
extern void _ZN7S7740C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7740C6__7S7740C3__7S7740C1[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7740C62v2Ev,
  (VTBL_ENTRY)&_ZN7S7740C62v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C3__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev)();
extern void ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C3__7S7740C1[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev),
};
extern void ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7740C11__7S7740C3__7S7740C1[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(3488,2072),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D1Ev,_ZThn144_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S7740C3D0Ev,_ZThn144_N7S7740C3D0Ev),
};
extern void _ZN7S7740C52v4Ev();
extern void ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev)();
extern void ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7740C58S7740C11__A1__7S7740C3__7S7740C1[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(3472,2060),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S7740C3[0]),
  (VTBL_ENTRY)&_ZN7S7740C52v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D1Ev,_ZThn156_N7S7740C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S7740C3D0Ev,_ZThn156_N7S7740C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
extern void _ZN8S7740C10D1Ev();
extern void _ZN8S7740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7740C10__7S7740C1[] = {
  ABISELECT(-1056,-628),
  0,
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
  (VTBL_ENTRY)&_ZN8S7740C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7740C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7740C8__8S7740C10__7S7740C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(80,40),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S7740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7740C13__7S7740C1[] = {
  ABISELECT(-1072,-640),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7740C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7740C88S7740C13__A1__7S7740C1[] = {
  ABISELECT(-1072,-640),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7740C8[0]),
};
static  VTT_ENTRY vtt_S7740C1[] = {
  {&(_ZTV7S7740C1[9]),  9,185},
  {&(_tg__ZTV7S7740C2__7S7740C1[9]),  9,11},
  {&(_tg__ZTV8S7740C147S7740C2__7S7740C1[7]),  7,9},
  {&(_tg__ZTV8S7740C118S7740C147S7740C2__A1__7S7740C1[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C118S7740C147S7740C2__A2__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C118S7740C147S7740C2__A2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C118S7740C147S7740C2__A2__7S7740C1[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C118S7740C147S7740C2__A1__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C118S7740C147S7740C2__A1__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C118S7740C147S7740C2__A1__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C118S7740C147S7740C2__A1__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C147S7740C2__A3__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C147S7740C2__A3__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C147S7740C2__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C147S7740C2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C11__8S7740C147S7740C2__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C10__A1__8S7740C147S7740C2__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C147S7740C2__7S7740C1[5]),  5,7},
  {&(_tg__ZTV8S7740C157S7740C2__7S7740C1[7]),  7,11},
  {&(_tg__ZTV8S7740C128S7740C157S7740C2__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C128S7740C157S7740C2__A3__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C128S7740C157S7740C2__A4__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C128S7740C157S7740C2__A4__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C128S7740C157S7740C2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C128S7740C157S7740C2__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C128S7740C157S7740C2__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C128S7740C157S7740C2__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C157S7740C2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C157S7740C2__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C157S7740C2__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C12__A1__8S7740C157S7740C2__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C3__7S7740C2__7S7740C1[9]),  9,12},
  {&(_tg__ZTV7S7740C6__7S7740C2__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C2__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__7S7740C2__7S7740C1[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__7S7740C2__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C13__7S7740C2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C118S7740C14__A2__7S7740C2__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C108S7740C14__A3__7S7740C2__7S7740C1[5]),  5,7},
  {&(_tg__ZTV8S7740C15__7S7740C2__7S7740C1[7]),  7,11},
  {&(_tg__ZTV8S7740C108S7740C128S7740C15__A4__7S7740C2__7S7740C1[5]),  5,7},
  {&(_tg__ZTV8S7740C15__A1__7S7740C1[7]),  7,11},
  {&(_tg__ZTV8S7740C128S7740C15__A1__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C58S7740C128S7740C15__A4__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C128S7740C15__A4__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C128S7740C15__A4__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C128S7740C15__A4__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C128S7740C15__A5__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C128S7740C15__A5__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C128S7740C15__A1__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C128S7740C15__A1__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C128S7740C15__A1__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C128S7740C15__A1__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C15__A1__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C15__A1__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C15__A1__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C12__A1__8S7740C15__A1__7S7740C1[5]),  5,7},
  {&(_tg__ZTV8S7740C17__7S7740C1[8]),  8,13},
  {&(_tg__ZTV8S7740C188S7740C17__7S7740C1[8]),  8,11},
  {&(_tg__ZTV8S7740C128S7740C188S7740C17__A2__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C128S7740C188S7740C17__A5__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C128S7740C188S7740C17__A6__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C128S7740C188S7740C17__A6__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C8__8S7740C128S7740C188S7740C17__A2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C128S7740C188S7740C17__A2__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__8S7740C128S7740C188S7740C17__A2__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C128S7740C188S7740C17__A2__7S7740C1[5]),  5,7},
  {&(_tg__ZTV8S7740C148S7740C188S7740C17__A1__7S7740C1[7]),  7,9},
  {&(_tg__ZTV8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C118S7740C148S7740C188S7740C17__A7__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C118S7740C148S7740C188S7740C17__A7__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C118S7740C148S7740C188S7740C17__A6__7S7740C1[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C118S7740C148S7740C188S7740C17__A2__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C108S7740C148S7740C188S7740C17__A8__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C148S7740C188S7740C17__A8__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C6__8S7740C148S7740C188S7740C17__A1__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C148S7740C188S7740C17__A1__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C11__8S7740C148S7740C188S7740C17__A1__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C10__A1__8S7740C148S7740C188S7740C17__A1__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C10__A__8S7740C148S7740C188S7740C17__A1__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C3__8S7740C188S7740C17__7S7740C1[9]),  9,12},
  {&(_tg__ZTV7S7740C6__8S7740C188S7740C17__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C188S7740C17__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__8S7740C188S7740C17__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__8S7740C188S7740C17__7S7740C1[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C188S7740C17__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C108S7740C12__A2__8S7740C188S7740C17__7S7740C1[5]),  5,7},
  {&(_tg__ZTV8S7740C14__8S7740C188S7740C17__7S7740C1[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C118S7740C14__A3__8S7740C188S7740C17__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C108S7740C14__A4__8S7740C188S7740C17__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C3__8S7740C17__7S7740C1[9]),  9,12},
  {&(_tg__ZTV7S7740C6__8S7740C17__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__8S7740C17__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__8S7740C17__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__8S7740C17__7S7740C1[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__8S7740C17__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C108S7740C128S7740C18__A2__8S7740C17__7S7740C1[5]),  5,7},
  {&(_tg__ZTV8S7740C148S7740C18__8S7740C17__7S7740C1[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C118S7740C148S7740C18__A3__8S7740C17__7S7740C1[7]),  7,10},
  {&(_tg__ZTV8S7740C108S7740C148S7740C18__A4__8S7740C17__7S7740C1[5]),  5,7},
  {&(_ZTV7S7740C1[138]),  138,185},
  {&(_ZTV7S7740C1[165]),  165,185},
  {&(_ZTV7S7740C1[173]),  173,185},
  {&(_ZTV7S7740C1[179]),  179,185},
  {&(_ZTV7S7740C1[148]),  148,185},
  {&(_ZTV7S7740C1[157]),  157,185},
  {&(_ZTV7S7740C1[185]),  185,185},
  {&(_ZTV7S7740C1[19]),  19,185},
  {&(_ZTV7S7740C1[27]),  27,185},
  {&(_ZTV7S7740C1[36]),  36,185},
  {&(_ZTV7S7740C1[45]),  45,185},
  {&(_ZTV7S7740C1[60]),  60,185},
  {&(_ZTV7S7740C1[69]),  69,185},
  {&(_ZTV7S7740C1[85]),  85,185},
  {&(_ZTV7S7740C1[95]),  95,185},
  {&(_ZTV7S7740C1[110]),  110,185},
  {&(_ZTV7S7740C1[119]),  119,185},
  {&(_ZTV7S7740C1[127]),  127,185},
  {&(_tg__ZTV7S7740C3__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C57S7740C3__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C57S7740C3__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C57S7740C3__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C57S7740C3__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C117S7740C3__7S7740C1[7]),  7,9},
  {&(_tg__ZTV8S7740C108S7740C117S7740C3__A1__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C108S7740C117S7740C3__A1__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C58S7740C117S7740C3__A1__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__7S7740C58S7740C117S7740C3__A1__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C58S7740C117S7740C3__A1__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C58S7740C117S7740C3__A1__7S7740C1[6]),  6,8},
  {&(_tg__ZTV7S7740C8__8S7740C117S7740C3__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C5__8S7740C117S7740C3__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C6__8S7740C117S7740C3__7S7740C1[5]),  5,9},
  {&(_tg__ZTV8S7740C10__A1__8S7740C117S7740C3__7S7740C1[6]),  6,8},
  {&(_tg__ZTV7S7740C6__7S7740C3__7S7740C1[5]),  5,9},
  {&(_tg__ZTV7S7740C8__7S7740C3__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C3__7S7740C1[6]),  6,8},
  {&(_tg__ZTV8S7740C11__7S7740C3__7S7740C1[7]),  7,9},
  {&(_tg__ZTV7S7740C58S7740C11__A1__7S7740C3__7S7740C1[7]),  7,10},
  {&(_tg__ZTV7S7740C8__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C10__7S7740C1[5]),  5,7},
  {&(_tg__ZTV7S7740C8__8S7740C10__7S7740C1[4]),  4,4},
  {&(_tg__ZTV8S7740C13__7S7740C1[4]),  4,4},
  {&(_tg__ZTV7S7740C88S7740C13__A1__7S7740C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7740C1[];
extern  VTBL_ENTRY _ZTV7S7740C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7740C1[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D0Ev,_ZTv0_n24_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D0Ev,_ZThn2216_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C3D1Ev,_ZTv0_n24_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C3D1Ev,_ZThn2216_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D0Ev,_ZTv0_n12_N7S7740C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D0Ev,_ZThn1728_N7S7740C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C3D1Ev,_ZTv0_n12_N7S7740C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C3D1Ev,_ZThn1728_N7S7740C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C17D0Ev,_ZTv0_n24_N8S7740C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C17D0Ev,_ZThn7160_N8S7740C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C17D1Ev,_ZTv0_n24_N8S7740C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C17D1Ev,_ZThn7160_N8S7740C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C17D0Ev,_ZTv0_n12_N8S7740C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C17D0Ev,_ZThn6672_N8S7740C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C17D1Ev,_ZTv0_n12_N8S7740C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C17D1Ev,_ZThn6672_N8S7740C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C17D0Ev,_ZTv0_n36_N8S7740C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C17D0Ev,_ZThn4944_N8S7740C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C17D1Ev,_ZTv0_n36_N8S7740C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C17D1Ev,_ZThn4944_N8S7740C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C18D0Ev,_ZTv0_n24_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C18D0Ev,_ZThn7160_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C18D1Ev,_ZTv0_n24_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C18D1Ev,_ZThn7160_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C18D0Ev,_ZTv0_n12_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C18D0Ev,_ZThn6672_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C18D1Ev,_ZTv0_n12_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C18D1Ev,_ZThn6672_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C18D0Ev,_ZTv0_n36_N8S7740C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C18D0Ev,_ZThn4944_N8S7740C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7740C18D1Ev,_ZTv0_n36_N8S7740C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8320_N8S7740C18D1Ev,_ZThn4944_N8S7740C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C2D0Ev,_ZTv0_n24_N7S7740C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N7S7740C2D0Ev,_ZThn10496_N7S7740C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C2D1Ev,_ZTv0_n24_N7S7740C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N7S7740C2D1Ev,_ZThn10496_N7S7740C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C2D0Ev,_ZTv0_n12_N7S7740C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N7S7740C2D0Ev,_ZThn10008_N7S7740C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C2D1Ev,_ZTv0_n12_N7S7740C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N7S7740C2D1Ev,_ZThn10008_N7S7740C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7740C2D0Ev,_ZTv0_n36_N7S7740C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13888_N7S7740C2D0Ev,_ZThn8280_N7S7740C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7740C2D1Ev,_ZTv0_n36_N7S7740C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13888_N7S7740C2D1Ev,_ZThn8280_N7S7740C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C15D0Ev,_ZTv0_n24_N8S7740C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13120_N8S7740C15D0Ev,_ZThn7800_N8S7740C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14192_N8S7740C15D0Ev,_ZThn8444_N8S7740C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C15D1Ev,_ZTv0_n24_N8S7740C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13120_N8S7740C15D1Ev,_ZThn7800_N8S7740C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14192_N8S7740C15D1Ev,_ZThn8444_N8S7740C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C15D0Ev,_ZTv0_n12_N8S7740C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12304_N8S7740C15D0Ev,_ZThn7312_N8S7740C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S7740C15D0Ev,_ZThn7956_N8S7740C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C15D1Ev,_ZTv0_n12_N8S7740C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12304_N8S7740C15D1Ev,_ZThn7312_N8S7740C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S7740C15D1Ev,_ZThn7956_N8S7740C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D0Ev,_ZTv0_n24_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C12D0Ev,_ZThn7160_N8S7740C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13120_N8S7740C12D0Ev,_ZThn7800_N8S7740C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14192_N8S7740C12D0Ev,_ZThn8444_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C12D1Ev,_ZTv0_n24_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N8S7740C12D1Ev,_ZThn7160_N8S7740C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13120_N8S7740C12D1Ev,_ZThn7800_N8S7740C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14192_N8S7740C12D1Ev,_ZThn8444_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D0Ev,_ZTv0_n12_N8S7740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C12D0Ev,_ZThn6672_N8S7740C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12304_N8S7740C12D0Ev,_ZThn7312_N8S7740C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S7740C12D0Ev,_ZThn7956_N8S7740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C12D1Ev,_ZTv0_n12_N8S7740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N8S7740C12D1Ev,_ZThn6672_N8S7740C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12304_N8S7740C12D1Ev,_ZThn7312_N8S7740C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N8S7740C12D1Ev,_ZThn7956_N8S7740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D0Ev,_ZTv0_n24_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C14D0Ev,_ZThn6412_N8S7740C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N8S7740C14D0Ev,_ZThn10496_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C14D1Ev,_ZTv0_n24_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C14D1Ev,_ZThn6412_N8S7740C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N8S7740C14D1Ev,_ZThn10496_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D0Ev,_ZTv0_n12_N8S7740C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C14D0Ev,_ZThn5924_N8S7740C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N8S7740C14D0Ev,_ZThn10008_N8S7740C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C14D1Ev,_ZTv0_n12_N8S7740C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C14D1Ev,_ZThn5924_N8S7740C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N8S7740C14D1Ev,_ZThn10008_N8S7740C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D0Ev,_ZTv0_n24_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D0Ev,_ZThn2072_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C11D0Ev,_ZThn6412_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N8S7740C11D0Ev,_ZThn10496_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7740C11D1Ev,_ZTv0_n24_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S7740C11D1Ev,_ZThn2072_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S7740C11D1Ev,_ZThn6412_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N8S7740C11D1Ev,_ZThn10496_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D0Ev,_ZTv0_n12_N8S7740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D0Ev,_ZThn1584_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C11D0Ev,_ZThn5924_N8S7740C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N8S7740C11D0Ev,_ZThn10008_N8S7740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S7740C11D1Ev,_ZTv0_n12_N8S7740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S7740C11D1Ev,_ZThn1584_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9984_N8S7740C11D1Ev,_ZThn5924_N8S7740C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N8S7740C11D1Ev,_ZThn10008_N8S7740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D0Ev,_ZTv0_n24_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D0Ev,_ZThn2060_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D0Ev,_ZThn2216_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N7S7740C5D0Ev,_ZThn6400_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N7S7740C5D0Ev,_ZThn7160_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13120_N7S7740C5D0Ev,_ZThn7800_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14192_N7S7740C5D0Ev,_ZThn8444_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17616_N7S7740C5D0Ev,_ZThn10484_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C5D1Ev,_ZTv0_n24_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S7740C5D1Ev,_ZThn2060_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S7740C5D1Ev,_ZThn2216_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10784_N7S7740C5D1Ev,_ZThn6400_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12064_N7S7740C5D1Ev,_ZThn7160_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13120_N7S7740C5D1Ev,_ZThn7800_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn14192_N7S7740C5D1Ev,_ZThn8444_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17616_N7S7740C5D1Ev,_ZThn10484_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D0Ev,_ZTv0_n12_N7S7740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D0Ev,_ZThn1572_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D0Ev,_ZThn1728_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N7S7740C5D0Ev,_ZThn5912_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N7S7740C5D0Ev,_ZThn6672_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12304_N7S7740C5D0Ev,_ZThn7312_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N7S7740C5D0Ev,_ZThn7956_N7S7740C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16800_N7S7740C5D0Ev,_ZThn9996_N7S7740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C5D1Ev,_ZTv0_n12_N7S7740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S7740C5D1Ev,_ZThn1572_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S7740C5D1Ev,_ZThn1728_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9968_N7S7740C5D1Ev,_ZThn5912_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11248_N7S7740C5D1Ev,_ZThn6672_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12304_N7S7740C5D1Ev,_ZThn7312_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn13376_N7S7740C5D1Ev,_ZThn7956_N7S7740C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16800_N7S7740C5D1Ev,_ZThn9996_N7S7740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C1D0Ev,_ZTv0_n24_N7S7740C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N7S7740C1D0Ev,_ZThn10496_N7S7740C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7740C1D1Ev,_ZTv0_n24_N7S7740C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17632_N7S7740C1D1Ev,_ZThn10496_N7S7740C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C1D0Ev,_ZTv0_n12_N7S7740C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N7S7740C1D0Ev,_ZThn10008_N7S7740C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7740C1D1Ev,_ZTv0_n12_N7S7740C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16816_N7S7740C1D1Ev,_ZThn10008_N7S7740C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7740C1D0Ev,_ZTv0_n36_N7S7740C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13888_N7S7740C1D0Ev,_ZThn8280_N7S7740C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7740C1D1Ev,_ZTv0_n36_N7S7740C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13888_N7S7740C1D1Ev,_ZThn8280_N7S7740C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7740C1 = {  "S7740C1", // class name
  bases_S7740C1, 50,
  &(vtc_S7740C1[0]), // expected_vtbl_contents
  &(vtt_S7740C1[0]), // expected_vtt_contents
  ABISELECT(17920,10700), // object size
  NSPAIRA(_ZTI7S7740C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7740C1),185, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7740C1),160, //virtual table table var
  37, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7190C2  {
  int s7190c2f0;
  __tsi64 s7190c2f1;
  void *s7190c2f2[4];
  int s7190c2f3[2];
  void *s7190c2f4;
  ::S3280C4_nt s7190c2f5;
  void *s7190c2f6[2];
  virtual  ~S7190C2(); // _ZN7S7190C2D1Ev
  virtual void  v9(); // _ZN7S7190C22v9Ev
  virtual void  v10(); // _ZN7S7190C23v10Ev
  virtual void  v11(); // _ZN7S7190C23v11Ev
  virtual void  v12(); // _ZN7S7190C23v12Ev
  virtual void  v13(); // _ZN7S7190C23v13Ev
  virtual void  v14(); // _ZN7S7190C23v14Ev
  virtual void  v15(); // _ZN7S7190C23v15Ev
  virtual void  v16(); // _ZN7S7190C23v16Ev
  virtual void  v17(); // _ZN7S7190C23v17Ev
  virtual void  v18(); // _ZN7S7190C23v18Ev
  virtual void  v19(); // _ZN7S7190C23v19Ev
  virtual void  v20(); // _ZN7S7190C23v20Ev
  virtual void  v21(); // _ZN7S7190C23v21Ev
  virtual void  v22(); // _ZN7S7190C23v22Ev
  virtual void  v23(); // _ZN7S7190C23v23Ev
  virtual void  v24(); // _ZN7S7190C23v24Ev
  virtual void  v25(); // _ZN7S7190C23v25Ev
  virtual void  v26(); // _ZN7S7190C23v26Ev
  virtual void  v27(); // _ZN7S7190C23v27Ev
  virtual void  v28(); // _ZN7S7190C23v28Ev
  virtual void  v29(); // _ZN7S7190C23v29Ev
  virtual void  v30(); // _ZN7S7190C23v30Ev
  virtual void  v31(); // _ZN7S7190C23v31Ev
  virtual void  v32(); // _ZN7S7190C23v32Ev
  virtual void  v33(); // _ZN7S7190C23v33Ev
  virtual void  v34(); // _ZN7S7190C23v34Ev
  virtual void  v35(); // _ZN7S7190C23v35Ev
  virtual void  v36(); // _ZN7S7190C23v36Ev
  virtual void  v37(); // _ZN7S7190C23v37Ev
  virtual void  v38(); // _ZN7S7190C23v38Ev
  virtual void  v39(); // _ZN7S7190C23v39Ev
  virtual void  v40(); // _ZN7S7190C23v40Ev
  virtual void  v41(); // _ZN7S7190C23v41Ev
  virtual void  v42(); // _ZN7S7190C23v42Ev
  virtual void  v43(); // _ZN7S7190C23v43Ev
  virtual void  v44(); // _ZN7S7190C23v44Ev
  virtual void  v45(); // _ZN7S7190C23v45Ev
  virtual void  v46(); // _ZN7S7190C23v46Ev
  virtual void  v47(); // _ZN7S7190C23v47Ev
  virtual void  v48(); // _ZN7S7190C23v48Ev
  virtual void  v49(); // _ZN7S7190C23v49Ev
  virtual void  v50(); // _ZN7S7190C23v50Ev
  virtual void  v51(); // _ZN7S7190C23v51Ev
  virtual void  v52(); // _ZN7S7190C23v52Ev
  virtual void  v53(); // _ZN7S7190C23v53Ev
  virtual void  v54(); // _ZN7S7190C23v54Ev
  virtual void  v55(); // _ZN7S7190C23v55Ev
  virtual void  v56(); // _ZN7S7190C23v56Ev
  virtual void  v57(); // _ZN7S7190C23v57Ev
  virtual void  v58(); // _ZN7S7190C23v58Ev
  virtual void  v59(); // _ZN7S7190C23v59Ev
  virtual void  v60(); // _ZN7S7190C23v60Ev
  virtual void  v61(); // _ZN7S7190C23v61Ev
  virtual void  v62(); // _ZN7S7190C23v62Ev
  virtual void  v63(); // _ZN7S7190C23v63Ev
  virtual void  v64(); // _ZN7S7190C23v64Ev
  virtual void  v65(); // _ZN7S7190C23v65Ev
  virtual void  v66(); // _ZN7S7190C23v66Ev
  virtual void  v67(); // _ZN7S7190C23v67Ev
  virtual void  v68(); // _ZN7S7190C23v68Ev
  virtual void  v69(); // _ZN7S7190C23v69Ev
  virtual void  v70(); // _ZN7S7190C23v70Ev
  virtual void  v71(); // _ZN7S7190C23v71Ev
  virtual void  v72(); // _ZN7S7190C23v72Ev
  S7190C2(); // tgen
};
//SIG(-1 S7190C2) 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]}


 S7190C2 ::~S7190C2(){ note_dtor("S7190C2", this);}
void  S7190C2 ::v9(){vfunc_called(this, "_ZN7S7190C22v9Ev");}
void  S7190C2 ::v10(){vfunc_called(this, "_ZN7S7190C23v10Ev");}
void  S7190C2 ::v11(){vfunc_called(this, "_ZN7S7190C23v11Ev");}
void  S7190C2 ::v12(){vfunc_called(this, "_ZN7S7190C23v12Ev");}
void  S7190C2 ::v13(){vfunc_called(this, "_ZN7S7190C23v13Ev");}
void  S7190C2 ::v14(){vfunc_called(this, "_ZN7S7190C23v14Ev");}
void  S7190C2 ::v15(){vfunc_called(this, "_ZN7S7190C23v15Ev");}
void  S7190C2 ::v16(){vfunc_called(this, "_ZN7S7190C23v16Ev");}
void  S7190C2 ::v17(){vfunc_called(this, "_ZN7S7190C23v17Ev");}
void  S7190C2 ::v18(){vfunc_called(this, "_ZN7S7190C23v18Ev");}
void  S7190C2 ::v19(){vfunc_called(this, "_ZN7S7190C23v19Ev");}
void  S7190C2 ::v20(){vfunc_called(this, "_ZN7S7190C23v20Ev");}
void  S7190C2 ::v21(){vfunc_called(this, "_ZN7S7190C23v21Ev");}
void  S7190C2 ::v22(){vfunc_called(this, "_ZN7S7190C23v22Ev");}
void  S7190C2 ::v23(){vfunc_called(this, "_ZN7S7190C23v23Ev");}
void  S7190C2 ::v24(){vfunc_called(this, "_ZN7S7190C23v24Ev");}
void  S7190C2 ::v25(){vfunc_called(this, "_ZN7S7190C23v25Ev");}
void  S7190C2 ::v26(){vfunc_called(this, "_ZN7S7190C23v26Ev");}
void  S7190C2 ::v27(){vfunc_called(this, "_ZN7S7190C23v27Ev");}
void  S7190C2 ::v28(){vfunc_called(this, "_ZN7S7190C23v28Ev");}
void  S7190C2 ::v29(){vfunc_called(this, "_ZN7S7190C23v29Ev");}
void  S7190C2 ::v30(){vfunc_called(this, "_ZN7S7190C23v30Ev");}
void  S7190C2 ::v31(){vfunc_called(this, "_ZN7S7190C23v31Ev");}
void  S7190C2 ::v32(){vfunc_called(this, "_ZN7S7190C23v32Ev");}
void  S7190C2 ::v33(){vfunc_called(this, "_ZN7S7190C23v33Ev");}
void  S7190C2 ::v34(){vfunc_called(this, "_ZN7S7190C23v34Ev");}
void  S7190C2 ::v35(){vfunc_called(this, "_ZN7S7190C23v35Ev");}
void  S7190C2 ::v36(){vfunc_called(this, "_ZN7S7190C23v36Ev");}
void  S7190C2 ::v37(){vfunc_called(this, "_ZN7S7190C23v37Ev");}
void  S7190C2 ::v38(){vfunc_called(this, "_ZN7S7190C23v38Ev");}
void  S7190C2 ::v39(){vfunc_called(this, "_ZN7S7190C23v39Ev");}
void  S7190C2 ::v40(){vfunc_called(this, "_ZN7S7190C23v40Ev");}
void  S7190C2 ::v41(){vfunc_called(this, "_ZN7S7190C23v41Ev");}
void  S7190C2 ::v42(){vfunc_called(this, "_ZN7S7190C23v42Ev");}
void  S7190C2 ::v43(){vfunc_called(this, "_ZN7S7190C23v43Ev");}
void  S7190C2 ::v44(){vfunc_called(this, "_ZN7S7190C23v44Ev");}
void  S7190C2 ::v45(){vfunc_called(this, "_ZN7S7190C23v45Ev");}
void  S7190C2 ::v46(){vfunc_called(this, "_ZN7S7190C23v46Ev");}
void  S7190C2 ::v47(){vfunc_called(this, "_ZN7S7190C23v47Ev");}
void  S7190C2 ::v48(){vfunc_called(this, "_ZN7S7190C23v48Ev");}
void  S7190C2 ::v49(){vfunc_called(this, "_ZN7S7190C23v49Ev");}
void  S7190C2 ::v50(){vfunc_called(this, "_ZN7S7190C23v50Ev");}
void  S7190C2 ::v51(){vfunc_called(this, "_ZN7S7190C23v51Ev");}
void  S7190C2 ::v52(){vfunc_called(this, "_ZN7S7190C23v52Ev");}
void  S7190C2 ::v53(){vfunc_called(this, "_ZN7S7190C23v53Ev");}
void  S7190C2 ::v54(){vfunc_called(this, "_ZN7S7190C23v54Ev");}
void  S7190C2 ::v55(){vfunc_called(this, "_ZN7S7190C23v55Ev");}
void  S7190C2 ::v56(){vfunc_called(this, "_ZN7S7190C23v56Ev");}
void  S7190C2 ::v57(){vfunc_called(this, "_ZN7S7190C23v57Ev");}
void  S7190C2 ::v58(){vfunc_called(this, "_ZN7S7190C23v58Ev");}
void  S7190C2 ::v59(){vfunc_called(this, "_ZN7S7190C23v59Ev");}
void  S7190C2 ::v60(){vfunc_called(this, "_ZN7S7190C23v60Ev");}
void  S7190C2 ::v61(){vfunc_called(this, "_ZN7S7190C23v61Ev");}
void  S7190C2 ::v62(){vfunc_called(this, "_ZN7S7190C23v62Ev");}
void  S7190C2 ::v63(){vfunc_called(this, "_ZN7S7190C23v63Ev");}
void  S7190C2 ::v64(){vfunc_called(this, "_ZN7S7190C23v64Ev");}
void  S7190C2 ::v65(){vfunc_called(this, "_ZN7S7190C23v65Ev");}
void  S7190C2 ::v66(){vfunc_called(this, "_ZN7S7190C23v66Ev");}
void  S7190C2 ::v67(){vfunc_called(this, "_ZN7S7190C23v67Ev");}
void  S7190C2 ::v68(){vfunc_called(this, "_ZN7S7190C23v68Ev");}
void  S7190C2 ::v69(){vfunc_called(this, "_ZN7S7190C23v69Ev");}
void  S7190C2 ::v70(){vfunc_called(this, "_ZN7S7190C23v70Ev");}
void  S7190C2 ::v71(){vfunc_called(this, "_ZN7S7190C23v71Ev");}
void  S7190C2 ::v72(){vfunc_called(this, "_ZN7S7190C23v72Ev");}
S7190C2 ::S7190C2(){ note_ctor("S7190C2", this);} // tgen

static void Test_S7190C2()
{
  extern Class_Descriptor cd_S7190C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S7190C2, buf);
    S7190C2 *dp, &lv = *(dp=new (buf) S7190C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7190C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7190C2)");
    check_field_offset(lv, s7190c2f0, ABISELECT(8,4), "S7190C2.s7190c2f0");
    check_field_offset(lv, s7190c2f1, ABISELECT(16,8), "S7190C2.s7190c2f1");
    check_field_offset(lv, s7190c2f2, ABISELECT(24,16), "S7190C2.s7190c2f2");
    check_field_offset(lv, s7190c2f3, ABISELECT(56,32), "S7190C2.s7190c2f3");
    check_field_offset(lv, s7190c2f4, ABISELECT(64,40), "S7190C2.s7190c2f4");
    check_field_offset(lv, s7190c2f5, ABISELECT(72,44), "S7190C2.s7190c2f5");
    check_field_offset(lv, s7190c2f6, ABISELECT(80,52), "S7190C2.s7190c2f6");
    test_class_info(&lv, &cd_S7190C2);
    dp->~S7190C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7190C2(Test_S7190C2, "S7190C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S7190C2C1Ev();
extern void _ZN7S7190C2D1Ev();
Name_Map name_map_S7190C2[] = {
  NSPAIR(_ZN7S7190C2C1Ev),
  NSPAIR(_ZN7S7190C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7190C2[];
extern void _ZN7S7190C2D1Ev();
extern void _ZN7S7190C2D0Ev();
extern void _ZN7S7190C22v9Ev();
extern void _ZN7S7190C23v10Ev();
extern void _ZN7S7190C23v11Ev();
extern void _ZN7S7190C23v12Ev();
extern void _ZN7S7190C23v13Ev();
extern void _ZN7S7190C23v14Ev();
extern void _ZN7S7190C23v15Ev();
extern void _ZN7S7190C23v16Ev();
extern void _ZN7S7190C23v17Ev();
extern void _ZN7S7190C23v18Ev();
extern void _ZN7S7190C23v19Ev();
extern void _ZN7S7190C23v20Ev();
extern void _ZN7S7190C23v21Ev();
extern void _ZN7S7190C23v22Ev();
extern void _ZN7S7190C23v23Ev();
extern void _ZN7S7190C23v24Ev();
extern void _ZN7S7190C23v25Ev();
extern void _ZN7S7190C23v26Ev();
extern void _ZN7S7190C23v27Ev();
extern void _ZN7S7190C23v28Ev();
extern void _ZN7S7190C23v29Ev();
extern void _ZN7S7190C23v30Ev();
extern void _ZN7S7190C23v31Ev();
extern void _ZN7S7190C23v32Ev();
extern void _ZN7S7190C23v33Ev();
extern void _ZN7S7190C23v34Ev();
extern void _ZN7S7190C23v35Ev();
extern void _ZN7S7190C23v36Ev();
extern void _ZN7S7190C23v37Ev();
extern void _ZN7S7190C23v38Ev();
extern void _ZN7S7190C23v39Ev();
extern void _ZN7S7190C23v40Ev();
extern void _ZN7S7190C23v41Ev();
extern void _ZN7S7190C23v42Ev();
extern void _ZN7S7190C23v43Ev();
extern void _ZN7S7190C23v44Ev();
extern void _ZN7S7190C23v45Ev();
extern void _ZN7S7190C23v46Ev();
extern void _ZN7S7190C23v47Ev();
extern void _ZN7S7190C23v48Ev();
extern void _ZN7S7190C23v49Ev();
extern void _ZN7S7190C23v50Ev();
extern void _ZN7S7190C23v51Ev();
extern void _ZN7S7190C23v52Ev();
extern void _ZN7S7190C23v53Ev();
extern void _ZN7S7190C23v54Ev();
extern void _ZN7S7190C23v55Ev();
extern void _ZN7S7190C23v56Ev();
extern void _ZN7S7190C23v57Ev();
extern void _ZN7S7190C23v58Ev();
extern void _ZN7S7190C23v59Ev();
extern void _ZN7S7190C23v60Ev();
extern void _ZN7S7190C23v61Ev();
extern void _ZN7S7190C23v62Ev();
extern void _ZN7S7190C23v63Ev();
extern void _ZN7S7190C23v64Ev();
extern void _ZN7S7190C23v65Ev();
extern void _ZN7S7190C23v66Ev();
extern void _ZN7S7190C23v67Ev();
extern void _ZN7S7190C23v68Ev();
extern void _ZN7S7190C23v69Ev();
extern void _ZN7S7190C23v70Ev();
extern void _ZN7S7190C23v71Ev();
extern void _ZN7S7190C23v72Ev();
static  VTBL_ENTRY vtc_S7190C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7190C2[0]),
  (VTBL_ENTRY)&_ZN7S7190C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7190C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7190C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v69Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v70Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v71Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v72Ev,
};
extern VTBL_ENTRY _ZTI7S7190C2[];
extern  VTBL_ENTRY _ZTV7S7190C2[];
Class_Descriptor cd_S7190C2 = {  "S7190C2", // class name
  0,0,//no base classes
  &(vtc_S7190C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S7190C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7190C2),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  S7190C12  : S3280C7_nt {
};
//SIG(-1 S7190C12) C1{ BC2{ m Fp Fi[2]}}



static void Test_S7190C12()
{
  extern Class_Descriptor cd_S7190C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7190C12, buf);
    S7190C12 &lv = *(new (buf) S7190C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7190C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7190C12)");
    check_base_class_offset(lv, (S3280C7_nt*), 0, "S7190C12");
    test_class_info(&lv, &cd_S7190C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7190C12(Test_S7190C12, "S7190C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S7190C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S7190C12 = {  "S7190C12", // class name
  bases_S7190C12, 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  S7190C11_nt  : S7190C12 {
};
//SIG(-1 S7190C11_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S7190C11_nt

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S7190C12;
static Base_Class bases_S7190C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S7190C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S7190C16  : S3280C7_nt {
};
//SIG(-1 S7190C16) C1{ BC2{ m Fp Fi[2]}}



static void Test_S7190C16()
{
  extern Class_Descriptor cd_S7190C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7190C16, buf);
    S7190C16 &lv = *(new (buf) S7190C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7190C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7190C16)");
    check_base_class_offset(lv, (S3280C7_nt*), 0, "S7190C16");
    test_class_info(&lv, &cd_S7190C16);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7190C16(Test_S7190C16, "S7190C16", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S7190C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S7190C16 = {  "S7190C16", // class name
  bases_S7190C16, 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  S7190C15  : S7190C16 {
};
//SIG(-1 S7190C15) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S7190C15()
{
  extern Class_Descriptor cd_S7190C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7190C15, buf);
    S7190C15 &lv = *(new (buf) S7190C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7190C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7190C15)");
    check_base_class_offset(lv, (S3280C7_nt*)(S7190C16*), 0, "S7190C15");
    check_base_class_offset(lv, (S7190C16*), 0, "S7190C15");
    test_class_info(&lv, &cd_S7190C15);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7190C15(Test_S7190C15, "S7190C15", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S7190C16;
static Base_Class bases_S7190C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S7190C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S7190C15 = {  "S7190C15", // class name
  bases_S7190C15, 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  S7190C1  : S7190C2 {
  ::S3280C4_nt s7190c1f0;
  ::S3280C17 s7190c1f1;
  int s7190c1f2[3];
  unsigned int s7190c1f3:1;
  ::S3280C11 s7190c1f4;
  ::S3280C5_nt s7190c1f5;
  ::S7190C11_nt s7190c1f6;
  void *s7190c1f7;
  char s7190c1f8[2];
  ::S7190C11_nt s7190c1f9;
  ::S7190C15 s7190c1f10;
  virtual  ~S7190C1(); // _ZN7S7190C1D1Ev
  virtual void  v1(); // _ZN7S7190C12v1Ev
  virtual void  v2(); // _ZN7S7190C12v2Ev
  virtual void  v3(); // _ZN7S7190C12v3Ev
  virtual void  v4(); // _ZN7S7190C12v4Ev
  virtual void  v5(); // _ZN7S7190C12v5Ev
  virtual void  v6(); // _ZN7S7190C12v6Ev
  virtual void  v7(); // _ZN7S7190C12v7Ev
  virtual void  v8(); // _ZN7S7190C12v8Ev
  S7190C1(); // tgen
};
//SIG(1 S7190C1) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3 FC4{ BC5{ BC6{ m Fp Fi[2]}}} Fi[3] Fi:1 FC7{ BC8{ BC6}} FC9{ BC10{ BC6}} FC11{ BC12{ BC6}} Fp Fc[2] FC11 FC13{ BC14{ BC6}}}


 S7190C1 ::~S7190C1(){ note_dtor("S7190C1", this);}
void  S7190C1 ::v1(){vfunc_called(this, "_ZN7S7190C12v1Ev");}
void  S7190C1 ::v2(){vfunc_called(this, "_ZN7S7190C12v2Ev");}
void  S7190C1 ::v3(){vfunc_called(this, "_ZN7S7190C12v3Ev");}
void  S7190C1 ::v4(){vfunc_called(this, "_ZN7S7190C12v4Ev");}
void  S7190C1 ::v5(){vfunc_called(this, "_ZN7S7190C12v5Ev");}
void  S7190C1 ::v6(){vfunc_called(this, "_ZN7S7190C12v6Ev");}
void  S7190C1 ::v7(){vfunc_called(this, "_ZN7S7190C12v7Ev");}
void  S7190C1 ::v8(){vfunc_called(this, "_ZN7S7190C12v8Ev");}
S7190C1 ::S7190C1(){ note_ctor("S7190C1", this);} // tgen

static void Test_S7190C1()
{
  extern Class_Descriptor cd_S7190C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S7190C1, buf);
    S7190C1 *dp, &lv = *(dp=new (buf) S7190C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S7190C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7190C1)");
    check_base_class_offset(lv, (S7190C2*), 0, "S7190C1");
    check_field_offset(lv, s7190c1f0, ABISELECT(96,60), "S7190C1.s7190c1f0");
    check_field_offset(lv, s7190c1f1, ABISELECT(104,68), "S7190C1.s7190c1f1");
    check_field_offset(lv, s7190c1f2, ABISELECT(120,80), "S7190C1.s7190c1f2");
    set_bf_and_test(lv, s7190c1f3, ABISELECT(132,92), 0, 1, 1, "S7190C1");
    check_field_offset(lv, s7190c1f4, ABISELECT(136,96), "S7190C1.s7190c1f4");
    check_field_offset(lv, s7190c1f5, ABISELECT(152,108), "S7190C1.s7190c1f5");
    check_field_offset(lv, s7190c1f6, ABISELECT(168,120), "S7190C1.s7190c1f6");
    check_field_offset(lv, s7190c1f7, ABISELECT(184,132), "S7190C1.s7190c1f7");
    check_field_offset(lv, s7190c1f8, ABISELECT(192,136), "S7190C1.s7190c1f8");
    check_field_offset(lv, s7190c1f9, ABISELECT(200,140), "S7190C1.s7190c1f9");
    check_field_offset(lv, s7190c1f10, ABISELECT(216,152), "S7190C1.s7190c1f10");
    test_class_info(&lv, &cd_S7190C1);
    dp->~S7190C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7190C1(Test_S7190C1, "S7190C1", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN7S7190C1C1Ev();
extern void _ZN7S7190C1D1Ev();
Name_Map name_map_S7190C1[] = {
  NSPAIR(_ZN7S7190C1C1Ev),
  NSPAIR(_ZN7S7190C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7190C2;
extern VTBL_ENTRY _ZTI7S7190C2[];
extern  VTBL_ENTRY _ZTV7S7190C2[];
static Base_Class bases_S7190C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7190C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7190C1[];
extern void _ZN7S7190C1D1Ev();
extern void _ZN7S7190C1D0Ev();
extern void _ZN7S7190C22v9Ev();
extern void _ZN7S7190C23v10Ev();
extern void _ZN7S7190C23v11Ev();
extern void _ZN7S7190C23v12Ev();
extern void _ZN7S7190C23v13Ev();
extern void _ZN7S7190C23v14Ev();
extern void _ZN7S7190C23v15Ev();
extern void _ZN7S7190C23v16Ev();
extern void _ZN7S7190C23v17Ev();
extern void _ZN7S7190C23v18Ev();
extern void _ZN7S7190C23v19Ev();
extern void _ZN7S7190C23v20Ev();
extern void _ZN7S7190C23v21Ev();
extern void _ZN7S7190C23v22Ev();
extern void _ZN7S7190C23v23Ev();
extern void _ZN7S7190C23v24Ev();
extern void _ZN7S7190C23v25Ev();
extern void _ZN7S7190C23v26Ev();
extern void _ZN7S7190C23v27Ev();
extern void _ZN7S7190C23v28Ev();
extern void _ZN7S7190C23v29Ev();
extern void _ZN7S7190C23v30Ev();
extern void _ZN7S7190C23v31Ev();
extern void _ZN7S7190C23v32Ev();
extern void _ZN7S7190C23v33Ev();
extern void _ZN7S7190C23v34Ev();
extern void _ZN7S7190C23v35Ev();
extern void _ZN7S7190C23v36Ev();
extern void _ZN7S7190C23v37Ev();
extern void _ZN7S7190C23v38Ev();
extern void _ZN7S7190C23v39Ev();
extern void _ZN7S7190C23v40Ev();
extern void _ZN7S7190C23v41Ev();
extern void _ZN7S7190C23v42Ev();
extern void _ZN7S7190C23v43Ev();
extern void _ZN7S7190C23v44Ev();
extern void _ZN7S7190C23v45Ev();
extern void _ZN7S7190C23v46Ev();
extern void _ZN7S7190C23v47Ev();
extern void _ZN7S7190C23v48Ev();
extern void _ZN7S7190C23v49Ev();
extern void _ZN7S7190C23v50Ev();
extern void _ZN7S7190C23v51Ev();
extern void _ZN7S7190C23v52Ev();
extern void _ZN7S7190C23v53Ev();
extern void _ZN7S7190C23v54Ev();
extern void _ZN7S7190C23v55Ev();
extern void _ZN7S7190C23v56Ev();
extern void _ZN7S7190C23v57Ev();
extern void _ZN7S7190C23v58Ev();
extern void _ZN7S7190C23v59Ev();
extern void _ZN7S7190C23v60Ev();
extern void _ZN7S7190C23v61Ev();
extern void _ZN7S7190C23v62Ev();
extern void _ZN7S7190C23v63Ev();
extern void _ZN7S7190C23v64Ev();
extern void _ZN7S7190C23v65Ev();
extern void _ZN7S7190C23v66Ev();
extern void _ZN7S7190C23v67Ev();
extern void _ZN7S7190C23v68Ev();
extern void _ZN7S7190C23v69Ev();
extern void _ZN7S7190C23v70Ev();
extern void _ZN7S7190C23v71Ev();
extern void _ZN7S7190C23v72Ev();
extern void _ZN7S7190C12v1Ev();
extern void _ZN7S7190C12v2Ev();
extern void _ZN7S7190C12v3Ev();
extern void _ZN7S7190C12v4Ev();
extern void _ZN7S7190C12v5Ev();
extern void _ZN7S7190C12v6Ev();
extern void _ZN7S7190C12v7Ev();
extern void _ZN7S7190C12v8Ev();
static  VTBL_ENTRY vtc_S7190C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7190C1[0]),
  (VTBL_ENTRY)&_ZN7S7190C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7190C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7190C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v69Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v70Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v71Ev,
  (VTBL_ENTRY)&_ZN7S7190C23v72Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7190C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S7190C1[];
extern  VTBL_ENTRY _ZTV7S7190C1[];
Class_Descriptor cd_S7190C1 = {  "S7190C1", // class name
  bases_S7190C1, 1,
  &(vtc_S7190C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI7S7190C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7190C1),76, //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  S6720C2  {
  int s6720c2f0;
  __tsi64 s6720c2f1;
  void *s6720c2f2[4];
  int s6720c2f3[2];
  void *s6720c2f4;
  ::S3280C4_nt s6720c2f5;
  void *s6720c2f6[2];
  virtual  ~S6720C2(); // _ZN7S6720C2D1Ev
  virtual void  v3(); // _ZN7S6720C22v3Ev
  virtual void  v4(); // _ZN7S6720C22v4Ev
  virtual void  v5(); // _ZN7S6720C22v5Ev
  virtual void  v6(); // _ZN7S6720C22v6Ev
  virtual void  v7(); // _ZN7S6720C22v7Ev
  virtual void  v8(); // _ZN7S6720C22v8Ev
  virtual void  v9(); // _ZN7S6720C22v9Ev
  virtual void  v10(); // _ZN7S6720C23v10Ev
  virtual void  v11(); // _ZN7S6720C23v11Ev
  virtual void  v12(); // _ZN7S6720C23v12Ev
  virtual void  v13(); // _ZN7S6720C23v13Ev
  virtual void  v14(); // _ZN7S6720C23v14Ev
  virtual void  v15(); // _ZN7S6720C23v15Ev
  virtual void  v16(); // _ZN7S6720C23v16Ev
  virtual void  v17(); // _ZN7S6720C23v17Ev
  virtual void  v18(); // _ZN7S6720C23v18Ev
  virtual void  v19(); // _ZN7S6720C23v19Ev
  virtual void  v20(); // _ZN7S6720C23v20Ev
  virtual void  v21(); // _ZN7S6720C23v21Ev
  virtual void  v22(); // _ZN7S6720C23v22Ev
  virtual void  v23(); // _ZN7S6720C23v23Ev
  virtual void  v24(); // _ZN7S6720C23v24Ev
  virtual void  v25(); // _ZN7S6720C23v25Ev
  virtual void  v26(); // _ZN7S6720C23v26Ev
  virtual void  v27(); // _ZN7S6720C23v27Ev
  virtual void  v28(); // _ZN7S6720C23v28Ev
  virtual void  v29(); // _ZN7S6720C23v29Ev
  virtual void  v30(); // _ZN7S6720C23v30Ev
  virtual void  v31(); // _ZN7S6720C23v31Ev
  virtual void  v32(); // _ZN7S6720C23v32Ev
  virtual void  v33(); // _ZN7S6720C23v33Ev
  virtual void  v34(); // _ZN7S6720C23v34Ev
  virtual void  v35(); // _ZN7S6720C23v35Ev
  virtual void  v36(); // _ZN7S6720C23v36Ev
  virtual void  v37(); // _ZN7S6720C23v37Ev
  virtual void  v38(); // _ZN7S6720C23v38Ev
  virtual void  v39(); // _ZN7S6720C23v39Ev
  virtual void  v40(); // _ZN7S6720C23v40Ev
  virtual void  v41(); // _ZN7S6720C23v41Ev
  virtual void  v42(); // _ZN7S6720C23v42Ev
  virtual void  v43(); // _ZN7S6720C23v43Ev
  virtual void  v44(); // _ZN7S6720C23v44Ev
  virtual void  v45(); // _ZN7S6720C23v45Ev
  virtual void  v46(); // _ZN7S6720C23v46Ev
  virtual void  v47(); // _ZN7S6720C23v47Ev
  virtual void  v48(); // _ZN7S6720C23v48Ev
  virtual void  v49(); // _ZN7S6720C23v49Ev
  virtual void  v50(); // _ZN7S6720C23v50Ev
  virtual void  v51(); // _ZN7S6720C23v51Ev
  virtual void  v52(); // _ZN7S6720C23v52Ev
  virtual void  v53(); // _ZN7S6720C23v53Ev
  virtual void  v54(); // _ZN7S6720C23v54Ev
  virtual void  v55(); // _ZN7S6720C23v55Ev
  virtual void  v56(); // _ZN7S6720C23v56Ev
  virtual void  v57(); // _ZN7S6720C23v57Ev
  virtual void  v58(); // _ZN7S6720C23v58Ev
  virtual void  v59(); // _ZN7S6720C23v59Ev
  virtual void  v60(); // _ZN7S6720C23v60Ev
  virtual void  v61(); // _ZN7S6720C23v61Ev
  virtual void  v62(); // _ZN7S6720C23v62Ev
  virtual void  v63(); // _ZN7S6720C23v63Ev
  virtual void  v64(); // _ZN7S6720C23v64Ev
  virtual void  v65(); // _ZN7S6720C23v65Ev
  virtual void  v66(); // _ZN7S6720C23v66Ev
  S6720C2(); // tgen
};
//SIG(-1 S6720C2) 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]}


 S6720C2 ::~S6720C2(){ note_dtor("S6720C2", this);}
void  S6720C2 ::v3(){vfunc_called(this, "_ZN7S6720C22v3Ev");}
void  S6720C2 ::v4(){vfunc_called(this, "_ZN7S6720C22v4Ev");}
void  S6720C2 ::v5(){vfunc_called(this, "_ZN7S6720C22v5Ev");}
void  S6720C2 ::v6(){vfunc_called(this, "_ZN7S6720C22v6Ev");}
void  S6720C2 ::v7(){vfunc_called(this, "_ZN7S6720C22v7Ev");}
void  S6720C2 ::v8(){vfunc_called(this, "_ZN7S6720C22v8Ev");}
void  S6720C2 ::v9(){vfunc_called(this, "_ZN7S6720C22v9Ev");}
void  S6720C2 ::v10(){vfunc_called(this, "_ZN7S6720C23v10Ev");}
void  S6720C2 ::v11(){vfunc_called(this, "_ZN7S6720C23v11Ev");}
void  S6720C2 ::v12(){vfunc_called(this, "_ZN7S6720C23v12Ev");}
void  S6720C2 ::v13(){vfunc_called(this, "_ZN7S6720C23v13Ev");}
void  S6720C2 ::v14(){vfunc_called(this, "_ZN7S6720C23v14Ev");}
void  S6720C2 ::v15(){vfunc_called(this, "_ZN7S6720C23v15Ev");}
void  S6720C2 ::v16(){vfunc_called(this, "_ZN7S6720C23v16Ev");}
void  S6720C2 ::v17(){vfunc_called(this, "_ZN7S6720C23v17Ev");}
void  S6720C2 ::v18(){vfunc_called(this, "_ZN7S6720C23v18Ev");}
void  S6720C2 ::v19(){vfunc_called(this, "_ZN7S6720C23v19Ev");}
void  S6720C2 ::v20(){vfunc_called(this, "_ZN7S6720C23v20Ev");}
void  S6720C2 ::v21(){vfunc_called(this, "_ZN7S6720C23v21Ev");}
void  S6720C2 ::v22(){vfunc_called(this, "_ZN7S6720C23v22Ev");}
void  S6720C2 ::v23(){vfunc_called(this, "_ZN7S6720C23v23Ev");}
void  S6720C2 ::v24(){vfunc_called(this, "_ZN7S6720C23v24Ev");}
void  S6720C2 ::v25(){vfunc_called(this, "_ZN7S6720C23v25Ev");}
void  S6720C2 ::v26(){vfunc_called(this, "_ZN7S6720C23v26Ev");}
void  S6720C2 ::v27(){vfunc_called(this, "_ZN7S6720C23v27Ev");}
void  S6720C2 ::v28(){vfunc_called(this, "_ZN7S6720C23v28Ev");}
void  S6720C2 ::v29(){vfunc_called(this, "_ZN7S6720C23v29Ev");}
void  S6720C2 ::v30(){vfunc_called(this, "_ZN7S6720C23v30Ev");}
void  S6720C2 ::v31(){vfunc_called(this, "_ZN7S6720C23v31Ev");}
void  S6720C2 ::v32(){vfunc_called(this, "_ZN7S6720C23v32Ev");}
void  S6720C2 ::v33(){vfunc_called(this, "_ZN7S6720C23v33Ev");}
void  S6720C2 ::v34(){vfunc_called(this, "_ZN7S6720C23v34Ev");}
void  S6720C2 ::v35(){vfunc_called(this, "_ZN7S6720C23v35Ev");}
void  S6720C2 ::v36(){vfunc_called(this, "_ZN7S6720C23v36Ev");}
void  S6720C2 ::v37(){vfunc_called(this, "_ZN7S6720C23v37Ev");}
void  S6720C2 ::v38(){vfunc_called(this, "_ZN7S6720C23v38Ev");}
void  S6720C2 ::v39(){vfunc_called(this, "_ZN7S6720C23v39Ev");}
void  S6720C2 ::v40(){vfunc_called(this, "_ZN7S6720C23v40Ev");}
void  S6720C2 ::v41(){vfunc_called(this, "_ZN7S6720C23v41Ev");}
void  S6720C2 ::v42(){vfunc_called(this, "_ZN7S6720C23v42Ev");}
void  S6720C2 ::v43(){vfunc_called(this, "_ZN7S6720C23v43Ev");}
void  S6720C2 ::v44(){vfunc_called(this, "_ZN7S6720C23v44Ev");}
void  S6720C2 ::v45(){vfunc_called(this, "_ZN7S6720C23v45Ev");}
void  S6720C2 ::v46(){vfunc_called(this, "_ZN7S6720C23v46Ev");}
void  S6720C2 ::v47(){vfunc_called(this, "_ZN7S6720C23v47Ev");}
void  S6720C2 ::v48(){vfunc_called(this, "_ZN7S6720C23v48Ev");}
void  S6720C2 ::v49(){vfunc_called(this, "_ZN7S6720C23v49Ev");}
void  S6720C2 ::v50(){vfunc_called(this, "_ZN7S6720C23v50Ev");}
void  S6720C2 ::v51(){vfunc_called(this, "_ZN7S6720C23v51Ev");}
void  S6720C2 ::v52(){vfunc_called(this, "_ZN7S6720C23v52Ev");}
void  S6720C2 ::v53(){vfunc_called(this, "_ZN7S6720C23v53Ev");}
void  S6720C2 ::v54(){vfunc_called(this, "_ZN7S6720C23v54Ev");}
void  S6720C2 ::v55(){vfunc_called(this, "_ZN7S6720C23v55Ev");}
void  S6720C2 ::v56(){vfunc_called(this, "_ZN7S6720C23v56Ev");}
void  S6720C2 ::v57(){vfunc_called(this, "_ZN7S6720C23v57Ev");}
void  S6720C2 ::v58(){vfunc_called(this, "_ZN7S6720C23v58Ev");}
void  S6720C2 ::v59(){vfunc_called(this, "_ZN7S6720C23v59Ev");}
void  S6720C2 ::v60(){vfunc_called(this, "_ZN7S6720C23v60Ev");}
void  S6720C2 ::v61(){vfunc_called(this, "_ZN7S6720C23v61Ev");}
void  S6720C2 ::v62(){vfunc_called(this, "_ZN7S6720C23v62Ev");}
void  S6720C2 ::v63(){vfunc_called(this, "_ZN7S6720C23v63Ev");}
void  S6720C2 ::v64(){vfunc_called(this, "_ZN7S6720C23v64Ev");}
void  S6720C2 ::v65(){vfunc_called(this, "_ZN7S6720C23v65Ev");}
void  S6720C2 ::v66(){vfunc_called(this, "_ZN7S6720C23v66Ev");}
S6720C2 ::S6720C2(){ note_ctor("S6720C2", this);} // tgen

static void Test_S6720C2()
{
  extern Class_Descriptor cd_S6720C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6720C2, buf);
    S6720C2 *dp, &lv = *(dp=new (buf) S6720C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6720C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6720C2)");
    check_field_offset(lv, s6720c2f0, ABISELECT(8,4), "S6720C2.s6720c2f0");
    check_field_offset(lv, s6720c2f1, ABISELECT(16,8), "S6720C2.s6720c2f1");
    check_field_offset(lv, s6720c2f2, ABISELECT(24,16), "S6720C2.s6720c2f2");
    check_field_offset(lv, s6720c2f3, ABISELECT(56,32), "S6720C2.s6720c2f3");
    check_field_offset(lv, s6720c2f4, ABISELECT(64,40), "S6720C2.s6720c2f4");
    check_field_offset(lv, s6720c2f5, ABISELECT(72,44), "S6720C2.s6720c2f5");
    check_field_offset(lv, s6720c2f6, ABISELECT(80,52), "S6720C2.s6720c2f6");
    test_class_info(&lv, &cd_S6720C2);
    dp->~S6720C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6720C2(Test_S6720C2, "S6720C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6720C2C1Ev();
extern void _ZN7S6720C2D1Ev();
Name_Map name_map_S6720C2[] = {
  NSPAIR(_ZN7S6720C2C1Ev),
  NSPAIR(_ZN7S6720C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6720C2[];
extern void _ZN7S6720C2D1Ev();
extern void _ZN7S6720C2D0Ev();
extern void _ZN7S6720C22v3Ev();
extern void _ZN7S6720C22v4Ev();
extern void _ZN7S6720C22v5Ev();
extern void _ZN7S6720C22v6Ev();
extern void _ZN7S6720C22v7Ev();
extern void _ZN7S6720C22v8Ev();
extern void _ZN7S6720C22v9Ev();
extern void _ZN7S6720C23v10Ev();
extern void _ZN7S6720C23v11Ev();
extern void _ZN7S6720C23v12Ev();
extern void _ZN7S6720C23v13Ev();
extern void _ZN7S6720C23v14Ev();
extern void _ZN7S6720C23v15Ev();
extern void _ZN7S6720C23v16Ev();
extern void _ZN7S6720C23v17Ev();
extern void _ZN7S6720C23v18Ev();
extern void _ZN7S6720C23v19Ev();
extern void _ZN7S6720C23v20Ev();
extern void _ZN7S6720C23v21Ev();
extern void _ZN7S6720C23v22Ev();
extern void _ZN7S6720C23v23Ev();
extern void _ZN7S6720C23v24Ev();
extern void _ZN7S6720C23v25Ev();
extern void _ZN7S6720C23v26Ev();
extern void _ZN7S6720C23v27Ev();
extern void _ZN7S6720C23v28Ev();
extern void _ZN7S6720C23v29Ev();
extern void _ZN7S6720C23v30Ev();
extern void _ZN7S6720C23v31Ev();
extern void _ZN7S6720C23v32Ev();
extern void _ZN7S6720C23v33Ev();
extern void _ZN7S6720C23v34Ev();
extern void _ZN7S6720C23v35Ev();
extern void _ZN7S6720C23v36Ev();
extern void _ZN7S6720C23v37Ev();
extern void _ZN7S6720C23v38Ev();
extern void _ZN7S6720C23v39Ev();
extern void _ZN7S6720C23v40Ev();
extern void _ZN7S6720C23v41Ev();
extern void _ZN7S6720C23v42Ev();
extern void _ZN7S6720C23v43Ev();
extern void _ZN7S6720C23v44Ev();
extern void _ZN7S6720C23v45Ev();
extern void _ZN7S6720C23v46Ev();
extern void _ZN7S6720C23v47Ev();
extern void _ZN7S6720C23v48Ev();
extern void _ZN7S6720C23v49Ev();
extern void _ZN7S6720C23v50Ev();
extern void _ZN7S6720C23v51Ev();
extern void _ZN7S6720C23v52Ev();
extern void _ZN7S6720C23v53Ev();
extern void _ZN7S6720C23v54Ev();
extern void _ZN7S6720C23v55Ev();
extern void _ZN7S6720C23v56Ev();
extern void _ZN7S6720C23v57Ev();
extern void _ZN7S6720C23v58Ev();
extern void _ZN7S6720C23v59Ev();
extern void _ZN7S6720C23v60Ev();
extern void _ZN7S6720C23v61Ev();
extern void _ZN7S6720C23v62Ev();
extern void _ZN7S6720C23v63Ev();
extern void _ZN7S6720C23v64Ev();
extern void _ZN7S6720C23v65Ev();
extern void _ZN7S6720C23v66Ev();
static  VTBL_ENTRY vtc_S6720C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6720C2[0]),
  (VTBL_ENTRY)&_ZN7S6720C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6720C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v66Ev,
};
extern VTBL_ENTRY _ZTI7S6720C2[];
extern  VTBL_ENTRY _ZTV7S6720C2[];
Class_Descriptor cd_S6720C2 = {  "S6720C2", // class name
  0,0,//no base classes
  &(vtc_S6720C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6720C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6720C2),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  S6720C17  : S3280C7_nt {
};
//SIG(-1 S6720C17) C1{ BC2{ m Fp Fi[2]}}



static void Test_S6720C17()
{
  extern Class_Descriptor cd_S6720C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6720C17, buf);
    S6720C17 &lv = *(new (buf) S6720C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6720C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6720C17)");
    check_base_class_offset(lv, (S3280C7_nt*), 0, "S6720C17");
    test_class_info(&lv, &cd_S6720C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6720C17(Test_S6720C17, "S6720C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S6720C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S6720C17 = {  "S6720C17", // class name
  bases_S6720C17, 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  S6720C16_nt  : S6720C17 {
};
//SIG(-1 S6720C16_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S6720C16_nt

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S6720C17;
static Base_Class bases_S6720C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S6720C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S6720C4  {
  ::S3280C4_nt s6720c4f0;
  ::S7190C15 s6720c4f1;
  ::S7190C11_nt s6720c4f2;
  ::S3280C17 s6720c4f3;
  ::S3280C11 s6720c4f4;
  ::S3280C5_nt s6720c4f5;
  ::S6720C16_nt s6720c4f6;
  ::S3280C5_nt s6720c4f7;
  ::S6720C16_nt s6720c4f8;
  void  mf6720c4(); // _ZN7S6720C48mf6720c4Ev
};
//SIG(-1 S6720C4) C1{ m FC2{ m Fi[2]} FC3{ BC4{ BC5{ m Fp Fi[2]}}} FC6{ BC7{ BC5}} FC8{ BC9{ BC5}} FC10{ BC11{ BC5}} FC12{ BC13{ BC5}} FC14{ BC15{ BC5}} FC12 FC14}


void  S6720C4 ::mf6720c4(){}

static void Test_S6720C4()
{
  {
    init_simple_test("S6720C4");
    S6720C4 lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S6720C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6720C4)");
    check_field_offset(lv, s6720c4f0, 0, "S6720C4.s6720c4f0");
    check_field_offset(lv, s6720c4f1, 8, "S6720C4.s6720c4f1");
    check_field_offset(lv, s6720c4f2, ABISELECT(24,20), "S6720C4.s6720c4f2");
    check_field_offset(lv, s6720c4f3, ABISELECT(40,32), "S6720C4.s6720c4f3");
    check_field_offset(lv, s6720c4f4, ABISELECT(56,44), "S6720C4.s6720c4f4");
    check_field_offset(lv, s6720c4f5, ABISELECT(72,56), "S6720C4.s6720c4f5");
    check_field_offset(lv, s6720c4f6, ABISELECT(88,68), "S6720C4.s6720c4f6");
    check_field_offset(lv, s6720c4f7, ABISELECT(104,80), "S6720C4.s6720c4f7");
    check_field_offset(lv, s6720c4f8, ABISELECT(120,92), "S6720C4.s6720c4f8");
  }
}
static Arrange_To_Call_Me vS6720C4(Test_S6720C4, "S6720C4", ABISELECT(136,104));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S6720C20()
{
  extern Class_Descriptor cd_S6720C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6720C20, buf);
    S6720C20 &lv = *(new (buf) S6720C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6720C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6720C20)");
    check_base_class_offset(lv, (S3280C7_nt*), 0, "S6720C20");
    test_class_info(&lv, &cd_S6720C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6720C20(Test_S6720C20, "S6720C20", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S6720C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S6720C20 = {  "S6720C20", // class name
  bases_S6720C20, 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  S6720C19  : S6720C20 {
};
//SIG(-1 S6720C19) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S6720C19()
{
  extern Class_Descriptor cd_S6720C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6720C19, buf);
    S6720C19 &lv = *(new (buf) S6720C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6720C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6720C19)");
    check_base_class_offset(lv, (S3280C7_nt*)(S6720C20*), 0, "S6720C19");
    check_base_class_offset(lv, (S6720C20*), 0, "S6720C19");
    test_class_info(&lv, &cd_S6720C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6720C19(Test_S6720C19, "S6720C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S6720C20;
static Base_Class bases_S6720C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S6720C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6720C19 = {  "S6720C19", // class name
  bases_S6720C19, 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  S6720C18_nt  : S6720C19 {
};
//SIG(-1 S6720C18_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S6720C18_nt

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
extern Class_Descriptor cd_S6720C20;
extern Class_Descriptor cd_S6720C19;
static Base_Class bases_S6720C18_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S6720C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6720C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S6720C1  : S6720C2 {
  ::S6720C4 s6720c1f0;
  ::S6720C18_nt s6720c1f1;
  virtual  ~S6720C1(); // _ZN7S6720C1D1Ev
  virtual void  v1(); // _ZN7S6720C12v1Ev
  virtual void  v2(); // _ZN7S6720C12v2Ev
  S6720C1(); // tgen
};
//SIG(1 S6720C1) 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 FC4{ m FC3 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} FC10{ BC11{ BC7}} FC12{ BC13{ BC7}} FC14{ BC15{ BC7}} FC16{ BC17{ BC7}} FC14 FC16} FC18{ BC19{ BC20{ BC7}}}}


 S6720C1 ::~S6720C1(){ note_dtor("S6720C1", this);}
void  S6720C1 ::v1(){vfunc_called(this, "_ZN7S6720C12v1Ev");}
void  S6720C1 ::v2(){vfunc_called(this, "_ZN7S6720C12v2Ev");}
S6720C1 ::S6720C1(){ note_ctor("S6720C1", this);} // tgen

static void Test_S6720C1()
{
  extern Class_Descriptor cd_S6720C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,45)];
    init_test(&cd_S6720C1, buf);
    S6720C1 *dp, &lv = *(dp=new (buf) S6720C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,176), "sizeof(S6720C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6720C1)");
    check_base_class_offset(lv, (S6720C2*), 0, "S6720C1");
    check_field_offset(lv, s6720c1f0, ABISELECT(96,60), "S6720C1.s6720c1f0");
    check_field_offset(lv, s6720c1f1, ABISELECT(232,164), "S6720C1.s6720c1f1");
    test_class_info(&lv, &cd_S6720C1);
    dp->~S6720C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6720C1(Test_S6720C1, "S6720C1", ABISELECT(248,176));

#else // __cplusplus

extern void _ZN7S6720C1C1Ev();
extern void _ZN7S6720C1D1Ev();
Name_Map name_map_S6720C1[] = {
  NSPAIR(_ZN7S6720C1C1Ev),
  NSPAIR(_ZN7S6720C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6720C2;
extern VTBL_ENTRY _ZTI7S6720C2[];
extern  VTBL_ENTRY _ZTV7S6720C2[];
static Base_Class bases_S6720C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6720C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6720C1[];
extern void _ZN7S6720C1D1Ev();
extern void _ZN7S6720C1D0Ev();
extern void _ZN7S6720C22v3Ev();
extern void _ZN7S6720C22v4Ev();
extern void _ZN7S6720C22v5Ev();
extern void _ZN7S6720C22v6Ev();
extern void _ZN7S6720C22v7Ev();
extern void _ZN7S6720C22v8Ev();
extern void _ZN7S6720C22v9Ev();
extern void _ZN7S6720C23v10Ev();
extern void _ZN7S6720C23v11Ev();
extern void _ZN7S6720C23v12Ev();
extern void _ZN7S6720C23v13Ev();
extern void _ZN7S6720C23v14Ev();
extern void _ZN7S6720C23v15Ev();
extern void _ZN7S6720C23v16Ev();
extern void _ZN7S6720C23v17Ev();
extern void _ZN7S6720C23v18Ev();
extern void _ZN7S6720C23v19Ev();
extern void _ZN7S6720C23v20Ev();
extern void _ZN7S6720C23v21Ev();
extern void _ZN7S6720C23v22Ev();
extern void _ZN7S6720C23v23Ev();
extern void _ZN7S6720C23v24Ev();
extern void _ZN7S6720C23v25Ev();
extern void _ZN7S6720C23v26Ev();
extern void _ZN7S6720C23v27Ev();
extern void _ZN7S6720C23v28Ev();
extern void _ZN7S6720C23v29Ev();
extern void _ZN7S6720C23v30Ev();
extern void _ZN7S6720C23v31Ev();
extern void _ZN7S6720C23v32Ev();
extern void _ZN7S6720C23v33Ev();
extern void _ZN7S6720C23v34Ev();
extern void _ZN7S6720C23v35Ev();
extern void _ZN7S6720C23v36Ev();
extern void _ZN7S6720C23v37Ev();
extern void _ZN7S6720C23v38Ev();
extern void _ZN7S6720C23v39Ev();
extern void _ZN7S6720C23v40Ev();
extern void _ZN7S6720C23v41Ev();
extern void _ZN7S6720C23v42Ev();
extern void _ZN7S6720C23v43Ev();
extern void _ZN7S6720C23v44Ev();
extern void _ZN7S6720C23v45Ev();
extern void _ZN7S6720C23v46Ev();
extern void _ZN7S6720C23v47Ev();
extern void _ZN7S6720C23v48Ev();
extern void _ZN7S6720C23v49Ev();
extern void _ZN7S6720C23v50Ev();
extern void _ZN7S6720C23v51Ev();
extern void _ZN7S6720C23v52Ev();
extern void _ZN7S6720C23v53Ev();
extern void _ZN7S6720C23v54Ev();
extern void _ZN7S6720C23v55Ev();
extern void _ZN7S6720C23v56Ev();
extern void _ZN7S6720C23v57Ev();
extern void _ZN7S6720C23v58Ev();
extern void _ZN7S6720C23v59Ev();
extern void _ZN7S6720C23v60Ev();
extern void _ZN7S6720C23v61Ev();
extern void _ZN7S6720C23v62Ev();
extern void _ZN7S6720C23v63Ev();
extern void _ZN7S6720C23v64Ev();
extern void _ZN7S6720C23v65Ev();
extern void _ZN7S6720C23v66Ev();
extern void _ZN7S6720C12v1Ev();
extern void _ZN7S6720C12v2Ev();
static  VTBL_ENTRY vtc_S6720C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6720C1[0]),
  (VTBL_ENTRY)&_ZN7S6720C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6720C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6720C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6720C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6720C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6720C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6720C1[];
extern  VTBL_ENTRY _ZTV7S6720C1[];
Class_Descriptor cd_S6720C1 = {  "S6720C1", // class name
  bases_S6720C1, 1,
  &(vtc_S6720C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,176), // object size
  NSPAIRA(_ZTI7S6720C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6720C1),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  S3369C3  {
  int s3369c3f0;
  __tsi64 s3369c3f1;
  void *s3369c3f2[4];
  int s3369c3f3[2];
  void *s3369c3f4;
  ::S3280C4_nt s3369c3f5;
  void *s3369c3f6[2];
  virtual  ~S3369C3(); // _ZN7S3369C3D1Ev
  virtual void  v6(); // _ZN7S3369C32v6Ev
  virtual void  v7(); // _ZN7S3369C32v7Ev
  virtual void  v8(); // _ZN7S3369C32v8Ev
  virtual void  v9(); // _ZN7S3369C32v9Ev
  virtual void  v10(); // _ZN7S3369C33v10Ev
  virtual void  v11(); // _ZN7S3369C33v11Ev
  virtual void  v12(); // _ZN7S3369C33v12Ev
  virtual void  v13(); // _ZN7S3369C33v13Ev
  virtual void  v14(); // _ZN7S3369C33v14Ev
  virtual void  v15(); // _ZN7S3369C33v15Ev
  virtual void  v16(); // _ZN7S3369C33v16Ev
  virtual void  v17(); // _ZN7S3369C33v17Ev
  virtual void  v18(); // _ZN7S3369C33v18Ev
  virtual void  v19(); // _ZN7S3369C33v19Ev
  virtual void  v20(); // _ZN7S3369C33v20Ev
  virtual void  v21(); // _ZN7S3369C33v21Ev
  virtual void  v22(); // _ZN7S3369C33v22Ev
  virtual void  v23(); // _ZN7S3369C33v23Ev
  virtual void  v24(); // _ZN7S3369C33v24Ev
  virtual void  v25(); // _ZN7S3369C33v25Ev
  virtual void  v26(); // _ZN7S3369C33v26Ev
  virtual void  v27(); // _ZN7S3369C33v27Ev
  virtual void  v28(); // _ZN7S3369C33v28Ev
  virtual void  v29(); // _ZN7S3369C33v29Ev
  virtual void  v30(); // _ZN7S3369C33v30Ev
  virtual void  v31(); // _ZN7S3369C33v31Ev
  virtual void  v32(); // _ZN7S3369C33v32Ev
  virtual void  v33(); // _ZN7S3369C33v33Ev
  virtual void  v34(); // _ZN7S3369C33v34Ev
  virtual void  v35(); // _ZN7S3369C33v35Ev
  virtual void  v36(); // _ZN7S3369C33v36Ev
  virtual void  v37(); // _ZN7S3369C33v37Ev
  virtual void  v38(); // _ZN7S3369C33v38Ev
  virtual void  v39(); // _ZN7S3369C33v39Ev
  virtual void  v40(); // _ZN7S3369C33v40Ev
  virtual void  v41(); // _ZN7S3369C33v41Ev
  virtual void  v42(); // _ZN7S3369C33v42Ev
  virtual void  v43(); // _ZN7S3369C33v43Ev
  virtual void  v44(); // _ZN7S3369C33v44Ev
  virtual void  v45(); // _ZN7S3369C33v45Ev
  virtual void  v46(); // _ZN7S3369C33v46Ev
  virtual void  v47(); // _ZN7S3369C33v47Ev
  virtual void  v48(); // _ZN7S3369C33v48Ev
  virtual void  v49(); // _ZN7S3369C33v49Ev
  virtual void  v50(); // _ZN7S3369C33v50Ev
  virtual void  v51(); // _ZN7S3369C33v51Ev
  virtual void  v52(); // _ZN7S3369C33v52Ev
  virtual void  v53(); // _ZN7S3369C33v53Ev
  virtual void  v54(); // _ZN7S3369C33v54Ev
  virtual void  v55(); // _ZN7S3369C33v55Ev
  virtual void  v56(); // _ZN7S3369C33v56Ev
  virtual void  v57(); // _ZN7S3369C33v57Ev
  virtual void  v58(); // _ZN7S3369C33v58Ev
  virtual void  v59(); // _ZN7S3369C33v59Ev
  virtual void  v60(); // _ZN7S3369C33v60Ev
  virtual void  v61(); // _ZN7S3369C33v61Ev
  virtual void  v62(); // _ZN7S3369C33v62Ev
  virtual void  v63(); // _ZN7S3369C33v63Ev
  virtual void  v64(); // _ZN7S3369C33v64Ev
  virtual void  v65(); // _ZN7S3369C33v65Ev
  virtual void  v66(); // _ZN7S3369C33v66Ev
  virtual void  v67(); // _ZN7S3369C33v67Ev
  virtual void  v68(); // _ZN7S3369C33v68Ev
  virtual void  v69(); // _ZN7S3369C33v69Ev
  S3369C3(); // tgen
};
//SIG(-1 S3369C3) 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]}


 S3369C3 ::~S3369C3(){ note_dtor("S3369C3", this);}
void  S3369C3 ::v6(){vfunc_called(this, "_ZN7S3369C32v6Ev");}
void  S3369C3 ::v7(){vfunc_called(this, "_ZN7S3369C32v7Ev");}
void  S3369C3 ::v8(){vfunc_called(this, "_ZN7S3369C32v8Ev");}
void  S3369C3 ::v9(){vfunc_called(this, "_ZN7S3369C32v9Ev");}
void  S3369C3 ::v10(){vfunc_called(this, "_ZN7S3369C33v10Ev");}
void  S3369C3 ::v11(){vfunc_called(this, "_ZN7S3369C33v11Ev");}
void  S3369C3 ::v12(){vfunc_called(this, "_ZN7S3369C33v12Ev");}
void  S3369C3 ::v13(){vfunc_called(this, "_ZN7S3369C33v13Ev");}
void  S3369C3 ::v14(){vfunc_called(this, "_ZN7S3369C33v14Ev");}
void  S3369C3 ::v15(){vfunc_called(this, "_ZN7S3369C33v15Ev");}
void  S3369C3 ::v16(){vfunc_called(this, "_ZN7S3369C33v16Ev");}
void  S3369C3 ::v17(){vfunc_called(this, "_ZN7S3369C33v17Ev");}
void  S3369C3 ::v18(){vfunc_called(this, "_ZN7S3369C33v18Ev");}
void  S3369C3 ::v19(){vfunc_called(this, "_ZN7S3369C33v19Ev");}
void  S3369C3 ::v20(){vfunc_called(this, "_ZN7S3369C33v20Ev");}
void  S3369C3 ::v21(){vfunc_called(this, "_ZN7S3369C33v21Ev");}
void  S3369C3 ::v22(){vfunc_called(this, "_ZN7S3369C33v22Ev");}
void  S3369C3 ::v23(){vfunc_called(this, "_ZN7S3369C33v23Ev");}
void  S3369C3 ::v24(){vfunc_called(this, "_ZN7S3369C33v24Ev");}
void  S3369C3 ::v25(){vfunc_called(this, "_ZN7S3369C33v25Ev");}
void  S3369C3 ::v26(){vfunc_called(this, "_ZN7S3369C33v26Ev");}
void  S3369C3 ::v27(){vfunc_called(this, "_ZN7S3369C33v27Ev");}
void  S3369C3 ::v28(){vfunc_called(this, "_ZN7S3369C33v28Ev");}
void  S3369C3 ::v29(){vfunc_called(this, "_ZN7S3369C33v29Ev");}
void  S3369C3 ::v30(){vfunc_called(this, "_ZN7S3369C33v30Ev");}
void  S3369C3 ::v31(){vfunc_called(this, "_ZN7S3369C33v31Ev");}
void  S3369C3 ::v32(){vfunc_called(this, "_ZN7S3369C33v32Ev");}
void  S3369C3 ::v33(){vfunc_called(this, "_ZN7S3369C33v33Ev");}
void  S3369C3 ::v34(){vfunc_called(this, "_ZN7S3369C33v34Ev");}
void  S3369C3 ::v35(){vfunc_called(this, "_ZN7S3369C33v35Ev");}
void  S3369C3 ::v36(){vfunc_called(this, "_ZN7S3369C33v36Ev");}
void  S3369C3 ::v37(){vfunc_called(this, "_ZN7S3369C33v37Ev");}
void  S3369C3 ::v38(){vfunc_called(this, "_ZN7S3369C33v38Ev");}
void  S3369C3 ::v39(){vfunc_called(this, "_ZN7S3369C33v39Ev");}
void  S3369C3 ::v40(){vfunc_called(this, "_ZN7S3369C33v40Ev");}
void  S3369C3 ::v41(){vfunc_called(this, "_ZN7S3369C33v41Ev");}
void  S3369C3 ::v42(){vfunc_called(this, "_ZN7S3369C33v42Ev");}
void  S3369C3 ::v43(){vfunc_called(this, "_ZN7S3369C33v43Ev");}
void  S3369C3 ::v44(){vfunc_called(this, "_ZN7S3369C33v44Ev");}
void  S3369C3 ::v45(){vfunc_called(this, "_ZN7S3369C33v45Ev");}
void  S3369C3 ::v46(){vfunc_called(this, "_ZN7S3369C33v46Ev");}
void  S3369C3 ::v47(){vfunc_called(this, "_ZN7S3369C33v47Ev");}
void  S3369C3 ::v48(){vfunc_called(this, "_ZN7S3369C33v48Ev");}
void  S3369C3 ::v49(){vfunc_called(this, "_ZN7S3369C33v49Ev");}
void  S3369C3 ::v50(){vfunc_called(this, "_ZN7S3369C33v50Ev");}
void  S3369C3 ::v51(){vfunc_called(this, "_ZN7S3369C33v51Ev");}
void  S3369C3 ::v52(){vfunc_called(this, "_ZN7S3369C33v52Ev");}
void  S3369C3 ::v53(){vfunc_called(this, "_ZN7S3369C33v53Ev");}
void  S3369C3 ::v54(){vfunc_called(this, "_ZN7S3369C33v54Ev");}
void  S3369C3 ::v55(){vfunc_called(this, "_ZN7S3369C33v55Ev");}
void  S3369C3 ::v56(){vfunc_called(this, "_ZN7S3369C33v56Ev");}
void  S3369C3 ::v57(){vfunc_called(this, "_ZN7S3369C33v57Ev");}
void  S3369C3 ::v58(){vfunc_called(this, "_ZN7S3369C33v58Ev");}
void  S3369C3 ::v59(){vfunc_called(this, "_ZN7S3369C33v59Ev");}
void  S3369C3 ::v60(){vfunc_called(this, "_ZN7S3369C33v60Ev");}
void  S3369C3 ::v61(){vfunc_called(this, "_ZN7S3369C33v61Ev");}
void  S3369C3 ::v62(){vfunc_called(this, "_ZN7S3369C33v62Ev");}
void  S3369C3 ::v63(){vfunc_called(this, "_ZN7S3369C33v63Ev");}
void  S3369C3 ::v64(){vfunc_called(this, "_ZN7S3369C33v64Ev");}
void  S3369C3 ::v65(){vfunc_called(this, "_ZN7S3369C33v65Ev");}
void  S3369C3 ::v66(){vfunc_called(this, "_ZN7S3369C33v66Ev");}
void  S3369C3 ::v67(){vfunc_called(this, "_ZN7S3369C33v67Ev");}
void  S3369C3 ::v68(){vfunc_called(this, "_ZN7S3369C33v68Ev");}
void  S3369C3 ::v69(){vfunc_called(this, "_ZN7S3369C33v69Ev");}
S3369C3 ::S3369C3(){ note_ctor("S3369C3", this);} // tgen

static void Test_S3369C3()
{
  extern Class_Descriptor cd_S3369C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3369C3, buf);
    S3369C3 *dp, &lv = *(dp=new (buf) S3369C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3369C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3369C3)");
    check_field_offset(lv, s3369c3f0, ABISELECT(8,4), "S3369C3.s3369c3f0");
    check_field_offset(lv, s3369c3f1, ABISELECT(16,8), "S3369C3.s3369c3f1");
    check_field_offset(lv, s3369c3f2, ABISELECT(24,16), "S3369C3.s3369c3f2");
    check_field_offset(lv, s3369c3f3, ABISELECT(56,32), "S3369C3.s3369c3f3");
    check_field_offset(lv, s3369c3f4, ABISELECT(64,40), "S3369C3.s3369c3f4");
    check_field_offset(lv, s3369c3f5, ABISELECT(72,44), "S3369C3.s3369c3f5");
    check_field_offset(lv, s3369c3f6, ABISELECT(80,52), "S3369C3.s3369c3f6");
    test_class_info(&lv, &cd_S3369C3);
    dp->~S3369C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3369C3(Test_S3369C3, "S3369C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3369C3C1Ev();
extern void _ZN7S3369C3D1Ev();
Name_Map name_map_S3369C3[] = {
  NSPAIR(_ZN7S3369C3C1Ev),
  NSPAIR(_ZN7S3369C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3369C3[];
extern void _ZN7S3369C3D1Ev();
extern void _ZN7S3369C3D0Ev();
extern void _ZN7S3369C32v6Ev();
extern void _ZN7S3369C32v7Ev();
extern void _ZN7S3369C32v8Ev();
extern void _ZN7S3369C32v9Ev();
extern void _ZN7S3369C33v10Ev();
extern void _ZN7S3369C33v11Ev();
extern void _ZN7S3369C33v12Ev();
extern void _ZN7S3369C33v13Ev();
extern void _ZN7S3369C33v14Ev();
extern void _ZN7S3369C33v15Ev();
extern void _ZN7S3369C33v16Ev();
extern void _ZN7S3369C33v17Ev();
extern void _ZN7S3369C33v18Ev();
extern void _ZN7S3369C33v19Ev();
extern void _ZN7S3369C33v20Ev();
extern void _ZN7S3369C33v21Ev();
extern void _ZN7S3369C33v22Ev();
extern void _ZN7S3369C33v23Ev();
extern void _ZN7S3369C33v24Ev();
extern void _ZN7S3369C33v25Ev();
extern void _ZN7S3369C33v26Ev();
extern void _ZN7S3369C33v27Ev();
extern void _ZN7S3369C33v28Ev();
extern void _ZN7S3369C33v29Ev();
extern void _ZN7S3369C33v30Ev();
extern void _ZN7S3369C33v31Ev();
extern void _ZN7S3369C33v32Ev();
extern void _ZN7S3369C33v33Ev();
extern void _ZN7S3369C33v34Ev();
extern void _ZN7S3369C33v35Ev();
extern void _ZN7S3369C33v36Ev();
extern void _ZN7S3369C33v37Ev();
extern void _ZN7S3369C33v38Ev();
extern void _ZN7S3369C33v39Ev();
extern void _ZN7S3369C33v40Ev();
extern void _ZN7S3369C33v41Ev();
extern void _ZN7S3369C33v42Ev();
extern void _ZN7S3369C33v43Ev();
extern void _ZN7S3369C33v44Ev();
extern void _ZN7S3369C33v45Ev();
extern void _ZN7S3369C33v46Ev();
extern void _ZN7S3369C33v47Ev();
extern void _ZN7S3369C33v48Ev();
extern void _ZN7S3369C33v49Ev();
extern void _ZN7S3369C33v50Ev();
extern void _ZN7S3369C33v51Ev();
extern void _ZN7S3369C33v52Ev();
extern void _ZN7S3369C33v53Ev();
extern void _ZN7S3369C33v54Ev();
extern void _ZN7S3369C33v55Ev();
extern void _ZN7S3369C33v56Ev();
extern void _ZN7S3369C33v57Ev();
extern void _ZN7S3369C33v58Ev();
extern void _ZN7S3369C33v59Ev();
extern void _ZN7S3369C33v60Ev();
extern void _ZN7S3369C33v61Ev();
extern void _ZN7S3369C33v62Ev();
extern void _ZN7S3369C33v63Ev();
extern void _ZN7S3369C33v64Ev();
extern void _ZN7S3369C33v65Ev();
extern void _ZN7S3369C33v66Ev();
extern void _ZN7S3369C33v67Ev();
extern void _ZN7S3369C33v68Ev();
extern void _ZN7S3369C33v69Ev();
static  VTBL_ENTRY vtc_S3369C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3369C3[0]),
  (VTBL_ENTRY)&_ZN7S3369C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3369C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v69Ev,
};
extern VTBL_ENTRY _ZTI7S3369C3[];
extern  VTBL_ENTRY _ZTV7S3369C3[];
Class_Descriptor cd_S3369C3 = {  "S3369C3", // class name
  0,0,//no base classes
  &(vtc_S3369C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3369C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3369C3),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  S3369C2_nt  : S3369C3 {
  int s3369c2f0[2];
  unsigned int s3369c2f1:1;
  unsigned int s3369c2f2:1;
  void *s3369c2f3;
  ::S6720C18_nt s3369c2f4;
  virtual  ~S3369C2_nt(); // _ZN10S3369C2_ntD1Ev
  virtual void  v70(); // _ZN10S3369C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3369C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3369C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3369C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3369C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3369C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3369C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3369C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3369C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3369C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3369C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3369C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3369C2_nt3v82Ev
  S3369C2_nt(); // tgen
};
//SIG(-1 S3369C2_nt) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 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 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 Fi[2] Fi:1 Fi:1 Fp FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}}}


 S3369C2_nt ::~S3369C2_nt(){ note_dtor("S3369C2_nt", this);}
void  S3369C2_nt ::v70(){vfunc_called(this, "_ZN10S3369C2_nt3v70Ev");}
void  S3369C2_nt ::v71(){vfunc_called(this, "_ZN10S3369C2_nt3v71Ev");}
void  S3369C2_nt ::v72(){vfunc_called(this, "_ZN10S3369C2_nt3v72Ev");}
void  S3369C2_nt ::v73(){vfunc_called(this, "_ZN10S3369C2_nt3v73Ev");}
void  S3369C2_nt ::v74(){vfunc_called(this, "_ZN10S3369C2_nt3v74Ev");}
void  S3369C2_nt ::v75(){vfunc_called(this, "_ZN10S3369C2_nt3v75Ev");}
void  S3369C2_nt ::v76(){vfunc_called(this, "_ZN10S3369C2_nt3v76Ev");}
void  S3369C2_nt ::v77(){vfunc_called(this, "_ZN10S3369C2_nt3v77Ev");}
void  S3369C2_nt ::v78(){vfunc_called(this, "_ZN10S3369C2_nt3v78Ev");}
void  S3369C2_nt ::v79(){vfunc_called(this, "_ZN10S3369C2_nt3v79Ev");}
void  S3369C2_nt ::v80(){vfunc_called(this, "_ZN10S3369C2_nt3v80Ev");}
void  S3369C2_nt ::v81(){vfunc_called(this, "_ZN10S3369C2_nt3v81Ev");}
void  S3369C2_nt ::v82(){vfunc_called(this, "_ZN10S3369C2_nt3v82Ev");}
S3369C2_nt ::S3369C2_nt(){ note_ctor("S3369C2_nt", this);} // tgen

//skip512 S3369C2_nt

#else // __cplusplus

extern void _ZN10S3369C2_ntC1Ev();
extern void _ZN10S3369C2_ntD1Ev();
Name_Map name_map_S3369C2_nt[] = {
  NSPAIR(_ZN10S3369C2_ntC1Ev),
  NSPAIR(_ZN10S3369C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3369C3;
extern VTBL_ENTRY _ZTI7S3369C3[];
extern  VTBL_ENTRY _ZTV7S3369C3[];
static Base_Class bases_S3369C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3369C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3369C2_nt[];
extern void _ZN10S3369C2_ntD1Ev();
extern void _ZN10S3369C2_ntD0Ev();
extern void _ZN7S3369C32v6Ev();
extern void _ZN7S3369C32v7Ev();
extern void _ZN7S3369C32v8Ev();
extern void _ZN7S3369C32v9Ev();
extern void _ZN7S3369C33v10Ev();
extern void _ZN7S3369C33v11Ev();
extern void _ZN7S3369C33v12Ev();
extern void _ZN7S3369C33v13Ev();
extern void _ZN7S3369C33v14Ev();
extern void _ZN7S3369C33v15Ev();
extern void _ZN7S3369C33v16Ev();
extern void _ZN7S3369C33v17Ev();
extern void _ZN7S3369C33v18Ev();
extern void _ZN7S3369C33v19Ev();
extern void _ZN7S3369C33v20Ev();
extern void _ZN7S3369C33v21Ev();
extern void _ZN7S3369C33v22Ev();
extern void _ZN7S3369C33v23Ev();
extern void _ZN7S3369C33v24Ev();
extern void _ZN7S3369C33v25Ev();
extern void _ZN7S3369C33v26Ev();
extern void _ZN7S3369C33v27Ev();
extern void _ZN7S3369C33v28Ev();
extern void _ZN7S3369C33v29Ev();
extern void _ZN7S3369C33v30Ev();
extern void _ZN7S3369C33v31Ev();
extern void _ZN7S3369C33v32Ev();
extern void _ZN7S3369C33v33Ev();
extern void _ZN7S3369C33v34Ev();
extern void _ZN7S3369C33v35Ev();
extern void _ZN7S3369C33v36Ev();
extern void _ZN7S3369C33v37Ev();
extern void _ZN7S3369C33v38Ev();
extern void _ZN7S3369C33v39Ev();
extern void _ZN7S3369C33v40Ev();
extern void _ZN7S3369C33v41Ev();
extern void _ZN7S3369C33v42Ev();
extern void _ZN7S3369C33v43Ev();
extern void _ZN7S3369C33v44Ev();
extern void _ZN7S3369C33v45Ev();
extern void _ZN7S3369C33v46Ev();
extern void _ZN7S3369C33v47Ev();
extern void _ZN7S3369C33v48Ev();
extern void _ZN7S3369C33v49Ev();
extern void _ZN7S3369C33v50Ev();
extern void _ZN7S3369C33v51Ev();
extern void _ZN7S3369C33v52Ev();
extern void _ZN7S3369C33v53Ev();
extern void _ZN7S3369C33v54Ev();
extern void _ZN7S3369C33v55Ev();
extern void _ZN7S3369C33v56Ev();
extern void _ZN7S3369C33v57Ev();
extern void _ZN7S3369C33v58Ev();
extern void _ZN7S3369C33v59Ev();
extern void _ZN7S3369C33v60Ev();
extern void _ZN7S3369C33v61Ev();
extern void _ZN7S3369C33v62Ev();
extern void _ZN7S3369C33v63Ev();
extern void _ZN7S3369C33v64Ev();
extern void _ZN7S3369C33v65Ev();
extern void _ZN7S3369C33v66Ev();
extern void _ZN7S3369C33v67Ev();
extern void _ZN7S3369C33v68Ev();
extern void _ZN7S3369C33v69Ev();
extern void _ZN10S3369C2_nt3v70Ev();
extern void _ZN10S3369C2_nt3v71Ev();
extern void _ZN10S3369C2_nt3v72Ev();
extern void _ZN10S3369C2_nt3v73Ev();
extern void _ZN10S3369C2_nt3v74Ev();
extern void _ZN10S3369C2_nt3v75Ev();
extern void _ZN10S3369C2_nt3v76Ev();
extern void _ZN10S3369C2_nt3v77Ev();
extern void _ZN10S3369C2_nt3v78Ev();
extern void _ZN10S3369C2_nt3v79Ev();
extern void _ZN10S3369C2_nt3v80Ev();
extern void _ZN10S3369C2_nt3v81Ev();
extern void _ZN10S3369C2_nt3v82Ev();
static  VTBL_ENTRY vtc_S3369C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3369C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3369C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v69Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v82Ev,
};
extern VTBL_ENTRY _ZTI10S3369C2_nt[];
VTBL_ENTRY *P__ZTI10S3369C2_nt = _ZTI10S3369C2_nt; 
extern  VTBL_ENTRY _ZTV10S3369C2_nt[];
Class_Descriptor cd_S3369C2_nt = {  "S3369C2_nt", // class name
  bases_S3369C2_nt, 1,
  &(vtc_S3369C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI10S3369C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3369C2_nt),81, //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  S3369C1  : S3369C2_nt {
  int s3369c1f0[4];
  virtual  ~S3369C1(); // _ZN7S3369C1D1Ev
  virtual void  v1(); // _ZN7S3369C12v1Ev
  virtual void  v2(); // _ZN7S3369C12v2Ev
  virtual void  v3(); // _ZN7S3369C12v3Ev
  virtual void  v4(); // _ZN7S3369C12v4Ev
  virtual void  v5(); // _ZN7S3369C12v5Ev
  S3369C1(); // tgen
};
//SIG(1 S3369C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fi[2] Fi:1 Fi:1 Fp FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}}} vd v1 v2 v3 v4 v5 Fi[4]}


 S3369C1 ::~S3369C1(){ note_dtor("S3369C1", this);}
void  S3369C1 ::v1(){vfunc_called(this, "_ZN7S3369C12v1Ev");}
void  S3369C1 ::v2(){vfunc_called(this, "_ZN7S3369C12v2Ev");}
void  S3369C1 ::v3(){vfunc_called(this, "_ZN7S3369C12v3Ev");}
void  S3369C1 ::v4(){vfunc_called(this, "_ZN7S3369C12v4Ev");}
void  S3369C1 ::v5(){vfunc_called(this, "_ZN7S3369C12v5Ev");}
S3369C1 ::S3369C1(){ note_ctor("S3369C1", this);} // tgen

static void Test_S3369C1()
{
  extern Class_Descriptor cd_S3369C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,27)];
    init_test(&cd_S3369C1, buf);
    S3369C1 *dp, &lv = *(dp=new (buf) S3369C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,104), "sizeof(S3369C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3369C1)");
    check_base_class_offset(lv, (S3369C3*)(S3369C2_nt*), 0, "S3369C1");
    check_base_class_offset(lv, (S3369C2_nt*), 0, "S3369C1");
    check_field_offset(lv, s3369c1f0, ABISELECT(136,88), "S3369C1.s3369c1f0");
    test_class_info(&lv, &cd_S3369C1);
    dp->~S3369C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3369C1(Test_S3369C1, "S3369C1", ABISELECT(152,104));

#else // __cplusplus

extern void _ZN7S3369C1C1Ev();
extern void _ZN7S3369C1D1Ev();
Name_Map name_map_S3369C1[] = {
  NSPAIR(_ZN7S3369C1C1Ev),
  NSPAIR(_ZN7S3369C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3369C3;
extern VTBL_ENTRY _ZTI7S3369C3[];
extern  VTBL_ENTRY _ZTV7S3369C3[];
extern Class_Descriptor cd_S3369C2_nt;
extern VTBL_ENTRY _ZTI10S3369C2_nt[];
extern  VTBL_ENTRY _ZTV10S3369C2_nt[];
static Base_Class bases_S3369C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3369C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3369C2_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 _ZTI7S3369C1[];
extern void _ZN7S3369C1D1Ev();
extern void _ZN7S3369C1D0Ev();
extern void _ZN7S3369C32v6Ev();
extern void _ZN7S3369C32v7Ev();
extern void _ZN7S3369C32v8Ev();
extern void _ZN7S3369C32v9Ev();
extern void _ZN7S3369C33v10Ev();
extern void _ZN7S3369C33v11Ev();
extern void _ZN7S3369C33v12Ev();
extern void _ZN7S3369C33v13Ev();
extern void _ZN7S3369C33v14Ev();
extern void _ZN7S3369C33v15Ev();
extern void _ZN7S3369C33v16Ev();
extern void _ZN7S3369C33v17Ev();
extern void _ZN7S3369C33v18Ev();
extern void _ZN7S3369C33v19Ev();
extern void _ZN7S3369C33v20Ev();
extern void _ZN7S3369C33v21Ev();
extern void _ZN7S3369C33v22Ev();
extern void _ZN7S3369C33v23Ev();
extern void _ZN7S3369C33v24Ev();
extern void _ZN7S3369C33v25Ev();
extern void _ZN7S3369C33v26Ev();
extern void _ZN7S3369C33v27Ev();
extern void _ZN7S3369C33v28Ev();
extern void _ZN7S3369C33v29Ev();
extern void _ZN7S3369C33v30Ev();
extern void _ZN7S3369C33v31Ev();
extern void _ZN7S3369C33v32Ev();
extern void _ZN7S3369C33v33Ev();
extern void _ZN7S3369C33v34Ev();
extern void _ZN7S3369C33v35Ev();
extern void _ZN7S3369C33v36Ev();
extern void _ZN7S3369C33v37Ev();
extern void _ZN7S3369C33v38Ev();
extern void _ZN7S3369C33v39Ev();
extern void _ZN7S3369C33v40Ev();
extern void _ZN7S3369C33v41Ev();
extern void _ZN7S3369C33v42Ev();
extern void _ZN7S3369C33v43Ev();
extern void _ZN7S3369C33v44Ev();
extern void _ZN7S3369C33v45Ev();
extern void _ZN7S3369C33v46Ev();
extern void _ZN7S3369C33v47Ev();
extern void _ZN7S3369C33v48Ev();
extern void _ZN7S3369C33v49Ev();
extern void _ZN7S3369C33v50Ev();
extern void _ZN7S3369C33v51Ev();
extern void _ZN7S3369C33v52Ev();
extern void _ZN7S3369C33v53Ev();
extern void _ZN7S3369C33v54Ev();
extern void _ZN7S3369C33v55Ev();
extern void _ZN7S3369C33v56Ev();
extern void _ZN7S3369C33v57Ev();
extern void _ZN7S3369C33v58Ev();
extern void _ZN7S3369C33v59Ev();
extern void _ZN7S3369C33v60Ev();
extern void _ZN7S3369C33v61Ev();
extern void _ZN7S3369C33v62Ev();
extern void _ZN7S3369C33v63Ev();
extern void _ZN7S3369C33v64Ev();
extern void _ZN7S3369C33v65Ev();
extern void _ZN7S3369C33v66Ev();
extern void _ZN7S3369C33v67Ev();
extern void _ZN7S3369C33v68Ev();
extern void _ZN7S3369C33v69Ev();
extern void _ZN10S3369C2_nt3v70Ev();
extern void _ZN10S3369C2_nt3v71Ev();
extern void _ZN10S3369C2_nt3v72Ev();
extern void _ZN10S3369C2_nt3v73Ev();
extern void _ZN10S3369C2_nt3v74Ev();
extern void _ZN10S3369C2_nt3v75Ev();
extern void _ZN10S3369C2_nt3v76Ev();
extern void _ZN10S3369C2_nt3v77Ev();
extern void _ZN10S3369C2_nt3v78Ev();
extern void _ZN10S3369C2_nt3v79Ev();
extern void _ZN10S3369C2_nt3v80Ev();
extern void _ZN10S3369C2_nt3v81Ev();
extern void _ZN10S3369C2_nt3v82Ev();
extern void _ZN7S3369C12v1Ev();
extern void _ZN7S3369C12v2Ev();
extern void _ZN7S3369C12v3Ev();
extern void _ZN7S3369C12v4Ev();
extern void _ZN7S3369C12v5Ev();
static  VTBL_ENTRY vtc_S3369C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3369C1[0]),
  (VTBL_ENTRY)&_ZN7S3369C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3369C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3369C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3369C33v69Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3369C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN7S3369C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3369C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3369C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3369C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3369C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3369C1[];
extern  VTBL_ENTRY _ZTV7S3369C1[];
Class_Descriptor cd_S3369C1 = {  "S3369C1", // class name
  bases_S3369C1, 2,
  &(vtc_S3369C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,104), // object size
  NSPAIRA(_ZTI7S3369C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3369C1),86, //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  S2327C4_nt  {
  ::S22028C11_nt s2327c4f0;
  int s2327c4f1[2];
  char s2327c4f2;
  virtual  ~S2327C4_nt(); // _ZN10S2327C4_ntD1Ev
  virtual void  v5(); // _ZN10S2327C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2327C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2327C4_nt2v7Ev
  S2327C4_nt(); // tgen
};
//SIG(-1 S2327C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2327C4_nt ::~S2327C4_nt(){ note_dtor("S2327C4_nt", this);}
void  S2327C4_nt ::v5(){vfunc_called(this, "_ZN10S2327C4_nt2v5Ev");}
void  S2327C4_nt ::v6(){vfunc_called(this, "_ZN10S2327C4_nt2v6Ev");}
void  S2327C4_nt ::v7(){vfunc_called(this, "_ZN10S2327C4_nt2v7Ev");}
S2327C4_nt ::S2327C4_nt(){ note_ctor("S2327C4_nt", this);} // tgen

//skip512 S2327C4_nt

#else // __cplusplus

extern void _ZN10S2327C4_ntC1Ev();
extern void _ZN10S2327C4_ntD1Ev();
Name_Map name_map_S2327C4_nt[] = {
  NSPAIR(_ZN10S2327C4_ntC1Ev),
  NSPAIR(_ZN10S2327C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2327C4_nt[];
extern void _ZN10S2327C4_ntD1Ev();
extern void _ZN10S2327C4_ntD0Ev();
extern void _ZN10S2327C4_nt2v5Ev();
extern void _ZN10S2327C4_nt2v6Ev();
extern void _ZN10S2327C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S2327C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2327C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2327C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2327C4_nt[];
VTBL_ENTRY *P__ZTI10S2327C4_nt = _ZTI10S2327C4_nt; 
extern  VTBL_ENTRY _ZTV10S2327C4_nt[];
Class_Descriptor cd_S2327C4_nt = {  "S2327C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2327C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2327C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2327C4_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  S2327C7_nt  {
  virtual  ~S2327C7_nt(); // _ZN10S2327C7_ntD1Ev
  virtual void  v8(); // _ZN10S2327C7_nt2v8Ev
  virtual void  v9(); // _ZN10S2327C7_nt2v9Ev
  virtual void  v10(); // _ZN10S2327C7_nt3v10Ev
  S2327C7_nt(); // tgen
};
//SIG(-1 S2327C7_nt) C1{ vd v1 v2 v3}


 S2327C7_nt ::~S2327C7_nt(){ note_dtor("S2327C7_nt", this);}
void  S2327C7_nt ::v8(){vfunc_called(this, "_ZN10S2327C7_nt2v8Ev");}
void  S2327C7_nt ::v9(){vfunc_called(this, "_ZN10S2327C7_nt2v9Ev");}
void  S2327C7_nt ::v10(){vfunc_called(this, "_ZN10S2327C7_nt3v10Ev");}
S2327C7_nt ::S2327C7_nt(){ note_ctor("S2327C7_nt", this);} // tgen

//skip512 S2327C7_nt

#else // __cplusplus

extern void _ZN10S2327C7_ntC1Ev();
extern void _ZN10S2327C7_ntD1Ev();
Name_Map name_map_S2327C7_nt[] = {
  NSPAIR(_ZN10S2327C7_ntC1Ev),
  NSPAIR(_ZN10S2327C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2327C7_nt[];
extern void _ZN10S2327C7_ntD1Ev();
extern void _ZN10S2327C7_ntD0Ev();
extern void _ZN10S2327C7_nt2v8Ev();
extern void _ZN10S2327C7_nt2v9Ev();
extern void _ZN10S2327C7_nt3v10Ev();
static  VTBL_ENTRY vtc_S2327C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2327C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S2327C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S2327C7_nt[];
VTBL_ENTRY *P__ZTI10S2327C7_nt = _ZTI10S2327C7_nt; 
extern  VTBL_ENTRY _ZTV10S2327C7_nt[];
Class_Descriptor cd_S2327C7_nt = {  "S2327C7_nt", // class name
  0,0,//no base classes
  &(vtc_S2327C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S2327C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2327C7_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  S2327C3_nt  : S2327C4_nt , S2327C7_nt {
  void *s2327c3f0;
  char s2327c3f1;
  int s2327c3f2;
  virtual  ~S2327C3_nt(); // _ZN10S2327C3_ntD1Ev
  virtual void  v11(); // _ZN10S2327C3_nt3v11Ev
  virtual void  v12(); // _ZN10S2327C3_nt3v12Ev
  virtual void  v13(); // _ZN10S2327C3_nt3v13Ev
  virtual void  v14(); // _ZN10S2327C3_nt3v14Ev
  virtual void  v15(); // _ZN10S2327C3_nt3v15Ev
  virtual void  v16(); // _ZN10S2327C3_nt3v16Ev
  virtual void  v17(); // _ZN10S2327C3_nt3v17Ev
  virtual void  v18(); // _ZN10S2327C3_nt3v18Ev
  virtual void  v19(); // _ZN10S2327C3_nt3v19Ev
  virtual void  v20(); // _ZN10S2327C3_nt3v20Ev
  S2327C3_nt(); // tgen
};
//SIG(-1 S2327C3_nt) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2327C3_nt ::~S2327C3_nt(){ note_dtor("S2327C3_nt", this);}
void  S2327C3_nt ::v11(){vfunc_called(this, "_ZN10S2327C3_nt3v11Ev");}
void  S2327C3_nt ::v12(){vfunc_called(this, "_ZN10S2327C3_nt3v12Ev");}
void  S2327C3_nt ::v13(){vfunc_called(this, "_ZN10S2327C3_nt3v13Ev");}
void  S2327C3_nt ::v14(){vfunc_called(this, "_ZN10S2327C3_nt3v14Ev");}
void  S2327C3_nt ::v15(){vfunc_called(this, "_ZN10S2327C3_nt3v15Ev");}
void  S2327C3_nt ::v16(){vfunc_called(this, "_ZN10S2327C3_nt3v16Ev");}
void  S2327C3_nt ::v17(){vfunc_called(this, "_ZN10S2327C3_nt3v17Ev");}
void  S2327C3_nt ::v18(){vfunc_called(this, "_ZN10S2327C3_nt3v18Ev");}
void  S2327C3_nt ::v19(){vfunc_called(this, "_ZN10S2327C3_nt3v19Ev");}
void  S2327C3_nt ::v20(){vfunc_called(this, "_ZN10S2327C3_nt3v20Ev");}
S2327C3_nt ::S2327C3_nt(){ note_ctor("S2327C3_nt", this);} // tgen

//skip512 S2327C3_nt

#else // __cplusplus

extern void _ZN10S2327C3_ntC1Ev();
extern void _ZN10S2327C3_ntD1Ev();
Name_Map name_map_S2327C3_nt[] = {
  NSPAIR(_ZN10S2327C3_ntC1Ev),
  NSPAIR(_ZN10S2327C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2327C4_nt;
extern VTBL_ENTRY _ZTI10S2327C4_nt[];
extern  VTBL_ENTRY _ZTV10S2327C4_nt[];
extern Class_Descriptor cd_S2327C7_nt;
extern VTBL_ENTRY _ZTI10S2327C7_nt[];
extern  VTBL_ENTRY _ZTV10S2327C7_nt[];
static Base_Class bases_S2327C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2327C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2327C7_nt,    ABISELECT(40,28), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2327C3_nt[];
extern void _ZN10S2327C3_ntD1Ev();
extern void _ZN10S2327C3_ntD0Ev();
extern void _ZN10S2327C4_nt2v5Ev();
extern void _ZN10S2327C4_nt2v6Ev();
extern void _ZN10S2327C4_nt2v7Ev();
extern void _ZN10S2327C3_nt3v11Ev();
extern void _ZN10S2327C3_nt3v12Ev();
extern void _ZN10S2327C3_nt3v13Ev();
extern void _ZN10S2327C3_nt3v14Ev();
extern void _ZN10S2327C3_nt3v15Ev();
extern void _ZN10S2327C3_nt3v16Ev();
extern void _ZN10S2327C3_nt3v17Ev();
extern void _ZN10S2327C3_nt3v18Ev();
extern void _ZN10S2327C3_nt3v19Ev();
extern void _ZN10S2327C3_nt3v20Ev();
extern void ABISELECT(_ZThn40_N10S2327C3_ntD1Ev,_ZThn28_N10S2327C3_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S2327C3_ntD0Ev,_ZThn28_N10S2327C3_ntD0Ev)();
extern void _ZN10S2327C7_nt2v8Ev();
extern void _ZN10S2327C7_nt2v9Ev();
extern void _ZN10S2327C7_nt3v10Ev();
static  VTBL_ENTRY vtc_S2327C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2327C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2327C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI10S2327C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2327C3_ntD1Ev,_ZThn28_N10S2327C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2327C3_ntD0Ev,_ZThn28_N10S2327C3_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S2327C3_nt[];
VTBL_ENTRY *P__ZTI10S2327C3_nt = _ZTI10S2327C3_nt; 
extern  VTBL_ENTRY _ZTV10S2327C3_nt[];
Class_Descriptor cd_S2327C3_nt = {  "S2327C3_nt", // class name
  bases_S2327C3_nt, 2,
  &(vtc_S2327C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI10S2327C3_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2327C3_nt),24, //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  S2327C10  {
  virtual  ~S2327C10(); // _ZN8S2327C10D1Ev
  virtual void  v21(); // _ZN8S2327C103v21Ev
  virtual void  v22(); // _ZN8S2327C103v22Ev
  virtual void  v23(); // _ZN8S2327C103v23Ev
  S2327C10(); // tgen
};
//SIG(-1 S2327C10) C1{ vd v1 v2 v3}


 S2327C10 ::~S2327C10(){ note_dtor("S2327C10", this);}
void  S2327C10 ::v21(){vfunc_called(this, "_ZN8S2327C103v21Ev");}
void  S2327C10 ::v22(){vfunc_called(this, "_ZN8S2327C103v22Ev");}
void  S2327C10 ::v23(){vfunc_called(this, "_ZN8S2327C103v23Ev");}
S2327C10 ::S2327C10(){ note_ctor("S2327C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2327C10C1Ev();
extern void _ZN8S2327C10D1Ev();
Name_Map name_map_S2327C10[] = {
  NSPAIR(_ZN8S2327C10C1Ev),
  NSPAIR(_ZN8S2327C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2327C10[];
extern void _ZN8S2327C10D1Ev();
extern void _ZN8S2327C10D0Ev();
extern void _ZN8S2327C103v21Ev();
extern void _ZN8S2327C103v22Ev();
extern void _ZN8S2327C103v23Ev();
static  VTBL_ENTRY vtc_S2327C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2327C10[0]),
  (VTBL_ENTRY)&_ZN8S2327C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2327C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2327C10[];
extern  VTBL_ENTRY _ZTV8S2327C10[];
Class_Descriptor cd_S2327C10 = {  "S2327C10", // class name
  0,0,//no base classes
  &(vtc_S2327C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2327C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2327C10),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  S2327C9_nt  : S2327C10 {
  ::S22028C26_nt s2327c9f0;
  ::S8517C3_nt s2327c9f1;
  char s2327c9f2;
  virtual  ~S2327C9_nt(); // _ZN10S2327C9_ntD1Ev
  virtual void  v24(); // _ZN10S2327C9_nt3v24Ev
  virtual void  v25(); // _ZN10S2327C9_nt3v25Ev
  virtual void  v26(); // _ZN10S2327C9_nt3v26Ev
  S2327C9_nt(); // tgen
};
//SIG(-1 S2327C9_nt) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FC6{ FL[4]}} Fc}


 S2327C9_nt ::~S2327C9_nt(){ note_dtor("S2327C9_nt", this);}
void  S2327C9_nt ::v24(){vfunc_called(this, "_ZN10S2327C9_nt3v24Ev");}
void  S2327C9_nt ::v25(){vfunc_called(this, "_ZN10S2327C9_nt3v25Ev");}
void  S2327C9_nt ::v26(){vfunc_called(this, "_ZN10S2327C9_nt3v26Ev");}
S2327C9_nt ::S2327C9_nt(){ note_ctor("S2327C9_nt", this);} // tgen

//skip512 S2327C9_nt

#else // __cplusplus

extern void _ZN10S2327C9_ntC1Ev();
extern void _ZN10S2327C9_ntD1Ev();
Name_Map name_map_S2327C9_nt[] = {
  NSPAIR(_ZN10S2327C9_ntC1Ev),
  NSPAIR(_ZN10S2327C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2327C10;
extern VTBL_ENTRY _ZTI8S2327C10[];
extern  VTBL_ENTRY _ZTV8S2327C10[];
static Base_Class bases_S2327C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2327C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2327C9_nt[];
extern void _ZN10S2327C9_ntD1Ev();
extern void _ZN10S2327C9_ntD0Ev();
extern void _ZN8S2327C103v21Ev();
extern void _ZN8S2327C103v22Ev();
extern void _ZN8S2327C103v23Ev();
extern void _ZN10S2327C9_nt3v24Ev();
extern void _ZN10S2327C9_nt3v25Ev();
extern void _ZN10S2327C9_nt3v26Ev();
static  VTBL_ENTRY vtc_S2327C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2327C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S2327C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S2327C9_nt[];
VTBL_ENTRY *P__ZTI10S2327C9_nt = _ZTI10S2327C9_nt; 
extern  VTBL_ENTRY _ZTV10S2327C9_nt[];
Class_Descriptor cd_S2327C9_nt = {  "S2327C9_nt", // class name
  bases_S2327C9_nt, 1,
  &(vtc_S2327C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S2327C9_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2327C9_nt),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  S2327C8_nt  : S2327C9_nt {
  virtual  ~S2327C8_nt(); // _ZN10S2327C8_ntD1Ev
  virtual void  v27(); // _ZN10S2327C8_nt3v27Ev
  virtual void  v28(); // _ZN10S2327C8_nt3v28Ev
  virtual void  v29(); // _ZN10S2327C8_nt3v29Ev
  virtual void  v30(); // _ZN10S2327C8_nt3v30Ev
  S2327C8_nt(); // tgen
};
//SIG(-1 S2327C8_nt) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ FL[4]}} Fc} vd v1 v2 v3 v4}


 S2327C8_nt ::~S2327C8_nt(){ note_dtor("S2327C8_nt", this);}
void  S2327C8_nt ::v27(){vfunc_called(this, "_ZN10S2327C8_nt3v27Ev");}
void  S2327C8_nt ::v28(){vfunc_called(this, "_ZN10S2327C8_nt3v28Ev");}
void  S2327C8_nt ::v29(){vfunc_called(this, "_ZN10S2327C8_nt3v29Ev");}
void  S2327C8_nt ::v30(){vfunc_called(this, "_ZN10S2327C8_nt3v30Ev");}
S2327C8_nt ::S2327C8_nt(){ note_ctor("S2327C8_nt", this);} // tgen

//skip512 S2327C8_nt

#else // __cplusplus

extern void _ZN10S2327C8_ntC1Ev();
extern void _ZN10S2327C8_ntD1Ev();
Name_Map name_map_S2327C8_nt[] = {
  NSPAIR(_ZN10S2327C8_ntC1Ev),
  NSPAIR(_ZN10S2327C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2327C10;
extern VTBL_ENTRY _ZTI8S2327C10[];
extern  VTBL_ENTRY _ZTV8S2327C10[];
extern Class_Descriptor cd_S2327C9_nt;
extern VTBL_ENTRY _ZTI10S2327C9_nt[];
extern  VTBL_ENTRY _ZTV10S2327C9_nt[];
static Base_Class bases_S2327C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2327C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2327C9_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 _ZTI10S2327C8_nt[];
extern void _ZN10S2327C8_ntD1Ev();
extern void _ZN10S2327C8_ntD0Ev();
extern void _ZN8S2327C103v21Ev();
extern void _ZN8S2327C103v22Ev();
extern void _ZN8S2327C103v23Ev();
extern void _ZN10S2327C9_nt3v24Ev();
extern void _ZN10S2327C9_nt3v25Ev();
extern void _ZN10S2327C9_nt3v26Ev();
extern void _ZN10S2327C8_nt3v27Ev();
extern void _ZN10S2327C8_nt3v28Ev();
extern void _ZN10S2327C8_nt3v29Ev();
extern void _ZN10S2327C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2327C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2327C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S2327C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2327C8_nt[];
VTBL_ENTRY *P__ZTI10S2327C8_nt = _ZTI10S2327C8_nt; 
extern  VTBL_ENTRY _ZTV10S2327C8_nt[];
Class_Descriptor cd_S2327C8_nt = {  "S2327C8_nt", // class name
  bases_S2327C8_nt, 2,
  &(vtc_S2327C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI10S2327C8_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2327C8_nt),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  S2327C2_nt  : S2327C3_nt , S2327C8_nt {
  int s2327c2f0[3];
  char s2327c2f1;
  ::S22028C13_nt s2327c2f2;
  virtual  ~S2327C2_nt(); // _ZN10S2327C2_ntD1Ev
  virtual void  v31(); // _ZN10S2327C2_nt3v31Ev
  virtual void  v32(); // _ZN10S2327C2_nt3v32Ev
  virtual void  v33(); // _ZN10S2327C2_nt3v33Ev
  virtual void  v34(); // _ZN10S2327C2_nt3v34Ev
  virtual void  v35(); // _ZN10S2327C2_nt3v35Ev
  virtual void  v36(); // _ZN10S2327C2_nt3v36Ev
  S2327C2_nt(); // tgen
};
//SIG(-1 S2327C2_nt) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FC13{ FL[4]}} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC14{ BC15{ m Fp Fi FC5 FC11}}}


 S2327C2_nt ::~S2327C2_nt(){ note_dtor("S2327C2_nt", this);}
void  S2327C2_nt ::v31(){vfunc_called(this, "_ZN10S2327C2_nt3v31Ev");}
void  S2327C2_nt ::v32(){vfunc_called(this, "_ZN10S2327C2_nt3v32Ev");}
void  S2327C2_nt ::v33(){vfunc_called(this, "_ZN10S2327C2_nt3v33Ev");}
void  S2327C2_nt ::v34(){vfunc_called(this, "_ZN10S2327C2_nt3v34Ev");}
void  S2327C2_nt ::v35(){vfunc_called(this, "_ZN10S2327C2_nt3v35Ev");}
void  S2327C2_nt ::v36(){vfunc_called(this, "_ZN10S2327C2_nt3v36Ev");}
S2327C2_nt ::S2327C2_nt(){ note_ctor("S2327C2_nt", this);} // tgen

//skip512 S2327C2_nt

#else // __cplusplus

extern void _ZN10S2327C2_ntC1Ev();
extern void _ZN10S2327C2_ntD1Ev();
Name_Map name_map_S2327C2_nt[] = {
  NSPAIR(_ZN10S2327C2_ntC1Ev),
  NSPAIR(_ZN10S2327C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2327C4_nt;
extern VTBL_ENTRY _ZTI10S2327C4_nt[];
extern  VTBL_ENTRY _ZTV10S2327C4_nt[];
extern Class_Descriptor cd_S2327C7_nt;
extern VTBL_ENTRY _ZTI10S2327C7_nt[];
extern  VTBL_ENTRY _ZTV10S2327C7_nt[];
extern Class_Descriptor cd_S2327C3_nt;
extern VTBL_ENTRY _ZTI10S2327C3_nt[];
extern  VTBL_ENTRY _ZTV10S2327C3_nt[];
extern Class_Descriptor cd_S2327C10;
extern VTBL_ENTRY _ZTI8S2327C10[];
extern  VTBL_ENTRY _ZTV8S2327C10[];
extern Class_Descriptor cd_S2327C9_nt;
extern VTBL_ENTRY _ZTI10S2327C9_nt[];
extern  VTBL_ENTRY _ZTV10S2327C9_nt[];
extern Class_Descriptor cd_S2327C8_nt;
extern VTBL_ENTRY _ZTI10S2327C8_nt[];
extern  VTBL_ENTRY _ZTV10S2327C8_nt[];
static Base_Class bases_S2327C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2327C4_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_S2327C7_nt,    ABISELECT(40,28), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2327C3_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_S2327C10,    ABISELECT(64,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2327C9_nt,    ABISELECT(64,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2327C8_nt,    ABISELECT(64,44), //bcp->offset
    30, //bcp->virtual_function_table_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 _ZTI10S2327C2_nt[];
extern void _ZN10S2327C2_ntD1Ev();
extern void _ZN10S2327C2_ntD0Ev();
extern void _ZN10S2327C4_nt2v5Ev();
extern void _ZN10S2327C4_nt2v6Ev();
extern void _ZN10S2327C4_nt2v7Ev();
extern void _ZN10S2327C3_nt3v11Ev();
extern void _ZN10S2327C3_nt3v12Ev();
extern void _ZN10S2327C3_nt3v13Ev();
extern void _ZN10S2327C3_nt3v14Ev();
extern void _ZN10S2327C3_nt3v15Ev();
extern void _ZN10S2327C3_nt3v16Ev();
extern void _ZN10S2327C3_nt3v17Ev();
extern void _ZN10S2327C3_nt3v18Ev();
extern void _ZN10S2327C3_nt3v19Ev();
extern void _ZN10S2327C3_nt3v20Ev();
extern void _ZN10S2327C2_nt3v31Ev();
extern void _ZN10S2327C2_nt3v32Ev();
extern void _ZN10S2327C2_nt3v33Ev();
extern void _ZN10S2327C2_nt3v34Ev();
extern void _ZN10S2327C2_nt3v35Ev();
extern void _ZN10S2327C2_nt3v36Ev();
extern void ABISELECT(_ZThn40_N10S2327C2_ntD1Ev,_ZThn28_N10S2327C2_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S2327C2_ntD0Ev,_ZThn28_N10S2327C2_ntD0Ev)();
extern void _ZN10S2327C7_nt2v8Ev();
extern void _ZN10S2327C7_nt2v9Ev();
extern void _ZN10S2327C7_nt3v10Ev();
extern void ABISELECT(_ZThn64_N10S2327C2_ntD1Ev,_ZThn44_N10S2327C2_ntD1Ev)();
extern void ABISELECT(_ZThn64_N10S2327C2_ntD0Ev,_ZThn44_N10S2327C2_ntD0Ev)();
extern void _ZN8S2327C103v21Ev();
extern void _ZN8S2327C103v22Ev();
extern void _ZN8S2327C103v23Ev();
extern void _ZN10S2327C9_nt3v24Ev();
extern void _ZN10S2327C9_nt3v25Ev();
extern void _ZN10S2327C9_nt3v26Ev();
extern void _ZN10S2327C8_nt3v27Ev();
extern void _ZN10S2327C8_nt3v28Ev();
extern void _ZN10S2327C8_nt3v29Ev();
extern void _ZN10S2327C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2327C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2327C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2327C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI10S2327C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2327C2_ntD1Ev,_ZThn28_N10S2327C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2327C2_ntD0Ev,_ZThn28_N10S2327C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt3v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI10S2327C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2327C2_ntD1Ev,_ZThn44_N10S2327C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2327C2_ntD0Ev,_ZThn44_N10S2327C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S2327C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2327C2_nt[];
VTBL_ENTRY *P__ZTI10S2327C2_nt = _ZTI10S2327C2_nt; 
extern  VTBL_ENTRY _ZTV10S2327C2_nt[];
Class_Descriptor cd_S2327C2_nt = {  "S2327C2_nt", // class name
  bases_S2327C2_nt, 6,
  &(vtc_S2327C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,128), // object size
  NSPAIRA(_ZTI10S2327C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2327C2_nt),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2327C19_nt  {
  void *s2327c19f0;
  virtual  ~S2327C19_nt(); // _ZN11S2327C19_ntD1Ev
  virtual void  v37(); // _ZN11S2327C19_nt3v37Ev
  virtual void  v38(); // _ZN11S2327C19_nt3v38Ev
  virtual void  v39(); // _ZN11S2327C19_nt3v39Ev
  virtual void  v40(); // _ZN11S2327C19_nt3v40Ev
  S2327C19_nt(); // tgen
};
//SIG(-1 S2327C19_nt) C1{ vd v1 v2 v3 v4 Fp}


 S2327C19_nt ::~S2327C19_nt(){ note_dtor("S2327C19_nt", this);}
void  S2327C19_nt ::v37(){vfunc_called(this, "_ZN11S2327C19_nt3v37Ev");}
void  S2327C19_nt ::v38(){vfunc_called(this, "_ZN11S2327C19_nt3v38Ev");}
void  S2327C19_nt ::v39(){vfunc_called(this, "_ZN11S2327C19_nt3v39Ev");}
void  S2327C19_nt ::v40(){vfunc_called(this, "_ZN11S2327C19_nt3v40Ev");}
S2327C19_nt ::S2327C19_nt(){ note_ctor("S2327C19_nt", this);} // tgen

//skip512 S2327C19_nt

#else // __cplusplus

extern void _ZN11S2327C19_ntC1Ev();
extern void _ZN11S2327C19_ntD1Ev();
Name_Map name_map_S2327C19_nt[] = {
  NSPAIR(_ZN11S2327C19_ntC1Ev),
  NSPAIR(_ZN11S2327C19_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2327C19_nt[];
extern void _ZN11S2327C19_ntD1Ev();
extern void _ZN11S2327C19_ntD0Ev();
extern void _ZN11S2327C19_nt3v37Ev();
extern void _ZN11S2327C19_nt3v38Ev();
extern void _ZN11S2327C19_nt3v39Ev();
extern void _ZN11S2327C19_nt3v40Ev();
static  VTBL_ENTRY vtc_S2327C19_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2327C19_nt[0]),
  (VTBL_ENTRY)&_ZN11S2327C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2327C19_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2327C19_nt3v37Ev,
  (VTBL_ENTRY)&_ZN11S2327C19_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S2327C19_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S2327C19_nt3v40Ev,
};
extern VTBL_ENTRY _ZTI11S2327C19_nt[];
VTBL_ENTRY *P__ZTI11S2327C19_nt = _ZTI11S2327C19_nt; 
extern  VTBL_ENTRY _ZTV11S2327C19_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2327C22_nt  {
  ::S22028C14_nt s2327c22f0;
  void  mf2327c22(); // _ZN11S2327C22_nt9mf2327c22Ev
};
//SIG(-1 S2327C22_nt) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}}}


void  S2327C22_nt ::mf2327c22(){}

//skip512 S2327C22_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2327C21_nt  {
  ::S2327C22_nt s2327c21f0;
  void *s2327c21f1[3];
  char s2327c21f2;
  virtual  ~S2327C21_nt(); // _ZN11S2327C21_ntD1Ev
  virtual void  v42(); // _ZN11S2327C21_nt3v42Ev
  S2327C21_nt(); // tgen
};
//SIG(-1 S2327C21_nt) C1{ vd v1 FC2{ m FC3{ m Fp Fi FC4{ m} FC5{ m}}} Fp[3] Fc}


 S2327C21_nt ::~S2327C21_nt(){ note_dtor("S2327C21_nt", this);}
void  S2327C21_nt ::v42(){vfunc_called(this, "_ZN11S2327C21_nt3v42Ev");}
S2327C21_nt ::S2327C21_nt(){ note_ctor("S2327C21_nt", this);} // tgen

//skip512 S2327C21_nt

#else // __cplusplus

extern void _ZN11S2327C21_ntC1Ev();
extern void _ZN11S2327C21_ntD1Ev();
Name_Map name_map_S2327C21_nt[] = {
  NSPAIR(_ZN11S2327C21_ntC1Ev),
  NSPAIR(_ZN11S2327C21_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S2327C21_nt[];
extern void _ZN11S2327C21_ntD1Ev();
extern void _ZN11S2327C21_ntD0Ev();
extern void _ZN11S2327C21_nt3v42Ev();
static  VTBL_ENTRY vtc_S2327C21_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2327C21_nt[0]),
  (VTBL_ENTRY)&_ZN11S2327C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2327C21_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2327C21_nt3v42Ev,
};
extern VTBL_ENTRY _ZTI11S2327C21_nt[];
VTBL_ENTRY *P__ZTI11S2327C21_nt = _ZTI11S2327C21_nt; 
extern  VTBL_ENTRY _ZTV11S2327C21_nt[];
Class_Descriptor cd_S2327C21_nt = {  "S2327C21_nt", // class name
  0,0,//no base classes
  &(vtc_S2327C21_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI11S2327C21_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S2327C21_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2327C20_nt  : S2327C21_nt {
  void *s2327c20f0;
  virtual void  v41(); // _ZN11S2327C20_nt3v41Ev
  ~S2327C20_nt(); // tgen
  S2327C20_nt(); // tgen
};
//SIG(-1 S2327C20_nt) C1{ BC2{ vd v2 FC3{ m FC4{ m Fp Fi FC5{ m} FC6{ m}}} Fp[3] Fc} v1 Fp}


void  S2327C20_nt ::v41(){vfunc_called(this, "_ZN11S2327C20_nt3v41Ev");}
S2327C20_nt ::~S2327C20_nt(){ note_dtor("S2327C20_nt", this);} // tgen
S2327C20_nt ::S2327C20_nt(){ note_ctor("S2327C20_nt", this);} // tgen

//skip512 S2327C20_nt

#else // __cplusplus

extern void _ZN11S2327C20_ntC1Ev();
extern void _ZN11S2327C20_ntD1Ev();
Name_Map name_map_S2327C20_nt[] = {
  NSPAIR(_ZN11S2327C20_ntC1Ev),
  NSPAIR(_ZN11S2327C20_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2327C21_nt;
extern VTBL_ENTRY _ZTI11S2327C21_nt[];
extern  VTBL_ENTRY _ZTV11S2327C21_nt[];
static Base_Class bases_S2327C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2327C21_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 _ZTI11S2327C20_nt[];
extern void _ZN11S2327C20_ntD1Ev();
extern void _ZN11S2327C20_ntD0Ev();
extern void _ZN11S2327C21_nt3v42Ev();
extern void _ZN11S2327C20_nt3v41Ev();
static  VTBL_ENTRY vtc_S2327C20_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S2327C20_nt[0]),
  (VTBL_ENTRY)&_ZN11S2327C20_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S2327C20_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S2327C21_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S2327C20_nt3v41Ev,
};
extern VTBL_ENTRY _ZTI11S2327C20_nt[];
VTBL_ENTRY *P__ZTI11S2327C20_nt = _ZTI11S2327C20_nt; 
extern  VTBL_ENTRY _ZTV11S2327C20_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2327C1  : S2327C2_nt {
  ::S2327C19_nt s2327c1f0;
  ::S2327C20_nt s2327c1f1;
  int s2327c1f2[2];
  ::S22028C11_nt s2327c1f3;
  int s2327c1f4;
  virtual  ~S2327C1(); // _ZN7S2327C1D1Ev
  virtual void  v1(); // _ZN7S2327C12v1Ev
  virtual void  v2(); // _ZN7S2327C12v2Ev
  virtual void  v3(); // _ZN7S2327C12v3Ev
  virtual void  v4(); // _ZN7S2327C12v4Ev
  S2327C1(); // tgen
};
//SIG(1 S2327C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FC14{ FL[4]}} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC15{ BC16{ m Fp Fi FC6 FC12}}} vd v1 v2 v3 v4 FC17{ vd v37 v38 v39 v40 Fp} FC18{ BC19{ vd v42 FC20{ m FC16} Fp[3] Fc} v41 Fp} Fi[2] FC5 Fi}


 S2327C1 ::~S2327C1(){ note_dtor("S2327C1", this);}
void  S2327C1 ::v1(){vfunc_called(this, "_ZN7S2327C12v1Ev");}
void  S2327C1 ::v2(){vfunc_called(this, "_ZN7S2327C12v2Ev");}
void  S2327C1 ::v3(){vfunc_called(this, "_ZN7S2327C12v3Ev");}
void  S2327C1 ::v4(){vfunc_called(this, "_ZN7S2327C12v4Ev");}
S2327C1 ::S2327C1(){ note_ctor("S2327C1", this);} // tgen

static void Test_S2327C1()
{
  extern Class_Descriptor cd_S2327C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,50)];
    init_test(&cd_S2327C1, buf);
    S2327C1 *dp, &lv = *(dp=new (buf) S2327C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,196), "sizeof(S2327C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2327C1)");
    check_base_class_offset(lv, (S2327C4_nt*)(S2327C3_nt*)(S2327C2_nt*), 0, "S2327C1");
    check_base_class_offset(lv, (S2327C7_nt*)(S2327C3_nt*)(S2327C2_nt*), ABISELECT(40,28), "S2327C1");
    check_base_class_offset(lv, (S2327C3_nt*)(S2327C2_nt*), 0, "S2327C1");
    check_base_class_offset(lv, (S2327C10*)(S2327C9_nt*)(S2327C8_nt*)(S2327C2_nt*), ABISELECT(64,44), "S2327C1");
    check_base_class_offset(lv, (S2327C9_nt*)(S2327C8_nt*)(S2327C2_nt*), ABISELECT(64,44), "S2327C1");
    check_base_class_offset(lv, (S2327C8_nt*)(S2327C2_nt*), ABISELECT(64,44), "S2327C1");
    check_base_class_offset(lv, (S2327C2_nt*), 0, "S2327C1");
    check_field_offset(lv, s2327c1f0, ABISELECT(168,128), "S2327C1.s2327c1f0");
    check_field_offset(lv, s2327c1f1, ABISELECT(184,136), "S2327C1.s2327c1f1");
    check_field_offset(lv, s2327c1f2, ABISELECT(248,172), "S2327C1.s2327c1f2");
    check_field_offset(lv, s2327c1f3, ABISELECT(256,180), "S2327C1.s2327c1f3");
    check_field_offset(lv, s2327c1f4, ABISELECT(272,192), "S2327C1.s2327c1f4");
    test_class_info(&lv, &cd_S2327C1);
    dp->~S2327C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2327C1(Test_S2327C1, "S2327C1", ABISELECT(280,196));

#else // __cplusplus

extern void _ZN7S2327C1C1Ev();
extern void _ZN7S2327C1D1Ev();
Name_Map name_map_S2327C1[] = {
  NSPAIR(_ZN7S2327C1C1Ev),
  NSPAIR(_ZN7S2327C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2327C4_nt;
extern VTBL_ENTRY _ZTI10S2327C4_nt[];
extern  VTBL_ENTRY _ZTV10S2327C4_nt[];
extern Class_Descriptor cd_S2327C7_nt;
extern VTBL_ENTRY _ZTI10S2327C7_nt[];
extern  VTBL_ENTRY _ZTV10S2327C7_nt[];
extern Class_Descriptor cd_S2327C3_nt;
extern VTBL_ENTRY _ZTI10S2327C3_nt[];
extern  VTBL_ENTRY _ZTV10S2327C3_nt[];
extern Class_Descriptor cd_S2327C10;
extern VTBL_ENTRY _ZTI8S2327C10[];
extern  VTBL_ENTRY _ZTV8S2327C10[];
extern Class_Descriptor cd_S2327C9_nt;
extern VTBL_ENTRY _ZTI10S2327C9_nt[];
extern  VTBL_ENTRY _ZTV10S2327C9_nt[];
extern Class_Descriptor cd_S2327C8_nt;
extern VTBL_ENTRY _ZTI10S2327C8_nt[];
extern  VTBL_ENTRY _ZTV10S2327C8_nt[];
extern Class_Descriptor cd_S2327C2_nt;
extern VTBL_ENTRY _ZTI10S2327C2_nt[];
extern  VTBL_ENTRY _ZTV10S2327C2_nt[];
static Base_Class bases_S2327C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2327C4_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_S2327C7_nt,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_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_S2327C3_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
    6, //immediately_derived
  0, 0},
  {&cd_S2327C10,    ABISELECT(64,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2327C9_nt,    ABISELECT(64,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2327C8_nt,    ABISELECT(64,44), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2327C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2327C1[];
extern void _ZN7S2327C1D1Ev();
extern void _ZN7S2327C1D0Ev();
extern void _ZN10S2327C4_nt2v5Ev();
extern void _ZN10S2327C4_nt2v6Ev();
extern void _ZN10S2327C4_nt2v7Ev();
extern void _ZN10S2327C3_nt3v11Ev();
extern void _ZN10S2327C3_nt3v12Ev();
extern void _ZN10S2327C3_nt3v13Ev();
extern void _ZN10S2327C3_nt3v14Ev();
extern void _ZN10S2327C3_nt3v15Ev();
extern void _ZN10S2327C3_nt3v16Ev();
extern void _ZN10S2327C3_nt3v17Ev();
extern void _ZN10S2327C3_nt3v18Ev();
extern void _ZN10S2327C3_nt3v19Ev();
extern void _ZN10S2327C3_nt3v20Ev();
extern void _ZN10S2327C2_nt3v31Ev();
extern void _ZN10S2327C2_nt3v32Ev();
extern void _ZN10S2327C2_nt3v33Ev();
extern void _ZN10S2327C2_nt3v34Ev();
extern void _ZN10S2327C2_nt3v35Ev();
extern void _ZN10S2327C2_nt3v36Ev();
extern void _ZN7S2327C12v1Ev();
extern void _ZN7S2327C12v2Ev();
extern void _ZN7S2327C12v3Ev();
extern void _ZN7S2327C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2327C1D1Ev,_ZThn28_N7S2327C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2327C1D0Ev,_ZThn28_N7S2327C1D0Ev)();
extern void _ZN10S2327C7_nt2v8Ev();
extern void _ZN10S2327C7_nt2v9Ev();
extern void _ZN10S2327C7_nt3v10Ev();
extern void ABISELECT(_ZThn64_N7S2327C1D1Ev,_ZThn44_N7S2327C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2327C1D0Ev,_ZThn44_N7S2327C1D0Ev)();
extern void _ZN8S2327C103v21Ev();
extern void _ZN8S2327C103v22Ev();
extern void _ZN8S2327C103v23Ev();
extern void _ZN10S2327C9_nt3v24Ev();
extern void _ZN10S2327C9_nt3v25Ev();
extern void _ZN10S2327C9_nt3v26Ev();
extern void _ZN10S2327C8_nt3v27Ev();
extern void _ZN10S2327C8_nt3v28Ev();
extern void _ZN10S2327C8_nt3v29Ev();
extern void _ZN10S2327C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2327C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2327C1[0]),
  (VTBL_ENTRY)&_ZN7S2327C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2327C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2327C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2327C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2327C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN7S2327C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2327C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2327C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2327C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2327C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2327C1D1Ev,_ZThn28_N7S2327C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2327C1D0Ev,_ZThn28_N7S2327C1D0Ev),
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2327C7_nt3v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2327C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2327C1D1Ev,_ZThn44_N7S2327C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2327C1D0Ev,_ZThn44_N7S2327C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2327C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2327C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2327C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2327C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI7S2327C1[];
extern  VTBL_ENTRY _ZTV7S2327C1[];
Class_Descriptor cd_S2327C1 = {  "S2327C1", // class name
  bases_S2327C1, 7,
  &(vtc_S2327C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,196), // object size
  NSPAIRA(_ZTI7S2327C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2327C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2334C4  {
  ::S22028C11_nt s2334c4f0;
  int s2334c4f1[2];
  char s2334c4f2;
  virtual  ~S2334C4(); // _ZN7S2334C4D1Ev
  virtual void  v5(); // _ZN7S2334C42v5Ev
  virtual void  v6(); // _ZN7S2334C42v6Ev
  virtual void  v7(); // _ZN7S2334C42v7Ev
  S2334C4(); // tgen
};
//SIG(-1 S2334C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2334C4 ::~S2334C4(){ note_dtor("S2334C4", this);}
void  S2334C4 ::v5(){vfunc_called(this, "_ZN7S2334C42v5Ev");}
void  S2334C4 ::v6(){vfunc_called(this, "_ZN7S2334C42v6Ev");}
void  S2334C4 ::v7(){vfunc_called(this, "_ZN7S2334C42v7Ev");}
S2334C4 ::S2334C4(){ note_ctor("S2334C4", this);} // tgen

static void Test_S2334C4()
{
  extern Class_Descriptor cd_S2334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2334C4, buf);
    S2334C4 *dp, &lv = *(dp=new (buf) S2334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2334C4)");
    check_field_offset(lv, s2334c4f0, ABISELECT(8,4), "S2334C4.s2334c4f0");
    check_field_offset(lv, s2334c4f1, ABISELECT(24,16), "S2334C4.s2334c4f1");
    check_field_offset(lv, s2334c4f2, ABISELECT(32,24), "S2334C4.s2334c4f2");
    test_class_info(&lv, &cd_S2334C4);
    dp->~S2334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2334C4(Test_S2334C4, "S2334C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2334C4C1Ev();
extern void _ZN7S2334C4D1Ev();
Name_Map name_map_S2334C4[] = {
  NSPAIR(_ZN7S2334C4C1Ev),
  NSPAIR(_ZN7S2334C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2334C4[];
extern void _ZN7S2334C4D1Ev();
extern void _ZN7S2334C4D0Ev();
extern void _ZN7S2334C42v5Ev();
extern void _ZN7S2334C42v6Ev();
extern void _ZN7S2334C42v7Ev();
static  VTBL_ENTRY vtc_S2334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2334C4[0]),
  (VTBL_ENTRY)&_ZN7S2334C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2334C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2334C4[];
extern  VTBL_ENTRY _ZTV7S2334C4[];
Class_Descriptor cd_S2334C4 = {  "S2334C4", // class name
  0,0,//no base classes
  &(vtc_S2334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2334C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2334C4),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  S2334C7  {
  virtual  ~S2334C7(); // _ZN7S2334C7D1Ev
  virtual void  v8(); // _ZN7S2334C72v8Ev
  virtual void  v9(); // _ZN7S2334C72v9Ev
  virtual void  v10(); // _ZN7S2334C73v10Ev
  S2334C7(); // tgen
};
//SIG(-1 S2334C7) C1{ vd v1 v2 v3}


 S2334C7 ::~S2334C7(){ note_dtor("S2334C7", this);}
void  S2334C7 ::v8(){vfunc_called(this, "_ZN7S2334C72v8Ev");}
void  S2334C7 ::v9(){vfunc_called(this, "_ZN7S2334C72v9Ev");}
void  S2334C7 ::v10(){vfunc_called(this, "_ZN7S2334C73v10Ev");}
S2334C7 ::S2334C7(){ note_ctor("S2334C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S2334C7C1Ev();
extern void _ZN7S2334C7D1Ev();
Name_Map name_map_S2334C7[] = {
  NSPAIR(_ZN7S2334C7C1Ev),
  NSPAIR(_ZN7S2334C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2334C7[];
extern void _ZN7S2334C7D1Ev();
extern void _ZN7S2334C7D0Ev();
extern void _ZN7S2334C72v8Ev();
extern void _ZN7S2334C72v9Ev();
extern void _ZN7S2334C73v10Ev();
static  VTBL_ENTRY vtc_S2334C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2334C7[0]),
  (VTBL_ENTRY)&_ZN7S2334C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2334C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2334C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2334C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2334C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2334C7[];
extern  VTBL_ENTRY _ZTV7S2334C7[];
Class_Descriptor cd_S2334C7 = {  "S2334C7", // class name
  0,0,//no base classes
  &(vtc_S2334C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2334C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2334C7),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  S2334C3  : S2334C4 , S2334C7 {
  void *s2334c3f0;
  char s2334c3f1;
  int s2334c3f2;
  virtual  ~S2334C3(); // _ZN7S2334C3D1Ev
  virtual void  v11(); // _ZN7S2334C33v11Ev
  virtual void  v12(); // _ZN7S2334C33v12Ev
  virtual void  v13(); // _ZN7S2334C33v13Ev
  virtual void  v14(); // _ZN7S2334C33v14Ev
  virtual void  v15(); // _ZN7S2334C33v15Ev
  virtual void  v16(); // _ZN7S2334C33v16Ev
  virtual void  v17(); // _ZN7S2334C33v17Ev
  virtual void  v18(); // _ZN7S2334C33v18Ev
  virtual void  v19(); // _ZN7S2334C33v19Ev
  virtual void  v20(); // _ZN7S2334C33v20Ev
  S2334C3(); // tgen
};
//SIG(-1 S2334C3) C1{ BC2{ vd v11 v12 v13 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} BC5{ vd v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp Fc Fi}


 S2334C3 ::~S2334C3(){ note_dtor("S2334C3", this);}
void  S2334C3 ::v11(){vfunc_called(this, "_ZN7S2334C33v11Ev");}
void  S2334C3 ::v12(){vfunc_called(this, "_ZN7S2334C33v12Ev");}
void  S2334C3 ::v13(){vfunc_called(this, "_ZN7S2334C33v13Ev");}
void  S2334C3 ::v14(){vfunc_called(this, "_ZN7S2334C33v14Ev");}
void  S2334C3 ::v15(){vfunc_called(this, "_ZN7S2334C33v15Ev");}
void  S2334C3 ::v16(){vfunc_called(this, "_ZN7S2334C33v16Ev");}
void  S2334C3 ::v17(){vfunc_called(this, "_ZN7S2334C33v17Ev");}
void  S2334C3 ::v18(){vfunc_called(this, "_ZN7S2334C33v18Ev");}
void  S2334C3 ::v19(){vfunc_called(this, "_ZN7S2334C33v19Ev");}
void  S2334C3 ::v20(){vfunc_called(this, "_ZN7S2334C33v20Ev");}
S2334C3 ::S2334C3(){ note_ctor("S2334C3", this);} // tgen

static void Test_S2334C3()
{
  extern Class_Descriptor cd_S2334C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S2334C3, buf);
    S2334C3 *dp, &lv = *(dp=new (buf) S2334C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S2334C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2334C3)");
    check_base_class_offset(lv, (S2334C4*), 0, "S2334C3");
    check_base_class_offset(lv, (S2334C7*), ABISELECT(40,28), "S2334C3");
    check_field_offset(lv, s2334c3f0, ABISELECT(48,32), "S2334C3.s2334c3f0");
    check_field_offset(lv, s2334c3f1, ABISELECT(56,36), "S2334C3.s2334c3f1");
    check_field_offset(lv, s2334c3f2, ABISELECT(60,40), "S2334C3.s2334c3f2");
    test_class_info(&lv, &cd_S2334C3);
    dp->~S2334C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2334C3(Test_S2334C3, "S2334C3", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S2334C3C1Ev();
extern void _ZN7S2334C3D1Ev();
Name_Map name_map_S2334C3[] = {
  NSPAIR(_ZN7S2334C3C1Ev),
  NSPAIR(_ZN7S2334C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2334C4;
extern VTBL_ENTRY _ZTI7S2334C4[];
extern  VTBL_ENTRY _ZTV7S2334C4[];
extern Class_Descriptor cd_S2334C7;
extern VTBL_ENTRY _ZTI7S2334C7[];
extern  VTBL_ENTRY _ZTV7S2334C7[];
static Base_Class bases_S2334C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2334C7,    ABISELECT(40,28), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2334C3[];
extern void _ZN7S2334C3D1Ev();
extern void _ZN7S2334C3D0Ev();
extern void _ZN7S2334C42v5Ev();
extern void _ZN7S2334C42v6Ev();
extern void _ZN7S2334C42v7Ev();
extern void _ZN7S2334C33v11Ev();
extern void _ZN7S2334C33v12Ev();
extern void _ZN7S2334C33v13Ev();
extern void _ZN7S2334C33v14Ev();
extern void _ZN7S2334C33v15Ev();
extern void _ZN7S2334C33v16Ev();
extern void _ZN7S2334C33v17Ev();
extern void _ZN7S2334C33v18Ev();
extern void _ZN7S2334C33v19Ev();
extern void _ZN7S2334C33v20Ev();
extern void ABISELECT(_ZThn40_N7S2334C3D1Ev,_ZThn28_N7S2334C3D1Ev)();
extern void ABISELECT(_ZThn40_N7S2334C3D0Ev,_ZThn28_N7S2334C3D0Ev)();
extern void _ZN7S2334C72v8Ev();
extern void _ZN7S2334C72v9Ev();
extern void _ZN7S2334C73v10Ev();
static  VTBL_ENTRY vtc_S2334C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2334C3[0]),
  (VTBL_ENTRY)&_ZN7S2334C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2334C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v20Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2334C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2334C3D1Ev,_ZThn28_N7S2334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2334C3D0Ev,_ZThn28_N7S2334C3D0Ev),
  (VTBL_ENTRY)&_ZN7S2334C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2334C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2334C73v10Ev,
};
extern VTBL_ENTRY _ZTI7S2334C3[];
extern  VTBL_ENTRY _ZTV7S2334C3[];
Class_Descriptor cd_S2334C3 = {  "S2334C3", // class name
  bases_S2334C3, 2,
  &(vtc_S2334C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S2334C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2334C3),24, //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  S2334C10  {
  virtual  ~S2334C10(); // _ZN8S2334C10D1Ev
  virtual void  v21(); // _ZN8S2334C103v21Ev
  virtual void  v22(); // _ZN8S2334C103v22Ev
  virtual void  v23(); // _ZN8S2334C103v23Ev
  S2334C10(); // tgen
};
//SIG(-1 S2334C10) C1{ vd v1 v2 v3}


 S2334C10 ::~S2334C10(){ note_dtor("S2334C10", this);}
void  S2334C10 ::v21(){vfunc_called(this, "_ZN8S2334C103v21Ev");}
void  S2334C10 ::v22(){vfunc_called(this, "_ZN8S2334C103v22Ev");}
void  S2334C10 ::v23(){vfunc_called(this, "_ZN8S2334C103v23Ev");}
S2334C10 ::S2334C10(){ note_ctor("S2334C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S2334C10C1Ev();
extern void _ZN8S2334C10D1Ev();
Name_Map name_map_S2334C10[] = {
  NSPAIR(_ZN8S2334C10C1Ev),
  NSPAIR(_ZN8S2334C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2334C10[];
extern void _ZN8S2334C10D1Ev();
extern void _ZN8S2334C10D0Ev();
extern void _ZN8S2334C103v21Ev();
extern void _ZN8S2334C103v22Ev();
extern void _ZN8S2334C103v23Ev();
static  VTBL_ENTRY vtc_S2334C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2334C10[0]),
  (VTBL_ENTRY)&_ZN8S2334C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2334C10D0Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v23Ev,
};
extern VTBL_ENTRY _ZTI8S2334C10[];
extern  VTBL_ENTRY _ZTV8S2334C10[];
Class_Descriptor cd_S2334C10 = {  "S2334C10", // class name
  0,0,//no base classes
  &(vtc_S2334C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2334C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2334C10),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  S2334C9_nt  : S2334C10 {
  ::S22028C26_nt s2334c9f0;
  ::S8516C3_nt s2334c9f1;
  char s2334c9f2;
  virtual  ~S2334C9_nt(); // _ZN10S2334C9_ntD1Ev
  virtual void  v24(); // _ZN10S2334C9_nt3v24Ev
  virtual void  v25(); // _ZN10S2334C9_nt3v25Ev
  virtual void  v26(); // _ZN10S2334C9_nt3v26Ev
  S2334C9_nt(); // tgen
};
//SIG(-1 S2334C9_nt) C1{ BC2{ vd v4 v5 v6} vd v1 v2 v3 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FC6{ Fl[4]}} Fc}


 S2334C9_nt ::~S2334C9_nt(){ note_dtor("S2334C9_nt", this);}
void  S2334C9_nt ::v24(){vfunc_called(this, "_ZN10S2334C9_nt3v24Ev");}
void  S2334C9_nt ::v25(){vfunc_called(this, "_ZN10S2334C9_nt3v25Ev");}
void  S2334C9_nt ::v26(){vfunc_called(this, "_ZN10S2334C9_nt3v26Ev");}
S2334C9_nt ::S2334C9_nt(){ note_ctor("S2334C9_nt", this);} // tgen

//skip512 S2334C9_nt

#else // __cplusplus

extern void _ZN10S2334C9_ntC1Ev();
extern void _ZN10S2334C9_ntD1Ev();
Name_Map name_map_S2334C9_nt[] = {
  NSPAIR(_ZN10S2334C9_ntC1Ev),
  NSPAIR(_ZN10S2334C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2334C10;
extern VTBL_ENTRY _ZTI8S2334C10[];
extern  VTBL_ENTRY _ZTV8S2334C10[];
static Base_Class bases_S2334C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2334C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2334C9_nt[];
extern void _ZN10S2334C9_ntD1Ev();
extern void _ZN10S2334C9_ntD0Ev();
extern void _ZN8S2334C103v21Ev();
extern void _ZN8S2334C103v22Ev();
extern void _ZN8S2334C103v23Ev();
extern void _ZN10S2334C9_nt3v24Ev();
extern void _ZN10S2334C9_nt3v25Ev();
extern void _ZN10S2334C9_nt3v26Ev();
static  VTBL_ENTRY vtc_S2334C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2334C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S2334C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S2334C9_nt[];
VTBL_ENTRY *P__ZTI10S2334C9_nt = _ZTI10S2334C9_nt; 
extern  VTBL_ENTRY _ZTV10S2334C9_nt[];
Class_Descriptor cd_S2334C9_nt = {  "S2334C9_nt", // class name
  bases_S2334C9_nt, 1,
  &(vtc_S2334C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI10S2334C9_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2334C9_nt),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  S2334C8_nt  : S2334C9_nt {
  virtual  ~S2334C8_nt(); // _ZN10S2334C8_ntD1Ev
  virtual void  v27(); // _ZN10S2334C8_nt3v27Ev
  virtual void  v28(); // _ZN10S2334C8_nt3v28Ev
  virtual void  v29(); // _ZN10S2334C8_nt3v29Ev
  virtual void  v30(); // _ZN10S2334C8_nt3v30Ev
  S2334C8_nt(); // tgen
};
//SIG(-1 S2334C8_nt) C1{ BC2{ BC3{ vd v5 v6 v7} vd v8 v9 v10 FC4{ m Fp Fi[2] FC5{ m}} FC6{ m FC7{ Fl[4]}} Fc} vd v1 v2 v3 v4}


 S2334C8_nt ::~S2334C8_nt(){ note_dtor("S2334C8_nt", this);}
void  S2334C8_nt ::v27(){vfunc_called(this, "_ZN10S2334C8_nt3v27Ev");}
void  S2334C8_nt ::v28(){vfunc_called(this, "_ZN10S2334C8_nt3v28Ev");}
void  S2334C8_nt ::v29(){vfunc_called(this, "_ZN10S2334C8_nt3v29Ev");}
void  S2334C8_nt ::v30(){vfunc_called(this, "_ZN10S2334C8_nt3v30Ev");}
S2334C8_nt ::S2334C8_nt(){ note_ctor("S2334C8_nt", this);} // tgen

//skip512 S2334C8_nt

#else // __cplusplus

extern void _ZN10S2334C8_ntC1Ev();
extern void _ZN10S2334C8_ntD1Ev();
Name_Map name_map_S2334C8_nt[] = {
  NSPAIR(_ZN10S2334C8_ntC1Ev),
  NSPAIR(_ZN10S2334C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2334C10;
extern VTBL_ENTRY _ZTI8S2334C10[];
extern  VTBL_ENTRY _ZTV8S2334C10[];
extern Class_Descriptor cd_S2334C9_nt;
extern VTBL_ENTRY _ZTI10S2334C9_nt[];
extern  VTBL_ENTRY _ZTV10S2334C9_nt[];
static Base_Class bases_S2334C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2334C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2334C9_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 _ZTI10S2334C8_nt[];
extern void _ZN10S2334C8_ntD1Ev();
extern void _ZN10S2334C8_ntD0Ev();
extern void _ZN8S2334C103v21Ev();
extern void _ZN8S2334C103v22Ev();
extern void _ZN8S2334C103v23Ev();
extern void _ZN10S2334C9_nt3v24Ev();
extern void _ZN10S2334C9_nt3v25Ev();
extern void _ZN10S2334C9_nt3v26Ev();
extern void _ZN10S2334C8_nt3v27Ev();
extern void _ZN10S2334C8_nt3v28Ev();
extern void _ZN10S2334C8_nt3v29Ev();
extern void _ZN10S2334C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2334C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2334C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S2334C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2334C8_nt[];
VTBL_ENTRY *P__ZTI10S2334C8_nt = _ZTI10S2334C8_nt; 
extern  VTBL_ENTRY _ZTV10S2334C8_nt[];
Class_Descriptor cd_S2334C8_nt = {  "S2334C8_nt", // class name
  bases_S2334C8_nt, 2,
  &(vtc_S2334C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI10S2334C8_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2334C8_nt),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  S2334C2_nt  : S2334C3 , S2334C8_nt {
  int s2334c2f0[3];
  char s2334c2f1;
  ::S22028C13_nt s2334c2f2;
  virtual  ~S2334C2_nt(); // _ZN10S2334C2_ntD1Ev
  virtual void  v31(); // _ZN10S2334C2_nt3v31Ev
  virtual void  v32(); // _ZN10S2334C2_nt3v32Ev
  virtual void  v33(); // _ZN10S2334C2_nt3v33Ev
  virtual void  v34(); // _ZN10S2334C2_nt3v34Ev
  virtual void  v35(); // _ZN10S2334C2_nt3v35Ev
  virtual void  v36(); // _ZN10S2334C2_nt3v36Ev
  S2334C2_nt(); // tgen
};
//SIG(-1 S2334C2_nt) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} BC6{ vd v10 v11 v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp Fc Fi} BC7{ BC8{ BC9{ vd v23 v24 v25} vd v26 v27 v28 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m FC13{ Fl[4]}} Fc} vd v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 Fi[3] Fc FC14{ BC15{ m Fp Fi FC5 FC11}}}


 S2334C2_nt ::~S2334C2_nt(){ note_dtor("S2334C2_nt", this);}
void  S2334C2_nt ::v31(){vfunc_called(this, "_ZN10S2334C2_nt3v31Ev");}
void  S2334C2_nt ::v32(){vfunc_called(this, "_ZN10S2334C2_nt3v32Ev");}
void  S2334C2_nt ::v33(){vfunc_called(this, "_ZN10S2334C2_nt3v33Ev");}
void  S2334C2_nt ::v34(){vfunc_called(this, "_ZN10S2334C2_nt3v34Ev");}
void  S2334C2_nt ::v35(){vfunc_called(this, "_ZN10S2334C2_nt3v35Ev");}
void  S2334C2_nt ::v36(){vfunc_called(this, "_ZN10S2334C2_nt3v36Ev");}
S2334C2_nt ::S2334C2_nt(){ note_ctor("S2334C2_nt", this);} // tgen

//skip512 S2334C2_nt

#else // __cplusplus

extern void _ZN10S2334C2_ntC1Ev();
extern void _ZN10S2334C2_ntD1Ev();
Name_Map name_map_S2334C2_nt[] = {
  NSPAIR(_ZN10S2334C2_ntC1Ev),
  NSPAIR(_ZN10S2334C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2334C4;
extern VTBL_ENTRY _ZTI7S2334C4[];
extern  VTBL_ENTRY _ZTV7S2334C4[];
extern Class_Descriptor cd_S2334C7;
extern VTBL_ENTRY _ZTI7S2334C7[];
extern  VTBL_ENTRY _ZTV7S2334C7[];
extern Class_Descriptor cd_S2334C3;
extern VTBL_ENTRY _ZTI7S2334C3[];
extern  VTBL_ENTRY _ZTV7S2334C3[];
extern Class_Descriptor cd_S2334C10;
extern VTBL_ENTRY _ZTI8S2334C10[];
extern  VTBL_ENTRY _ZTV8S2334C10[];
extern Class_Descriptor cd_S2334C9_nt;
extern VTBL_ENTRY _ZTI10S2334C9_nt[];
extern  VTBL_ENTRY _ZTV10S2334C9_nt[];
extern Class_Descriptor cd_S2334C8_nt;
extern VTBL_ENTRY _ZTI10S2334C8_nt[];
extern  VTBL_ENTRY _ZTV10S2334C8_nt[];
static Base_Class bases_S2334C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2334C7,    ABISELECT(40,28), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2334C10,    ABISELECT(64,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2334C9_nt,    ABISELECT(64,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2334C8_nt,    ABISELECT(64,44), //bcp->offset
    30, //bcp->virtual_function_table_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 _ZTI10S2334C2_nt[];
extern void _ZN10S2334C2_ntD1Ev();
extern void _ZN10S2334C2_ntD0Ev();
extern void _ZN7S2334C42v5Ev();
extern void _ZN7S2334C42v6Ev();
extern void _ZN7S2334C42v7Ev();
extern void _ZN7S2334C33v11Ev();
extern void _ZN7S2334C33v12Ev();
extern void _ZN7S2334C33v13Ev();
extern void _ZN7S2334C33v14Ev();
extern void _ZN7S2334C33v15Ev();
extern void _ZN7S2334C33v16Ev();
extern void _ZN7S2334C33v17Ev();
extern void _ZN7S2334C33v18Ev();
extern void _ZN7S2334C33v19Ev();
extern void _ZN7S2334C33v20Ev();
extern void _ZN10S2334C2_nt3v31Ev();
extern void _ZN10S2334C2_nt3v32Ev();
extern void _ZN10S2334C2_nt3v33Ev();
extern void _ZN10S2334C2_nt3v34Ev();
extern void _ZN10S2334C2_nt3v35Ev();
extern void _ZN10S2334C2_nt3v36Ev();
extern void ABISELECT(_ZThn40_N10S2334C2_ntD1Ev,_ZThn28_N10S2334C2_ntD1Ev)();
extern void ABISELECT(_ZThn40_N10S2334C2_ntD0Ev,_ZThn28_N10S2334C2_ntD0Ev)();
extern void _ZN7S2334C72v8Ev();
extern void _ZN7S2334C72v9Ev();
extern void _ZN7S2334C73v10Ev();
extern void ABISELECT(_ZThn64_N10S2334C2_ntD1Ev,_ZThn44_N10S2334C2_ntD1Ev)();
extern void ABISELECT(_ZThn64_N10S2334C2_ntD0Ev,_ZThn44_N10S2334C2_ntD0Ev)();
extern void _ZN8S2334C103v21Ev();
extern void _ZN8S2334C103v22Ev();
extern void _ZN8S2334C103v23Ev();
extern void _ZN10S2334C9_nt3v24Ev();
extern void _ZN10S2334C9_nt3v25Ev();
extern void _ZN10S2334C9_nt3v26Ev();
extern void _ZN10S2334C8_nt3v27Ev();
extern void _ZN10S2334C8_nt3v28Ev();
extern void _ZN10S2334C8_nt3v29Ev();
extern void _ZN10S2334C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2334C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2334C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2334C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v20Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v36Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI10S2334C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2334C2_ntD1Ev,_ZThn28_N10S2334C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N10S2334C2_ntD0Ev,_ZThn28_N10S2334C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN7S2334C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2334C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2334C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI10S2334C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2334C2_ntD1Ev,_ZThn44_N10S2334C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N10S2334C2_ntD0Ev,_ZThn44_N10S2334C2_ntD0Ev),
  (VTBL_ENTRY)&_ZN8S2334C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI10S2334C2_nt[];
VTBL_ENTRY *P__ZTI10S2334C2_nt = _ZTI10S2334C2_nt; 
extern  VTBL_ENTRY _ZTV10S2334C2_nt[];
Class_Descriptor cd_S2334C2_nt = {  "S2334C2_nt", // class name
  bases_S2334C2_nt, 6,
  &(vtc_S2334C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,112), // object size
  NSPAIRA(_ZTI10S2334C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S2334C2_nt),44, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2334C1  : S2334C2_nt {
  ::S2327C19_nt s2334c1f0;
  ::S2327C20_nt s2334c1f1;
  int s2334c1f2;
  virtual  ~S2334C1(); // _ZN7S2334C1D1Ev
  virtual void  v1(); // _ZN7S2334C12v1Ev
  virtual void  v2(); // _ZN7S2334C12v2Ev
  virtual void  v3(); // _ZN7S2334C12v3Ev
  virtual void  v4(); // _ZN7S2334C12v4Ev
  S2334C1(); // tgen
};
//SIG(1 S2334C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} BC7{ vd v8 v9 v10} vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp Fc Fi} BC8{ BC9{ BC10{ vd v21 v22 v23} vd v24 v25 v26 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m FC14{ Fl[4]}} Fc} vd v27 v28 v29 v30} vd v31 v32 v33 v34 v35 v36 Fi[3] Fc FC15{ BC16{ m Fp Fi FC6 FC12}}} vd v1 v2 v3 v4 FC17{ vd v37 v38 v39 v40 Fp} FC18{ BC19{ vd v42 FC20{ m FC16} Fp[3] Fc} v41 Fp} Fi}


 S2334C1 ::~S2334C1(){ note_dtor("S2334C1", this);}
void  S2334C1 ::v1(){vfunc_called(this, "_ZN7S2334C12v1Ev");}
void  S2334C1 ::v2(){vfunc_called(this, "_ZN7S2334C12v2Ev");}
void  S2334C1 ::v3(){vfunc_called(this, "_ZN7S2334C12v3Ev");}
void  S2334C1 ::v4(){vfunc_called(this, "_ZN7S2334C12v4Ev");}
S2334C1 ::S2334C1(){ note_ctor("S2334C1", this);} // tgen

static void Test_S2334C1()
{
  extern Class_Descriptor cd_S2334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,41)];
    init_test(&cd_S2334C1, buf);
    S2334C1 *dp, &lv = *(dp=new (buf) S2334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,160), "sizeof(S2334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2334C1)");
    check_base_class_offset(lv, (S2334C4*)(S2334C3*)(S2334C2_nt*), 0, "S2334C1");
    check_base_class_offset(lv, (S2334C7*)(S2334C3*)(S2334C2_nt*), ABISELECT(40,28), "S2334C1");
    check_base_class_offset(lv, (S2334C3*)(S2334C2_nt*), 0, "S2334C1");
    check_base_class_offset(lv, (S2334C10*)(S2334C9_nt*)(S2334C8_nt*)(S2334C2_nt*), ABISELECT(64,44), "S2334C1");
    check_base_class_offset(lv, (S2334C9_nt*)(S2334C8_nt*)(S2334C2_nt*), ABISELECT(64,44), "S2334C1");
    check_base_class_offset(lv, (S2334C8_nt*)(S2334C2_nt*), ABISELECT(64,44), "S2334C1");
    check_base_class_offset(lv, (S2334C2_nt*), 0, "S2334C1");
    check_field_offset(lv, s2334c1f0, ABISELECT(168,112), "S2334C1.s2334c1f0");
    check_field_offset(lv, s2334c1f1, ABISELECT(184,120), "S2334C1.s2334c1f1");
    check_field_offset(lv, s2334c1f2, ABISELECT(248,156), "S2334C1.s2334c1f2");
    test_class_info(&lv, &cd_S2334C1);
    dp->~S2334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2334C1(Test_S2334C1, "S2334C1", ABISELECT(256,160));

#else // __cplusplus

extern void _ZN7S2334C1C1Ev();
extern void _ZN7S2334C1D1Ev();
Name_Map name_map_S2334C1[] = {
  NSPAIR(_ZN7S2334C1C1Ev),
  NSPAIR(_ZN7S2334C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2334C4;
extern VTBL_ENTRY _ZTI7S2334C4[];
extern  VTBL_ENTRY _ZTV7S2334C4[];
extern Class_Descriptor cd_S2334C7;
extern VTBL_ENTRY _ZTI7S2334C7[];
extern  VTBL_ENTRY _ZTV7S2334C7[];
extern Class_Descriptor cd_S2334C3;
extern VTBL_ENTRY _ZTI7S2334C3[];
extern  VTBL_ENTRY _ZTV7S2334C3[];
extern Class_Descriptor cd_S2334C10;
extern VTBL_ENTRY _ZTI8S2334C10[];
extern  VTBL_ENTRY _ZTV8S2334C10[];
extern Class_Descriptor cd_S2334C9_nt;
extern VTBL_ENTRY _ZTI10S2334C9_nt[];
extern  VTBL_ENTRY _ZTV10S2334C9_nt[];
extern Class_Descriptor cd_S2334C8_nt;
extern VTBL_ENTRY _ZTI10S2334C8_nt[];
extern  VTBL_ENTRY _ZTV10S2334C8_nt[];
extern Class_Descriptor cd_S2334C2_nt;
extern VTBL_ENTRY _ZTI10S2334C2_nt[];
extern  VTBL_ENTRY _ZTV10S2334C2_nt[];
static Base_Class bases_S2334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2334C7,    ABISELECT(40,28), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_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_S2334C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2334C10,    ABISELECT(64,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2334C9_nt,    ABISELECT(64,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2334C8_nt,    ABISELECT(64,44), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2334C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2334C1[];
extern void _ZN7S2334C1D1Ev();
extern void _ZN7S2334C1D0Ev();
extern void _ZN7S2334C42v5Ev();
extern void _ZN7S2334C42v6Ev();
extern void _ZN7S2334C42v7Ev();
extern void _ZN7S2334C33v11Ev();
extern void _ZN7S2334C33v12Ev();
extern void _ZN7S2334C33v13Ev();
extern void _ZN7S2334C33v14Ev();
extern void _ZN7S2334C33v15Ev();
extern void _ZN7S2334C33v16Ev();
extern void _ZN7S2334C33v17Ev();
extern void _ZN7S2334C33v18Ev();
extern void _ZN7S2334C33v19Ev();
extern void _ZN7S2334C33v20Ev();
extern void _ZN10S2334C2_nt3v31Ev();
extern void _ZN10S2334C2_nt3v32Ev();
extern void _ZN10S2334C2_nt3v33Ev();
extern void _ZN10S2334C2_nt3v34Ev();
extern void _ZN10S2334C2_nt3v35Ev();
extern void _ZN10S2334C2_nt3v36Ev();
extern void _ZN7S2334C12v1Ev();
extern void _ZN7S2334C12v2Ev();
extern void _ZN7S2334C12v3Ev();
extern void _ZN7S2334C12v4Ev();
extern void ABISELECT(_ZThn40_N7S2334C1D1Ev,_ZThn28_N7S2334C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S2334C1D0Ev,_ZThn28_N7S2334C1D0Ev)();
extern void _ZN7S2334C72v8Ev();
extern void _ZN7S2334C72v9Ev();
extern void _ZN7S2334C73v10Ev();
extern void ABISELECT(_ZThn64_N7S2334C1D1Ev,_ZThn44_N7S2334C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S2334C1D0Ev,_ZThn44_N7S2334C1D0Ev)();
extern void _ZN8S2334C103v21Ev();
extern void _ZN8S2334C103v22Ev();
extern void _ZN8S2334C103v23Ev();
extern void _ZN10S2334C9_nt3v24Ev();
extern void _ZN10S2334C9_nt3v25Ev();
extern void _ZN10S2334C9_nt3v26Ev();
extern void _ZN10S2334C8_nt3v27Ev();
extern void _ZN10S2334C8_nt3v28Ev();
extern void _ZN10S2334C8_nt3v29Ev();
extern void _ZN10S2334C8_nt3v30Ev();
static  VTBL_ENTRY vtc_S2334C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2334C1[0]),
  (VTBL_ENTRY)&_ZN7S2334C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2334C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2334C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2334C33v20Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2334C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN7S2334C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2334C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2334C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2334C12v4Ev,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI7S2334C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2334C1D1Ev,_ZThn28_N7S2334C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S2334C1D0Ev,_ZThn28_N7S2334C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2334C72v8Ev,
  (VTBL_ENTRY)&_ZN7S2334C72v9Ev,
  (VTBL_ENTRY)&_ZN7S2334C73v10Ev,
  ABISELECT(-64,-44),
  (VTBL_ENTRY)&(_ZTI7S2334C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2334C1D1Ev,_ZThn44_N7S2334C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S2334C1D0Ev,_ZThn44_N7S2334C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2334C103v21Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v22Ev,
  (VTBL_ENTRY)&_ZN8S2334C103v23Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2334C9_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2334C8_nt3v30Ev,
};
extern VTBL_ENTRY _ZTI7S2334C1[];
extern  VTBL_ENTRY _ZTV7S2334C1[];
Class_Descriptor cd_S2334C1 = {  "S2334C1", // class name
  bases_S2334C1, 7,
  &(vtc_S2334C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,160), // object size
  NSPAIRA(_ZTI7S2334C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2334C1),48, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C7_nt  {
  void *s16253c7f0;
  int s16253c7f1;
  void  mf16253c7(); // _ZN11S16253C7_nt9mf16253c7Ev
};
//SIG(-1 S16253C7_nt) C1{ m Fp Fi}


void  S16253C7_nt ::mf16253c7(){}

//skip512 S16253C7_nt

#else // __cplusplus

Class_Descriptor cd_S16253C7_nt = {  "S16253C7_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  S16253C5  : S3280C7_nt {
  ::S16253C7_nt s16253c5f0;
};
//SIG(-1 S16253C5) C1{ BC2{ m Fp Fi[2]} FC3{ m Fp Fi}}



static void Test_S16253C5()
{
  extern Class_Descriptor cd_S16253C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S16253C5, buf);
    S16253C5 &lv = *(new (buf) S16253C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S16253C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16253C5)");
    check_base_class_offset(lv, (S3280C7_nt*), 0, "S16253C5");
    check_field_offset(lv, s16253c5f0, ABISELECT(16,12), "S16253C5.s16253c5f0");
    test_class_info(&lv, &cd_S16253C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16253C5(Test_S16253C5, "S16253C5", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S3280C7_nt;
static Base_Class bases_S16253C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3280C7_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_S16253C5 = {  "S16253C5", // class name
  bases_S16253C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // 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  S16253C11_nt  {
  ::S22028C33_nt s16253c11f0;
  ::S22028C33_nt s16253c11f1;
  void  mf16253c11(); // _ZN12S16253C11_nt10mf16253c11Ev
};
//SIG(-1 S16253C11_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2}


void  S16253C11_nt ::mf16253c11(){}

//skip512 S16253C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C12_nt  {
  ::S22028C34_nt s16253c12f0;
  void  mf16253c12(); // _ZN12S16253C12_nt10mf16253c12Ev
};
//SIG(-1 S16253C12_nt) C1{ m FC2{ m FL[2]}}


void  S16253C12_nt ::mf16253c12(){}

//skip512 S16253C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C8  {
  ::S22028C33_nt s16253c8f0;
  ::S22028C33_nt s16253c8f1;
  ::S16253C11_nt s16253c8f2;
  char s16253c8f3;
  ::S22028C33_nt s16253c8f4;
  int s16253c8f5[4];
  ::S16253C12_nt s16253c8f6;
  void  mf16253c8(); // _ZN8S16253C89mf16253c8Ev
};
//SIG(-1 S16253C8) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC4{ m FC2 FC2} Fc FC2 Fi[4] FC5{ m FC3}}


void  S16253C8 ::mf16253c8(){}

static void Test_S16253C8()
{
  {
    init_simple_test("S16253C8");
    S16253C8 lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S16253C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16253C8)");
    check_field_offset(lv, s16253c8f0, 0, "S16253C8.s16253c8f0");
    check_field_offset(lv, s16253c8f1, 16, "S16253C8.s16253c8f1");
    check_field_offset(lv, s16253c8f2, 32, "S16253C8.s16253c8f2");
    check_field_offset(lv, s16253c8f3, 64, "S16253C8.s16253c8f3");
    check_field_offset(lv, s16253c8f4, ABISELECT(72,68), "S16253C8.s16253c8f4");
    check_field_offset(lv, s16253c8f5, ABISELECT(88,84), "S16253C8.s16253c8f5");
    check_field_offset(lv, s16253c8f6, ABISELECT(104,100), "S16253C8.s16253c8f6");
  }
}
static Arrange_To_Call_Me vS16253C8(Test_S16253C8, "S16253C8", ABISELECT(120,116));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C15_nt  {
  void *s16253c15f0;
  int s16253c15f1[2];
  void  mf16253c15(); // _ZN12S16253C15_nt10mf16253c15Ev
};
//SIG(-1 S16253C15_nt) C1{ m Fp Fi[2]}


void  S16253C15_nt ::mf16253c15(){}

//skip512 S16253C15_nt

#else // __cplusplus

Class_Descriptor cd_S16253C15_nt = {  "S16253C15_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  S16253C16_nt  {
  ::S22028C26_nt s16253c16f0;
  void  mf16253c16(); // _ZN12S16253C16_nt10mf16253c16Ev
};
//SIG(-1 S16253C16_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}}}


void  S16253C16_nt ::mf16253c16(){}

//skip512 S16253C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C14  : S16253C15_nt {
  ::S16253C16_nt s16253c14f0;
};
//SIG(-1 S16253C14) C1{ BC2{ m Fp Fi[2]} FC3{ m FC4{ m Fp Fi[2] FC5{ m}}}}



static void Test_S16253C14()
{
  extern Class_Descriptor cd_S16253C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S16253C14, buf);
    S16253C14 &lv = *(new (buf) S16253C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S16253C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16253C14)");
    check_base_class_offset(lv, (S16253C15_nt*), 0, "S16253C14");
    check_field_offset(lv, s16253c14f0, ABISELECT(16,12), "S16253C14.s16253c14f0");
    test_class_info(&lv, &cd_S16253C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16253C14(Test_S16253C14, "S16253C14", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S16253C15_nt;
static Base_Class bases_S16253C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16253C15_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_S16253C14 = {  "S16253C14", // class name
  bases_S16253C14, 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  S16253C22  {
  ::S22028C32 s16253c22f0;
  ::S22028C44 s16253c22f1;
  ::S22028C51 s16253c22f2;
  ::S22028C58 s16253c22f3;
  ::S22028C65_nt s16253c22f4;
};
//SIG(-1 S16253C22) C1{ FC2{ m Fi[8] FC3{ m FC4{ m FL[2]}} FC3} FC5{ m Fi[4] FC3 Fi[3]} FC6{ m FC3 FC3 Fi[8]} FC7{ m Fi[15]} FC8{ m Fi[4]}}



static void Test_S16253C22()
{
  {
    init_simple_test("S16253C22");
    S16253C22 lv;
    check2(sizeof(lv), ABISELECT(256,248), "sizeof(S16253C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16253C22)");
    check_field_offset(lv, s16253c22f0, 0, "S16253C22.s16253c22f0");
    check_field_offset(lv, s16253c22f1, 64, "S16253C22.s16253c22f1");
    check_field_offset(lv, s16253c22f2, ABISELECT(112,108), "S16253C22.s16253c22f2");
    check_field_offset(lv, s16253c22f3, ABISELECT(176,172), "S16253C22.s16253c22f3");
    check_field_offset(lv, s16253c22f4, ABISELECT(236,232), "S16253C22.s16253c22f4");
  }
}
static Arrange_To_Call_Me vS16253C22(Test_S16253C22, "S16253C22", ABISELECT(256,248));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C28  {
  char s16253c28f0[2];
  int s16253c28f1;
  char s16253c28f2[2];
  void  mf16253c28(); // _ZN9S16253C2810mf16253c28Ev
};
//SIG(-1 S16253C28) C1{ m Fc[2] Fi Fc[2]}


void  S16253C28 ::mf16253c28(){}

static void Test_S16253C28()
{
  {
    init_simple_test("S16253C28");
    S16253C28 lv;
    check2(sizeof(lv), 12, "sizeof(S16253C28)");
    check2(__alignof__(lv), 4, "__alignof__(S16253C28)");
    check_field_offset(lv, s16253c28f0, 0, "S16253C28.s16253c28f0");
    check_field_offset(lv, s16253c28f1, 4, "S16253C28.s16253c28f1");
    check_field_offset(lv, s16253c28f2, 8, "S16253C28.s16253c28f2");
  }
}
static Arrange_To_Call_Me vS16253C28(Test_S16253C28, "S16253C28", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C29  {
  void *s16253c29f0;
  int s16253c29f1[2];
  void  mf16253c29(); // _ZN9S16253C2910mf16253c29Ev
};
//SIG(-1 S16253C29) C1{ m Fp Fi[2]}


void  S16253C29 ::mf16253c29(){}

static void Test_S16253C29()
{
  {
    init_simple_test("S16253C29");
    S16253C29 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S16253C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16253C29)");
    check_field_offset(lv, s16253c29f0, 0, "S16253C29.s16253c29f0");
    check_field_offset(lv, s16253c29f1, ABISELECT(8,4), "S16253C29.s16253c29f1");
  }
}
static Arrange_To_Call_Me vS16253C29(Test_S16253C29, "S16253C29", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16253C1  {
  ::S22028C11_nt s16253c1f0;
  ::S22028C73 s16253c1f1;
  int s16253c1f2;
  ::S16253C5 s16253c1f3;
  ::S16253C8 s16253c1f4;
  ::S16253C14 s16253c1f5;
  ::S16253C5 s16253c1f6;
  int s16253c1f7[2];
  ::S16253C22 s16253c1f8;
  ::S16253C28 s16253c1f9;
  ::S16253C29 s16253c1f10;
  void *s16253c1f11;
  ::S22028C63 s16253c1f12;
  char s16253c1f13;
  int s16253c1f14;
  char s16253c1f15;
  int s16253c1f16;
  void  mf16253c1(); // _ZN8S16253C19mf16253c1Ev
};
//SIG(1 S16253C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp[2]} Fi FC5{ BC6{ m Fp Fi[2]} FC7{ m Fp Fi}} FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC11{ m FC9 FC9} Fc FC9 Fi[4] FC12{ m FC10}} FC13{ BC14{ m Fp Fi[2]} FC15{ m FC16{ m Fp Fi[2] FC17{ m}}}} FC5 Fi[2] FC18{ FC19{ m Fi[8] FC9 FC9} FC20{ m Fi[4] FC9 Fi[3]} FC21{ m FC9 FC9 Fi[8]} FC22{ m Fi[15]} FC23{ m Fi[4]}} FC24{ m Fc[2] Fi Fc[2]} FC25{ m Fp Fi[2]} Fp FC26{ m Fp[2]} Fc Fi Fc Fi}


void  S16253C1 ::mf16253c1(){}

static void Test_S16253C1()
{
  {
    init_simple_test("S16253C1");
    S16253C1 lv;
    check2(sizeof(lv), ABISELECT(600,516), "sizeof(S16253C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16253C1)");
    check_field_offset(lv, s16253c1f0, 0, "S16253C1.s16253c1f0");
    check_field_offset(lv, s16253c1f1, ABISELECT(16,12), "S16253C1.s16253c1f1");
    check_field_offset(lv, s16253c1f2, ABISELECT(32,20), "S16253C1.s16253c1f2");
    check_field_offset(lv, s16253c1f3, ABISELECT(40,24), "S16253C1.s16253c1f3");
    check_field_offset(lv, s16253c1f4, ABISELECT(72,44), "S16253C1.s16253c1f4");
    check_field_offset(lv, s16253c1f5, ABISELECT(192,160), "S16253C1.s16253c1f5");
    check_field_offset(lv, s16253c1f6, ABISELECT(232,188), "S16253C1.s16253c1f6");
    check_field_offset(lv, s16253c1f7, ABISELECT(264,208), "S16253C1.s16253c1f7");
    check_field_offset(lv, s16253c1f8, ABISELECT(272,216), "S16253C1.s16253c1f8");
    check_field_offset(lv, s16253c1f9, ABISELECT(528,464), "S16253C1.s16253c1f9");
    check_field_offset(lv, s16253c1f10, ABISELECT(544,476), "S16253C1.s16253c1f10");
    check_field_offset(lv, s16253c1f11, ABISELECT(560,488), "S16253C1.s16253c1f11");
    check_field_offset(lv, s16253c1f12, ABISELECT(568,492), "S16253C1.s16253c1f12");
    check_field_offset(lv, s16253c1f13, ABISELECT(584,500), "S16253C1.s16253c1f13");
    check_field_offset(lv, s16253c1f14, ABISELECT(588,504), "S16253C1.s16253c1f14");
    check_field_offset(lv, s16253c1f15, ABISELECT(592,508), "S16253C1.s16253c1f15");
    check_field_offset(lv, s16253c1f16, ABISELECT(596,512), "S16253C1.s16253c1f16");
  }
}
static Arrange_To_Call_Me vS16253C1(Test_S16253C1, "S16253C1", ABISELECT(600,516));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C3  {
  void *s5949c3f0;
  ::S19968C3 s5949c3f1;
  ::S19968C3 s5949c3f2;
  int s5949c3f3[3];
  void *s5949c3f4[6];
  short s5949c3f5;
  ::S19968C4 s5949c3f6;
  virtual  ~S5949C3(); // _ZN7S5949C3D1Ev
  virtual void  v1(); // _ZN7S5949C32v1Ev
  virtual void  v2(); // _ZN7S5949C32v2Ev
  S5949C3(); // tgen
};
//SIG(-1 S5949C3) C1{ vd v1 v2 Fp FC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC2 Fi[3] Fp[6] Fs FU3{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}}


 S5949C3 ::~S5949C3(){ note_dtor("S5949C3", this);}
void  S5949C3 ::v1(){vfunc_called(this, "_ZN7S5949C32v1Ev");}
void  S5949C3 ::v2(){vfunc_called(this, "_ZN7S5949C32v2Ev");}
S5949C3 ::S5949C3(){ note_ctor("S5949C3", this);} // tgen

static void Test_S5949C3()
{
  extern Class_Descriptor cd_S5949C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,113)];
    init_test(&cd_S5949C3, buf);
    S5949C3 *dp, &lv = *(dp=new (buf) S5949C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,448), "sizeof(S5949C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C3)");
    check_field_offset(lv, s5949c3f0, ABISELECT(8,4), "S5949C3.s5949c3f0");
    check_field_offset(lv, s5949c3f1, ABISELECT(16,8), "S5949C3.s5949c3f1");
    check_field_offset(lv, s5949c3f2, ABISELECT(256,148), "S5949C3.s5949c3f2");
    check_field_offset(lv, s5949c3f3, ABISELECT(496,288), "S5949C3.s5949c3f3");
    check_field_offset(lv, s5949c3f4, ABISELECT(512,300), "S5949C3.s5949c3f4");
    check_field_offset(lv, s5949c3f5, ABISELECT(560,324), "S5949C3.s5949c3f5");
    check_field_offset(lv, s5949c3f6, ABISELECT(576,328), "S5949C3.s5949c3f6");
    test_class_info(&lv, &cd_S5949C3);
    dp->~S5949C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C3(Test_S5949C3, "S5949C3", ABISELECT(736,448));

#else // __cplusplus

extern void _ZN7S5949C3C1Ev();
extern void _ZN7S5949C3D1Ev();
Name_Map name_map_S5949C3[] = {
  NSPAIR(_ZN7S5949C3C1Ev),
  NSPAIR(_ZN7S5949C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5949C3[];
extern void _ZN7S5949C3D1Ev();
extern void _ZN7S5949C3D0Ev();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY vtc_S5949C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C3[0]),
  (VTBL_ENTRY)&_ZN7S5949C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
Class_Descriptor cd_S5949C3 = {  "S5949C3", // class name
  0,0,//no base classes
  &(vtc_S5949C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,448), // object size
  NSPAIRA(_ZTI7S5949C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5949C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C6  : virtual S22028C16 , virtual S19968C3 {
  void *s5949c6f0[9];
  ~S5949C6(); // tgen
  S5949C6(); // tgen
};
//SIG(-1 S5949C6) C1{ VBC2{ m} VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]}


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

static void Test_S5949C6()
{
  extern Class_Descriptor cd_S5949C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,46)];
    init_test(&cd_S5949C6, buf);
    S5949C6 *dp, &lv = *(dp=new (buf) S5949C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,180), "sizeof(S5949C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C6)");
    check_base_class_offset(lv, (S22028C16*), 0, "S5949C6");
    check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S5949C6");
    check_field_offset(lv, s5949c6f0, ABISELECT(8,4), "S5949C6.s5949c6f0");
    test_class_info(&lv, &cd_S5949C6);
    dp->~S5949C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C6(Test_S5949C6, "S5949C6", ABISELECT(320,180));

#else // __cplusplus

extern void _ZN7S5949C6C1Ev();
extern void _ZN7S5949C6D1Ev();
Name_Map name_map_S5949C6[] = {
  NSPAIR(_ZN7S5949C6C1Ev),
  NSPAIR(_ZN7S5949C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S5949C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5949C6[];
static  VTBL_ENTRY vtc_S5949C6[] = {
  ABISELECT(80,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern VTBL_ENTRY _ZTV7S5949C6[];
static  VTT_ENTRY vtt_S5949C6[] = {
  {&(_ZTV7S5949C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
Class_Descriptor cd_S5949C6 = {  "S5949C6", // class name
  bases_S5949C6, 2,
  &(vtc_S5949C6[0]), // expected_vtbl_contents
  &(vtt_S5949C6[0]), // expected_vtt_contents
  ABISELECT(320,180), // object size
  NSPAIRA(_ZTI7S5949C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5949C6),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5949C6),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  S5949C9  : virtual S5949C6 {
  int s5949c9f0:21;
  int s5949c9f1;
  virtual  ~S5949C9(); // _ZN7S5949C9D2Ev
  S5949C9(); // tgen
};
//SIG(-1 S5949C9) C1{ VBC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi}


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

static void Test_S5949C9()
{
  extern Class_Descriptor cd_S5949C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S5949C9, buf);
    S5949C9 *dp, &lv = *(dp=new (buf) S5949C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S5949C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C9)");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C9");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(96,52), "S5949C9");
    check_base_class_offset(lv, (S5949C6*), ABISELECT(16,12), "S5949C9");
    set_bf_and_test(lv, s5949c9f0, ABISELECT(8,4), 0, 21, 1, "S5949C9");
    set_bf_and_test(lv, s5949c9f0, ABISELECT(8,4), 0, 21, hide_sll(1LL<<20), "S5949C9");
    check_field_offset(lv, s5949c9f1, ABISELECT(12,8), "S5949C9.s5949c9f1");
    test_class_info(&lv, &cd_S5949C9);
    dp->~S5949C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C9(Test_S5949C9, "S5949C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN7S5949C9C1Ev();
extern void _ZN7S5949C9D2Ev();
Name_Map name_map_S5949C9[] = {
  NSPAIR(_ZN7S5949C9C1Ev),
  NSPAIR(_ZN7S5949C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
static Base_Class bases_S5949C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(96,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
    2, //immediately_derived
  0, 1},
  {&cd_S5949C6,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5949C9[];
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY vtc_S5949C9[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern VTBL_ENTRY _ZTV7S5949C9[];
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9[] = {
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
static  VTT_ENTRY vtt_S5949C9[] = {
  {&(_ZTV7S5949C9[5]),  5,11},
  {&(_ZTV7S5949C9[11]),  11,11},
  {&(_tg__ZTV7S5949C6__7S5949C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
Class_Descriptor cd_S5949C9 = {  "S5949C9", // class name
  bases_S5949C9, 3,
  &(vtc_S5949C9[0]), // expected_vtbl_contents
  &(vtt_S5949C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI7S5949C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S5949C9),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5949C9),3, //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  S5949C8  : virtual S5949C3 , virtual S5949C6 , virtual S5949C9 , S19968C3 {
  virtual void  v3(); // _ZN7S5949C82v3Ev
  ~S5949C8(); // tgen
  S5949C8(); // tgen
};
//SIG(-1 S5949C8) C1{ VBC2{ vd v2 v3 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ VBC5 vd Fi:21 Fi} BC3 v1}


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

static void Test_S5949C8()
{
  extern Class_Descriptor cd_S5949C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(84,197)];
    init_test(&cd_S5949C8, buf);
    S5949C8 *dp, &lv = *(dp=new (buf) S5949C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,784), "sizeof(S5949C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C8)");
    check_base_class_offset(lv, (S5949C3*), ABISELECT(256,144), "S5949C8");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C8");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(1072,632), "S5949C8");
    check_base_class_offset(lv, (S5949C6*), ABISELECT(992,592), "S5949C8");
    check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(992,592), "S5949C8");
    check_base_class_offset(lv, (S5949C9*), ABISELECT(1312,772), "S5949C8");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(16,4), "S5949C8");
    test_class_info(&lv, &cd_S5949C8);
    dp->~S5949C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C8(Test_S5949C8, "S5949C8", ABISELECT(1328,784));

#else // __cplusplus

extern void _ZN7S5949C8C1Ev();
extern void _ZN7S5949C8D1Ev();
Name_Map name_map_S5949C8[] = {
  NSPAIR(_ZN7S5949C8C1Ev),
  NSPAIR(_ZN7S5949C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S5949C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5949C3,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1072,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5949C6,    ABISELECT(992,592), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5949C9,    ABISELECT(1312,772), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5949C8[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn256_N7S5949C8D1Ev,_ZThn144_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn256_N7S5949C8D0Ev,_ZThn144_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn1312_N7S5949C8D1Ev,_ZThn772_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn1312_N7S5949C8D0Ev,_ZThn772_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5949C8[] = {
  ABISELECT(1312,772),
  ABISELECT(1072,632),
  0,
  ABISELECT(992,592),
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
  0,
  0,
  ABISELECT(-256,-144),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  ABISELECT(-1312,-772),
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  ABISELECT(-1312,-772),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S5949C8[];
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C8[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C8[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__7S5949C8[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTT_ENTRY vtt_S5949C8[] = {
  {&(_ZTV7S5949C8[7]),  7,31},
  {&(_ZTV7S5949C8[15]),  15,31},
  {&(_ZTV7S5949C8[23]),  23,31},
  {&(_ZTV7S5949C8[29]),  29,31},
  {&(_tg__ZTV7S5949C6__7S5949C8[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C8[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__7S5949C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S5949C8D0Ev,_ZThn772_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S5949C8D1Ev,_ZThn772_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5949C8D0Ev,_ZThn144_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N7S5949C8D1Ev,_ZThn144_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5949C8 = {  "S5949C8", // class name
  bases_S5949C8, 6,
  &(vtc_S5949C8[0]), // expected_vtbl_contents
  &(vtt_S5949C8[0]), // expected_vtt_contents
  ABISELECT(1328,784), // object size
  NSPAIRA(_ZTI7S5949C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5949C8),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5949C8),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C5  : virtual S19968C3 , virtual S5949C6 , S5949C8 , S5949C9 , S5949C3 {
  int s5949c5f0;
  virtual  ~S5949C5(); // _ZN7S5949C5D2Ev
  S5949C5(); // tgen
};
//SIG(-1 S5949C5) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ VBC4{ m} VBC2 Fp[9]} BC5{ VBC6{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC8{ VBC3 vd Fi:21 Fi} BC2 v3} BC8 BC6 vd Fi}


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

static void Test_S5949C5()
{
  extern Class_Descriptor cd_S5949C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,313)];
    init_test(&cd_S5949C5, buf);
    S5949C5 *dp, &lv = *(dp=new (buf) S5949C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1248), "sizeof(S5949C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C5)");
    /*is_ambiguous_... S5949C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S5949C5");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(1024,608), "S5949C5");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C5");
    check_base_class_offset(lv, (S5949C6*), ABISELECT(1264,748), "S5949C5");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*), ABISELECT(1264,748), "S5949C5");
    /*is_ambiguous_... S5949C5::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(1264,748), "S5949C5");
    /*is_ambiguous_... S5949C5::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(1264,748), "S5949C5");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*), ABISELECT(1344,788), "S5949C5");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*), ABISELECT(2080,1236), "S5949C5");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*), ABISELECT(16,4), "S5949C5");
    check_base_class_offset(lv, (S5949C8*), 0, "S5949C5");
    /*is_ambiguous_... S5949C5::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*), ABISELECT(256,144), "S5949C5");
    /*is_ambiguous_... S5949C5::S5949C3 */ AMB_check_base_class_offset(lv, (S5949C3*), ABISELECT(272,156), "S5949C5");
    check_field_offset(lv, s5949c5f0, ABISELECT(1008,604), "S5949C5.s5949c5f0");
    test_class_info(&lv, &cd_S5949C5);
    dp->~S5949C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C5(Test_S5949C5, "S5949C5", ABISELECT(2096,1248));

#else // __cplusplus

extern void _ZN7S5949C5C1Ev();
extern void _ZN7S5949C5D2Ev();
Name_Map name_map_S5949C5[] = {
  NSPAIR(_ZN7S5949C5C1Ev),
  NSPAIR(_ZN7S5949C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
static Base_Class bases_S5949C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5949C6,    ABISELECT(1264,748), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5949C3,    ABISELECT(1344,788), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S5949C9,    ABISELECT(2080,1236), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S5949C8,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5949C9,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5949C3,    ABISELECT(272,156), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5949C5[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C5D1Ev();
extern void _ZN7S5949C5D0Ev();
extern void ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn272_N7S5949C5D1Ev,_ZThn156_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn272_N7S5949C5D0Ev,_ZThn156_N7S5949C5D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn1344_N7S5949C5D1Ev,_ZThn788_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn1344_N7S5949C5D0Ev,_ZThn788_N7S5949C5D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn2080_N7S5949C5D1Ev,_ZThn1236_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn2080_N7S5949C5D0Ev,_ZThn1236_N7S5949C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5949C5[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D0Ev,
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S5949C5D1Ev,_ZThn156_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S5949C5D0Ev,_ZThn156_N7S5949C5D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev),
};
extern VTBL_ENTRY _ZTV7S5949C5[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C8__7S5949C5[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn1344_N7S5949C8D1Ev,_ZThn788_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn1344_N7S5949C8D0Ev,_ZThn788_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C8__7S5949C5[] = {
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C8__7S5949C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn2080_N7S5949C8D1Ev,_ZThn1236_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn2080_N7S5949C8D0Ev,_ZThn1236_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C8__7S5949C5[] = {
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__7S5949C5[] = {
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__A__7S5949C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1008,-604),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C5[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__7S5949C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(816,488),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTT_ENTRY vtt_S5949C5[] = {
  {&(_ZTV7S5949C5[7]),  7,44},
  {&(_tg__ZTV7S5949C8__7S5949C5[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C8__7S5949C5[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C8__7S5949C5[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C8__7S5949C5[6]),  6,8},
  {&(_tg__ZTV7S5949C9__A__7S5949C5[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__A__7S5949C5[4]),  4,4},
  {&(_ZTV7S5949C5[27]),  27,44},
  {&(_ZTV7S5949C5[32]),  32,44},
  {&(_ZTV7S5949C5[42]),  42,44},
  {&(_ZTV7S5949C5[15]),  15,44},
  {&(_tg__ZTV7S5949C6__7S5949C5[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C5[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__7S5949C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S5949C5[];
extern  VTBL_ENTRY _ZTV7S5949C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C5[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N7S5949C8D0Ev,_ZThn1236_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N7S5949C8D1Ev,_ZThn1236_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N7S5949C8D0Ev,_ZThn788_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N7S5949C8D1Ev,_ZThn788_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N7S5949C5D0Ev,_ZThn1236_N7S5949C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N7S5949C5D1Ev,_ZThn1236_N7S5949C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N7S5949C5D0Ev,_ZThn788_N7S5949C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N7S5949C5D1Ev,_ZThn788_N7S5949C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5949C5 = {  "S5949C5", // class name
  bases_S5949C5, 9,
  &(vtc_S5949C5[0]), // expected_vtbl_contents
  &(vtt_S5949C5[0]), // expected_vtt_contents
  ABISELECT(2096,1248), // object size
  NSPAIRA(_ZTI7S5949C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S5949C5),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5949C5),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C12  : virtual S22028C16 , virtual S5949C6 , S5949C9 , S5949C8 {
  int s5949c12f0;
  int s5949c12f1;
  int s5949c12f2;
  short s5949c12f3;
  int s5949c12f4;
  ::S5949C5 s5949c12f5;
  __tsi64 s5949c12f6;
  void *s5949c12f7;
  int s5949c12f8;
  ~S5949C12(); // tgen
  S5949C12(); // tgen
};
//SIG(-1 S5949C12) C1{ VBC2{ m} VBC3{ VBC2 VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} BC5{ VBC3 vd Fi:21 Fi} BC6{ VBC7{ vd v1 v2 Fp FC4 FC4 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC5 BC4 v3} Fi Fi Fi Fs Fi FC9{ VBC4 VBC3 BC6 BC5 BC7 vd Fi} FL Fp Fi}


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

static void Test_S5949C12()
{
  extern Class_Descriptor cd_S5949C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(220,521)];
    init_test(&cd_S5949C12, buf);
    S5949C12 *dp, &lv = *(dp=new (buf) S5949C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3504,2080), "sizeof(S5949C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C12)");
    check_base_class_offset(lv, (S22028C16*), 0, "S5949C12");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C12");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(2512,1480), "S5949C12");
    check_base_class_offset(lv, (S5949C6*), ABISELECT(2424,1440), "S5949C12");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(2424,1440), "S5949C12");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*), ABISELECT(2424,1440), "S5949C12");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(2424,1440), "S5949C12");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*), 0, "S5949C12");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*), ABISELECT(2752,1620), "S5949C12");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*), ABISELECT(3488,2068), "S5949C12");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*), ABISELECT(32,16), "S5949C12");
    check_base_class_offset(lv, (S5949C8*), ABISELECT(16,12), "S5949C12");
    check_field_offset(lv, s5949c12f0, ABISELECT(272,156), "S5949C12.s5949c12f0");
    check_field_offset(lv, s5949c12f1, ABISELECT(276,160), "S5949C12.s5949c12f1");
    check_field_offset(lv, s5949c12f2, ABISELECT(280,164), "S5949C12.s5949c12f2");
    check_field_offset(lv, s5949c12f3, ABISELECT(284,168), "S5949C12.s5949c12f3");
    check_field_offset(lv, s5949c12f4, ABISELECT(288,172), "S5949C12.s5949c12f4");
    check_field_offset(lv, s5949c12f5, ABISELECT(304,176), "S5949C12.s5949c12f5");
    check_field_offset(lv, s5949c12f6, ABISELECT(2400,1424), "S5949C12.s5949c12f6");
    check_field_offset(lv, s5949c12f7, ABISELECT(2408,1432), "S5949C12.s5949c12f7");
    check_field_offset(lv, s5949c12f8, ABISELECT(2416,1436), "S5949C12.s5949c12f8");
    test_class_info(&lv, &cd_S5949C12);
    dp->~S5949C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C12(Test_S5949C12, "S5949C12", ABISELECT(3504,2080));

#else // __cplusplus

extern void _ZN8S5949C12C1Ev();
extern void _ZN8S5949C12D1Ev();
Name_Map name_map_S5949C12[] = {
  NSPAIR(_ZN8S5949C12C1Ev),
  NSPAIR(_ZN8S5949C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
static Base_Class bases_S5949C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(2512,1480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S5949C6,    ABISELECT(2424,1440), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5949C9,    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_S5949C3,    ABISELECT(2752,1620), //bcp->offset
    23, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S5949C9,    ABISELECT(3488,2068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    7, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5949C12[];
extern void _ZN8S5949C12D1Ev();
extern void _ZN8S5949C12D0Ev();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn2752_N8S5949C12D1Ev,_ZThn1620_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn2752_N8S5949C12D0Ev,_ZThn1620_N8S5949C12D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn3488_N8S5949C12D1Ev,_ZThn2068_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn3488_N8S5949C12D0Ev,_ZThn2068_N8S5949C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5949C12[] = {
  ABISELECT(3488,2068),
  ABISELECT(2752,1620),
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN8S5949C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C12D0Ev,
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev),
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  0,
  0,
  ABISELECT(-2752,-1620),
  ABISELECT(-2752,-1620),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(-3488,-2068),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3488,-2068),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S5949C12[];
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__8S5949C12[] = {
  ABISELECT(2512,1480),
  0,
  ABISELECT(2424,1440),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__A__8S5949C12[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2424,-1440),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C12[] = {
  ABISELECT(3472,2056),
  ABISELECT(2496,1468),
  ABISELECT(-16,-12),
  ABISELECT(2408,1428),
  ABISELECT(2736,1608),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn2736_N7S5949C8D1Ev,_ZThn1608_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn2736_N7S5949C8D0Ev,_ZThn1608_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C8__8S5949C12[] = {
  0,
  0,
  ABISELECT(-2736,-1608),
  ABISELECT(-2736,-1608),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C8__8S5949C12[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(-2408,-1428),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn3472_N7S5949C8D1Ev,_ZThn2056_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn3472_N7S5949C8D0Ev,_ZThn2056_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C8__8S5949C12[] = {
  ABISELECT(-3472,-2056),
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  ABISELECT(-3472,-2056),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C12[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C12[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3488,-2068),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__A1__8S5949C12[] = {
  ABISELECT(88,40),
  ABISELECT(-2424,-1440),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTT_ENTRY vtt_S5949C12[] = {
  {&(_ZTV8S5949C12[7]),  7,40},
  {&(_tg__ZTV7S5949C9__A__8S5949C12[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__A__8S5949C12[4]),  4,4},
  {&(_tg__ZTV7S5949C8__8S5949C12[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C8__8S5949C12[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C8__8S5949C12[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C8__8S5949C12[6]),  6,8},
  {&(_ZTV8S5949C12[23]),  23,40},
  {&(_ZTV8S5949C12[16]),  16,40},
  {&(_ZTV8S5949C12[28]),  28,40},
  {&(_ZTV8S5949C12[38]),  38,40},
  {&(_tg__ZTV7S5949C6__8S5949C12[4]),  4,4},
  {&(_tg__ZTV7S5949C9__A1__8S5949C12[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__A1__8S5949C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S5949C12[];
extern  VTBL_ENTRY _ZTV8S5949C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C12[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S5949C8D0Ev,_ZThn2056_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S5949C8D1Ev,_ZThn2056_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N7S5949C8D0Ev,_ZThn1608_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2736_N7S5949C8D1Ev,_ZThn1608_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S5949C12D0Ev,_ZThn2068_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S5949C12D1Ev,_ZThn2068_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S5949C12D0Ev,_ZThn1620_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2752_N8S5949C12D1Ev,_ZThn1620_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5949C12 = {  "S5949C12", // class name
  bases_S5949C12, 8,
  &(vtc_S5949C12[0]), // expected_vtbl_contents
  &(vtt_S5949C12[0]), // expected_vtt_contents
  ABISELECT(3504,2080), // object size
  NSPAIRA(_ZTI8S5949C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S5949C12),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5949C12),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C11  : virtual S19968C3 , S5949C8 , S5949C12 {
  int s5949c11f0;
  virtual  ~S5949C11(); // _ZN8S5949C11D2Ev
  S5949C11(); // tgen
};
//SIG(-1 S5949C11) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC3{ VBC4{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU5{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC6{ VBC7{ m} VBC2 Fp[9]} VBC8{ VBC6 vd Fi:21 Fi} BC2 v3} BC9{ VBC7 VBC6 BC8 BC3 Fi Fi Fi Fs Fi FC10{ VBC2 VBC6 BC3 BC8 BC4 vd Fi} FL Fp Fi} vd Fi}


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

static void Test_S5949C11()
{
  extern Class_Descriptor cd_S5949C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(236,558)];
    init_test(&cd_S5949C11, buf);
    S5949C11 *dp, &lv = *(dp=new (buf) S5949C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3760,2228), "sizeof(S5949C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C11)");
    /*is_ambiguous_... S5949C11::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2688,1588), "S5949C11");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(2688,1588), "S5949C11");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C3*)(S5949C8*), ABISELECT(2928,1728), "S5949C11");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C12*), ABISELECT(2928,1728), "S5949C11");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C11");
    check_base_class_offset(lv, (S22028C16*)(S5949C12*), 0, "S5949C11");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C8*), ABISELECT(3664,2176), "S5949C11");
    /*is_ambiguous_... S5949C11::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(3664,2176), "S5949C11");
    check_base_class_offset(lv, (S5949C6*)(S5949C12*), ABISELECT(3664,2176), "S5949C11");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C12*), ABISELECT(3664,2176), "S5949C11");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C12*), ABISELECT(3664,2176), "S5949C11");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C8*), ABISELECT(3744,2216), "S5949C11");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C12*), ABISELECT(3744,2216), "S5949C11");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*), ABISELECT(16,4), "S5949C11");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C8*), 0, "S5949C11");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C12*), ABISELECT(256,144), "S5949C11");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C12*), ABISELECT(288,160), "S5949C11");
    check_base_class_offset(lv, (S5949C8*)(S5949C12*), ABISELECT(272,156), "S5949C11");
    check_base_class_offset(lv, (S5949C12*), ABISELECT(256,144), "S5949C11");
    check_field_offset(lv, s5949c11f0, ABISELECT(2676,1584), "S5949C11.s5949c11f0");
    test_class_info(&lv, &cd_S5949C11);
    dp->~S5949C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C11(Test_S5949C11, "S5949C11", ABISELECT(3760,2228));

#else // __cplusplus

extern void _ZN8S5949C11C1Ev();
extern void _ZN8S5949C11D2Ev();
Name_Map name_map_S5949C11[] = {
  NSPAIR(_ZN8S5949C11C1Ev),
  NSPAIR(_ZN8S5949C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C12;
extern VTBL_ENTRY _ZTI8S5949C12[];
extern  VTBL_ENTRY _ZTV8S5949C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C12[];
static Base_Class bases_S5949C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2688,1588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S5949C3,    ABISELECT(2928,1728), //bcp->offset
    29, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5949C6,    ABISELECT(3664,2176), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5949C9,    ABISELECT(3744,2216), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S5949C8,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5949C9,    ABISELECT(256,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(288,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(272,156), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5949C12,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5949C11[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN8S5949C11D1Ev();
extern void _ZN8S5949C11D0Ev();
extern void ABISELECT(_ZThn256_N8S5949C11D1Ev,_ZThn144_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn256_N8S5949C11D0Ev,_ZThn144_N8S5949C11D0Ev)();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn272_N8S5949C11D1Ev,_ZThn156_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn272_N8S5949C11D0Ev,_ZThn156_N8S5949C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn2928_N8S5949C11D1Ev,_ZThn1728_N8S5949C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev)();
extern void ABISELECT(_ZThn2928_N8S5949C11D0Ev,_ZThn1728_N8S5949C11D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn3744_N8S5949C11D1Ev,_ZThn2216_N8S5949C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev)();
extern void ABISELECT(_ZThn3744_N8S5949C11D0Ev,_ZThn2216_N8S5949C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5949C11[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN8S5949C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C11D0Ev,
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C11D1Ev,_ZThn144_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C11D0Ev,_ZThn144_N8S5949C11D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C11D1Ev,_ZThn156_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C11D0Ev,_ZThn156_N8S5949C11D0Ev),
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S5949C11[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C11[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  0,
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn2928_N7S5949C8D1Ev,_ZThn1728_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn2928_N7S5949C8D0Ev,_ZThn1728_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C8__8S5949C11[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C8__8S5949C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn3744_N7S5949C8D1Ev,_ZThn2216_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn3744_N7S5949C8D0Ev,_ZThn2216_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C8__8S5949C11[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern void _ZN8S5949C12D1Ev();
extern void _ZN8S5949C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C12__8S5949C11[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN8S5949C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C12D0Ev,
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C12__A1__8S5949C11[] = {
  ABISELECT(2432,1444),
  ABISELECT(-256,-144),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C12__A1__8S5949C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C12__A1__8S5949C11[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn2656_N7S5949C8D1Ev,_ZThn1572_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn2656_N7S5949C8D0Ev,_ZThn1572_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C12__A1__8S5949C11[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C12__A1__8S5949C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn3472_N7S5949C8D1Ev,_ZThn2060_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn3472_N7S5949C8D0Ev,_ZThn2060_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C12__A1__8S5949C11[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C12__8S5949C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C12__8S5949C11[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-272,-156),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C12D1Ev,_ZThn1584_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C12D0Ev,_ZThn1584_N8S5949C12D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C12__8S5949C11[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn3488_N8S5949C12D1Ev,_ZThn2072_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn3488_N8S5949C12D0Ev,_ZThn2072_N8S5949C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C12__8S5949C11[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__8S5949C11[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-3744,-2216),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__8S5949C11[] = {
  ABISELECT(-976,-588),
  ABISELECT(-3664,-2176),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTT_ENTRY vtt_S5949C11[] = {
  {&(_ZTV8S5949C11[7]),  7,50},
  {&(_tg__ZTV7S5949C8__8S5949C11[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C8__8S5949C11[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C8__8S5949C11[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C8__8S5949C11[6]),  6,8},
  {&(_tg__ZTV8S5949C12__8S5949C11[7]),  7,9},
  {&(_tg__ZTV7S5949C98S5949C12__A1__8S5949C11[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C12__A1__8S5949C11[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C12__A1__8S5949C11[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C12__A1__8S5949C11[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C12__A1__8S5949C11[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C12__A1__8S5949C11[6]),  6,8},
  {&(_tg__ZTV7S5949C6__8S5949C12__8S5949C11[4]),  4,4},
  {&(_tg__ZTV7S5949C8__8S5949C12__8S5949C11[7]),  7,10},
  {&(_tg__ZTV7S5949C3__8S5949C12__8S5949C11[5]),  5,9},
  {&(_tg__ZTV7S5949C9__A1__8S5949C12__8S5949C11[6]),  6,8},
  {&(_ZTV8S5949C11[34]),  34,50},
  {&(_ZTV8S5949C11[42]),  42,50},
  {&(_ZTV8S5949C11[48]),  48,50},
  {&(_ZTV8S5949C11[17]),  17,50},
  {&(_ZTV8S5949C11[26]),  26,50},
  {&(_tg__ZTV7S5949C6__8S5949C11[4]),  4,4},
  {&(_tg__ZTV7S5949C9__8S5949C11[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__8S5949C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S5949C11[];
extern  VTBL_ENTRY _ZTV8S5949C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C11[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S5949C12D0Ev,_ZThn2072_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S5949C12D1Ev,_ZThn2072_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S5949C12D0Ev,_ZThn1584_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S5949C12D1Ev,_ZThn1584_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S5949C8D0Ev,_ZThn2060_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S5949C8D0Ev,_ZThn2216_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S5949C8D1Ev,_ZThn2060_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S5949C8D1Ev,_ZThn2216_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S5949C8D0Ev,_ZThn1572_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S5949C8D0Ev,_ZThn1728_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S5949C8D1Ev,_ZThn1572_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S5949C8D1Ev,_ZThn1728_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S5949C11D0Ev,_ZThn2216_N8S5949C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S5949C11D1Ev,_ZThn2216_N8S5949C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S5949C11D0Ev,_ZThn1728_N8S5949C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S5949C11D1Ev,_ZThn1728_N8S5949C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5949C11 = {  "S5949C11", // class name
  bases_S5949C11, 11,
  &(vtc_S5949C11[0]), // expected_vtbl_contents
  &(vtt_S5949C11[0]), // expected_vtt_contents
  ABISELECT(3760,2228), // object size
  NSPAIRA(_ZTI8S5949C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S5949C11),50, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5949C11),24, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C13  : S19968C3 , virtual S5949C3 , S5949C12 , S5949C9 {
  short s5949c13f0;
  short s5949c13f1[4];
  short s5949c13f2;
  ::S5949C3 s5949c13f3;
  virtual  ~S5949C13(); // _ZN8S5949C13D2Ev
  S5949C13(); // tgen
};
//SIG(-1 S5949C13) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ VBC6{ m} VBC7{ VBC6 VBC2 Fp[9]} BC8{ VBC7 vd Fi:21 Fi} BC9{ VBC3 VBC7 VBC8 BC2 v3} Fi Fi Fi Fs Fi FC10{ VBC2 VBC7 BC9 BC8 BC3 vd Fi} FL Fp Fi} BC8 vd Fs Fs[4] Fs FC3}


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

static void Test_S5949C13()
{
  extern Class_Descriptor cd_S5949C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(283,674)];
    init_test(&cd_S5949C13, buf);
    S5949C13 *dp, &lv = *(dp=new (buf) S5949C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4512,2692), "sizeof(S5949C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C13)");
    /*is_ambiguous_... S5949C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(2432,1440), "S5949C13");
    check_base_class_offset(lv, (S5949C3*), ABISELECT(3440,2052), "S5949C13");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C12*), ABISELECT(3440,2052), "S5949C13");
    check_base_class_offset(lv, (S22028C16*)(S5949C12*), 0, "S5949C13");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C13");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(4256,2540), "S5949C13");
    check_base_class_offset(lv, (S5949C6*)(S5949C12*), ABISELECT(4176,2500), "S5949C13");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C12*), ABISELECT(4176,2500), "S5949C13");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C12*), ABISELECT(4176,2500), "S5949C13");
    /*is_ambiguous_... S5949C13::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(4176,2500), "S5949C13");
    /*is_ambiguous_... S5949C13::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(4176,2500), "S5949C13");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C12*), 0, "S5949C13");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C12*), ABISELECT(4496,2680), "S5949C13");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C12*), ABISELECT(32,16), "S5949C13");
    check_base_class_offset(lv, (S5949C8*)(S5949C12*), ABISELECT(16,12), "S5949C13");
    check_base_class_offset(lv, (S5949C12*), 0, "S5949C13");
    /*is_ambiguous_... S5949C13::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*), ABISELECT(2672,1580), "S5949C13");
    check_field_offset(lv, s5949c13f0, ABISELECT(2688,1592), "S5949C13.s5949c13f0");
    check_field_offset(lv, s5949c13f1, ABISELECT(2690,1594), "S5949C13.s5949c13f1");
    check_field_offset(lv, s5949c13f2, ABISELECT(2698,1602), "S5949C13.s5949c13f2");
    check_field_offset(lv, s5949c13f3, ABISELECT(2704,1604), "S5949C13.s5949c13f3");
    test_class_info(&lv, &cd_S5949C13);
    dp->~S5949C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C13(Test_S5949C13, "S5949C13", ABISELECT(4512,2692));

#else // __cplusplus

extern void _ZN8S5949C13C1Ev();
extern void _ZN8S5949C13D2Ev();
Name_Map name_map_S5949C13[] = {
  NSPAIR(_ZN8S5949C13C1Ev),
  NSPAIR(_ZN8S5949C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C12;
extern VTBL_ENTRY _ZTI8S5949C12[];
extern  VTBL_ENTRY _ZTV8S5949C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C12[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
static Base_Class bases_S5949C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(2432,1440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5949C3,    ABISELECT(3440,2052), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //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_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(4256,2540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5949C6,    ABISELECT(4176,2500), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S5949C9,    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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(4496,2680), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19968C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(16,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5949C12,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5949C9,    ABISELECT(2672,1580), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5949C13[];
extern void _ZN8S5949C13D1Ev();
extern void _ZN8S5949C13D0Ev();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C13D1Ev,_ZThn12_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C13D0Ev,_ZThn12_N8S5949C13D0Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C13D1Ev,_ZThn1580_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C13D0Ev,_ZThn1580_N8S5949C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn3440_N8S5949C13D1Ev,_ZThn2052_N8S5949C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev)();
extern void ABISELECT(_ZThn3440_N8S5949C13D0Ev,_ZThn2052_N8S5949C13D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn4496_N8S5949C13D1Ev,_ZThn2680_N8S5949C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev)();
extern void ABISELECT(_ZThn4496_N8S5949C13D0Ev,_ZThn2680_N8S5949C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5949C13[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&_ZN8S5949C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C13D0Ev,
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C13D1Ev,_ZThn12_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C13D0Ev,_ZThn12_N8S5949C13D0Ev),
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S5949C13D1Ev,_ZThn1580_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S5949C13D0Ev,_ZThn1580_N8S5949C13D0Ev),
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S5949C13[];
extern void _ZN8S5949C12D1Ev();
extern void _ZN8S5949C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C12__8S5949C13[] = {
  ABISELECT(4496,2680),
  ABISELECT(3440,2052),
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN8S5949C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C12D0Ev,
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C12__8S5949C13[] = {
  ABISELECT(4256,2540),
  0,
  ABISELECT(4176,2500),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C12__8S5949C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C12__8S5949C13[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn3424_N7S5949C8D1Ev,_ZThn2040_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn3424_N7S5949C8D0Ev,_ZThn2040_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C12__8S5949C13[] = {
  0,
  0,
  ABISELECT(-3424,-2040),
  ABISELECT(-3424,-2040),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C12__8S5949C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4160,-2488),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn4480_N7S5949C8D1Ev,_ZThn2668_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn4480_N7S5949C8D0Ev,_ZThn2668_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C12__8S5949C13[] = {
  ABISELECT(-4480,-2668),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4480,-2668),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C12__8S5949C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-4176,-2500),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C12__8S5949C13[] = {
  ABISELECT(4480,2668),
  ABISELECT(4240,2528),
  ABISELECT(-16,-12),
  ABISELECT(4160,2488),
  ABISELECT(3424,2040),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn3440_N8S5949C12D1Ev,_ZThn2052_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn3440_N8S5949C12D0Ev,_ZThn2052_N8S5949C12D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C12__8S5949C13[] = {
  0,
  0,
  ABISELECT(-3440,-2052),
  ABISELECT(-3440,-2052),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn4496_N8S5949C12D1Ev,_ZThn2680_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn4496_N8S5949C12D0Ev,_ZThn2680_N8S5949C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C12__8S5949C13[] = {
  ABISELECT(-4496,-2680),
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  ABISELECT(-4496,-2680),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__8S5949C13[] = {
  ABISELECT(1584,960),
  ABISELECT(-2672,-1580),
  ABISELECT(1504,920),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__A__8S5949C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(-1504,-920),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C13[] = {
  ABISELECT(-240,-140),
  ABISELECT(-4496,-2680),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__A1__8S5949C13[] = {
  ABISELECT(80,40),
  ABISELECT(-4176,-2500),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTT_ENTRY vtt_S5949C13[] = {
  {&(_ZTV8S5949C13[7]),  7,47},
  {&(_tg__ZTV8S5949C12__8S5949C13[7]),  7,9},
  {&(_tg__ZTV7S5949C98S5949C12__8S5949C13[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C12__8S5949C13[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C12__8S5949C13[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C12__8S5949C13[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C12__8S5949C13[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C12__8S5949C13[6]),  6,8},
  {&(_tg__ZTV7S5949C6__8S5949C12__8S5949C13[4]),  4,4},
  {&(_tg__ZTV7S5949C8__8S5949C12__8S5949C13[7]),  7,10},
  {&(_tg__ZTV7S5949C3__8S5949C12__8S5949C13[5]),  5,9},
  {&(_tg__ZTV7S5949C9__A1__8S5949C12__8S5949C13[6]),  6,8},
  {&(_tg__ZTV7S5949C9__A__8S5949C13[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__A__8S5949C13[4]),  4,4},
  {&(_ZTV8S5949C13[31]),  31,47},
  {&(_ZTV8S5949C13[39]),  39,47},
  {&(_ZTV8S5949C13[16]),  16,47},
  {&(_ZTV8S5949C13[45]),  45,47},
  {&(_ZTV8S5949C13[24]),  24,47},
  {&(_tg__ZTV7S5949C6__8S5949C13[4]),  4,4},
  {&(_tg__ZTV7S5949C9__A1__8S5949C13[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__A1__8S5949C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S5949C13[];
extern  VTBL_ENTRY _ZTV8S5949C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C13[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S5949C12D0Ev,_ZThn2680_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S5949C12D1Ev,_ZThn2680_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S5949C12D0Ev,_ZThn2052_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S5949C12D1Ev,_ZThn2052_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N7S5949C8D0Ev,_ZThn2668_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4480_N7S5949C8D1Ev,_ZThn2668_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N7S5949C8D0Ev,_ZThn2040_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3424_N7S5949C8D1Ev,_ZThn2040_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S5949C13D0Ev,_ZThn2680_N8S5949C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4496_N8S5949C13D1Ev,_ZThn2680_N8S5949C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S5949C13D0Ev,_ZThn2052_N8S5949C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3440_N8S5949C13D1Ev,_ZThn2052_N8S5949C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5949C13 = {  "S5949C13", // class name
  bases_S5949C13, 11,
  &(vtc_S5949C13[0]), // expected_vtbl_contents
  &(vtt_S5949C13[0]), // expected_vtt_contents
  ABISELECT(4512,2692), // object size
  NSPAIRA(_ZTI8S5949C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S5949C13),47, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5949C13),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C10  : virtual S5949C11 , S5949C5 , S19968C3 , S5949C13 {
  char s5949c10f0;
  short s5949c10f1;
  ::S19968C3 s5949c10f2[6];
  virtual  ~S5949C10(); // _ZN8S5949C10D2Ev
  S5949C10(); // tgen
};
//SIG(-1 S5949C10) C1{ VBC2{ VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} BC4{ VBC5{ vd v1 v2 Fp FC3 FC3 Fi[3] Fp[6] Fs FU6{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC7{ VBC8{ m} VBC3 Fp[9]} VBC9{ VBC7 vd Fi:21 Fi} BC3 v3} BC10{ VBC8 VBC7 BC9 BC4 Fi Fi Fi Fs Fi FC11{ VBC3 VBC7 BC4 BC9 BC5 vd Fi} FL Fp Fi} vd Fi} BC11 BC3 BC12{ BC3 VBC5 BC10 BC9 vd Fs Fs[4] Fs FC5} vd Fc Fs FC3[6]}


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

static void Test_S5949C10()
{
  extern Class_Descriptor cd_S5949C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(621,1469)];
    init_test(&cd_S5949C10, buf);
    S5949C10 *dp, &lv = *(dp=new (buf) S5949C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9920,5872), "sizeof(S5949C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C10)");
    /*is_ambiguous_... S5949C11::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C11*), ABISELECT(8848,5232), "S5949C10");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(8848,5232), "S5949C10");
    /*is_ambiguous_... S5949C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C5*), ABISELECT(8848,5232), "S5949C10");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C11*), ABISELECT(9088,5372), "S5949C10");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(9088,5372), "S5949C10");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C5*), ABISELECT(9088,5372), "S5949C10");
    check_base_class_offset(lv, (S5949C3*)(S5949C13*), ABISELECT(9088,5372), "S5949C10");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C12*)(S5949C13*), ABISELECT(9088,5372), "S5949C10");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C10");
    check_base_class_offset(lv, (S22028C16*)(S5949C12*)(S5949C11*), 0, "S5949C10");
    check_base_class_offset(lv, (S22028C16*)(S5949C12*)(S5949C13*), 0, "S5949C10");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C11*), ABISELECT(9824,5820), "S5949C10");
    /*is_ambiguous_... S5949C10::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(9824,5820), "S5949C10");
    check_base_class_offset(lv, (S5949C6*)(S5949C12*)(S5949C11*), ABISELECT(9824,5820), "S5949C10");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C12*)(S5949C11*), ABISELECT(9824,5820), "S5949C10");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(9824,5820), "S5949C10");
    check_base_class_offset(lv, (S5949C6*)(S5949C5*), ABISELECT(9824,5820), "S5949C10");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C5*), ABISELECT(9824,5820), "S5949C10");
    /*is_ambiguous_... S5949C5::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C5*), ABISELECT(9824,5820), "S5949C10");
    check_base_class_offset(lv, (S5949C6*)(S5949C12*)(S5949C13*), ABISELECT(9824,5820), "S5949C10");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C12*)(S5949C13*), ABISELECT(9824,5820), "S5949C10");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C12*)(S5949C13*), ABISELECT(9824,5820), "S5949C10");
    /*is_ambiguous_... S5949C13::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C13*), ABISELECT(9824,5820), "S5949C10");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C11*), ABISELECT(9904,5860), "S5949C10");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(9904,5860), "S5949C10");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C5*), ABISELECT(9904,5860), "S5949C10");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C12*)(S5949C13*), ABISELECT(9904,5860), "S5949C10");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C11*), ABISELECT(6176,3648), "S5949C10");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C8*)(S5949C11*), ABISELECT(6160,3644), "S5949C10");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C12*)(S5949C11*), ABISELECT(6416,3788), "S5949C10");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(6448,3804), "S5949C10");
    check_base_class_offset(lv, (S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(6432,3800), "S5949C10");
    check_base_class_offset(lv, (S5949C12*)(S5949C11*), ABISELECT(6416,3788), "S5949C10");
    check_base_class_offset(lv, (S5949C11*), ABISELECT(6160,3644), "S5949C10");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C5*), ABISELECT(16,4), "S5949C10");
    check_base_class_offset(lv, (S5949C8*)(S5949C5*), 0, "S5949C10");
    /*is_ambiguous_... S5949C5::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C5*), ABISELECT(256,144), "S5949C10");
    /*is_ambiguous_... S5949C5::S5949C3 */ AMB_check_base_class_offset(lv, (S5949C3*)(S5949C5*), ABISELECT(272,156), "S5949C10");
    check_base_class_offset(lv, (S5949C5*), 0, "S5949C10");
    /*is_ambiguous_... S5949C10::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S5949C10");
    /*is_ambiguous_... S5949C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C13*), ABISELECT(3696,2188), "S5949C10");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C12*)(S5949C13*), ABISELECT(1264,748), "S5949C10");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C12*)(S5949C13*), ABISELECT(1296,764), "S5949C10");
    check_base_class_offset(lv, (S5949C8*)(S5949C12*)(S5949C13*), ABISELECT(1280,760), "S5949C10");
    check_base_class_offset(lv, (S5949C12*)(S5949C13*), ABISELECT(1264,748), "S5949C10");
    /*is_ambiguous_... S5949C13::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C13*), ABISELECT(3936,2328), "S5949C10");
    check_base_class_offset(lv, (S5949C13*), ABISELECT(1264,748), "S5949C10");
    check_field_offset(lv, s5949c10f0, ABISELECT(4704,2800), "S5949C10.s5949c10f0");
    check_field_offset(lv, s5949c10f1, ABISELECT(4706,2802), "S5949C10.s5949c10f1");
    check_field_offset(lv, s5949c10f2, ABISELECT(4720,2804), "S5949C10.s5949c10f2");
    test_class_info(&lv, &cd_S5949C10);
    dp->~S5949C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C10(Test_S5949C10, "S5949C10", ABISELECT(9920,5872));

#else // __cplusplus

extern void _ZN8S5949C10C1Ev();
extern void _ZN8S5949C10D2Ev();
Name_Map name_map_S5949C10[] = {
  NSPAIR(_ZN8S5949C10C1Ev),
  NSPAIR(_ZN8S5949C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C12;
extern VTBL_ENTRY _ZTI8S5949C12[];
extern  VTBL_ENTRY _ZTV8S5949C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C12[];
extern Class_Descriptor cd_S5949C11;
extern VTBL_ENTRY _ZTI8S5949C11[];
extern  VTBL_ENTRY _ZTV8S5949C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C11[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S5949C5;
extern VTBL_ENTRY _ZTI7S5949C5[];
extern  VTBL_ENTRY _ZTV7S5949C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C5[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C12;
extern VTBL_ENTRY _ZTI8S5949C12[];
extern  VTBL_ENTRY _ZTV8S5949C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C12[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C13;
extern VTBL_ENTRY _ZTI8S5949C13[];
extern  VTBL_ENTRY _ZTV8S5949C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C13[];
static Base_Class bases_S5949C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(8848,5232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5949C3,    ABISELECT(9088,5372), //bcp->offset
    81, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5949C6,    ABISELECT(9824,5820), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5949C9,    ABISELECT(9904,5860), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(6176,3648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5949C8,    ABISELECT(6160,3644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(6416,3788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(6448,3804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(6432,3800), //bcp->offset
    71, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5949C12,    ABISELECT(6416,3788), //bcp->offset
    62, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S5949C11,    ABISELECT(6160,3644), //bcp->offset
    50, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S5949C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(256,144), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5949C3,    ABISELECT(272,156), //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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5949C5,    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_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19968C3,    ABISELECT(3696,2188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(1296,764), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(1280,760), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5949C12,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(3936,2328), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5949C13,    ABISELECT(1264,748), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S5949C10[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN8S5949C10D1Ev();
extern void _ZN8S5949C10D0Ev();
extern void ABISELECT(_ZThn256_N8S5949C10D1Ev,_ZThn144_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn256_N8S5949C10D0Ev,_ZThn144_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn272_N8S5949C10D1Ev,_ZThn156_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn272_N8S5949C10D0Ev,_ZThn156_N8S5949C10D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZThn1264_N8S5949C10D1Ev,_ZThn748_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn1264_N8S5949C10D0Ev,_ZThn748_N8S5949C10D0Ev)();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn1280_N8S5949C10D1Ev,_ZThn760_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn1280_N8S5949C10D0Ev,_ZThn760_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn3936_N8S5949C10D1Ev,_ZThn2328_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn3936_N8S5949C10D0Ev,_ZThn2328_N8S5949C10D0Ev)();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S5949C10D1Ev,_ZTv0_n36_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn6160_N8S5949C10D1Ev,_ZThn3644_N8S5949C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S5949C10D0Ev,_ZTv0_n36_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn6160_N8S5949C10D0Ev,_ZThn3644_N8S5949C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N8S5949C10D1Ev,_ZTvn144_n36_N8S5949C10D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S5949C10D0Ev,_ZTvn144_n36_N8S5949C10D0Ev)();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S5949C10D1Ev,_ZTvn156_n36_N8S5949C10D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S5949C10D0Ev,_ZTvn156_n36_N8S5949C10D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S5949C10D1Ev,_ZTv0_n12_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn9088_N8S5949C10D1Ev,_ZThn5372_N8S5949C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C10D0Ev,_ZTv0_n12_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn9088_N8S5949C10D0Ev,_ZThn5372_N8S5949C10D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S5949C10D1Ev,_ZTv0_n24_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn9904_N8S5949C10D1Ev,_ZThn5860_N8S5949C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C10D0Ev,_ZTv0_n24_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn9904_N8S5949C10D0Ev,_ZThn5860_N8S5949C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S5949C10[] = {
  ABISELECT(6160,3644),
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN8S5949C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C10D0Ev,
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C10D1Ev,_ZThn144_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C10D0Ev,_ZThn144_N8S5949C10D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C10D1Ev,_ZThn156_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C10D0Ev,_ZThn156_N8S5949C10D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S5949C10D1Ev,_ZThn748_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S5949C10D0Ev,_ZThn748_N8S5949C10D0Ev),
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5949C10D1Ev,_ZThn760_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5949C10D0Ev,_ZThn760_N8S5949C10D0Ev),
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S5949C10D1Ev,_ZThn2328_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S5949C10D0Ev,_ZThn2328_N8S5949C10D0Ev),
  ABISELECT(-6160,-3644),
  0,
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  ABISELECT(-6160,-3644),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S5949C10D1Ev,_ZTv0_n36_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S5949C10D0Ev,_ZTv0_n36_N8S5949C10D0Ev),
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-6416,-3788),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S5949C10D1Ev,_ZTvn144_n36_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S5949C10D0Ev,_ZTvn144_n36_N8S5949C10D0Ev),
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-6432,-3800),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S5949C10D1Ev,_ZTvn156_n36_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S5949C10D0Ev,_ZTvn156_n36_N8S5949C10D0Ev),
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C10D1Ev,_ZTv0_n12_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C10D0Ev,_ZTv0_n12_N8S5949C10D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C10D1Ev,_ZTv0_n24_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C10D0Ev,_ZTv0_n24_N8S5949C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S5949C10[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C5D1Ev();
extern void _ZN7S5949C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C5__8S5949C10[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D0Ev,
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C87S5949C5__A2__8S5949C10[] = {
  ABISELECT(9904,5860),
  ABISELECT(8848,5232),
  0,
  ABISELECT(9824,5820),
  ABISELECT(9088,5372),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn9088_N7S5949C8D1Ev,_ZThn5372_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn9088_N7S5949C8D0Ev,_ZThn5372_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C87S5949C5__A2__8S5949C10[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C87S5949C5__A2__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn9904_N7S5949C8D1Ev,_ZThn5860_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn9904_N7S5949C8D0Ev,_ZThn5860_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C87S5949C5__A2__8S5949C10[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C97S5949C5__A2__8S5949C10[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C97S5949C5__A2__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9568,-5676),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C5__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-9824,-5820),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn9088_N7S5949C5D1Ev,_ZThn5372_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn9088_N7S5949C5D0Ev,_ZThn5372_N7S5949C5D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C5__8S5949C10[] = {
  0,
  0,
  ABISELECT(-9088,-5372),
  ABISELECT(-9088,-5372),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn9904_N7S5949C5D1Ev,_ZThn5860_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn9904_N7S5949C5D0Ev,_ZThn5860_N7S5949C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C5__8S5949C10[] = {
  ABISELECT(-9904,-5860),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-9904,-5860),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev),
};
extern void ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__7S5949C5__8S5949C10[] = {
  ABISELECT(8592,5088),
  ABISELECT(-256,-144),
  ABISELECT(9568,5676),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev),
};
extern void _ZN8S5949C13D1Ev();
extern void _ZN8S5949C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C13__8S5949C10[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&_ZN8S5949C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C13D0Ev,
};
extern void _ZN8S5949C12D1Ev();
extern void _ZN8S5949C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C128S5949C13__A1__8S5949C10[] = {
  ABISELECT(8640,5112),
  ABISELECT(7824,4624),
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN8S5949C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C12D0Ev,
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C128S5949C13__A3__8S5949C10[] = {
  ABISELECT(7584,4484),
  ABISELECT(-1264,-748),
  ABISELECT(8560,5072),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C128S5949C13__A3__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C128S5949C13__A3__8S5949C10[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn7808_N7S5949C8D1Ev,_ZThn4612_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn7808_N7S5949C8D0Ev,_ZThn4612_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C128S5949C13__A3__8S5949C10[] = {
  0,
  0,
  ABISELECT(-7808,-4612),
  ABISELECT(-7808,-4612),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C128S5949C13__A3__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8544,-5060),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn8624_N7S5949C8D1Ev,_ZThn5100_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn8624_N7S5949C8D0Ev,_ZThn5100_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C128S5949C13__A3__8S5949C10[] = {
  ABISELECT(-8624,-5100),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8624,-5100),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C128S5949C13__A1__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C128S5949C13__A1__8S5949C10[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn7824_N8S5949C12D1Ev,_ZThn4624_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn7824_N8S5949C12D0Ev,_ZThn4624_N8S5949C12D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C128S5949C13__A1__8S5949C10[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn8640_N8S5949C12D1Ev,_ZThn5112_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn8640_N8S5949C12D0Ev,_ZThn5112_N8S5949C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C128S5949C13__A1__8S5949C10[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C13__A4__8S5949C10[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C13__A4__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-5888,-3492),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn7824_N8S5949C13D1Ev,_ZThn4624_N8S5949C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev)();
extern void ABISELECT(_ZThn7824_N8S5949C13D0Ev,_ZThn4624_N8S5949C13D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C13__8S5949C10[] = {
  0,
  0,
  ABISELECT(-7824,-4624),
  ABISELECT(-7824,-4624),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C13__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-8560,-5072),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C13D1Ev,_ZThn12_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C13D0Ev,_ZThn12_N8S5949C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C12__8S5949C13__8S5949C10[] = {
  ABISELECT(8624,5100),
  ABISELECT(7568,4472),
  ABISELECT(-1280,-760),
  ABISELECT(8544,5060),
  ABISELECT(7808,4612),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C13D1Ev,_ZThn12_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C13D0Ev,_ZThn12_N8S5949C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn8640_N8S5949C13D1Ev,_ZThn5112_N8S5949C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev)();
extern void ABISELECT(_ZThn8640_N8S5949C13D0Ev,_ZThn5112_N8S5949C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C13__8S5949C10[] = {
  ABISELECT(-8640,-5112),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-8640,-5112),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N8S5949C13D1Ev,_ZThn1580_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C13D0Ev,_ZThn1580_N8S5949C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__8S5949C13__8S5949C10[] = {
  ABISELECT(4912,2904),
  ABISELECT(-3936,-2328),
  ABISELECT(5888,3492),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S5949C13D1Ev,_ZThn1580_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S5949C13D0Ev,_ZThn1580_N8S5949C13D0Ev),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN8S5949C11D1Ev();
extern void _ZN8S5949C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C11__8S5949C10[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN8S5949C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C11D0Ev,
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C11__8S5949C10[] = {
  ABISELECT(3744,2216),
  ABISELECT(2688,1588),
  ABISELECT(-6160,-3644),
  ABISELECT(3664,2176),
  ABISELECT(2928,1728),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn2928_N7S5949C8D1Ev,_ZThn1728_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn2928_N7S5949C8D0Ev,_ZThn1728_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C11__8S5949C10[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C11__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn3744_N7S5949C8D1Ev,_ZThn2216_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn3744_N7S5949C8D0Ev,_ZThn2216_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C11__8S5949C10[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern void _ZN8S5949C12D1Ev();
extern void _ZN8S5949C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C128S5949C11__8S5949C10[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN8S5949C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C12D0Ev,
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C128S5949C11__A1__8S5949C10[] = {
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C128S5949C11__A1__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C128S5949C11__A1__8S5949C10[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn2656_N7S5949C8D1Ev,_ZThn1572_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn2656_N7S5949C8D0Ev,_ZThn1572_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C128S5949C11__A1__8S5949C10[] = {
  0,
  0,
  ABISELECT(-2656,-1572),
  ABISELECT(-2656,-1572),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C128S5949C11__A1__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3392,-2020),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn3472_N7S5949C8D1Ev,_ZThn2060_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn3472_N7S5949C8D0Ev,_ZThn2060_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C128S5949C11__A1__8S5949C10[] = {
  ABISELECT(-3472,-2060),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3472,-2060),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C128S5949C11__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3408,-2032),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C128S5949C11__8S5949C10[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C12D1Ev,_ZThn1584_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C12D0Ev,_ZThn1584_N8S5949C12D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C128S5949C11__8S5949C10[] = {
  0,
  0,
  ABISELECT(-2672,-1584),
  ABISELECT(-2672,-1584),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn3488_N8S5949C12D1Ev,_ZThn2072_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn3488_N8S5949C12D0Ev,_ZThn2072_N8S5949C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C128S5949C11__8S5949C10[] = {
  ABISELECT(-3488,-2072),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3488,-2072),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn2928_N8S5949C11D1Ev,_ZThn1728_N8S5949C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev)();
extern void ABISELECT(_ZThn2928_N8S5949C11D0Ev,_ZThn1728_N8S5949C11D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C11__8S5949C10[] = {
  0,
  0,
  ABISELECT(-2928,-1728),
  ABISELECT(-2928,-1728),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C11__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(-3664,-2176),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn3744_N8S5949C11D1Ev,_ZThn2216_N8S5949C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev)();
extern void ABISELECT(_ZThn3744_N8S5949C11D0Ev,_ZThn2216_N8S5949C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__8S5949C11__8S5949C10[] = {
  ABISELECT(-3744,-2216),
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  ABISELECT(-3744,-2216),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev),
};
extern void ABISELECT(_ZThn256_N8S5949C11D1Ev,_ZThn144_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn256_N8S5949C11D0Ev,_ZThn144_N8S5949C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5949C12__8S5949C11__8S5949C10[] = {
  ABISELECT(3488,2072),
  ABISELECT(2672,1584),
  ABISELECT(2432,1444),
  ABISELECT(-6416,-3788),
  ABISELECT(3408,2032),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C11D1Ev,_ZThn144_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C11D0Ev,_ZThn144_N8S5949C11D0Ev),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn272_N8S5949C11D1Ev,_ZThn156_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn272_N8S5949C11D0Ev,_ZThn156_N8S5949C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C12__A1__8S5949C11__8S5949C10[] = {
  ABISELECT(3472,2060),
  ABISELECT(2416,1432),
  ABISELECT(-6432,-3800),
  ABISELECT(3392,2020),
  ABISELECT(2656,1572),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C11D1Ev,_ZThn156_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C11D0Ev,_ZThn156_N8S5949C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__8S5949C10[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-9904,-5860),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__8S5949C10[] = {
  ABISELECT(-976,-588),
  ABISELECT(-9824,-5820),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTT_ENTRY vtt_S5949C10[] = {
  {&(_ZTV8S5949C10[8]),  8,102},
  {&(_tg__ZTV7S5949C5__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C87S5949C5__A2__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C87S5949C5__A2__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C87S5949C5__A2__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C87S5949C5__A2__8S5949C10[6]),  6,8},
  {&(_tg__ZTV7S5949C97S5949C5__A2__8S5949C10[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C97S5949C5__A2__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C6__7S5949C5__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C3__7S5949C5__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C9__7S5949C5__8S5949C10[6]),  6,8},
  {&(_tg__ZTV7S5949C9__A__7S5949C5__8S5949C10[5]),  5,7},
  {&(_tg__ZTV8S5949C13__8S5949C10[7]),  7,9},
  {&(_tg__ZTV8S5949C128S5949C13__A1__8S5949C10[7]),  7,9},
  {&(_tg__ZTV7S5949C98S5949C128S5949C13__A3__8S5949C10[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C128S5949C13__A3__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C128S5949C13__A3__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C128S5949C13__A3__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C128S5949C13__A3__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C128S5949C13__A3__8S5949C10[6]),  6,8},
  {&(_tg__ZTV7S5949C6__8S5949C128S5949C13__A1__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C8__8S5949C128S5949C13__A1__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C3__8S5949C128S5949C13__A1__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C9__A1__8S5949C128S5949C13__A1__8S5949C10[6]),  6,8},
  {&(_tg__ZTV7S5949C98S5949C13__A4__8S5949C10[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C13__A4__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C3__8S5949C13__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C6__8S5949C13__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C12__8S5949C13__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C9__A1__8S5949C13__8S5949C10[6]),  6,8},
  {&(_tg__ZTV7S5949C9__A__8S5949C13__8S5949C10[5]),  5,7},
  {&(_ZTV8S5949C10[59]),  59,102},
  {&(_ZTV8S5949C10[86]),  86,102},
  {&(_ZTV8S5949C10[94]),  94,102},
  {&(_ZTV8S5949C10[100]),  100,102},
  {&(_ZTV8S5949C10[69]),  69,102},
  {&(_ZTV8S5949C10[78]),  78,102},
  {&(_ZTV8S5949C10[16]),  16,102},
  {&(_ZTV8S5949C10[31]),  31,102},
  {&(_ZTV8S5949C10[40]),  40,102},
  {&(_ZTV8S5949C10[48]),  48,102},
  {&(_tg__ZTV8S5949C11__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C88S5949C11__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C11__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C11__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C11__8S5949C10[6]),  6,8},
  {&(_tg__ZTV8S5949C128S5949C11__8S5949C10[7]),  7,9},
  {&(_tg__ZTV7S5949C98S5949C128S5949C11__A1__8S5949C10[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C128S5949C11__A1__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C128S5949C11__A1__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C128S5949C11__A1__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C128S5949C11__A1__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C128S5949C11__A1__8S5949C10[6]),  6,8},
  {&(_tg__ZTV7S5949C6__8S5949C128S5949C11__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C8__8S5949C128S5949C11__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C3__8S5949C128S5949C11__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C9__A1__8S5949C128S5949C11__8S5949C10[6]),  6,8},
  {&(_tg__ZTV7S5949C3__8S5949C11__8S5949C10[5]),  5,9},
  {&(_tg__ZTV7S5949C6__8S5949C11__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C9__8S5949C11__8S5949C10[6]),  6,8},
  {&(_tg__ZTV8S5949C12__8S5949C11__8S5949C10[7]),  7,9},
  {&(_tg__ZTV7S5949C88S5949C12__A1__8S5949C11__8S5949C10[7]),  7,10},
  {&(_tg__ZTV7S5949C6__8S5949C10[4]),  4,4},
  {&(_tg__ZTV7S5949C9__8S5949C10[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__8S5949C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S5949C10[];
extern  VTBL_ENTRY _ZTV8S5949C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C10[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S5949C11D0Ev,_ZThn2216_N8S5949C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N8S5949C11D1Ev,_ZThn2216_N8S5949C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S5949C11D0Ev,_ZThn1728_N8S5949C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N8S5949C11D1Ev,_ZThn1728_N8S5949C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S5949C13D0Ev,_ZThn5112_N8S5949C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S5949C13D1Ev,_ZThn5112_N8S5949C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S5949C13D0Ev,_ZThn4624_N8S5949C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S5949C13D1Ev,_ZThn4624_N8S5949C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S5949C12D0Ev,_ZThn2072_N8S5949C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S5949C12D0Ev,_ZThn5112_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3488_N8S5949C12D1Ev,_ZThn2072_N8S5949C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S5949C12D1Ev,_ZThn5112_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S5949C12D0Ev,_ZThn1584_N8S5949C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S5949C12D0Ev,_ZThn4624_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2672_N8S5949C12D1Ev,_ZThn1584_N8S5949C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7824_N8S5949C12D1Ev,_ZThn4624_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N7S5949C5D0Ev,_ZThn5860_N7S5949C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N7S5949C5D1Ev,_ZThn5860_N7S5949C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N7S5949C5D0Ev,_ZThn5372_N7S5949C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N7S5949C5D1Ev,_ZThn5372_N7S5949C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S5949C8D0Ev,_ZThn2060_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S5949C8D0Ev,_ZThn2216_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S5949C8D0Ev,_ZThn5100_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N7S5949C8D0Ev,_ZThn5860_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn3472_N7S5949C8D1Ev,_ZThn2060_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn3744_N7S5949C8D1Ev,_ZThn2216_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S5949C8D1Ev,_ZThn5100_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N7S5949C8D1Ev,_ZThn5860_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S5949C8D0Ev,_ZThn1572_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S5949C8D0Ev,_ZThn1728_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N7S5949C8D0Ev,_ZThn4612_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N7S5949C8D0Ev,_ZThn5372_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2656_N7S5949C8D1Ev,_ZThn1572_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2928_N7S5949C8D1Ev,_ZThn1728_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7808_N7S5949C8D1Ev,_ZThn4612_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N7S5949C8D1Ev,_ZThn5372_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C10D0Ev,_ZTv0_n24_N8S5949C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S5949C10D0Ev,_ZThn5860_N8S5949C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C10D1Ev,_ZTv0_n24_N8S5949C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9904_N8S5949C10D1Ev,_ZThn5860_N8S5949C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C10D0Ev,_ZTv0_n12_N8S5949C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S5949C10D0Ev,_ZThn5372_N8S5949C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C10D1Ev,_ZTv0_n12_N8S5949C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9088_N8S5949C10D1Ev,_ZThn5372_N8S5949C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S5949C10D0Ev,_ZTv0_n36_N8S5949C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S5949C10D0Ev,_ZThn3644_N8S5949C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S5949C10D1Ev,_ZTv0_n36_N8S5949C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6160_N8S5949C10D1Ev,_ZThn3644_N8S5949C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5949C10 = {  "S5949C10", // class name
  bases_S5949C10, 25,
  &(vtc_S5949C10[0]), // expected_vtbl_contents
  &(vtt_S5949C10[0]), // expected_vtt_contents
  ABISELECT(9920,5872), // object size
  NSPAIRA(_ZTI8S5949C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S5949C10),102, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S5949C10),65, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5949C1  : S19968C3 , virtual S5949C3 , S5949C5 , S5949C10 {
  short s5949c1f0;
  int s5949c1f1;
  ::S19968C4 s5949c1f2;
  short s5949c1f3:10;
  ~S5949C1(); // tgen
  S5949C1(); // tgen
};
//SIG(1 S5949C1) C1{ BC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} BC5{ VBC2 VBC6{ VBC7{ m} VBC2 Fp[9]} BC8{ VBC3 VBC6 VBC9{ VBC6 vd Fi:21 Fi} BC2 v3} BC9 BC3 vd Fi} BC10{ VBC11{ VBC2 BC8 BC12{ VBC7 VBC6 BC9 BC8 Fi Fi Fi Fs Fi FC5 FL Fp Fi} vd Fi} BC5 BC2 BC13{ BC2 VBC3 BC12 BC9 vd Fs Fs[4] Fs FC3} vd Fc Fs FC2[6]} Fs Fi FU4 Fs:10}


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

static void Test_S5949C1()
{
  extern Class_Descriptor cd_S5949C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(712,1689)];
    init_test(&cd_S5949C1, buf);
    S5949C1 *dp, &lv = *(dp=new (buf) S5949C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11376,6752), "sizeof(S5949C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5949C1)");
    /*is_ambiguous_... S5949C1::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C3 */ AMB_check_base_class_offset(lv, (S5949C3*), ABISELECT(7616,4524), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C5*), ABISELECT(7616,4524), "S5949C1");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C11*), ABISELECT(7616,4524), "S5949C1");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(7616,4524), "S5949C1");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C5*)(S5949C10*), ABISELECT(7616,4524), "S5949C1");
    check_base_class_offset(lv, (S5949C3*)(S5949C13*)(S5949C10*), ABISELECT(7616,4524), "S5949C1");
    check_base_class_offset(lv, (S5949C3*)(S5949C8*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(7616,4524), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C5*), ABISELECT(8352,4972), "S5949C1");
    check_base_class_offset(lv, (S19968C3*)(S5949C6*), ABISELECT(8352,4972), "S5949C1");
    /*is_ambiguous_... S5949C11::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C11*), ABISELECT(8352,4972), "S5949C1");
    /*is_ambiguous_... S5949C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C5*)(S5949C10*), ABISELECT(8352,4972), "S5949C1");
    check_base_class_offset(lv, (S22028C16*)(S5949C6*), 0, "S5949C1");
    check_base_class_offset(lv, (S22028C16*)(S5949C12*)(S5949C11*), 0, "S5949C1");
    check_base_class_offset(lv, (S22028C16*)(S5949C12*)(S5949C13*)(S5949C10*), 0, "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C5*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C5*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C5*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C11*), ABISELECT(8592,5112), "S5949C1");
    check_base_class_offset(lv, (S5949C6*)(S5949C12*)(S5949C11*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C12*)(S5949C11*), ABISELECT(8592,5112), "S5949C1");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(8592,5112), "S5949C1");
    check_base_class_offset(lv, (S5949C6*)(S5949C5*)(S5949C10*), ABISELECT(8592,5112), "S5949C1");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C5*)(S5949C10*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C5::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C5*)(S5949C10*), ABISELECT(8592,5112), "S5949C1");
    check_base_class_offset(lv, (S5949C6*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(8592,5112), "S5949C1");
    check_base_class_offset(lv, (S5949C6*)(S5949C8*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C13::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C6*)(S5949C9*)(S5949C13*)(S5949C10*), ABISELECT(8592,5112), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C5*), ABISELECT(8672,5152), "S5949C1");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C11*), ABISELECT(8672,5152), "S5949C1");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(8672,5152), "S5949C1");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C5*)(S5949C10*), ABISELECT(8672,5152), "S5949C1");
    check_base_class_offset(lv, (S5949C9*)(S5949C8*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(8672,5152), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C5*), ABISELECT(16,4), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C8*)(S5949C5*), 0, "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C5*), ABISELECT(256,144), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C3*)(S5949C5*), ABISELECT(272,156), "S5949C1");
    /*is_ambiguous_... S5949C1::S5949C5 */ AMB_check_base_class_offset(lv, (S5949C5*), 0, "S5949C1");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C11*), ABISELECT(8704,5168), "S5949C1");
    /*is_ambiguous_... S5949C11::S5949C8 */ AMB_check_base_class_offset(lv, (S5949C8*)(S5949C11*), ABISELECT(8688,5164), "S5949C1");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C12*)(S5949C11*), ABISELECT(8944,5308), "S5949C1");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(8976,5324), "S5949C1");
    check_base_class_offset(lv, (S5949C8*)(S5949C12*)(S5949C11*), ABISELECT(8960,5320), "S5949C1");
    check_base_class_offset(lv, (S5949C12*)(S5949C11*), ABISELECT(8944,5308), "S5949C1");
    check_base_class_offset(lv, (S5949C11*)(S5949C10*), ABISELECT(8688,5164), "S5949C1");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C5*)(S5949C10*), ABISELECT(1280,752), "S5949C1");
    check_base_class_offset(lv, (S5949C8*)(S5949C5*)(S5949C10*), ABISELECT(1264,748), "S5949C1");
    /*is_ambiguous_... S5949C5::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C5*)(S5949C10*), ABISELECT(1520,892), "S5949C1");
    /*is_ambiguous_... S5949C5::S5949C3 */ AMB_check_base_class_offset(lv, (S5949C3*)(S5949C5*)(S5949C10*), ABISELECT(1536,904), "S5949C1");
    check_base_class_offset(lv, (S5949C5*)(S5949C10*), ABISELECT(1264,748), "S5949C1");
    /*is_ambiguous_... S5949C10::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C10*), ABISELECT(2288,1356), "S5949C1");
    /*is_ambiguous_... S5949C13::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C13*)(S5949C10*), ABISELECT(4960,2936), "S5949C1");
    /*is_ambiguous_... S5949C12::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(2528,1496), "S5949C1");
    /*is_ambiguous_... S5949C8::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S5949C8*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(2560,1512), "S5949C1");
    check_base_class_offset(lv, (S5949C8*)(S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(2544,1508), "S5949C1");
    check_base_class_offset(lv, (S5949C12*)(S5949C13*)(S5949C10*), ABISELECT(2528,1496), "S5949C1");
    /*is_ambiguous_... S5949C13::S5949C9 */ AMB_check_base_class_offset(lv, (S5949C9*)(S5949C13*)(S5949C10*), ABISELECT(5200,3076), "S5949C1");
    check_base_class_offset(lv, (S5949C13*)(S5949C10*), ABISELECT(2528,1496), "S5949C1");
    check_base_class_offset(lv, (S5949C10*), ABISELECT(1264,748), "S5949C1");
    check_field_offset(lv, s5949c1f0, ABISELECT(7424,4392), "S5949C1.s5949c1f0");
    check_field_offset(lv, s5949c1f1, ABISELECT(7428,4396), "S5949C1.s5949c1f1");
    check_field_offset(lv, s5949c1f2, ABISELECT(7440,4400), "S5949C1.s5949c1f2");
    set_bf_and_test(lv, s5949c1f3, ABISELECT(7600,4520), 0, 10, 1, "S5949C1");
    set_bf_and_test(lv, s5949c1f3, ABISELECT(7600,4520), 0, 10, hide_sll(1LL<<9), "S5949C1");
    test_class_info(&lv, &cd_S5949C1);
    dp->~S5949C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5949C1(Test_S5949C1, "S5949C1", ABISELECT(11376,6752));

#else // __cplusplus

extern void _ZN7S5949C1C1Ev();
extern void _ZN7S5949C1D1Ev();
Name_Map name_map_S5949C1[] = {
  NSPAIR(_ZN7S5949C1C1Ev),
  NSPAIR(_ZN7S5949C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S5949C6;
extern VTBL_ENTRY _ZTI7S5949C6[];
extern  VTBL_ENTRY _ZTV7S5949C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C6[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S5949C5;
extern VTBL_ENTRY _ZTI7S5949C5[];
extern  VTBL_ENTRY _ZTV7S5949C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C5[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C12;
extern VTBL_ENTRY _ZTI8S5949C12[];
extern  VTBL_ENTRY _ZTV8S5949C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C12[];
extern Class_Descriptor cd_S5949C11;
extern VTBL_ENTRY _ZTI8S5949C11[];
extern  VTBL_ENTRY _ZTV8S5949C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C11[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C3;
extern VTBL_ENTRY _ZTI7S5949C3[];
extern  VTBL_ENTRY _ZTV7S5949C3[];
extern Class_Descriptor cd_S5949C5;
extern VTBL_ENTRY _ZTI7S5949C5[];
extern  VTBL_ENTRY _ZTV7S5949C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C5[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S5949C8;
extern VTBL_ENTRY _ZTI7S5949C8[];
extern  VTBL_ENTRY _ZTV7S5949C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C8[];
extern Class_Descriptor cd_S5949C12;
extern VTBL_ENTRY _ZTI8S5949C12[];
extern  VTBL_ENTRY _ZTV8S5949C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C12[];
extern Class_Descriptor cd_S5949C9;
extern VTBL_ENTRY _ZTI7S5949C9[];
extern  VTBL_ENTRY _ZTV7S5949C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C9[];
extern Class_Descriptor cd_S5949C13;
extern VTBL_ENTRY _ZTI8S5949C13[];
extern  VTBL_ENTRY _ZTV8S5949C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C13[];
extern Class_Descriptor cd_S5949C10;
extern VTBL_ENTRY _ZTI8S5949C10[];
extern  VTBL_ENTRY _ZTV8S5949C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S5949C10[];
static Base_Class bases_S5949C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5949C3,    ABISELECT(7616,4524), //bcp->offset
    74, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(8352,4972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S5949C6,    ABISELECT(8592,5112), //bcp->offset
    83, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S5949C9,    ABISELECT(8672,5152), //bcp->offset
    87, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S5949C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(256,144), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5949C3,    ABISELECT(272,156), //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
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5949C5,    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_S19968C3,    ABISELECT(8704,5168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5949C8,    ABISELECT(8688,5164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(8944,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(8976,5324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(8960,5320), //bcp->offset
    116, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S5949C12,    ABISELECT(8944,5308), //bcp->offset
    107, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S5949C11,    ABISELECT(8688,5164), //bcp->offset
    95, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1280,752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(1520,892), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5949C3,    ABISELECT(1536,904), //bcp->offset
    42, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S5949C5,    ABISELECT(1264,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(2288,1356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(4960,2936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(2528,1496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19968C3,    ABISELECT(2560,1512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S5949C8,    ABISELECT(2544,1508), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S5949C12,    ABISELECT(2528,1496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5949C9,    ABISELECT(5200,3076), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S5949C13,    ABISELECT(2528,1496), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S5949C10,    ABISELECT(1264,748), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5949C1[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C1D1Ev();
extern void _ZN7S5949C1D0Ev();
extern void ABISELECT(_ZThn256_N7S5949C1D1Ev,_ZThn144_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn256_N7S5949C1D0Ev,_ZThn144_N7S5949C1D0Ev)();
extern void ABISELECT(_ZThn272_N7S5949C1D1Ev,_ZThn156_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn272_N7S5949C1D0Ev,_ZThn156_N7S5949C1D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn1264_N7S5949C1D1Ev,_ZThn748_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn1264_N7S5949C1D0Ev,_ZThn748_N7S5949C1D0Ev)();
extern void ABISELECT(_ZThn1520_N7S5949C1D1Ev,_ZThn892_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn1520_N7S5949C1D0Ev,_ZThn892_N7S5949C1D0Ev)();
extern void ABISELECT(_ZThn1536_N7S5949C1D1Ev,_ZThn904_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn1536_N7S5949C1D0Ev,_ZThn904_N7S5949C1D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZThn2528_N7S5949C1D1Ev,_ZThn1496_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn2528_N7S5949C1D0Ev,_ZThn1496_N7S5949C1D0Ev)();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn2544_N7S5949C1D1Ev,_ZThn1508_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn2544_N7S5949C1D0Ev,_ZThn1508_N7S5949C1D0Ev)();
extern void ABISELECT(_ZThn5200_N7S5949C1D1Ev,_ZThn3076_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn5200_N7S5949C1D0Ev,_ZThn3076_N7S5949C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S5949C1D1Ev,_ZTv0_n12_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn7616_N7S5949C1D1Ev,_ZThn4524_N7S5949C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C1D0Ev,_ZTv0_n12_N7S5949C1D0Ev)();
extern void ABISELECT(_ZThn7616_N7S5949C1D0Ev,_ZThn4524_N7S5949C1D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S5949C1D1Ev,_ZTv0_n24_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn8672_N7S5949C1D1Ev,_ZThn5152_N7S5949C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C1D0Ev,_ZTv0_n24_N7S5949C1D0Ev)();
extern void ABISELECT(_ZThn8672_N7S5949C1D0Ev,_ZThn5152_N7S5949C1D0Ev)() __attribute__((weak));
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZTv0_n72_N7S5949C1D1Ev,_ZTv0_n36_N7S5949C1D1Ev)();
extern void ABISELECT(_ZThn8688_N7S5949C1D1Ev,_ZThn5164_N7S5949C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S5949C1D0Ev,_ZTv0_n36_N7S5949C1D0Ev)();
extern void ABISELECT(_ZThn8688_N7S5949C1D0Ev,_ZThn5164_N7S5949C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn256_n72_N7S5949C1D1Ev,_ZTvn144_n36_N7S5949C1D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N7S5949C1D0Ev,_ZTvn144_n36_N7S5949C1D0Ev)();
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZTvn272_n72_N7S5949C1D1Ev,_ZTvn156_n36_N7S5949C1D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N7S5949C1D0Ev,_ZTvn156_n36_N7S5949C1D0Ev)();
static  VTBL_ENTRY vtc_S5949C1[] = {
  ABISELECT(8688,5164),
  ABISELECT(8672,5152),
  ABISELECT(8352,4972),
  0,
  ABISELECT(8592,5112),
  ABISELECT(7616,4524),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C1D0Ev,
  ABISELECT(8096,4828),
  ABISELECT(-256,-144),
  ABISELECT(8336,4968),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C1D1Ev,_ZThn144_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C1D0Ev,_ZThn144_N7S5949C1D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S5949C1D1Ev,_ZThn156_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N7S5949C1D0Ev,_ZThn156_N7S5949C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(7424,4416),
  ABISELECT(7408,4404),
  ABISELECT(7088,4224),
  ABISELECT(-1264,-748),
  ABISELECT(7328,4364),
  ABISELECT(6352,3776),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N7S5949C1D1Ev,_ZThn748_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N7S5949C1D0Ev,_ZThn748_N7S5949C1D0Ev),
  ABISELECT(6832,4080),
  ABISELECT(-1520,-892),
  ABISELECT(7072,4220),
  ABISELECT(-1520,-892),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1520_N7S5949C1D1Ev,_ZThn892_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1520_N7S5949C1D0Ev,_ZThn892_N7S5949C1D0Ev),
  ABISELECT(-1536,-904),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1536_N7S5949C1D1Ev,_ZThn904_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1536_N7S5949C1D0Ev,_ZThn904_N7S5949C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(6144,3656),
  ABISELECT(5088,3028),
  ABISELECT(5824,3476),
  ABISELECT(-2528,-1496),
  ABISELECT(6064,3616),
  ABISELECT(-2528,-1496),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2528_N7S5949C1D1Ev,_ZThn1496_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2528_N7S5949C1D0Ev,_ZThn1496_N7S5949C1D0Ev),
  ABISELECT(6128,3644),
  ABISELECT(5808,3464),
  ABISELECT(-2544,-1508),
  ABISELECT(6048,3604),
  ABISELECT(5072,3016),
  ABISELECT(-2544,-1508),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2544_N7S5949C1D1Ev,_ZThn1508_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2544_N7S5949C1D0Ev,_ZThn1508_N7S5949C1D0Ev),
  ABISELECT(3152,1896),
  ABISELECT(-5200,-3076),
  ABISELECT(3392,2036),
  ABISELECT(-5200,-3076),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5200_N7S5949C1D1Ev,_ZThn3076_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5200_N7S5949C1D0Ev,_ZThn3076_N7S5949C1D0Ev),
  0,
  0,
  ABISELECT(-7616,-4524),
  ABISELECT(-7616,-4524),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C1D1Ev,_ZTv0_n12_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C1D0Ev,_ZTv0_n12_N7S5949C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-8592,-5112),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  ABISELECT(-8672,-5152),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-8672,-5152),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C1D1Ev,_ZTv0_n24_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C1D0Ev,_ZTv0_n24_N7S5949C1D0Ev),
  ABISELECT(-8688,-5164),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-336,-192),
  ABISELECT(-8688,-5164),
  ABISELECT(-96,-52),
  ABISELECT(-1072,-640),
  ABISELECT(-8688,-5164),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5949C1D1Ev,_ZTv0_n36_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S5949C1D0Ev,_ZTv0_n36_N7S5949C1D0Ev),
  ABISELECT(-272,-156),
  ABISELECT(-1328,-784),
  ABISELECT(-592,-336),
  ABISELECT(-8944,-5308),
  ABISELECT(-352,-196),
  ABISELECT(-8944,-5308),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S5949C1D1Ev,_ZTvn144_n36_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N7S5949C1D0Ev,_ZTvn144_n36_N7S5949C1D0Ev),
  ABISELECT(-288,-168),
  ABISELECT(-608,-348),
  ABISELECT(-8960,-5320),
  ABISELECT(-368,-208),
  ABISELECT(-1344,-796),
  ABISELECT(-8960,-5320),
  (VTBL_ENTRY)&(_ZTI7S5949C1[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S5949C1D1Ev,_ZTvn156_n36_N7S5949C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N7S5949C1D0Ev,_ZTvn156_n36_N7S5949C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5949C1[];
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C5D1Ev();
extern void _ZN7S5949C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C5__7S5949C1[] = {
  ABISELECT(8672,5152),
  ABISELECT(8352,4972),
  0,
  ABISELECT(8592,5112),
  ABISELECT(7616,4524),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D0Ev,
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C87S5949C5__7S5949C1[] = {
  ABISELECT(8672,5152),
  ABISELECT(8352,4972),
  0,
  ABISELECT(8592,5112),
  ABISELECT(7616,4524),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn7616_N7S5949C8D1Ev,_ZThn4524_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn7616_N7S5949C8D0Ev,_ZThn4524_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C87S5949C5__7S5949C1[] = {
  0,
  0,
  ABISELECT(-7616,-4524),
  ABISELECT(-7616,-4524),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C87S5949C5__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-8592,-5112),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn8672_N7S5949C8D1Ev,_ZThn5152_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn8672_N7S5949C8D0Ev,_ZThn5152_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C87S5949C5__7S5949C1[] = {
  ABISELECT(-8672,-5152),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-8672,-5152),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C97S5949C5__A1__7S5949C1[] = {
  ABISELECT(8096,4828),
  ABISELECT(-256,-144),
  ABISELECT(8336,4968),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C97S5949C5__A1__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-8336,-4968),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C5__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-8592,-5112),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn7616_N7S5949C5D1Ev,_ZThn4524_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn7616_N7S5949C5D0Ev,_ZThn4524_N7S5949C5D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C5__7S5949C1[] = {
  0,
  0,
  ABISELECT(-7616,-4524),
  ABISELECT(-7616,-4524),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn8672_N7S5949C5D1Ev,_ZThn5152_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn8672_N7S5949C5D0Ev,_ZThn5152_N7S5949C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C5__7S5949C1[] = {
  ABISELECT(-8672,-5152),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-8672,-5152),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev),
};
extern void ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__7S5949C5__7S5949C1[] = {
  ABISELECT(8096,4828),
  ABISELECT(-256,-144),
  ABISELECT(8336,4968),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN8S5949C10D1Ev();
extern void _ZN8S5949C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C10__7S5949C1[] = {
  ABISELECT(7424,4416),
  ABISELECT(7408,4404),
  ABISELECT(7088,4224),
  ABISELECT(-1264,-748),
  ABISELECT(7328,4364),
  ABISELECT(6352,3776),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN8S5949C10D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C10D0Ev,
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C5D1Ev();
extern void _ZN7S5949C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C58S5949C10__A1__7S5949C1[] = {
  ABISELECT(7408,4404),
  ABISELECT(7088,4224),
  ABISELECT(-1264,-748),
  ABISELECT(7328,4364),
  ABISELECT(6352,3776),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C5D0Ev,
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C87S5949C58S5949C10__A3__7S5949C1[] = {
  ABISELECT(7408,4404),
  ABISELECT(7088,4224),
  ABISELECT(-1264,-748),
  ABISELECT(7328,4364),
  ABISELECT(6352,3776),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn6352_N7S5949C8D1Ev,_ZThn3776_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn6352_N7S5949C8D0Ev,_ZThn3776_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C87S5949C58S5949C10__A3__7S5949C1[] = {
  0,
  0,
  ABISELECT(-6352,-3776),
  ABISELECT(-6352,-3776),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C87S5949C58S5949C10__A3__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-7328,-4364),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn7408_N7S5949C8D1Ev,_ZThn4404_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn7408_N7S5949C8D0Ev,_ZThn4404_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C87S5949C58S5949C10__A3__7S5949C1[] = {
  ABISELECT(-7408,-4404),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-7408,-4404),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C97S5949C58S5949C10__A3__7S5949C1[] = {
  ABISELECT(6832,4080),
  ABISELECT(-1520,-892),
  ABISELECT(7072,4220),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C97S5949C58S5949C10__A3__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-7072,-4220),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C58S5949C10__A1__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-7328,-4364),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn6352_N7S5949C5D1Ev,_ZThn3776_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn6352_N7S5949C5D0Ev,_ZThn3776_N7S5949C5D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C58S5949C10__A1__7S5949C1[] = {
  0,
  0,
  ABISELECT(-6352,-3776),
  ABISELECT(-6352,-3776),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn7408_N7S5949C5D1Ev,_ZThn4404_N7S5949C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev)();
extern void ABISELECT(_ZThn7408_N7S5949C5D0Ev,_ZThn4404_N7S5949C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C58S5949C10__A1__7S5949C1[] = {
  ABISELECT(-7408,-4404),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-7408,-4404),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev),
};
extern void ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev)();
extern void ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__7S5949C58S5949C10__A1__7S5949C1[] = {
  ABISELECT(6832,4080),
  ABISELECT(-1520,-892),
  ABISELECT(7072,4220),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI7S5949C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D1Ev,_ZThn144_N7S5949C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N7S5949C5D0Ev,_ZThn144_N7S5949C5D0Ev),
};
extern void _ZN8S5949C13D1Ev();
extern void _ZN8S5949C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C138S5949C10__7S5949C1[] = {
  ABISELECT(6144,3656),
  ABISELECT(5088,3028),
  ABISELECT(5824,3476),
  ABISELECT(-2528,-1496),
  ABISELECT(6064,3616),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&_ZN8S5949C13D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C13D0Ev,
};
extern void _ZN8S5949C12D1Ev();
extern void _ZN8S5949C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C128S5949C138S5949C10__A1__7S5949C1[] = {
  ABISELECT(6144,3656),
  ABISELECT(5088,3028),
  ABISELECT(5824,3476),
  ABISELECT(-2528,-1496),
  ABISELECT(6064,3616),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN8S5949C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C12D0Ev,
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C128S5949C138S5949C10__A4__7S5949C1[] = {
  ABISELECT(5824,3476),
  ABISELECT(-2528,-1496),
  ABISELECT(6064,3616),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C128S5949C138S5949C10__A4__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-6064,-3616),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[] = {
  ABISELECT(6128,3644),
  ABISELECT(5808,3464),
  ABISELECT(-2544,-1508),
  ABISELECT(6048,3604),
  ABISELECT(5072,3016),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn5072_N7S5949C8D1Ev,_ZThn3016_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn5072_N7S5949C8D0Ev,_ZThn3016_N7S5949C8D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[] = {
  0,
  0,
  ABISELECT(-5072,-3016),
  ABISELECT(-5072,-3016),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-6048,-3604),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZThn6128_N7S5949C8D1Ev,_ZThn3644_N7S5949C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
extern void ABISELECT(_ZThn6128_N7S5949C8D0Ev,_ZThn3644_N7S5949C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[] = {
  ABISELECT(-6128,-3644),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-6128,-3644),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C128S5949C138S5949C10__A1__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-6064,-3616),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C128S5949C138S5949C10__A1__7S5949C1[] = {
  ABISELECT(6128,3644),
  ABISELECT(5808,3464),
  ABISELECT(-2544,-1508),
  ABISELECT(6048,3604),
  ABISELECT(5072,3016),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn5088_N8S5949C12D1Ev,_ZThn3028_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn5088_N8S5949C12D0Ev,_ZThn3028_N8S5949C12D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C128S5949C138S5949C10__A1__7S5949C1[] = {
  0,
  0,
  ABISELECT(-5088,-3028),
  ABISELECT(-5088,-3028),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn6144_N8S5949C12D1Ev,_ZThn3656_N8S5949C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev)();
extern void ABISELECT(_ZThn6144_N8S5949C12D0Ev,_ZThn3656_N8S5949C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C128S5949C138S5949C10__A1__7S5949C1[] = {
  ABISELECT(-6144,-3656),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-6144,-3656),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C138S5949C10__A5__7S5949C1[] = {
  ABISELECT(3152,1896),
  ABISELECT(-5200,-3076),
  ABISELECT(3392,2036),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C138S5949C10__A5__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-3392,-2036),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn5088_N8S5949C13D1Ev,_ZThn3028_N8S5949C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev)();
extern void ABISELECT(_ZThn5088_N8S5949C13D0Ev,_ZThn3028_N8S5949C13D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C138S5949C10__7S5949C1[] = {
  0,
  0,
  ABISELECT(-5088,-3028),
  ABISELECT(-5088,-3028),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C138S5949C10__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-6064,-3616),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C13D1Ev,_ZThn12_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C13D0Ev,_ZThn12_N8S5949C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C12__8S5949C138S5949C10__7S5949C1[] = {
  ABISELECT(6128,3644),
  ABISELECT(5808,3464),
  ABISELECT(-2544,-1508),
  ABISELECT(6048,3604),
  ABISELECT(5072,3016),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C13D1Ev,_ZThn12_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C13D0Ev,_ZThn12_N8S5949C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn6144_N8S5949C13D1Ev,_ZThn3656_N8S5949C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev)();
extern void ABISELECT(_ZThn6144_N8S5949C13D0Ev,_ZThn3656_N8S5949C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C138S5949C10__7S5949C1[] = {
  ABISELECT(-6144,-3656),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-6144,-3656),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev),
};
extern void ABISELECT(_ZThn2672_N8S5949C13D1Ev,_ZThn1580_N8S5949C13D1Ev)();
extern void ABISELECT(_ZThn2672_N8S5949C13D0Ev,_ZThn1580_N8S5949C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A__8S5949C138S5949C10__7S5949C1[] = {
  ABISELECT(3152,1896),
  ABISELECT(-5200,-3076),
  ABISELECT(3392,2036),
  ABISELECT(-2672,-1580),
  (VTBL_ENTRY)&(_ZTI8S5949C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S5949C13D1Ev,_ZThn1580_N8S5949C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2672_N8S5949C13D0Ev,_ZThn1580_N8S5949C13D0Ev),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZTv0_n72_N8S5949C10D1Ev,_ZTv0_n36_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn7424_N8S5949C10D1Ev,_ZThn4416_N8S5949C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S5949C10D0Ev,_ZTv0_n36_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn7424_N8S5949C10D0Ev,_ZThn4416_N8S5949C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S5949C11__8S5949C10__7S5949C1[] = {
  ABISELECT(-7424,-4416),
  0,
  ABISELECT(-16,-12),
  ABISELECT(-336,-192),
  ABISELECT(-8688,-5164),
  ABISELECT(-96,-52),
  ABISELECT(-1072,-640),
  ABISELECT(-7424,-4416),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S5949C10D1Ev,_ZTv0_n36_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S5949C10D0Ev,_ZTv0_n36_N8S5949C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C10D1Ev,_ZTv0_n12_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn6352_N8S5949C10D1Ev,_ZThn3776_N8S5949C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S5949C10D0Ev,_ZTv0_n12_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn6352_N8S5949C10D0Ev,_ZThn3776_N8S5949C10D0Ev)() __attribute__((weak));
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C10__7S5949C1[] = {
  0,
  0,
  ABISELECT(-6352,-3776),
  ABISELECT(-6352,-3776),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C10D1Ev,_ZTv0_n12_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C10D0Ev,_ZTv0_n12_N8S5949C10D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C10__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(-7328,-4364),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S5949C10D1Ev,_ZTv0_n24_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn7408_N8S5949C10D1Ev,_ZThn4404_N8S5949C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S5949C10D0Ev,_ZTv0_n24_N8S5949C10D0Ev)();
extern void ABISELECT(_ZThn7408_N8S5949C10D0Ev,_ZThn4404_N8S5949C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S5949C9__8S5949C10__7S5949C1[] = {
  ABISELECT(-7408,-4404),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(-7408,-4404),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C10D1Ev,_ZTv0_n24_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C10D0Ev,_ZTv0_n24_N8S5949C10D0Ev),
};
extern void ABISELECT(_ZTvn256_n72_N8S5949C10D1Ev,_ZTvn144_n36_N8S5949C10D1Ev)();
extern void ABISELECT(_ZTvn256_n72_N8S5949C10D0Ev,_ZTvn144_n36_N8S5949C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5949C128S5949C11__8S5949C10__7S5949C1[] = {
  ABISELECT(-272,-156),
  ABISELECT(-1328,-784),
  ABISELECT(-592,-336),
  ABISELECT(-8944,-5308),
  ABISELECT(-352,-196),
  ABISELECT(-7680,-4560),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S5949C10D1Ev,_ZTvn144_n36_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn256_n72_N8S5949C10D0Ev,_ZTvn144_n36_N8S5949C10D0Ev),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZTvn272_n72_N8S5949C10D1Ev,_ZTvn156_n36_N8S5949C10D1Ev)();
extern void ABISELECT(_ZTvn272_n72_N8S5949C10D0Ev,_ZTvn156_n36_N8S5949C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C128S5949C11__A1__8S5949C10__7S5949C1[] = {
  ABISELECT(-288,-168),
  ABISELECT(-608,-348),
  ABISELECT(-8960,-5320),
  ABISELECT(-368,-208),
  ABISELECT(-1344,-796),
  ABISELECT(-7696,-4572),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S5949C10D1Ev,_ZTvn156_n36_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn272_n72_N8S5949C10D0Ev,_ZTvn156_n36_N8S5949C10D0Ev),
};
extern void ABISELECT(_ZThn256_N8S5949C10D1Ev,_ZThn144_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn256_N8S5949C10D0Ev,_ZThn144_N8S5949C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C97S5949C5__A2__8S5949C10__7S5949C1[] = {
  ABISELECT(6832,4080),
  ABISELECT(-1520,-892),
  ABISELECT(7072,4220),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C10D1Ev,_ZThn144_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C10D0Ev,_ZThn144_N8S5949C10D0Ev),
};
extern void ABISELECT(_ZThn1264_N8S5949C10D1Ev,_ZThn748_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn1264_N8S5949C10D0Ev,_ZThn748_N8S5949C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5949C13__8S5949C10__7S5949C1[] = {
  ABISELECT(6144,3656),
  ABISELECT(5088,3028),
  ABISELECT(5824,3476),
  ABISELECT(-2528,-1496),
  ABISELECT(6064,3616),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S5949C10D1Ev,_ZThn748_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1264_N8S5949C10D0Ev,_ZThn748_N8S5949C10D0Ev),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn1280_N8S5949C10D1Ev,_ZThn760_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn1280_N8S5949C10D0Ev,_ZThn760_N8S5949C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C128S5949C13__A3__8S5949C10__7S5949C1[] = {
  ABISELECT(6128,3644),
  ABISELECT(5808,3464),
  ABISELECT(-2544,-1508),
  ABISELECT(6048,3604),
  ABISELECT(5072,3016),
  ABISELECT(-1280,-760),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5949C10D1Ev,_ZThn760_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1280_N8S5949C10D0Ev,_ZThn760_N8S5949C10D0Ev),
};
extern void ABISELECT(_ZThn3936_N8S5949C10D1Ev,_ZThn2328_N8S5949C10D1Ev)();
extern void ABISELECT(_ZThn3936_N8S5949C10D0Ev,_ZThn2328_N8S5949C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C13__A4__8S5949C10__7S5949C1[] = {
  ABISELECT(3152,1896),
  ABISELECT(-5200,-3076),
  ABISELECT(3392,2036),
  ABISELECT(-3936,-2328),
  (VTBL_ENTRY)&(_ZTI8S5949C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S5949C10D1Ev,_ZThn2328_N8S5949C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3936_N8S5949C10D0Ev,_ZThn2328_N8S5949C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C6[0]),
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C1[] = {
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C9__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN8S5949C11D1Ev();
extern void _ZN8S5949C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C11__7S5949C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-336,-192),
  ABISELECT(-8688,-5164),
  ABISELECT(-96,-52),
  ABISELECT(-1072,-640),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN8S5949C11D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C11D0Ev,
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C11__A1__7S5949C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-336,-192),
  ABISELECT(-8688,-5164),
  ABISELECT(-96,-52),
  ABISELECT(-1072,-640),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C11__A1__7S5949C1[] = {
  0,
  0,
  ABISELECT(1072,640),
  ABISELECT(1072,640),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C11__A1__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C11__A1__7S5949C1[] = {
  ABISELECT(16,12),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
extern void _ZN8S5949C12D1Ev();
extern void _ZN8S5949C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S5949C128S5949C11__7S5949C1[] = {
  ABISELECT(-272,-156),
  ABISELECT(-1328,-784),
  ABISELECT(-592,-336),
  ABISELECT(-8944,-5308),
  ABISELECT(-352,-196),
  0,
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN8S5949C12D1Ev,
  (VTBL_ENTRY)&_ZN8S5949C12D0Ev,
};
extern void _ZN7S5949C9D1Ev();
extern void _ZN7S5949C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C98S5949C128S5949C11__A2__7S5949C1[] = {
  ABISELECT(-592,-336),
  ABISELECT(-8944,-5308),
  ABISELECT(-352,-196),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
  (VTBL_ENTRY)&_ZN7S5949C9D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C98S5949C128S5949C11__A2__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(352,196),
  (VTBL_ENTRY)&(_ZTI7S5949C9[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void _ZN7S5949C8D1Ev();
extern void _ZN7S5949C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C128S5949C11__A2__7S5949C1[] = {
  ABISELECT(-288,-168),
  ABISELECT(-608,-348),
  ABISELECT(-8960,-5320),
  ABISELECT(-368,-208),
  ABISELECT(-1344,-796),
  0,
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D1Ev,
  (VTBL_ENTRY)&_ZN7S5949C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__7S5949C88S5949C128S5949C11__A2__7S5949C1[] = {
  0,
  0,
  ABISELECT(1344,796),
  ABISELECT(1344,796),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__7S5949C88S5949C128S5949C11__A2__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(368,208),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__7S5949C88S5949C128S5949C11__A2__7S5949C1[] = {
  ABISELECT(288,168),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(288,168),
  (VTBL_ENTRY)&(_ZTI7S5949C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C128S5949C11__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(352,196),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C8__8S5949C128S5949C11__7S5949C1[] = {
  ABISELECT(-288,-168),
  ABISELECT(-608,-348),
  ABISELECT(-8960,-5320),
  ABISELECT(-368,-208),
  ABISELECT(-1344,-796),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D1Ev,_ZThn12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S5949C12D0Ev,_ZThn12_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C128S5949C11__7S5949C1[] = {
  0,
  0,
  ABISELECT(1328,784),
  ABISELECT(1328,784),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__A1__8S5949C128S5949C11__7S5949C1[] = {
  ABISELECT(272,156),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(272,156),
  (VTBL_ENTRY)&(_ZTI8S5949C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev)();
extern void _ZN7S5949C32v1Ev();
extern void _ZN7S5949C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5949C3__8S5949C11__7S5949C1[] = {
  0,
  0,
  ABISELECT(1072,640),
  ABISELECT(1072,640),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C11D1Ev,_ZTv0_n12_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S5949C11D0Ev,_ZTv0_n12_N8S5949C11D0Ev),
  (VTBL_ENTRY)&_ZN7S5949C32v1Ev,
  (VTBL_ENTRY)&_ZN7S5949C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5949C6__8S5949C11__7S5949C1[] = {
  ABISELECT(-240,-140),
  ABISELECT(-8592,-5112),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C9__8S5949C11__7S5949C1[] = {
  ABISELECT(16,12),
  ABISELECT(-320,-180),
  ABISELECT(-8672,-5152),
  ABISELECT(-80,-40),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C11D1Ev,_ZTv0_n24_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S5949C11D0Ev,_ZTv0_n24_N8S5949C11D0Ev),
};
extern void ABISELECT(_ZThn256_N8S5949C11D1Ev,_ZThn144_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn256_N8S5949C11D0Ev,_ZThn144_N8S5949C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S5949C12__8S5949C11__7S5949C1[] = {
  ABISELECT(-272,-156),
  ABISELECT(-1328,-784),
  ABISELECT(-592,-336),
  ABISELECT(-8944,-5308),
  ABISELECT(-352,-196),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C11D1Ev,_ZThn144_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S5949C11D0Ev,_ZThn144_N8S5949C11D0Ev),
};
extern void _ZN7S5949C82v3Ev();
extern void ABISELECT(_ZThn272_N8S5949C11D1Ev,_ZThn156_N8S5949C11D1Ev)();
extern void ABISELECT(_ZThn272_N8S5949C11D0Ev,_ZThn156_N8S5949C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5949C88S5949C12__A1__8S5949C11__7S5949C1[] = {
  ABISELECT(-288,-168),
  ABISELECT(-608,-348),
  ABISELECT(-8960,-5320),
  ABISELECT(-368,-208),
  ABISELECT(-1344,-796),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S5949C11[0]),
  (VTBL_ENTRY)&_ZN7S5949C82v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C11D1Ev,_ZThn156_N8S5949C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S5949C11D0Ev,_ZThn156_N8S5949C11D0Ev),
};
static  VTT_ENTRY vtt_S5949C1[] = {
  {&(_ZTV7S5949C1[8]),  8,126},
  {&(_tg__ZTV7S5949C5__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C87S5949C5__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C87S5949C5__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C87S5949C5__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C87S5949C5__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C97S5949C5__A1__7S5949C1[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C97S5949C5__A1__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C6__7S5949C5__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C3__7S5949C5__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C9__7S5949C5__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C9__A__7S5949C5__7S5949C1[5]),  5,7},
  {&(_tg__ZTV8S5949C10__7S5949C1[8]),  8,11},
  {&(_tg__ZTV7S5949C58S5949C10__A1__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C87S5949C58S5949C10__A3__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C87S5949C58S5949C10__A3__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C87S5949C58S5949C10__A3__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C87S5949C58S5949C10__A3__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C97S5949C58S5949C10__A3__7S5949C1[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C97S5949C58S5949C10__A3__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C6__7S5949C58S5949C10__A1__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C3__7S5949C58S5949C10__A1__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C9__7S5949C58S5949C10__A1__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C9__A__7S5949C58S5949C10__A1__7S5949C1[5]),  5,7},
  {&(_tg__ZTV8S5949C138S5949C10__7S5949C1[7]),  7,9},
  {&(_tg__ZTV8S5949C128S5949C138S5949C10__A1__7S5949C1[7]),  7,9},
  {&(_tg__ZTV7S5949C98S5949C128S5949C138S5949C10__A4__7S5949C1[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C128S5949C138S5949C10__A4__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C128S5949C138S5949C10__A4__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C6__8S5949C128S5949C138S5949C10__A1__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C8__8S5949C128S5949C138S5949C10__A1__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C3__8S5949C128S5949C138S5949C10__A1__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C9__A1__8S5949C128S5949C138S5949C10__A1__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C98S5949C138S5949C10__A5__7S5949C1[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C138S5949C10__A5__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C3__8S5949C138S5949C10__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__8S5949C138S5949C10__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C12__8S5949C138S5949C10__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C9__A1__8S5949C138S5949C10__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C9__A__8S5949C138S5949C10__7S5949C1[5]),  5,7},
  {&(_tg__ZTV8S5949C11__8S5949C10__7S5949C1[9]),  9,12},
  {&(_tg__ZTV7S5949C3__8S5949C10__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__8S5949C10__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__8S5949C10__7S5949C1[6]),  6,8},
  {&(_tg__ZTV8S5949C128S5949C11__8S5949C10__7S5949C1[7]),  7,9},
  {&(_tg__ZTV7S5949C88S5949C128S5949C11__A1__8S5949C10__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C97S5949C5__A2__8S5949C10__7S5949C1[5]),  5,7},
  {&(_tg__ZTV8S5949C13__8S5949C10__7S5949C1[7]),  7,9},
  {&(_tg__ZTV7S5949C88S5949C128S5949C13__A3__8S5949C10__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C98S5949C13__A4__8S5949C10__7S5949C1[5]),  5,7},
  {&(_ZTV7S5949C1[79]),  79,126},
  {&(_ZTV7S5949C1[87]),  87,126},
  {&(_ZTV7S5949C1[93]),  93,126},
  {&(_ZTV7S5949C1[16]),  16,126},
  {&(_ZTV7S5949C1[32]),  32,126},
  {&(_ZTV7S5949C1[104]),  104,126},
  {&(_ZTV7S5949C1[114]),  114,126},
  {&(_ZTV7S5949C1[123]),  123,126},
  {&(_ZTV7S5949C1[40]),  40,126},
  {&(_ZTV7S5949C1[55]),  55,126},
  {&(_ZTV7S5949C1[64]),  64,126},
  {&(_ZTV7S5949C1[72]),  72,126},
  {&(_tg__ZTV7S5949C6__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C1[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C9__7S5949C1[4]),  4,4},
  {&(_tg__ZTV8S5949C11__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C88S5949C11__A1__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C11__A1__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C11__A1__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C11__A1__7S5949C1[6]),  6,8},
  {&(_tg__ZTV8S5949C128S5949C11__7S5949C1[7]),  7,9},
  {&(_tg__ZTV7S5949C98S5949C128S5949C11__A2__7S5949C1[5]),  5,7},
  {&(_tg__ZTV7S5949C6__7S5949C98S5949C128S5949C11__A2__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C88S5949C128S5949C11__A2__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C3__7S5949C88S5949C128S5949C11__A2__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__7S5949C88S5949C128S5949C11__A2__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__7S5949C88S5949C128S5949C11__A2__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C6__8S5949C128S5949C11__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C8__8S5949C128S5949C11__7S5949C1[7]),  7,10},
  {&(_tg__ZTV7S5949C3__8S5949C128S5949C11__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C9__A1__8S5949C128S5949C11__7S5949C1[6]),  6,8},
  {&(_tg__ZTV7S5949C3__8S5949C11__7S5949C1[5]),  5,9},
  {&(_tg__ZTV7S5949C6__8S5949C11__7S5949C1[4]),  4,4},
  {&(_tg__ZTV7S5949C9__8S5949C11__7S5949C1[6]),  6,8},
  {&(_tg__ZTV8S5949C12__8S5949C11__7S5949C1[7]),  7,9},
  {&(_tg__ZTV7S5949C88S5949C12__A1__8S5949C11__7S5949C1[7]),  7,10},
};
extern VTBL_ENTRY _ZTI7S5949C1[];
extern  VTBL_ENTRY _ZTV7S5949C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5949C1[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C10D0Ev,_ZTv0_n24_N8S5949C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7408_N8S5949C10D0Ev,_ZThn4404_N8S5949C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C10D1Ev,_ZTv0_n24_N8S5949C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7408_N8S5949C10D1Ev,_ZThn4404_N8S5949C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C10D0Ev,_ZTv0_n12_N8S5949C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S5949C10D0Ev,_ZThn3776_N8S5949C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C10D1Ev,_ZTv0_n12_N8S5949C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S5949C10D1Ev,_ZThn3776_N8S5949C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S5949C10D0Ev,_ZTv0_n36_N8S5949C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7424_N8S5949C10D0Ev,_ZThn4416_N8S5949C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S5949C10D1Ev,_ZTv0_n36_N8S5949C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7424_N8S5949C10D1Ev,_ZThn4416_N8S5949C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C13D0Ev,_ZTv0_n24_N8S5949C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6144_N8S5949C13D0Ev,_ZThn3656_N8S5949C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C13D1Ev,_ZTv0_n24_N8S5949C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6144_N8S5949C13D1Ev,_ZThn3656_N8S5949C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C13D0Ev,_ZTv0_n12_N8S5949C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S5949C13D0Ev,_ZThn3028_N8S5949C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C13D1Ev,_ZTv0_n12_N8S5949C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S5949C13D1Ev,_ZThn3028_N8S5949C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D0Ev,_ZTv0_n24_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6144_N8S5949C12D0Ev,_ZThn3656_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S5949C12D1Ev,_ZTv0_n24_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6144_N8S5949C12D1Ev,_ZThn3656_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D0Ev,_ZTv0_n12_N8S5949C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S5949C12D0Ev,_ZThn3028_N8S5949C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S5949C12D1Ev,_ZTv0_n12_N8S5949C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5088_N8S5949C12D1Ev,_ZThn3028_N8S5949C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C5D0Ev,_ZTv0_n24_N7S5949C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7408_N7S5949C5D0Ev,_ZThn4404_N7S5949C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8672_N7S5949C5D0Ev,_ZThn5152_N7S5949C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C5D1Ev,_ZTv0_n24_N7S5949C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7408_N7S5949C5D1Ev,_ZThn4404_N7S5949C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8672_N7S5949C5D1Ev,_ZThn5152_N7S5949C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C5D0Ev,_ZTv0_n12_N7S5949C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N7S5949C5D0Ev,_ZThn3776_N7S5949C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7616_N7S5949C5D0Ev,_ZThn4524_N7S5949C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C5D1Ev,_ZTv0_n12_N7S5949C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N7S5949C5D1Ev,_ZThn3776_N7S5949C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7616_N7S5949C5D1Ev,_ZThn4524_N7S5949C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D0Ev,_ZTv0_n24_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6128_N7S5949C8D0Ev,_ZThn3644_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7408_N7S5949C8D0Ev,_ZThn4404_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8672_N7S5949C8D0Ev,_ZThn5152_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C8D1Ev,_ZTv0_n24_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6128_N7S5949C8D1Ev,_ZThn3644_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7408_N7S5949C8D1Ev,_ZThn4404_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8672_N7S5949C8D1Ev,_ZThn5152_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D0Ev,_ZTv0_n12_N7S5949C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5072_N7S5949C8D0Ev,_ZThn3016_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N7S5949C8D0Ev,_ZThn3776_N7S5949C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7616_N7S5949C8D0Ev,_ZThn4524_N7S5949C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C8D1Ev,_ZTv0_n12_N7S5949C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5072_N7S5949C8D1Ev,_ZThn3016_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N7S5949C8D1Ev,_ZThn3776_N7S5949C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn7616_N7S5949C8D1Ev,_ZThn4524_N7S5949C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5949C1D0Ev,_ZTv0_n36_N7S5949C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8688_N7S5949C1D0Ev,_ZThn5164_N7S5949C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S5949C1D1Ev,_ZTv0_n36_N7S5949C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8688_N7S5949C1D1Ev,_ZThn5164_N7S5949C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C1D0Ev,_ZTv0_n24_N7S5949C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8672_N7S5949C1D0Ev,_ZThn5152_N7S5949C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S5949C1D1Ev,_ZTv0_n24_N7S5949C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8672_N7S5949C1D1Ev,_ZThn5152_N7S5949C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C1D0Ev,_ZTv0_n12_N7S5949C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7616_N7S5949C1D0Ev,_ZThn4524_N7S5949C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S5949C1D1Ev,_ZTv0_n12_N7S5949C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7616_N7S5949C1D1Ev,_ZThn4524_N7S5949C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5949C1 = {  "S5949C1", // class name
  bases_S5949C1, 32,
  &(vtc_S5949C1[0]), // expected_vtbl_contents
  &(vtt_S5949C1[0]), // expected_vtt_contents
  ABISELECT(11376,6752), // object size
  NSPAIRA(_ZTI7S5949C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5949C1),126, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5949C1),89, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15475C6  {
  void *s15475c6f0;
  long double s15475c6f1;
  __tsi64 s15475c6f2;
  void *s15475c6f3;
  int s15475c6f4:6;
  int s15475c6f5;
  void *s15475c6f6;
  long s15475c6f7[2];
  int s15475c6f8[3];
  void *s15475c6f9[3];
  __tsi64 s15475c6f10;
  long s15475c6f11;
  virtual void  v3(); // _ZN8S15475C62v3Ev
  virtual void  v4(); // _ZN8S15475C62v4Ev
  ~S15475C6(); // tgen
  S15475C6(); // tgen
};
//SIG(-1 S15475C6) C1{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl}


void  S15475C6 ::v3(){vfunc_called(this, "_ZN8S15475C62v3Ev");}
void  S15475C6 ::v4(){vfunc_called(this, "_ZN8S15475C62v4Ev");}
S15475C6 ::~S15475C6(){ note_dtor("S15475C6", this);} // tgen
S15475C6 ::S15475C6(){ note_ctor("S15475C6", this);} // tgen

static void Test_S15475C6()
{
  extern Class_Descriptor cd_S15475C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S15475C6, buf);
    S15475C6 *dp, &lv = *(dp=new (buf) S15475C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S15475C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C6)");
    check_field_offset(lv, s15475c6f0, ABISELECT(8,4), "S15475C6.s15475c6f0");
    check_field_offset(lv, s15475c6f1, ABISELECT(16,8), "S15475C6.s15475c6f1");
    check_field_offset(lv, s15475c6f2, ABISELECT(32,20), "S15475C6.s15475c6f2");
    check_field_offset(lv, s15475c6f3, ABISELECT(40,28), "S15475C6.s15475c6f3");
    set_bf_and_test(lv, s15475c6f4, ABISELECT(48,32), 0, 6, 1, "S15475C6");
    set_bf_and_test(lv, s15475c6f4, ABISELECT(48,32), 0, 6, hide_sll(1LL<<5), "S15475C6");
    check_field_offset(lv, s15475c6f5, ABISELECT(52,36), "S15475C6.s15475c6f5");
    check_field_offset(lv, s15475c6f6, ABISELECT(56,40), "S15475C6.s15475c6f6");
    check_field_offset(lv, s15475c6f7, ABISELECT(64,44), "S15475C6.s15475c6f7");
    check_field_offset(lv, s15475c6f8, ABISELECT(80,52), "S15475C6.s15475c6f8");
    check_field_offset(lv, s15475c6f9, ABISELECT(96,64), "S15475C6.s15475c6f9");
    check_field_offset(lv, s15475c6f10, ABISELECT(120,76), "S15475C6.s15475c6f10");
    check_field_offset(lv, s15475c6f11, ABISELECT(128,84), "S15475C6.s15475c6f11");
    test_class_info(&lv, &cd_S15475C6);
    dp->~S15475C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C6(Test_S15475C6, "S15475C6", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN8S15475C6C1Ev();
extern void _ZN8S15475C6D1Ev();
Name_Map name_map_S15475C6[] = {
  NSPAIR(_ZN8S15475C6C1Ev),
  NSPAIR(_ZN8S15475C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S15475C6[];
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY vtc_S15475C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C6[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
Class_Descriptor cd_S15475C6 = {  "S15475C6", // class name
  0,0,//no base classes
  &(vtc_S15475C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI8S15475C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S15475C6),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  S15475C5  : virtual S15475C6 {
  int s15475c5f0;
  int s15475c5f1:7;
  ::S3465C9_nt s15475c5f2;
  void *s15475c5f3;
  int s15475c5f4;
  void *s15475c5f5;
  ~S15475C5(); // tgen
  S15475C5(); // tgen
};
//SIG(-1 S15475C5) C1{ VBC2{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC3{} Fp Fi Fp}


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

static void Test_S15475C5()
{
  extern Class_Descriptor cd_S15475C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,29)];
    init_test(&cd_S15475C5, buf);
    S15475C5 *dp, &lv = *(dp=new (buf) S15475C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S15475C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C5)");
    check_base_class_offset(lv, (S15475C6*), ABISELECT(48,24), "S15475C5");
    check_field_offset(lv, s15475c5f0, ABISELECT(8,4), "S15475C5.s15475c5f0");
    set_bf_and_test(lv, s15475c5f1, ABISELECT(12,8), 0, 7, 1, "S15475C5");
    set_bf_and_test(lv, s15475c5f1, ABISELECT(12,8), 0, 7, hide_sll(1LL<<6), "S15475C5");
    check_field_offset(lv, s15475c5f2, ABISELECT(13,9), "S15475C5.s15475c5f2");
    check_field_offset(lv, s15475c5f3, ABISELECT(16,12), "S15475C5.s15475c5f3");
    check_field_offset(lv, s15475c5f4, ABISELECT(24,16), "S15475C5.s15475c5f4");
    check_field_offset(lv, s15475c5f5, ABISELECT(32,20), "S15475C5.s15475c5f5");
    test_class_info(&lv, &cd_S15475C5);
    dp->~S15475C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C5(Test_S15475C5, "S15475C5", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN8S15475C5C1Ev();
extern void _ZN8S15475C5D1Ev();
Name_Map name_map_S15475C5[] = {
  NSPAIR(_ZN8S15475C5C1Ev),
  NSPAIR(_ZN8S15475C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
static Base_Class bases_S15475C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15475C6,    ABISELECT(48,24), //bcp->offset
    3, //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 _ZTI8S15475C5[];
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY vtc_S15475C5[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern VTBL_ENTRY _ZTV8S15475C5[];
static  VTT_ENTRY vtt_S15475C5[] = {
  {&(_ZTV8S15475C5[3]),  3,9},
  {&(_ZTV8S15475C5[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
Class_Descriptor cd_S15475C5 = {  "S15475C5", // class name
  bases_S15475C5, 1,
  &(vtc_S15475C5[0]), // expected_vtbl_contents
  &(vtt_S15475C5[0]), // expected_vtt_contents
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI8S15475C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S15475C5),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15475C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15475C9  {
  int s15475c9f0[2];
  __tsi64 s15475c9f1;
  char  :0;
  ::S15475C6 s15475c9f3;
  char s15475c9f4;
  int s15475c9f5;
  long double s15475c9f6;
  virtual void  v5(); // _ZN8S15475C92v5Ev
  virtual void  v6(); // _ZN8S15475C92v6Ev
  virtual void  v7(); // _ZN8S15475C92v7Ev
  ~S15475C9(); // tgen
  S15475C9(); // tgen
};
//SIG(-1 S15475C9) C1{ v1 v2 v3 Fi[2] FL Fc:0 FC2{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD}


void  S15475C9 ::v5(){vfunc_called(this, "_ZN8S15475C92v5Ev");}
void  S15475C9 ::v6(){vfunc_called(this, "_ZN8S15475C92v6Ev");}
void  S15475C9 ::v7(){vfunc_called(this, "_ZN8S15475C92v7Ev");}
S15475C9 ::~S15475C9(){ note_dtor("S15475C9", this);} // tgen
S15475C9 ::S15475C9(){ note_ctor("S15475C9", this);} // tgen

static void Test_S15475C9()
{
  extern Class_Descriptor cd_S15475C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S15475C9, buf);
    S15475C9 *dp, &lv = *(dp=new (buf) S15475C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S15475C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C9)");
    check_field_offset(lv, s15475c9f0, ABISELECT(8,4), "S15475C9.s15475c9f0");
    check_field_offset(lv, s15475c9f1, ABISELECT(16,12), "S15475C9.s15475c9f1");
    check_field_offset(lv, s15475c9f3, ABISELECT(32,20), "S15475C9.s15475c9f3");
    check_field_offset(lv, s15475c9f4, ABISELECT(176,108), "S15475C9.s15475c9f4");
    check_field_offset(lv, s15475c9f5, ABISELECT(180,112), "S15475C9.s15475c9f5");
    check_field_offset(lv, s15475c9f6, ABISELECT(192,116), "S15475C9.s15475c9f6");
    test_class_info(&lv, &cd_S15475C9);
    dp->~S15475C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C9(Test_S15475C9, "S15475C9", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN8S15475C9C1Ev();
extern void _ZN8S15475C9D1Ev();
Name_Map name_map_S15475C9[] = {
  NSPAIR(_ZN8S15475C9C1Ev),
  NSPAIR(_ZN8S15475C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S15475C9[];
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
static  VTBL_ENTRY vtc_S15475C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C9[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
};
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
Class_Descriptor cd_S15475C9 = {  "S15475C9", // class name
  0,0,//no base classes
  &(vtc_S15475C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI8S15475C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S15475C9),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15475C8  : S15475C9 {
  ::S15475C6 s15475c8f0;
  int s15475c8f1;
  ::S15475C6 s15475c8f2;
  ::S15475C9 s15475c8f3;
  ::S15475C6 s15475c8f4;
  long double s15475c8f5;
  void *s15475c8f6;
  int s15475c8f7;
  long double s15475c8f8;
  char  :0;
  virtual void  v8(); // _ZN8S15475C82v8Ev
  virtual void  v9(); // _ZN8S15475C82v9Ev
  ~S15475C8(); // tgen
  S15475C8(); // tgen
};
//SIG(-1 S15475C8) C1{ BC2{ v3 v4 v5 Fi[2] FL Fc:0 FC3{ v6 v7 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v1 v2 FC3 Fi FC3 FC2 FC3 FD Fp Fi FD Fc:0}


void  S15475C8 ::v8(){vfunc_called(this, "_ZN8S15475C82v8Ev");}
void  S15475C8 ::v9(){vfunc_called(this, "_ZN8S15475C82v9Ev");}
S15475C8 ::~S15475C8(){ note_dtor("S15475C8", this);} // tgen
S15475C8 ::S15475C8(){ note_ctor("S15475C8", this);} // tgen

static void Test_S15475C8()
{
  extern Class_Descriptor cd_S15475C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,140)];
    init_test(&cd_S15475C8, buf);
    S15475C8 *dp, &lv = *(dp=new (buf) S15475C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,556), "sizeof(S15475C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C8)");
    check_base_class_offset(lv, (S15475C9*), 0, "S15475C8");
    check_field_offset(lv, s15475c8f0, ABISELECT(208,128), "S15475C8.s15475c8f0");
    check_field_offset(lv, s15475c8f1, ABISELECT(352,216), "S15475C8.s15475c8f1");
    check_field_offset(lv, s15475c8f2, ABISELECT(368,220), "S15475C8.s15475c8f2");
    check_field_offset(lv, s15475c8f3, ABISELECT(512,308), "S15475C8.s15475c8f3");
    check_field_offset(lv, s15475c8f4, ABISELECT(720,436), "S15475C8.s15475c8f4");
    check_field_offset(lv, s15475c8f5, ABISELECT(864,524), "S15475C8.s15475c8f5");
    check_field_offset(lv, s15475c8f6, ABISELECT(880,536), "S15475C8.s15475c8f6");
    check_field_offset(lv, s15475c8f7, ABISELECT(888,540), "S15475C8.s15475c8f7");
    check_field_offset(lv, s15475c8f8, ABISELECT(896,544), "S15475C8.s15475c8f8");
    test_class_info(&lv, &cd_S15475C8);
    dp->~S15475C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C8(Test_S15475C8, "S15475C8", ABISELECT(912,556));

#else // __cplusplus

extern void _ZN8S15475C8C1Ev();
extern void _ZN8S15475C8D1Ev();
Name_Map name_map_S15475C8[] = {
  NSPAIR(_ZN8S15475C8C1Ev),
  NSPAIR(_ZN8S15475C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
static Base_Class bases_S15475C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15475C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S15475C8[];
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
static  VTBL_ENTRY vtc_S15475C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C8[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
};
extern VTBL_ENTRY _ZTI8S15475C8[];
extern  VTBL_ENTRY _ZTV8S15475C8[];
Class_Descriptor cd_S15475C8 = {  "S15475C8", // class name
  bases_S15475C8, 1,
  &(vtc_S15475C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(912,556), // object size
  NSPAIRA(_ZTI8S15475C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S15475C8),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  S15475C10  : S15475C9 , S15475C6 , virtual S15475C5 {
  short s15475c10f0:16;
  __tsi64 s15475c10f1;
  short s15475c10f2;
  virtual  ~S15475C10(); // _ZN9S15475C10D2Ev
  S15475C10(); // tgen
};
//SIG(-1 S15475C10) C1{ BC2{ v1 v2 v3 Fi[2] FL Fc:0 FC3{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} BC3 VBC4{ VBC3 Fi Fi:7 FC5{} Fp Fi Fp} vd Fs:16 FL Fs}


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

static void Test_S15475C10()
{
  extern Class_Descriptor cd_S15475C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,87)];
    init_test(&cd_S15475C10, buf);
    S15475C10 *dp, &lv = *(dp=new (buf) S15475C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,344), "sizeof(S15475C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C10)");
    check_base_class_offset(lv, (S15475C9*), 0, "S15475C10");
    /*is_ambiguous_... S15475C10::S15475C6 */ AMB_check_base_class_offset(lv, (S15475C6*), ABISELECT(208,128), "S15475C10");
    check_base_class_offset(lv, (S15475C6*)(S15475C5*), ABISELECT(416,256), "S15475C10");
    check_base_class_offset(lv, (S15475C5*), ABISELECT(368,232), "S15475C10");
    set_bf_and_test(lv, s15475c10f0, ABISELECT(344,216), 0, 16, 1, "S15475C10");
    set_bf_and_test(lv, s15475c10f0, ABISELECT(344,216), 0, 16, hide_sll(1LL<<15), "S15475C10");
    check_field_offset(lv, s15475c10f1, ABISELECT(352,220), "S15475C10.s15475c10f1");
    check_field_offset(lv, s15475c10f2, ABISELECT(360,228), "S15475C10.s15475c10f2");
    test_class_info(&lv, &cd_S15475C10);
    dp->~S15475C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C10(Test_S15475C10, "S15475C10", ABISELECT(560,344));

#else // __cplusplus

extern void _ZN9S15475C10C1Ev();
extern void _ZN9S15475C10D2Ev();
Name_Map name_map_S15475C10[] = {
  NSPAIR(_ZN9S15475C10C1Ev),
  NSPAIR(_ZN9S15475C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
static Base_Class bases_S15475C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15475C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S15475C6,    ABISELECT(208,128), //bcp->offset
    9, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S15475C6,    ABISELECT(416,256), //bcp->offset
    16, //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
    3, //immediately_derived
  0, 1},
  {&cd_S15475C5,    ABISELECT(368,232), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S15475C10[];
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN9S15475C10D1Ev();
extern void _ZN9S15475C10D0Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY vtc_S15475C10[] = {
  ABISELECT(416,256),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D1Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D0Ev,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  ABISELECT(48,24),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  0,
  0,
  ABISELECT(-416,-256),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern VTBL_ENTRY _ZTV9S15475C10[];
static  VTBL_ENTRY _tg__ZTV8S15475C5__9S15475C10[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C5__9S15475C10[] = {
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTT_ENTRY vtt_S15475C10[] = {
  {&(_ZTV9S15475C10[4]),  4,22},
  {&(_ZTV9S15475C10[16]),  16,22},
  {&(_ZTV9S15475C10[20]),  20,22},
  {&(_tg__ZTV8S15475C5__9S15475C10[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C5__9S15475C10[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S15475C10[];
extern  VTBL_ENTRY _ZTV9S15475C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15475C10[];
Class_Descriptor cd_S15475C10 = {  "S15475C10", // class name
  bases_S15475C10, 4,
  &(vtc_S15475C10[0]), // expected_vtbl_contents
  &(vtt_S15475C10[0]), // expected_vtt_contents
  ABISELECT(560,344), // object size
  NSPAIRA(_ZTI9S15475C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S15475C10),22, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S15475C10),5, //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  S15475C4  : S15475C5 , S15475C8 , virtual S15475C9 , S15475C6 , virtual S15475C10 {
  short s15475c4f0;
  virtual  ~S15475C4(); // _ZN8S15475C4D2Ev
  S15475C4(); // tgen
};
//SIG(-1 S15475C4) C1{ BC2{ VBC3{ v1 v2 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC4{} Fp Fi Fp} BC5{ BC6{ v3 v4 v5 Fi[2] FL Fc:0 FC3 Fc Fi FD} v6 v7 FC3 Fi FC3 FC6 FC3 FD Fp Fi FD Fc:0} VBC6 BC3 VBC7{ BC6 BC3 VBC2 vd Fs:16 FL Fs} vd Fs}


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

static void Test_S15475C4()
{
  extern Class_Descriptor cd_S15475C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(118,287)];
    init_test(&cd_S15475C4, buf);
    S15475C4 *dp, &lv = *(dp=new (buf) S15475C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1872,1144), "sizeof(S15475C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C4)");
    /*is_ambiguous_... S15475C4::S15475C5 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C5*), ABISELECT(1104,672), "S15475C4");
    /*is_ambiguous_... S15475C4::S15475C5 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C5*), ABISELECT(1104,672), "S15475C4");
    /*is_ambiguous_... S15475C4::S15475C5 */ AMB_check_base_class_offset(lv, (S15475C5*), 0, "S15475C4");
    check_base_class_offset(lv, (S15475C9*)(S15475C8*), ABISELECT(48,24), "S15475C4");
    check_base_class_offset(lv, (S15475C8*), ABISELECT(48,24), "S15475C4");
    /*is_ambiguous_... S15475C4::S15475C9 */ AMB_check_base_class_offset(lv, (S15475C9*), ABISELECT(1248,760), "S15475C4");
    /*is_ambiguous_... S15475C4::S15475C6 */ AMB_check_base_class_offset(lv, (S15475C6*), ABISELECT(960,580), "S15475C4");
    check_base_class_offset(lv, (S15475C9*)(S15475C10*), ABISELECT(1456,888), "S15475C4");
    /*is_ambiguous_... S15475C10::S15475C6 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C10*), ABISELECT(1664,1016), "S15475C4");
    check_base_class_offset(lv, (S15475C5*)(S15475C10*), ABISELECT(1824,1120), "S15475C4");
    check_base_class_offset(lv, (S15475C10*), ABISELECT(1456,888), "S15475C4");
    check_field_offset(lv, s15475c4f0, ABISELECT(1096,668), "S15475C4.s15475c4f0");
    test_class_info(&lv, &cd_S15475C4);
    dp->~S15475C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C4(Test_S15475C4, "S15475C4", ABISELECT(1872,1144));

#else // __cplusplus

extern void _ZN8S15475C4C1Ev();
extern void _ZN8S15475C4D2Ev();
Name_Map name_map_S15475C4[] = {
  NSPAIR(_ZN8S15475C4C1Ev),
  NSPAIR(_ZN8S15475C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C8;
extern VTBL_ENTRY _ZTI8S15475C8[];
extern  VTBL_ENTRY _ZTV8S15475C8[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
extern Class_Descriptor cd_S15475C10;
extern VTBL_ENTRY _ZTI9S15475C10[];
extern  VTBL_ENTRY _ZTV9S15475C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15475C10[];
static Base_Class bases_S15475C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15475C6,    ABISELECT(1104,672), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S15475C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S15475C9,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S15475C8,    ABISELECT(48,24), //bcp->offset
    8, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S15475C9,    ABISELECT(1248,760), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S15475C6,    ABISELECT(960,580), //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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S15475C9,    ABISELECT(1456,888), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S15475C6,    ABISELECT(1664,1016), //bcp->offset
    48, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S15475C5,    ABISELECT(1824,1120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S15475C10,    ABISELECT(1456,888), //bcp->offset
    33, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S15475C4[];
extern void _ZN8S15475C4D1Ev();
extern void _ZN8S15475C4D0Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev)();
extern void ABISELECT(_ZThn1456_N8S15475C4D1Ev,_ZThn888_N8S15475C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev)();
extern void ABISELECT(_ZThn1456_N8S15475C4D0Ev,_ZThn888_N8S15475C4D0Ev)() __attribute__((weak));
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY vtc_S15475C4[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C4D1Ev,
  (VTBL_ENTRY)&_ZN8S15475C4D0Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
  ABISELECT(-960,-580),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev),
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
};
extern VTBL_ENTRY _ZTV8S15475C4[];
static  VTBL_ENTRY _tg__ZTV8S15475C5__A__8S15475C4[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C5__A__8S15475C4[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN9S15475C10D1Ev();
extern void _ZN9S15475C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S15475C10__8S15475C4[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D1Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__9S15475C10__8S15475C4[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__A1__9S15475C10__8S15475C4[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__A1__8S15475C4[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C5__A1__8S15475C4[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTT_ENTRY vtt_S15475C4[] = {
  {&(_ZTV8S15475C4[6]),  6,55},
  {&(_tg__ZTV8S15475C5__A__8S15475C4[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C5__A__8S15475C4[4]),  4,6},
  {&(_ZTV8S15475C4[23]),  23,55},
  {&(_ZTV8S15475C4[30]),  30,55},
  {&(_ZTV8S15475C4[43]),  43,55},
  {&(_ZTV8S15475C4[50]),  50,55},
  {&(_ZTV8S15475C4[55]),  55,55},
  {&(_tg__ZTV9S15475C10__8S15475C4[4]),  4,9},
  {&(_tg__ZTV8S15475C5__9S15475C10__8S15475C4[3]),  3,3},
  {&(_tg__ZTV8S15475C6__A1__9S15475C10__8S15475C4[4]),  4,6},
  {&(_tg__ZTV8S15475C5__A1__8S15475C4[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C5__A1__8S15475C4[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S15475C4[];
extern  VTBL_ENTRY _ZTV8S15475C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C4[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S15475C4D0Ev,_ZThn888_N8S15475C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S15475C4D1Ev,_ZThn888_N8S15475C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15475C4 = {  "S15475C4", // class name
  bases_S15475C4, 10,
  &(vtc_S15475C4[0]), // expected_vtbl_contents
  &(vtt_S15475C4[0]), // expected_vtt_contents
  ABISELECT(1872,1144), // object size
  NSPAIRA(_ZTI8S15475C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S15475C4),55, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15475C4),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15475C3  : virtual S15475C4 , virtual S15475C8 , S15475C9 {
  long s15475c3f0[2];
  ::S15475C10 s15475c3f1;
  int s15475c3f2;
  long double s15475c3f3;
  ::S15475C9 s15475c3f4;
  ::S15475C6 s15475c3f5;
  char s15475c3f6;
  long double s15475c3f7;
  ::S3465C9_nt s15475c3f8;
  __tsi64 s15475c3f9:64;
  ::S15475C6 s15475c3f10;
  virtual  ~S15475C3(); // _ZN8S15475C3D2Ev
  virtual void  v10(); // _ZN8S15475C33v10Ev
  virtual void  v11(); // _ZN8S15475C33v11Ev
  virtual void  v12(); // _ZN8S15475C33v12Ev
  S15475C3(); // tgen
};
//SIG(-1 S15475C3) C1{ VBC2{ BC3{ VBC4{ v4 v5 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC5{} Fp Fi Fp} BC6{ BC7{ v6 v7 v8 Fi[2] FL Fc:0 FC4 Fc Fi FD} v9 v10 FC4 Fi FC4 FC7 FC4 FD Fp Fi FD Fc:0} VBC7 BC4 VBC8{ BC7 BC4 VBC3 vd Fs:16 FL Fs} vd Fs} VBC6 BC7 vd v1 v2 v3 Fl[2] FC8 Fi FD FC7 FC4 Fc FD FC5 FL:64 FC4}


 S15475C3 ::~S15475C3(){ note_dtor("S15475C3", this);}
void  S15475C3 ::v10(){vfunc_called(this, "_ZN8S15475C33v10Ev");}
void  S15475C3 ::v11(){vfunc_called(this, "_ZN8S15475C33v11Ev");}
void  S15475C3 ::v12(){vfunc_called(this, "_ZN8S15475C33v12Ev");}
S15475C3 ::S15475C3(){ note_ctor("S15475C3", this);} // tgen

static void Test_S15475C3()
{
  extern Class_Descriptor cd_S15475C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(260,633)];
    init_test(&cd_S15475C3, buf);
    S15475C3 *dp, &lv = *(dp=new (buf) S15475C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4144,2528), "sizeof(S15475C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C3)");
    /*is_ambiguous_... S15475C4::S15475C5 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C5*)(S15475C4*), ABISELECT(2464,1500), "S15475C3");
    /*is_ambiguous_... S15475C3::S15475C5 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C5*), ABISELECT(2464,1500), "S15475C3");
    /*is_ambiguous_... S15475C4::S15475C5 */ AMB_check_base_class_offset(lv, (S15475C5*)(S15475C4*), ABISELECT(1360,828), "S15475C3");
    check_base_class_offset(lv, (S15475C9*)(S15475C8*)(S15475C4*), ABISELECT(1408,852), "S15475C3");
    check_base_class_offset(lv, (S15475C8*)(S15475C4*), ABISELECT(1408,852), "S15475C3");
    /*is_ambiguous_... S15475C4::S15475C9 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C4*), ABISELECT(2608,1588), "S15475C3");
    /*is_ambiguous_... S15475C4::S15475C6 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C4*), ABISELECT(2320,1408), "S15475C3");
    check_base_class_offset(lv, (S15475C9*)(S15475C10*), ABISELECT(2816,1716), "S15475C3");
    /*is_ambiguous_... S15475C10::S15475C6 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C10*), ABISELECT(3024,1844), "S15475C3");
    check_base_class_offset(lv, (S15475C5*)(S15475C10*), ABISELECT(3184,1948), "S15475C3");
    check_base_class_offset(lv, (S15475C10*)(S15475C4*), ABISELECT(2816,1716), "S15475C3");
    check_base_class_offset(lv, (S15475C4*), ABISELECT(1360,828), "S15475C3");
    /*is_ambiguous_... S15475C3::S15475C8 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C8*), ABISELECT(3232,1972), "S15475C3");
    /*is_ambiguous_... S15475C3::S15475C8 */ AMB_check_base_class_offset(lv, (S15475C8*), ABISELECT(3232,1972), "S15475C3");
    /*is_ambiguous_... S15475C3::S15475C9 */ AMB_check_base_class_offset(lv, (S15475C9*), 0, "S15475C3");
    check_field_offset(lv, s15475c3f0, ABISELECT(208,128), "S15475C3.s15475c3f0");
    check_field_offset(lv, s15475c3f1, ABISELECT(224,136), "S15475C3.s15475c3f1");
    check_field_offset(lv, s15475c3f2, ABISELECT(784,480), "S15475C3.s15475c3f2");
    check_field_offset(lv, s15475c3f3, ABISELECT(800,484), "S15475C3.s15475c3f3");
    check_field_offset(lv, s15475c3f4, ABISELECT(816,496), "S15475C3.s15475c3f4");
    check_field_offset(lv, s15475c3f5, ABISELECT(1024,624), "S15475C3.s15475c3f5");
    check_field_offset(lv, s15475c3f6, ABISELECT(1168,712), "S15475C3.s15475c3f6");
    check_field_offset(lv, s15475c3f7, ABISELECT(1184,716), "S15475C3.s15475c3f7");
    check_field_offset(lv, s15475c3f8, ABISELECT(1200,728), "S15475C3.s15475c3f8");
    set_bf_and_test(lv, s15475c3f9, ABISELECT(1208,732), 0, 64, 1, "S15475C3");
    set_bf_and_test(lv, s15475c3f9, ABISELECT(1208,732), 0, 64, hide_sll(1LL<<63), "S15475C3");
    check_field_offset(lv, s15475c3f10, ABISELECT(1216,740), "S15475C3.s15475c3f10");
    test_class_info(&lv, &cd_S15475C3);
    dp->~S15475C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C3(Test_S15475C3, "S15475C3", ABISELECT(4144,2528));

#else // __cplusplus

extern void _ZN8S15475C3C1Ev();
extern void _ZN8S15475C3D2Ev();
Name_Map name_map_S15475C3[] = {
  NSPAIR(_ZN8S15475C3C1Ev),
  NSPAIR(_ZN8S15475C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C8;
extern VTBL_ENTRY _ZTI8S15475C8[];
extern  VTBL_ENTRY _ZTV8S15475C8[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
extern Class_Descriptor cd_S15475C10;
extern VTBL_ENTRY _ZTI9S15475C10[];
extern  VTBL_ENTRY _ZTV9S15475C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15475C10[];
extern Class_Descriptor cd_S15475C4;
extern VTBL_ENTRY _ZTI8S15475C4[];
extern  VTBL_ENTRY _ZTV8S15475C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C4[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C8;
extern VTBL_ENTRY _ZTI8S15475C8[];
extern  VTBL_ENTRY _ZTV8S15475C8[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
static Base_Class bases_S15475C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15475C6,    ABISELECT(2464,1500), //bcp->offset
    43, //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_S15475C5,    ABISELECT(1360,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15475C9,    ABISELECT(1408,852), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S15475C8,    ABISELECT(1408,852), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15475C9,    ABISELECT(2608,1588), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S15475C6,    ABISELECT(2320,1408), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15475C9,    ABISELECT(2816,1716), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S15475C6,    ABISELECT(3024,1844), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S15475C5,    ABISELECT(3184,1948), //bcp->offset
    76, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S15475C10,    ABISELECT(2816,1716), //bcp->offset
    57, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S15475C4,    ABISELECT(1360,828), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S15475C9,    ABISELECT(3232,1972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S15475C8,    ABISELECT(3232,1972), //bcp->offset
    79, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S15475C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S15475C3[];
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C3D1Ev();
extern void _ZN8S15475C3D0Ev();
extern void _ZN8S15475C33v10Ev();
extern void _ZN8S15475C33v11Ev();
extern void _ZN8S15475C33v12Ev();
extern void ABISELECT(_ZTv0_n56_N8S15475C3D1Ev,_ZTv0_n28_N8S15475C3D1Ev)();
extern void ABISELECT(_ZThn1360_N8S15475C3D1Ev,_ZThn828_N8S15475C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S15475C3D0Ev,_ZTv0_n28_N8S15475C3D0Ev)();
extern void ABISELECT(_ZThn1360_N8S15475C3D0Ev,_ZThn828_N8S15475C3D0Ev)() __attribute__((weak));
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S15475C3D1Ev,_ZTv0_n32_N8S15475C3D1Ev)();
extern void ABISELECT(_ZThn2816_N8S15475C3D1Ev,_ZThn1716_N8S15475C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S15475C3D0Ev,_ZTv0_n32_N8S15475C3D0Ev)();
extern void ABISELECT(_ZThn2816_N8S15475C3D0Ev,_ZThn1716_N8S15475C3D0Ev)() __attribute__((weak));
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
static  VTBL_ENTRY vtc_S15475C3[] = {
  ABISELECT(3232,1972),
  ABISELECT(3184,1948),
  ABISELECT(2816,1716),
  ABISELECT(2608,1588),
  ABISELECT(2464,1500),
  ABISELECT(1360,828),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C3D1Ev,
  (VTBL_ENTRY)&_ZN8S15475C3D0Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v10Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v11Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v12Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-1360,-828),
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  ABISELECT(-1360,-828),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S15475C3D1Ev,_ZTv0_n28_N8S15475C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S15475C3D0Ev,_ZTv0_n28_N8S15475C3D0Ev),
  ABISELECT(-1408,-852),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
  ABISELECT(-2320,-1408),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  0,
  0,
  ABISELECT(-2464,-1500),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  0,
  0,
  0,
  ABISELECT(-2608,-1588),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-2816,-1716),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-2816,-1716),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C3D1Ev,_ZTv0_n32_N8S15475C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C3D0Ev,_ZTv0_n32_N8S15475C3D0Ev),
  ABISELECT(-3024,-1844),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  ABISELECT(-720,-448),
  ABISELECT(-3184,-1948),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-3232,-1972),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
};
extern VTBL_ENTRY _ZTV8S15475C3[];
extern void _ZN8S15475C4D1Ev();
extern void _ZN8S15475C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C4__8S15475C3[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C4D1Ev,
  (VTBL_ENTRY)&_ZN8S15475C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C58S15475C4__8S15475C3[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C58S15475C4__8S15475C3[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C4__8S15475C3[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C9__A1__8S15475C4__8S15475C3[] = {
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev)();
extern void ABISELECT(_ZThn1456_N8S15475C4D1Ev,_ZThn888_N8S15475C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev)();
extern void ABISELECT(_ZThn1456_N8S15475C4D0Ev,_ZThn888_N8S15475C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15475C10__8S15475C4__8S15475C3[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C69S15475C10__A2__8S15475C4__8S15475C3[] = {
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__A1__8S15475C4__8S15475C3[] = {
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN9S15475C10D1Ev();
extern void _ZN9S15475C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S15475C10__8S15475C3[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D1Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__9S15475C10__8S15475C3[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__A1__9S15475C10__8S15475C3[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__A1__8S15475C3[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C5__A1__8S15475C3[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTT_ENTRY vtt_S15475C3[] = {
  {&(_ZTV8S15475C3[8]),  8,91},
  {&(_ZTV8S15475C3[30]),  30,91},
  {&(_ZTV8S15475C3[47]),  47,91},
  {&(_ZTV8S15475C3[34]),  34,91},
  {&(_ZTV8S15475C3[54]),  54,91},
  {&(_ZTV8S15475C3[41]),  41,91},
  {&(_ZTV8S15475C3[67]),  67,91},
  {&(_ZTV8S15475C3[74]),  74,91},
  {&(_ZTV8S15475C3[79]),  79,91},
  {&(_ZTV8S15475C3[86]),  86,91},
  {&(_tg__ZTV8S15475C4__8S15475C3[6]),  6,8},
  {&(_tg__ZTV8S15475C58S15475C4__8S15475C3[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C58S15475C4__8S15475C3[4]),  4,6},
  {&(_tg__ZTV8S15475C6__8S15475C4__8S15475C3[4]),  4,6},
  {&(_tg__ZTV8S15475C9__A1__8S15475C4__8S15475C3[5]),  5,8},
  {&(_tg__ZTV9S15475C10__8S15475C4__8S15475C3[10]),  10,15},
  {&(_tg__ZTV8S15475C69S15475C10__A2__8S15475C4__8S15475C3[2]),  2,4},
  {&(_tg__ZTV8S15475C5__A1__8S15475C4__8S15475C3[3]),  3,3},
  {&(_tg__ZTV9S15475C10__8S15475C3[4]),  4,9},
  {&(_tg__ZTV8S15475C5__9S15475C10__8S15475C3[3]),  3,3},
  {&(_tg__ZTV8S15475C6__A1__9S15475C10__8S15475C3[4]),  4,6},
  {&(_tg__ZTV8S15475C5__A1__8S15475C3[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C5__A1__8S15475C3[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S15475C3[];
extern  VTBL_ENTRY _ZTV8S15475C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C3[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S15475C4D0Ev,_ZThn888_N8S15475C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S15475C4D1Ev,_ZThn888_N8S15475C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C3D0Ev,_ZTv0_n32_N8S15475C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S15475C3D0Ev,_ZThn1716_N8S15475C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C3D1Ev,_ZTv0_n32_N8S15475C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S15475C3D1Ev,_ZThn1716_N8S15475C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S15475C3D0Ev,_ZTv0_n28_N8S15475C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S15475C3D0Ev,_ZThn828_N8S15475C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S15475C3D1Ev,_ZTv0_n28_N8S15475C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1360_N8S15475C3D1Ev,_ZThn828_N8S15475C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15475C3 = {  "S15475C3", // class name
  bases_S15475C3, 14,
  &(vtc_S15475C3[0]), // expected_vtbl_contents
  &(vtt_S15475C3[0]), // expected_vtt_contents
  ABISELECT(4144,2528), // object size
  NSPAIRA(_ZTI8S15475C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S15475C3),91, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15475C3),23, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15475C2  : S15475C3 , S15475C10 , S15475C4 {
  int s15475c2f0;
  void *s15475c2f1;
  __tsi64 s15475c2f2;
  void *s15475c2f3;
  __tsi64 s15475c2f4;
  long double s15475c2f5;
  __tsi64 s15475c2f6[2];
  ::S15475C4 s15475c2f7[7];
  ::S3465C14 s15475c2f8;
  virtual  ~S15475C2(); // _ZN8S15475C2D2Ev
  virtual void  v1(); // _ZN8S15475C22v1Ev
  virtual void  v2(); // _ZN8S15475C22v2Ev
  S15475C2(); // tgen
};
//SIG(-1 S15475C2) C1{ BC2{ VBC3{ BC4{ VBC5{ v3 v4 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC6{} Fp Fi Fp} BC7{ BC8{ v5 v6 v7 Fi[2] FL Fc:0 FC5 Fc Fi FD} v8 v9 FC5 Fi FC5 FC8 FC5 FD Fp Fi FD Fc:0} VBC8 BC5 VBC9{ BC8 BC5 VBC4 vd Fs:16 FL Fs} vd Fs} VBC7 BC8 vd v10 v11 v12 Fl[2] FC9 Fi FD FC8 FC5 Fc FD FC6 FL:64 FC5} BC9 BC3 vd v1 v2 Fi Fp FL Fp FL FD FL[2] FC3[7] FC10{ vd m Fp FC6 Fp Fi FC11{ BC12{ v15 v16 v17 Fi[2] FL Fc:0 FC13{ v18 v19 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v13 v14 FC13 Fi FC13 FC12 FC13 FD Fp Fi FD Fc:0} FC12[5]}}


 S15475C2 ::~S15475C2(){ note_dtor("S15475C2", this);}
void  S15475C2 ::v1(){vfunc_called(this, "_ZN8S15475C22v1Ev");}
void  S15475C2 ::v2(){vfunc_called(this, "_ZN8S15475C22v2Ev");}
S15475C2 ::S15475C2(){ note_ctor("S15475C2", this);} // tgen

static void Test_S15475C2()
{
  extern Class_Descriptor cd_S15475C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1300,3179)];
    init_test(&cd_S15475C2, buf);
    S15475C2 *dp, &lv = *(dp=new (buf) S15475C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20784,12712), "sizeof(S15475C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C2)");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C5*)(S15475C4*), ABISELECT(19104,11684), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C5 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C5*), ABISELECT(19104,11684), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C5*)(S15475C4*), ABISELECT(19104,11684), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C5*)(S15475C4*), ABISELECT(18000,11012), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C8*)(S15475C4*), ABISELECT(18048,11036), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C8*)(S15475C4*), ABISELECT(18048,11036), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C4*), ABISELECT(19248,11772), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C4*), ABISELECT(19248,11772), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C4*), ABISELECT(18960,11592), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C10 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C10*), ABISELECT(19456,11900), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C10 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C10*), ABISELECT(19664,12028), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C10 */ AMB_check_base_class_offset(lv, (S15475C5*)(S15475C10*), ABISELECT(19824,12132), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C10 */ AMB_check_base_class_offset(lv, (S15475C5*)(S15475C10*), ABISELECT(19824,12132), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C10*)(S15475C4*), ABISELECT(19456,11900), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C10*)(S15475C4*), ABISELECT(19456,11900), "S15475C2");
    check_base_class_offset(lv, (S15475C4*)(S15475C3*), ABISELECT(18000,11012), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C8 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C8*), ABISELECT(19872,12156), "S15475C2");
    /*is_ambiguous_... S15475C3::S15475C8 */ AMB_check_base_class_offset(lv, (S15475C8*)(S15475C3*), ABISELECT(19872,12156), "S15475C2");
    /*is_ambiguous_... S15475C3::S15475C9 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C3*), 0, "S15475C2");
    check_base_class_offset(lv, (S15475C3*), 0, "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C10 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C10*), ABISELECT(1360,828), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C10 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C10*), ABISELECT(1568,956), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C10 */ AMB_check_base_class_offset(lv, (S15475C10*), ABISELECT(1360,828), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C5*)(S15475C4*), ABISELECT(1728,1060), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C9*)(S15475C8*)(S15475C4*), ABISELECT(1776,1084), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C8*)(S15475C4*), ABISELECT(1776,1084), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C6*)(S15475C4*), ABISELECT(2688,1640), "S15475C2");
    /*is_ambiguous_... S15475C2::S15475C4 */ AMB_check_base_class_offset(lv, (S15475C4*), ABISELECT(1728,1060), "S15475C2");
    check_field_offset(lv, s15475c2f0, ABISELECT(2828,1732), "S15475C2.s15475c2f0");
    check_field_offset(lv, s15475c2f1, ABISELECT(2832,1736), "S15475C2.s15475c2f1");
    check_field_offset(lv, s15475c2f2, ABISELECT(2840,1740), "S15475C2.s15475c2f2");
    check_field_offset(lv, s15475c2f3, ABISELECT(2848,1748), "S15475C2.s15475c2f3");
    check_field_offset(lv, s15475c2f4, ABISELECT(2856,1752), "S15475C2.s15475c2f4");
    check_field_offset(lv, s15475c2f5, ABISELECT(2864,1760), "S15475C2.s15475c2f5");
    check_field_offset(lv, s15475c2f6, ABISELECT(2880,1772), "S15475C2.s15475c2f6");
    check_field_offset(lv, s15475c2f7, ABISELECT(2896,1788), "S15475C2.s15475c2f7");
    check_field_offset(lv, s15475c2f8, ABISELECT(16000,9796), "S15475C2.s15475c2f8");
    test_class_info(&lv, &cd_S15475C2);
    dp->~S15475C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15475C2(Test_S15475C2, "S15475C2", ABISELECT(20784,12712));

#else // __cplusplus

extern void _ZN8S15475C2C1Ev();
extern void _ZN8S15475C2D2Ev();
Name_Map name_map_S15475C2[] = {
  NSPAIR(_ZN8S15475C2C1Ev),
  NSPAIR(_ZN8S15475C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C8;
extern VTBL_ENTRY _ZTI8S15475C8[];
extern  VTBL_ENTRY _ZTV8S15475C8[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
extern Class_Descriptor cd_S15475C10;
extern VTBL_ENTRY _ZTI9S15475C10[];
extern  VTBL_ENTRY _ZTV9S15475C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15475C10[];
extern Class_Descriptor cd_S15475C4;
extern VTBL_ENTRY _ZTI8S15475C4[];
extern  VTBL_ENTRY _ZTV8S15475C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C4[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C8;
extern VTBL_ENTRY _ZTI8S15475C8[];
extern  VTBL_ENTRY _ZTV8S15475C8[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C3;
extern VTBL_ENTRY _ZTI8S15475C3[];
extern  VTBL_ENTRY _ZTV8S15475C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C3[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C10;
extern VTBL_ENTRY _ZTI9S15475C10[];
extern  VTBL_ENTRY _ZTV9S15475C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S15475C10[];
extern Class_Descriptor cd_S15475C5;
extern VTBL_ENTRY _ZTI8S15475C5[];
extern  VTBL_ENTRY _ZTV8S15475C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C5[];
extern Class_Descriptor cd_S15475C9;
extern VTBL_ENTRY _ZTI8S15475C9[];
extern  VTBL_ENTRY _ZTV8S15475C9[];
extern Class_Descriptor cd_S15475C8;
extern VTBL_ENTRY _ZTI8S15475C8[];
extern  VTBL_ENTRY _ZTV8S15475C8[];
extern Class_Descriptor cd_S15475C6;
extern VTBL_ENTRY _ZTI8S15475C6[];
extern  VTBL_ENTRY _ZTV8S15475C6[];
extern Class_Descriptor cd_S15475C4;
extern VTBL_ENTRY _ZTI8S15475C4[];
extern  VTBL_ENTRY _ZTV8S15475C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C4[];
static Base_Class bases_S15475C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15475C6,    ABISELECT(19104,11684), //bcp->offset
    77, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S15475C5,    ABISELECT(18000,11012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15475C9,    ABISELECT(18048,11036), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S15475C8,    ABISELECT(18048,11036), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15475C9,    ABISELECT(19248,11772), //bcp->offset
    83, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S15475C6,    ABISELECT(18960,11592), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S15475C9,    ABISELECT(19456,11900), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S15475C6,    ABISELECT(19664,12028), //bcp->offset
    106, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S15475C5,    ABISELECT(19824,12132), //bcp->offset
    110, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S15475C10,    ABISELECT(19456,11900), //bcp->offset
    91, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S15475C4,    ABISELECT(18000,11012), //bcp->offset
    50, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S15475C9,    ABISELECT(19872,12156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S15475C8,    ABISELECT(19872,12156), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S15475C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S15475C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S15475C9,    ABISELECT(1360,828), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S15475C6,    ABISELECT(1568,956), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S15475C10,    ABISELECT(1360,828), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S15475C5,    ABISELECT(1728,1060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S15475C9,    ABISELECT(1776,1084), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S15475C8,    ABISELECT(1776,1084), //bcp->offset
    39, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S15475C6,    ABISELECT(2688,1640), //bcp->offset
    46, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S15475C4,    ABISELECT(1728,1060), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S15475C2[];
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C2D1Ev();
extern void _ZN8S15475C2D0Ev();
extern void _ZN8S15475C33v10Ev();
extern void _ZN8S15475C33v11Ev();
extern void _ZN8S15475C33v12Ev();
extern void _ZN8S15475C22v1Ev();
extern void _ZN8S15475C22v2Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZThn1360_N8S15475C2D1Ev,_ZThn828_N8S15475C2D1Ev)();
extern void ABISELECT(_ZThn1360_N8S15475C2D0Ev,_ZThn828_N8S15475C2D0Ev)();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void ABISELECT(_ZThn1728_N8S15475C2D1Ev,_ZThn1060_N8S15475C2D1Ev)();
extern void ABISELECT(_ZThn1728_N8S15475C2D0Ev,_ZThn1060_N8S15475C2D0Ev)();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void ABISELECT(_ZTv0_n56_N8S15475C2D1Ev,_ZTv0_n28_N8S15475C2D1Ev)();
extern void ABISELECT(_ZThn18000_N8S15475C2D1Ev,_ZThn11012_N8S15475C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S15475C2D0Ev,_ZTv0_n28_N8S15475C2D0Ev)();
extern void ABISELECT(_ZThn18000_N8S15475C2D0Ev,_ZThn11012_N8S15475C2D0Ev)() __attribute__((weak));
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S15475C2D1Ev,_ZTv0_n32_N8S15475C2D1Ev)();
extern void ABISELECT(_ZThn19456_N8S15475C2D1Ev,_ZThn11900_N8S15475C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S15475C2D0Ev,_ZTv0_n32_N8S15475C2D0Ev)();
extern void ABISELECT(_ZThn19456_N8S15475C2D0Ev,_ZThn11900_N8S15475C2D0Ev)() __attribute__((weak));
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
static  VTBL_ENTRY vtc_S15475C2[] = {
  ABISELECT(19872,12156),
  ABISELECT(19824,12132),
  ABISELECT(19456,11900),
  ABISELECT(19248,11772),
  ABISELECT(19104,11684),
  ABISELECT(18000,11012),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C2D1Ev,
  (VTBL_ENTRY)&_ZN8S15475C2D0Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v10Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v11Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v12Ev,
  (VTBL_ENTRY)&_ZN8S15475C22v1Ev,
  (VTBL_ENTRY)&_ZN8S15475C22v2Ev,
  ABISELECT(17744,10856),
  ABISELECT(18464,11304),
  ABISELECT(-1360,-828),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N8S15475C2D1Ev,_ZThn828_N8S15475C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1360_N8S15475C2D0Ev,_ZThn828_N8S15475C2D0Ev),
  ABISELECT(-1568,-956),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  ABISELECT(18096,11072),
  ABISELECT(17728,10840),
  ABISELECT(17520,10712),
  ABISELECT(17376,10624),
  ABISELECT(-1728,-1060),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1728_N8S15475C2D1Ev,_ZThn1060_N8S15475C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1728_N8S15475C2D0Ev,_ZThn1060_N8S15475C2D0Ev),
  ABISELECT(-1776,-1084),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
  ABISELECT(-2688,-1640),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-18000,-11012),
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  ABISELECT(-18000,-11012),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S15475C2D1Ev,_ZTv0_n28_N8S15475C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S15475C2D0Ev,_ZTv0_n28_N8S15475C2D0Ev),
  ABISELECT(-18048,-11036),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
  ABISELECT(-18960,-11592),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  0,
  0,
  ABISELECT(-19104,-11684),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  0,
  0,
  0,
  ABISELECT(-19248,-11772),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-19456,-11900),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-19456,-11900),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C2D1Ev,_ZTv0_n32_N8S15475C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C2D0Ev,_ZTv0_n32_N8S15475C2D0Ev),
  ABISELECT(-19664,-12028),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
  ABISELECT(-720,-448),
  ABISELECT(-19824,-12132),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-19872,-12156),
  (VTBL_ENTRY)&(_ZTI8S15475C2[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
};
extern VTBL_ENTRY _ZTV8S15475C2[];
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C3D1Ev();
extern void _ZN8S15475C3D0Ev();
extern void _ZN8S15475C33v10Ev();
extern void _ZN8S15475C33v11Ev();
extern void _ZN8S15475C33v12Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C3__8S15475C2[] = {
  ABISELECT(19872,12156),
  ABISELECT(19824,12132),
  ABISELECT(19456,11900),
  ABISELECT(19248,11772),
  ABISELECT(19104,11684),
  ABISELECT(18000,11012),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C3D1Ev,
  (VTBL_ENTRY)&_ZN8S15475C3D0Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v10Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v11Ev,
  (VTBL_ENTRY)&_ZN8S15475C33v12Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S15475C3D1Ev,_ZTv0_n28_N8S15475C3D1Ev)();
extern void ABISELECT(_ZThn18000_N8S15475C3D1Ev,_ZThn11012_N8S15475C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S15475C3D0Ev,_ZTv0_n28_N8S15475C3D0Ev)();
extern void ABISELECT(_ZThn18000_N8S15475C3D0Ev,_ZThn11012_N8S15475C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S15475C4__8S15475C3__8S15475C2[] = {
  ABISELECT(960,580),
  ABISELECT(960,580),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(-18000,-11012),
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  ABISELECT(-18000,-11012),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S15475C3D1Ev,_ZTv0_n28_N8S15475C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S15475C3D0Ev,_ZTv0_n28_N8S15475C3D0Ev),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C3__8S15475C2[] = {
  0,
  0,
  ABISELECT(-19104,-11684),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C88S15475C4__8S15475C3__8S15475C2[] = {
  ABISELECT(-18048,-11036),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C9__A1__8S15475C3__8S15475C2[] = {
  0,
  0,
  0,
  ABISELECT(-19248,-11772),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C68S15475C4__A1__8S15475C3__8S15475C2[] = {
  ABISELECT(-18960,-11592),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S15475C3D1Ev,_ZTv0_n32_N8S15475C3D1Ev)();
extern void ABISELECT(_ZThn19456_N8S15475C3D1Ev,_ZThn11900_N8S15475C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S15475C3D0Ev,_ZTv0_n32_N8S15475C3D0Ev)();
extern void ABISELECT(_ZThn19456_N8S15475C3D0Ev,_ZThn11900_N8S15475C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15475C10__8S15475C3__8S15475C2[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-19456,-11900),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-19456,-11900),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C3D1Ev,_ZTv0_n32_N8S15475C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C3D0Ev,_ZTv0_n32_N8S15475C3D0Ev),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C69S15475C10__A2__8S15475C3__8S15475C2[] = {
  ABISELECT(-19664,-12028),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__A1__8S15475C3__8S15475C2[] = {
  ABISELECT(-720,-448),
  ABISELECT(-19824,-12132),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN8S15475C82v8Ev();
extern void _ZN8S15475C82v9Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C8__A1__8S15475C3__8S15475C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-19872,-12156),
  (VTBL_ENTRY)&(_ZTI8S15475C3[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v8Ev,
  (VTBL_ENTRY)&_ZN8S15475C82v9Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN9S15475C10D1Ev();
extern void _ZN9S15475C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S15475C10__A__8S15475C2[] = {
  ABISELECT(17744,10856),
  ABISELECT(18464,11304),
  0,
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D1Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__9S15475C10__A__8S15475C2[] = {
  ABISELECT(-720,-448),
  ABISELECT(-18464,-11304),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__A1__9S15475C10__A__8S15475C2[] = {
  0,
  0,
  ABISELECT(-17744,-10856),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C4D1Ev();
extern void _ZN8S15475C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C4__A__8S15475C2[] = {
  ABISELECT(18096,11072),
  ABISELECT(17728,10840),
  ABISELECT(17520,10712),
  ABISELECT(17376,10624),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C4D1Ev,
  (VTBL_ENTRY)&_ZN8S15475C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C58S15475C4__A2__8S15475C2[] = {
  ABISELECT(17376,10624),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C58S15475C4__A2__8S15475C2[] = {
  0,
  0,
  ABISELECT(-17376,-10624),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C4__A__8S15475C2[] = {
  0,
  0,
  ABISELECT(-17376,-10624),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C9__A1__8S15475C4__A__8S15475C2[] = {
  0,
  0,
  0,
  ABISELECT(-17520,-10712),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev)();
extern void ABISELECT(_ZThn17728_N8S15475C4D1Ev,_ZThn10840_N8S15475C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev)();
extern void ABISELECT(_ZThn17728_N8S15475C4D0Ev,_ZThn10840_N8S15475C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15475C10__8S15475C4__A__8S15475C2[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-17728,-10840),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-17728,-10840),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C69S15475C10__A2__8S15475C4__A__8S15475C2[] = {
  ABISELECT(-17936,-10968),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__A1__8S15475C4__A__8S15475C2[] = {
  ABISELECT(-720,-448),
  ABISELECT(-18096,-11072),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
};
extern void _ZN8S15475C4D1Ev();
extern void _ZN8S15475C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C4__8S15475C2[] = {
  ABISELECT(1824,1120),
  ABISELECT(1456,888),
  ABISELECT(1248,760),
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C4D1Ev,
  (VTBL_ENTRY)&_ZN8S15475C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C58S15475C4__8S15475C2[] = {
  ABISELECT(1104,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C58S15475C4__8S15475C2[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C4__8S15475C2[] = {
  0,
  0,
  ABISELECT(-1104,-672),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C9__A1__8S15475C4__8S15475C2[] = {
  0,
  0,
  0,
  ABISELECT(-1248,-760),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev)();
extern void ABISELECT(_ZThn1456_N8S15475C4D1Ev,_ZThn888_N8S15475C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev)();
extern void ABISELECT(_ZThn1456_N8S15475C4D0Ev,_ZThn888_N8S15475C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S15475C10__8S15475C4__8S15475C2[] = {
  ABISELECT(208,128),
  ABISELECT(208,128),
  ABISELECT(-1456,-888),
  0,
  0,
  0,
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  ABISELECT(-1456,-888),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C69S15475C10__A2__8S15475C4__8S15475C2[] = {
  ABISELECT(-1664,-1016),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__A1__8S15475C4__8S15475C2[] = {
  ABISELECT(-720,-448),
  ABISELECT(-1824,-1120),
  (VTBL_ENTRY)&(_ZTI8S15475C4[0]),
};
extern void _ZN8S15475C92v5Ev();
extern void _ZN8S15475C92v6Ev();
extern void _ZN8S15475C92v7Ev();
extern void _ZN9S15475C10D1Ev();
extern void _ZN9S15475C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S15475C10__8S15475C2[] = {
  ABISELECT(-352,-216),
  ABISELECT(368,232),
  0,
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C92v5Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v6Ev,
  (VTBL_ENTRY)&_ZN8S15475C92v7Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D1Ev,
  (VTBL_ENTRY)&_ZN9S15475C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__9S15475C10__8S15475C2[] = {
  ABISELECT(-720,-448),
  ABISELECT(-368,-232),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__A1__9S15475C10__8S15475C2[] = {
  0,
  0,
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI9S15475C10[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S15475C5__A1__8S15475C2[] = {
  ABISELECT(-720,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
};
extern void _ZN8S15475C62v3Ev();
extern void _ZN8S15475C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S15475C6__8S15475C5__A1__8S15475C2[] = {
  0,
  0,
  ABISELECT(720,448),
  (VTBL_ENTRY)&(_ZTI8S15475C5[0]),
  (VTBL_ENTRY)&_ZN8S15475C62v3Ev,
  (VTBL_ENTRY)&_ZN8S15475C62v4Ev,
};
static  VTT_ENTRY vtt_S15475C2[] = {
  {&(_ZTV8S15475C2[8]),  8,125},
  {&(_tg__ZTV8S15475C3__8S15475C2[8]),  8,16},
  {&(_tg__ZTV8S15475C4__8S15475C3__8S15475C2[14]),  14,16},
  {&(_tg__ZTV8S15475C6__8S15475C3__8S15475C2[4]),  4,6},
  {&(_tg__ZTV8S15475C88S15475C4__8S15475C3__8S15475C2[2]),  2,7},
  {&(_tg__ZTV8S15475C9__A1__8S15475C3__8S15475C2[5]),  5,8},
  {&(_tg__ZTV8S15475C68S15475C4__A1__8S15475C3__8S15475C2[2]),  2,4},
  {&(_tg__ZTV9S15475C10__8S15475C3__8S15475C2[10]),  10,15},
  {&(_tg__ZTV8S15475C69S15475C10__A2__8S15475C3__8S15475C2[2]),  2,4},
  {&(_tg__ZTV8S15475C5__A1__8S15475C3__8S15475C2[3]),  3,3},
  {&(_tg__ZTV8S15475C8__A1__8S15475C3__8S15475C2[7]),  7,12},
  {&(_tg__ZTV9S15475C10__A__8S15475C2[4]),  4,9},
  {&(_tg__ZTV8S15475C5__9S15475C10__A__8S15475C2[3]),  3,3},
  {&(_tg__ZTV8S15475C6__A1__9S15475C10__A__8S15475C2[4]),  4,6},
  {&(_tg__ZTV8S15475C4__A__8S15475C2[6]),  6,8},
  {&(_tg__ZTV8S15475C58S15475C4__A2__8S15475C2[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C58S15475C4__A2__8S15475C2[4]),  4,6},
  {&(_tg__ZTV8S15475C6__8S15475C4__A__8S15475C2[4]),  4,6},
  {&(_tg__ZTV8S15475C9__A1__8S15475C4__A__8S15475C2[5]),  5,8},
  {&(_tg__ZTV9S15475C10__8S15475C4__A__8S15475C2[10]),  10,15},
  {&(_tg__ZTV8S15475C69S15475C10__A2__8S15475C4__A__8S15475C2[2]),  2,4},
  {&(_tg__ZTV8S15475C5__A1__8S15475C4__A__8S15475C2[3]),  3,3},
  {&(_ZTV8S15475C2[64]),  64,125},
  {&(_ZTV8S15475C2[81]),  81,125},
  {&(_ZTV8S15475C2[68]),  68,125},
  {&(_ZTV8S15475C2[88]),  88,125},
  {&(_ZTV8S15475C2[75]),  75,125},
  {&(_ZTV8S15475C2[101]),  101,125},
  {&(_ZTV8S15475C2[108]),  108,125},
  {&(_ZTV8S15475C2[113]),  113,125},
  {&(_ZTV8S15475C2[120]),  120,125},
  {&(_ZTV8S15475C2[22]),  22,125},
  {&(_ZTV8S15475C2[37]),  37,125},
  {&(_tg__ZTV8S15475C4__8S15475C2[6]),  6,8},
  {&(_tg__ZTV8S15475C58S15475C4__8S15475C2[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C58S15475C4__8S15475C2[4]),  4,6},
  {&(_tg__ZTV8S15475C6__8S15475C4__8S15475C2[4]),  4,6},
  {&(_tg__ZTV8S15475C9__A1__8S15475C4__8S15475C2[5]),  5,8},
  {&(_tg__ZTV9S15475C10__8S15475C4__8S15475C2[10]),  10,15},
  {&(_tg__ZTV8S15475C69S15475C10__A2__8S15475C4__8S15475C2[2]),  2,4},
  {&(_tg__ZTV8S15475C5__A1__8S15475C4__8S15475C2[3]),  3,3},
  {&(_tg__ZTV9S15475C10__8S15475C2[4]),  4,9},
  {&(_tg__ZTV8S15475C5__9S15475C10__8S15475C2[3]),  3,3},
  {&(_tg__ZTV8S15475C6__A1__9S15475C10__8S15475C2[4]),  4,6},
  {&(_tg__ZTV8S15475C5__A1__8S15475C2[3]),  3,3},
  {&(_tg__ZTV8S15475C6__8S15475C5__A1__8S15475C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S15475C2[];
extern  VTBL_ENTRY _ZTV8S15475C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S15475C2[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C4D0Ev,_ZTv0_n32_N8S15475C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S15475C4D0Ev,_ZThn888_N8S15475C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17728_N8S15475C4D0Ev,_ZThn10840_N8S15475C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C4D1Ev,_ZTv0_n32_N8S15475C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S15475C4D1Ev,_ZThn888_N8S15475C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17728_N8S15475C4D1Ev,_ZThn10840_N8S15475C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C3D0Ev,_ZTv0_n32_N8S15475C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19456_N8S15475C3D0Ev,_ZThn11900_N8S15475C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C3D1Ev,_ZTv0_n32_N8S15475C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19456_N8S15475C3D1Ev,_ZThn11900_N8S15475C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S15475C3D0Ev,_ZTv0_n28_N8S15475C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18000_N8S15475C3D0Ev,_ZThn11012_N8S15475C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S15475C3D1Ev,_ZTv0_n28_N8S15475C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18000_N8S15475C3D1Ev,_ZThn11012_N8S15475C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C2D0Ev,_ZTv0_n32_N8S15475C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19456_N8S15475C2D0Ev,_ZThn11900_N8S15475C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S15475C2D1Ev,_ZTv0_n32_N8S15475C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19456_N8S15475C2D1Ev,_ZThn11900_N8S15475C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S15475C2D0Ev,_ZTv0_n28_N8S15475C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18000_N8S15475C2D0Ev,_ZThn11012_N8S15475C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S15475C2D1Ev,_ZTv0_n28_N8S15475C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18000_N8S15475C2D1Ev,_ZThn11012_N8S15475C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S15475C2 = {  "S15475C2", // class name
  bases_S15475C2, 23,
  &(vtc_S15475C2[0]), // expected_vtbl_contents
  &(vtt_S15475C2[0]), // expected_vtt_contents
  ABISELECT(20784,12712), // object size
  NSPAIRA(_ZTI8S15475C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S15475C2),125, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S15475C2),46, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15475C1  {
  ::S15475C2 s15475c1f0;
  __tsi64 s15475c1f1;
  char s15475c1f2[10];
  void  mf15475c1(); // _ZN8S15475C19mf15475c1Ev
};
//SIG(1 S15475C1) C1{ m FC2{ BC3{ VBC4{ BC5{ VBC6{ v3 v4 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fi Fi:7 FC7{} Fp Fi Fp} BC8{ BC9{ v5 v6 v7 Fi[2] FL Fc:0 FC6 Fc Fi FD} v8 v9 FC6 Fi FC6 FC9 FC6 FD Fp Fi FD Fc:0} VBC9 BC6 VBC10{ BC9 BC6 VBC5 vd Fs:16 FL Fs} vd Fs} VBC8 BC9 vd v10 v11 v12 Fl[2] FC10 Fi FD FC9 FC6 Fc FD FC7 FL:64 FC6} BC10 BC4 vd v1 v2 Fi Fp FL Fp FL FD FL[2] FC4[7] FC11{ vd m Fp FC7 Fp Fi FC12{ BC13{ v15 v16 v17 Fi[2] FL Fc:0 FC14{ v18 v19 Fp FD FL Fp Fi:6 Fi Fp Fl[2] Fi[3] Fp[3] FL Fl} Fc Fi FD} v13 v14 FC14 Fi FC14 FC13 FC14 FD Fp Fi FD Fc:0} FC13[5]}} FL Fc[10]}


void  S15475C1 ::mf15475c1(){}

static void Test_S15475C1()
{
  {
    init_simple_test("S15475C1");
    static S15475C1 lv;
    check2(sizeof(lv), ABISELECT(20816,12732), "sizeof(S15475C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S15475C1)");
    check_field_offset(lv, s15475c1f0, 0, "S15475C1.s15475c1f0");
    check_field_offset(lv, s15475c1f1, ABISELECT(20784,12712), "S15475C1.s15475c1f1");
    check_field_offset(lv, s15475c1f2, ABISELECT(20792,12720), "S15475C1.s15475c1f2");
  }
}
static Arrange_To_Call_Me vS15475C1(Test_S15475C1, "S15475C1", ABISELECT(20816,12732));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8512C2  {
  ::S8516C3_nt s8512c2f0;
  int s8512c2f1[4];
  ::S8516C5 s8512c2f2[32];
  char s8512c2f3;
  int s8512c2f4[2];
  ::S8516C6_nt s8512c2f5;
  ::S8516C11 s8512c2f6;
  int s8512c2f7[4];
  void *s8512c2f8;
  virtual  ~S8512C2(); // _ZN7S8512C2D1Ev
  virtual void  v10(); // _ZN7S8512C23v10Ev
  virtual void  v11(); // _ZN7S8512C23v11Ev
  virtual void  v12(); // _ZN7S8512C23v12Ev
  virtual void  v13(); // _ZN7S8512C23v13Ev
  virtual void  v14(); // _ZN7S8512C23v14Ev
  virtual void  v15(); // _ZN7S8512C23v15Ev
  virtual void  v16(); // _ZN7S8512C23v16Ev
  virtual void  v17(); // _ZN7S8512C23v17Ev
  virtual void  v18(); // _ZN7S8512C23v18Ev
  virtual void  v19(); // _ZN7S8512C23v19Ev
  virtual void  v20(); // _ZN7S8512C23v20Ev
  S8512C2(); // tgen
};
//SIG(-1 S8512C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FC3{ Fl[4]}} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC2 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC2 FC8 Fi[5]} Fi[4] Fp}


 S8512C2 ::~S8512C2(){ note_dtor("S8512C2", this);}
void  S8512C2 ::v10(){vfunc_called(this, "_ZN7S8512C23v10Ev");}
void  S8512C2 ::v11(){vfunc_called(this, "_ZN7S8512C23v11Ev");}
void  S8512C2 ::v12(){vfunc_called(this, "_ZN7S8512C23v12Ev");}
void  S8512C2 ::v13(){vfunc_called(this, "_ZN7S8512C23v13Ev");}
void  S8512C2 ::v14(){vfunc_called(this, "_ZN7S8512C23v14Ev");}
void  S8512C2 ::v15(){vfunc_called(this, "_ZN7S8512C23v15Ev");}
void  S8512C2 ::v16(){vfunc_called(this, "_ZN7S8512C23v16Ev");}
void  S8512C2 ::v17(){vfunc_called(this, "_ZN7S8512C23v17Ev");}
void  S8512C2 ::v18(){vfunc_called(this, "_ZN7S8512C23v18Ev");}
void  S8512C2 ::v19(){vfunc_called(this, "_ZN7S8512C23v19Ev");}
void  S8512C2 ::v20(){vfunc_called(this, "_ZN7S8512C23v20Ev");}
S8512C2 ::S8512C2(){ note_ctor("S8512C2", this);} // tgen

static void Test_S8512C2()
{
  extern Class_Descriptor cd_S8512C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,68)];
    init_test(&cd_S8512C2, buf);
    S8512C2 *dp, &lv = *(dp=new (buf) S8512C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,268), "sizeof(S8512C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8512C2)");
    check_field_offset(lv, s8512c2f0, ABISELECT(8,4), "S8512C2.s8512c2f0");
    check_field_offset(lv, s8512c2f1, ABISELECT(40,20), "S8512C2.s8512c2f1");
    check_field_offset(lv, s8512c2f2, ABISELECT(56,36), "S8512C2.s8512c2f2");
    check_field_offset(lv, s8512c2f3, ABISELECT(120,100), "S8512C2.s8512c2f3");
    check_field_offset(lv, s8512c2f4, ABISELECT(124,104), "S8512C2.s8512c2f4");
    check_field_offset(lv, s8512c2f5, ABISELECT(136,112), "S8512C2.s8512c2f5");
    check_field_offset(lv, s8512c2f6, ABISELECT(248,192), "S8512C2.s8512c2f6");
    check_field_offset(lv, s8512c2f7, ABISELECT(328,248), "S8512C2.s8512c2f7");
    check_field_offset(lv, s8512c2f8, ABISELECT(344,264), "S8512C2.s8512c2f8");
    test_class_info(&lv, &cd_S8512C2);
    dp->~S8512C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8512C2(Test_S8512C2, "S8512C2", ABISELECT(352,268));

#else // __cplusplus

extern void _ZN7S8512C2C1Ev();
extern void _ZN7S8512C2D1Ev();
Name_Map name_map_S8512C2[] = {
  NSPAIR(_ZN7S8512C2C1Ev),
  NSPAIR(_ZN7S8512C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8512C2[];
extern void _ZN7S8512C2D1Ev();
extern void _ZN7S8512C2D0Ev();
extern void _ZN7S8512C23v10Ev();
extern void _ZN7S8512C23v11Ev();
extern void _ZN7S8512C23v12Ev();
extern void _ZN7S8512C23v13Ev();
extern void _ZN7S8512C23v14Ev();
extern void _ZN7S8512C23v15Ev();
extern void _ZN7S8512C23v16Ev();
extern void _ZN7S8512C23v17Ev();
extern void _ZN7S8512C23v18Ev();
extern void _ZN7S8512C23v19Ev();
extern void _ZN7S8512C23v20Ev();
static  VTBL_ENTRY vtc_S8512C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8512C2[0]),
  (VTBL_ENTRY)&_ZN7S8512C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8512C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S8512C2[];
extern  VTBL_ENTRY _ZTV7S8512C2[];
Class_Descriptor cd_S8512C2 = {  "S8512C2", // class name
  0,0,//no base classes
  &(vtc_S8512C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,268), // object size
  NSPAIRA(_ZTI7S8512C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8512C2),15, //virtual function table var
  2, // 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  S8512C12  {
  void *s8512c12f0;
  int s8512c12f1;
  virtual  ~S8512C12(); // _ZN8S8512C12D1Ev
  virtual void  v21(); // _ZN8S8512C123v21Ev
  S8512C12(); // tgen
};
//SIG(-1 S8512C12) C1{ vd v1 Fp Fi}


 S8512C12 ::~S8512C12(){ note_dtor("S8512C12", this);}
void  S8512C12 ::v21(){vfunc_called(this, "_ZN8S8512C123v21Ev");}
S8512C12 ::S8512C12(){ note_ctor("S8512C12", this);} // tgen

static void Test_S8512C12()
{
  extern Class_Descriptor cd_S8512C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8512C12, buf);
    S8512C12 *dp, &lv = *(dp=new (buf) S8512C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8512C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8512C12)");
    check_field_offset(lv, s8512c12f0, ABISELECT(8,4), "S8512C12.s8512c12f0");
    check_field_offset(lv, s8512c12f1, ABISELECT(16,8), "S8512C12.s8512c12f1");
    test_class_info(&lv, &cd_S8512C12);
    dp->~S8512C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8512C12(Test_S8512C12, "S8512C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S8512C12C1Ev();
extern void _ZN8S8512C12D1Ev();
Name_Map name_map_S8512C12[] = {
  NSPAIR(_ZN8S8512C12C1Ev),
  NSPAIR(_ZN8S8512C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8512C12[];
extern void _ZN8S8512C12D1Ev();
extern void _ZN8S8512C12D0Ev();
extern void _ZN8S8512C123v21Ev();
static  VTBL_ENTRY vtc_S8512C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8512C12[0]),
  (VTBL_ENTRY)&_ZN8S8512C12D1Ev,
  (VTBL_ENTRY)&_ZN8S8512C12D0Ev,
  (VTBL_ENTRY)&_ZN8S8512C123v21Ev,
};
extern VTBL_ENTRY _ZTI8S8512C12[];
extern  VTBL_ENTRY _ZTV8S8512C12[];
Class_Descriptor cd_S8512C12 = {  "S8512C12", // class name
  0,0,//no base classes
  &(vtc_S8512C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S8512C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8512C12),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  S8512C15_nt  {
  char s8512c15f0[52];
};
//SIG(-1 S8512C15_nt) C1{ Fc[52]}



//skip512 S8512C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8512C16_nt  {
  int s8512c16f0[3];
  char s8512c16f1[4];
};
//SIG(-1 S8512C16_nt) C1{ Fi[3] Fc[4]}



//skip512 S8512C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8512C17  {
  int s8512c17f0;
  char s8512c17f1[24];
};
//SIG(-1 S8512C17) C1{ Fi Fc[24]}



static void Test_S8512C17()
{
  {
    init_simple_test("S8512C17");
    S8512C17 lv;
    check2(sizeof(lv), 28, "sizeof(S8512C17)");
    check2(__alignof__(lv), 4, "__alignof__(S8512C17)");
    check_field_offset(lv, s8512c17f0, 0, "S8512C17.s8512c17f0");
    check_field_offset(lv, s8512c17f1, 4, "S8512C17.s8512c17f1");
  }
}
static Arrange_To_Call_Me vS8512C17(Test_S8512C17, "S8512C17", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8512C19  {
  short s8512c19f0;
  char s8512c19f1[2];
  short s8512c19f2[2];
  int s8512c19f3;
};
//SIG(-1 S8512C19) C1{ Fs Fc[2] Fs[2] Fi}



static void Test_S8512C19()
{
  {
    init_simple_test("S8512C19");
    S8512C19 lv;
    check2(sizeof(lv), 12, "sizeof(S8512C19)");
    check2(__alignof__(lv), 4, "__alignof__(S8512C19)");
    check_field_offset(lv, s8512c19f0, 0, "S8512C19.s8512c19f0");
    check_field_offset(lv, s8512c19f1, 2, "S8512C19.s8512c19f1");
    check_field_offset(lv, s8512c19f2, 4, "S8512C19.s8512c19f2");
    check_field_offset(lv, s8512c19f3, 8, "S8512C19.s8512c19f3");
  }
}
static Arrange_To_Call_Me vS8512C19(Test_S8512C19, "S8512C19", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8512C18  {
  int s8512c18f0[3];
  char s8512c18f1[2];
  short s8512c18f2;
  char s8512c18f3[20];
  ::S8512C19 s8512c18f4[15];
};
//SIG(-1 S8512C18) C1{ Fi[3] Fc[2] Fs Fc[20] FC2{ Fs Fc[2] Fs[2] Fi}[15]}



static void Test_S8512C18()
{
  {
    init_simple_test("S8512C18");
    S8512C18 lv;
    check2(sizeof(lv), 216, "sizeof(S8512C18)");
    check2(__alignof__(lv), 4, "__alignof__(S8512C18)");
    check_field_offset(lv, s8512c18f0, 0, "S8512C18.s8512c18f0");
    check_field_offset(lv, s8512c18f1, 12, "S8512C18.s8512c18f1");
    check_field_offset(lv, s8512c18f2, 14, "S8512C18.s8512c18f2");
    check_field_offset(lv, s8512c18f3, 16, "S8512C18.s8512c18f3");
    check_field_offset(lv, s8512c18f4, 36, "S8512C18.s8512c18f4");
  }
}
static Arrange_To_Call_Me vS8512C18(Test_S8512C18, "S8512C18", 216);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8512C1  : S8512C2 , S8512C12 {
  ::S8516C3_nt s8512c1f0;
  char s8512c1f1;
  ::S22028C11_nt s8512c1f2;
  ::S8512C15_nt s8512c1f3;
  ::S8512C16_nt s8512c1f4;
  int s8512c1f5;
  void *s8512c1f6;
  int s8512c1f7;
  ::S8512C17 s8512c1f8;
  ::S8512C18 s8512c1f9;
  virtual  ~S8512C1(); // _ZN7S8512C1D1Ev
  virtual void  v1(); // _ZN7S8512C12v1Ev
  virtual void  v2(); // _ZN7S8512C12v2Ev
  virtual void  v3(); // _ZN7S8512C12v3Ev
  virtual void  v4(); // _ZN7S8512C12v4Ev
  virtual void  v5(); // _ZN7S8512C12v5Ev
  virtual void  v6(); // _ZN7S8512C12v6Ev
  virtual void  v7(); // _ZN7S8512C12v7Ev
  virtual void  v8(); // _ZN7S8512C12v8Ev
  virtual void  v9(); // _ZN7S8512C12v9Ev
  S8512C1(); // tgen
};
//SIG(1 S8512C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC3{ m FC4{ Fl[4]}} Fi[4] FC5{ Fc[2]}[32] Fc Fi[2] FC6{ m Fi Fc FC7{ m Fp Fi[2] FC8{ m}} FC3 FC9{ m Fp FC10{ Fi[4]}} FC9} FC11{ m FC3 FC9 Fi[5]} Fi[4] Fp} BC12{ vd v21 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC3 Fc FC13{ m Fp Fi FC14{ m}} FC15{ Fc[52]} FC16{ Fi[3] Fc[4]} Fi Fp Fi FC17{ Fi Fc[24]} FC18{ Fi[3] Fc[2] Fs Fc[20] FC19{ Fs Fc[2] Fs[2] Fi}[15]}}


 S8512C1 ::~S8512C1(){ note_dtor("S8512C1", this);}
void  S8512C1 ::v1(){vfunc_called(this, "_ZN7S8512C12v1Ev");}
void  S8512C1 ::v2(){vfunc_called(this, "_ZN7S8512C12v2Ev");}
void  S8512C1 ::v3(){vfunc_called(this, "_ZN7S8512C12v3Ev");}
void  S8512C1 ::v4(){vfunc_called(this, "_ZN7S8512C12v4Ev");}
void  S8512C1 ::v5(){vfunc_called(this, "_ZN7S8512C12v5Ev");}
void  S8512C1 ::v6(){vfunc_called(this, "_ZN7S8512C12v6Ev");}
void  S8512C1 ::v7(){vfunc_called(this, "_ZN7S8512C12v7Ev");}
void  S8512C1 ::v8(){vfunc_called(this, "_ZN7S8512C12v8Ev");}
void  S8512C1 ::v9(){vfunc_called(this, "_ZN7S8512C12v9Ev");}
S8512C1 ::S8512C1(){ note_ctor("S8512C1", this);} // tgen

static void Test_S8512C1()
{
  extern Class_Descriptor cd_S8512C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(96,160)];
    init_test(&cd_S8512C1, buf);
    S8512C1 *dp, &lv = *(dp=new (buf) S8512C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(760,636), "sizeof(S8512C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8512C1)");
    check_base_class_offset(lv, (S8512C2*), 0, "S8512C1");
    check_base_class_offset(lv, (S8512C12*), ABISELECT(352,268), "S8512C1");
    check_field_offset(lv, s8512c1f0, ABISELECT(376,280), "S8512C1.s8512c1f0");
    check_field_offset(lv, s8512c1f1, ABISELECT(408,296), "S8512C1.s8512c1f1");
    check_field_offset(lv, s8512c1f2, ABISELECT(416,300), "S8512C1.s8512c1f2");
    check_field_offset(lv, s8512c1f3, ABISELECT(432,312), "S8512C1.s8512c1f3");
    check_field_offset(lv, s8512c1f4, ABISELECT(484,364), "S8512C1.s8512c1f4");
    check_field_offset(lv, s8512c1f5, ABISELECT(500,380), "S8512C1.s8512c1f5");
    check_field_offset(lv, s8512c1f6, ABISELECT(504,384), "S8512C1.s8512c1f6");
    check_field_offset(lv, s8512c1f7, ABISELECT(512,388), "S8512C1.s8512c1f7");
    check_field_offset(lv, s8512c1f8, ABISELECT(516,392), "S8512C1.s8512c1f8");
    check_field_offset(lv, s8512c1f9, ABISELECT(544,420), "S8512C1.s8512c1f9");
    test_class_info(&lv, &cd_S8512C1);
    dp->~S8512C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8512C1(Test_S8512C1, "S8512C1", ABISELECT(760,636));

#else // __cplusplus

extern void _ZN7S8512C1C1Ev();
extern void _ZN7S8512C1D1Ev();
Name_Map name_map_S8512C1[] = {
  NSPAIR(_ZN7S8512C1C1Ev),
  NSPAIR(_ZN7S8512C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8512C2;
extern VTBL_ENTRY _ZTI7S8512C2[];
extern  VTBL_ENTRY _ZTV7S8512C2[];
extern Class_Descriptor cd_S8512C12;
extern VTBL_ENTRY _ZTI8S8512C12[];
extern  VTBL_ENTRY _ZTV8S8512C12[];
static Base_Class bases_S8512C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8512C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8512C12,    ABISELECT(352,268), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8512C1[];
extern void _ZN7S8512C1D1Ev();
extern void _ZN7S8512C1D0Ev();
extern void _ZN7S8512C23v10Ev();
extern void _ZN7S8512C23v11Ev();
extern void _ZN7S8512C23v12Ev();
extern void _ZN7S8512C23v13Ev();
extern void _ZN7S8512C23v14Ev();
extern void _ZN7S8512C23v15Ev();
extern void _ZN7S8512C23v16Ev();
extern void _ZN7S8512C23v17Ev();
extern void _ZN7S8512C23v18Ev();
extern void _ZN7S8512C23v19Ev();
extern void _ZN7S8512C23v20Ev();
extern void _ZN7S8512C12v1Ev();
extern void _ZN7S8512C12v2Ev();
extern void _ZN7S8512C12v3Ev();
extern void _ZN7S8512C12v4Ev();
extern void _ZN7S8512C12v5Ev();
extern void _ZN7S8512C12v6Ev();
extern void _ZN7S8512C12v7Ev();
extern void _ZN7S8512C12v8Ev();
extern void _ZN7S8512C12v9Ev();
extern void ABISELECT(_ZThn352_N7S8512C1D1Ev,_ZThn268_N7S8512C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S8512C1D0Ev,_ZThn268_N7S8512C1D0Ev)();
extern void _ZN8S8512C123v21Ev();
static  VTBL_ENTRY vtc_S8512C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8512C1[0]),
  (VTBL_ENTRY)&_ZN7S8512C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8512C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8512C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8512C12v9Ev,
  ABISELECT(-352,-268),
  (VTBL_ENTRY)&(_ZTI7S8512C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8512C1D1Ev,_ZThn268_N7S8512C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8512C1D0Ev,_ZThn268_N7S8512C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8512C123v21Ev,
};
extern VTBL_ENTRY _ZTI7S8512C1[];
extern  VTBL_ENTRY _ZTV7S8512C1[];
Class_Descriptor cd_S8512C1 = {  "S8512C1", // class name
  bases_S8512C1, 2,
  &(vtc_S8512C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(760,636), // object size
  NSPAIRA(_ZTI7S8512C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8512C1),29, //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  S8513C2  {
  ::S8517C3_nt s8513c2f0;
  int s8513c2f1[4];
  ::S8516C5 s8513c2f2[32];
  char s8513c2f3;
  int s8513c2f4[2];
  ::S8517C6_nt s8513c2f5;
  ::S8517C11 s8513c2f6;
  int s8513c2f7[4];
  void *s8513c2f8;
  virtual  ~S8513C2(); // _ZN7S8513C2D1Ev
  virtual void  v10(); // _ZN7S8513C23v10Ev
  virtual void  v11(); // _ZN7S8513C23v11Ev
  virtual void  v12(); // _ZN7S8513C23v12Ev
  virtual void  v13(); // _ZN7S8513C23v13Ev
  virtual void  v14(); // _ZN7S8513C23v14Ev
  virtual void  v15(); // _ZN7S8513C23v15Ev
  virtual void  v16(); // _ZN7S8513C23v16Ev
  virtual void  v17(); // _ZN7S8513C23v17Ev
  virtual void  v18(); // _ZN7S8513C23v18Ev
  virtual void  v19(); // _ZN7S8513C23v19Ev
  virtual void  v20(); // _ZN7S8513C23v20Ev
  S8513C2(); // tgen
};
//SIG(-1 S8513C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FC3{ FL[4]}} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC2 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC2 FC8 Fi[5]} Fi[4] Fp}


 S8513C2 ::~S8513C2(){ note_dtor("S8513C2", this);}
void  S8513C2 ::v10(){vfunc_called(this, "_ZN7S8513C23v10Ev");}
void  S8513C2 ::v11(){vfunc_called(this, "_ZN7S8513C23v11Ev");}
void  S8513C2 ::v12(){vfunc_called(this, "_ZN7S8513C23v12Ev");}
void  S8513C2 ::v13(){vfunc_called(this, "_ZN7S8513C23v13Ev");}
void  S8513C2 ::v14(){vfunc_called(this, "_ZN7S8513C23v14Ev");}
void  S8513C2 ::v15(){vfunc_called(this, "_ZN7S8513C23v15Ev");}
void  S8513C2 ::v16(){vfunc_called(this, "_ZN7S8513C23v16Ev");}
void  S8513C2 ::v17(){vfunc_called(this, "_ZN7S8513C23v17Ev");}
void  S8513C2 ::v18(){vfunc_called(this, "_ZN7S8513C23v18Ev");}
void  S8513C2 ::v19(){vfunc_called(this, "_ZN7S8513C23v19Ev");}
void  S8513C2 ::v20(){vfunc_called(this, "_ZN7S8513C23v20Ev");}
S8513C2 ::S8513C2(){ note_ctor("S8513C2", this);} // tgen

static void Test_S8513C2()
{
  extern Class_Descriptor cd_S8513C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,80)];
    init_test(&cd_S8513C2, buf);
    S8513C2 *dp, &lv = *(dp=new (buf) S8513C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,316), "sizeof(S8513C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8513C2)");
    check_field_offset(lv, s8513c2f0, ABISELECT(8,4), "S8513C2.s8513c2f0");
    check_field_offset(lv, s8513c2f1, ABISELECT(40,36), "S8513C2.s8513c2f1");
    check_field_offset(lv, s8513c2f2, ABISELECT(56,52), "S8513C2.s8513c2f2");
    check_field_offset(lv, s8513c2f3, ABISELECT(120,116), "S8513C2.s8513c2f3");
    check_field_offset(lv, s8513c2f4, ABISELECT(124,120), "S8513C2.s8513c2f4");
    check_field_offset(lv, s8513c2f5, ABISELECT(136,128), "S8513C2.s8513c2f5");
    check_field_offset(lv, s8513c2f6, ABISELECT(248,224), "S8513C2.s8513c2f6");
    check_field_offset(lv, s8513c2f7, ABISELECT(328,296), "S8513C2.s8513c2f7");
    check_field_offset(lv, s8513c2f8, ABISELECT(344,312), "S8513C2.s8513c2f8");
    test_class_info(&lv, &cd_S8513C2);
    dp->~S8513C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8513C2(Test_S8513C2, "S8513C2", ABISELECT(352,316));

#else // __cplusplus

extern void _ZN7S8513C2C1Ev();
extern void _ZN7S8513C2D1Ev();
Name_Map name_map_S8513C2[] = {
  NSPAIR(_ZN7S8513C2C1Ev),
  NSPAIR(_ZN7S8513C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8513C2[];
extern void _ZN7S8513C2D1Ev();
extern void _ZN7S8513C2D0Ev();
extern void _ZN7S8513C23v10Ev();
extern void _ZN7S8513C23v11Ev();
extern void _ZN7S8513C23v12Ev();
extern void _ZN7S8513C23v13Ev();
extern void _ZN7S8513C23v14Ev();
extern void _ZN7S8513C23v15Ev();
extern void _ZN7S8513C23v16Ev();
extern void _ZN7S8513C23v17Ev();
extern void _ZN7S8513C23v18Ev();
extern void _ZN7S8513C23v19Ev();
extern void _ZN7S8513C23v20Ev();
static  VTBL_ENTRY vtc_S8513C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8513C2[0]),
  (VTBL_ENTRY)&_ZN7S8513C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8513C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S8513C2[];
extern  VTBL_ENTRY _ZTV7S8513C2[];
Class_Descriptor cd_S8513C2 = {  "S8513C2", // class name
  0,0,//no base classes
  &(vtc_S8513C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,316), // object size
  NSPAIRA(_ZTI7S8513C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8513C2),15, //virtual function table var
  2, // 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  S8513C12  {
  void *s8513c12f0;
  int s8513c12f1;
  virtual  ~S8513C12(); // _ZN8S8513C12D1Ev
  virtual void  v21(); // _ZN8S8513C123v21Ev
  S8513C12(); // tgen
};
//SIG(-1 S8513C12) C1{ vd v1 Fp Fi}


 S8513C12 ::~S8513C12(){ note_dtor("S8513C12", this);}
void  S8513C12 ::v21(){vfunc_called(this, "_ZN8S8513C123v21Ev");}
S8513C12 ::S8513C12(){ note_ctor("S8513C12", this);} // tgen

static void Test_S8513C12()
{
  extern Class_Descriptor cd_S8513C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8513C12, buf);
    S8513C12 *dp, &lv = *(dp=new (buf) S8513C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8513C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8513C12)");
    check_field_offset(lv, s8513c12f0, ABISELECT(8,4), "S8513C12.s8513c12f0");
    check_field_offset(lv, s8513c12f1, ABISELECT(16,8), "S8513C12.s8513c12f1");
    test_class_info(&lv, &cd_S8513C12);
    dp->~S8513C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8513C12(Test_S8513C12, "S8513C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S8513C12C1Ev();
extern void _ZN8S8513C12D1Ev();
Name_Map name_map_S8513C12[] = {
  NSPAIR(_ZN8S8513C12C1Ev),
  NSPAIR(_ZN8S8513C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8513C12[];
extern void _ZN8S8513C12D1Ev();
extern void _ZN8S8513C12D0Ev();
extern void _ZN8S8513C123v21Ev();
static  VTBL_ENTRY vtc_S8513C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8513C12[0]),
  (VTBL_ENTRY)&_ZN8S8513C12D1Ev,
  (VTBL_ENTRY)&_ZN8S8513C12D0Ev,
  (VTBL_ENTRY)&_ZN8S8513C123v21Ev,
};
extern VTBL_ENTRY _ZTI8S8513C12[];
extern  VTBL_ENTRY _ZTV8S8513C12[];
Class_Descriptor cd_S8513C12 = {  "S8513C12", // class name
  0,0,//no base classes
  &(vtc_S8513C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S8513C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8513C12),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  S8513C1  : S8513C2 , S8513C12 {
  ::S8517C3_nt s8513c1f0;
  char s8513c1f1;
  ::S22028C11_nt s8513c1f2;
  ::S8512C15_nt s8513c1f3;
  ::S8512C16_nt s8513c1f4;
  int s8513c1f5;
  void *s8513c1f6;
  int s8513c1f7;
  ::S8512C17 s8513c1f8;
  ::S8512C18 s8513c1f9;
  virtual  ~S8513C1(); // _ZN7S8513C1D1Ev
  virtual void  v1(); // _ZN7S8513C12v1Ev
  virtual void  v2(); // _ZN7S8513C12v2Ev
  virtual void  v3(); // _ZN7S8513C12v3Ev
  virtual void  v4(); // _ZN7S8513C12v4Ev
  virtual void  v5(); // _ZN7S8513C12v5Ev
  virtual void  v6(); // _ZN7S8513C12v6Ev
  virtual void  v7(); // _ZN7S8513C12v7Ev
  virtual void  v8(); // _ZN7S8513C12v8Ev
  virtual void  v9(); // _ZN7S8513C12v9Ev
  S8513C1(); // tgen
};
//SIG(1 S8513C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC3{ m FC4{ FL[4]}} Fi[4] FC5{ Fc[2]}[32] Fc Fi[2] FC6{ m Fi Fc FC7{ m Fp Fi[2] FC8{ m}} FC3 FC9{ m Fp FC10{ Fi[4]}} FC9} FC11{ m FC3 FC9 Fi[5]} Fi[4] Fp} BC12{ vd v21 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC3 Fc FC13{ m Fp Fi FC14{ m}} FC15{ Fc[52]} FC16{ Fi[3] Fc[4]} Fi Fp Fi FC17{ Fi Fc[24]} FC18{ Fi[3] Fc[2] Fs Fc[20] FC19{ Fs Fc[2] Fs[2] Fi}[15]}}


 S8513C1 ::~S8513C1(){ note_dtor("S8513C1", this);}
void  S8513C1 ::v1(){vfunc_called(this, "_ZN7S8513C12v1Ev");}
void  S8513C1 ::v2(){vfunc_called(this, "_ZN7S8513C12v2Ev");}
void  S8513C1 ::v3(){vfunc_called(this, "_ZN7S8513C12v3Ev");}
void  S8513C1 ::v4(){vfunc_called(this, "_ZN7S8513C12v4Ev");}
void  S8513C1 ::v5(){vfunc_called(this, "_ZN7S8513C12v5Ev");}
void  S8513C1 ::v6(){vfunc_called(this, "_ZN7S8513C12v6Ev");}
void  S8513C1 ::v7(){vfunc_called(this, "_ZN7S8513C12v7Ev");}
void  S8513C1 ::v8(){vfunc_called(this, "_ZN7S8513C12v8Ev");}
void  S8513C1 ::v9(){vfunc_called(this, "_ZN7S8513C12v9Ev");}
S8513C1 ::S8513C1(){ note_ctor("S8513C1", this);} // tgen

static void Test_S8513C1()
{
  extern Class_Descriptor cd_S8513C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(96,176)];
    init_test(&cd_S8513C1, buf);
    S8513C1 *dp, &lv = *(dp=new (buf) S8513C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(760,700), "sizeof(S8513C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8513C1)");
    check_base_class_offset(lv, (S8513C2*), 0, "S8513C1");
    check_base_class_offset(lv, (S8513C12*), ABISELECT(352,316), "S8513C1");
    check_field_offset(lv, s8513c1f0, ABISELECT(376,328), "S8513C1.s8513c1f0");
    check_field_offset(lv, s8513c1f1, ABISELECT(408,360), "S8513C1.s8513c1f1");
    check_field_offset(lv, s8513c1f2, ABISELECT(416,364), "S8513C1.s8513c1f2");
    check_field_offset(lv, s8513c1f3, ABISELECT(432,376), "S8513C1.s8513c1f3");
    check_field_offset(lv, s8513c1f4, ABISELECT(484,428), "S8513C1.s8513c1f4");
    check_field_offset(lv, s8513c1f5, ABISELECT(500,444), "S8513C1.s8513c1f5");
    check_field_offset(lv, s8513c1f6, ABISELECT(504,448), "S8513C1.s8513c1f6");
    check_field_offset(lv, s8513c1f7, ABISELECT(512,452), "S8513C1.s8513c1f7");
    check_field_offset(lv, s8513c1f8, ABISELECT(516,456), "S8513C1.s8513c1f8");
    check_field_offset(lv, s8513c1f9, ABISELECT(544,484), "S8513C1.s8513c1f9");
    test_class_info(&lv, &cd_S8513C1);
    dp->~S8513C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8513C1(Test_S8513C1, "S8513C1", ABISELECT(760,700));

#else // __cplusplus

extern void _ZN7S8513C1C1Ev();
extern void _ZN7S8513C1D1Ev();
Name_Map name_map_S8513C1[] = {
  NSPAIR(_ZN7S8513C1C1Ev),
  NSPAIR(_ZN7S8513C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8513C2;
extern VTBL_ENTRY _ZTI7S8513C2[];
extern  VTBL_ENTRY _ZTV7S8513C2[];
extern Class_Descriptor cd_S8513C12;
extern VTBL_ENTRY _ZTI8S8513C12[];
extern  VTBL_ENTRY _ZTV8S8513C12[];
static Base_Class bases_S8513C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8513C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8513C12,    ABISELECT(352,316), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8513C1[];
extern void _ZN7S8513C1D1Ev();
extern void _ZN7S8513C1D0Ev();
extern void _ZN7S8513C23v10Ev();
extern void _ZN7S8513C23v11Ev();
extern void _ZN7S8513C23v12Ev();
extern void _ZN7S8513C23v13Ev();
extern void _ZN7S8513C23v14Ev();
extern void _ZN7S8513C23v15Ev();
extern void _ZN7S8513C23v16Ev();
extern void _ZN7S8513C23v17Ev();
extern void _ZN7S8513C23v18Ev();
extern void _ZN7S8513C23v19Ev();
extern void _ZN7S8513C23v20Ev();
extern void _ZN7S8513C12v1Ev();
extern void _ZN7S8513C12v2Ev();
extern void _ZN7S8513C12v3Ev();
extern void _ZN7S8513C12v4Ev();
extern void _ZN7S8513C12v5Ev();
extern void _ZN7S8513C12v6Ev();
extern void _ZN7S8513C12v7Ev();
extern void _ZN7S8513C12v8Ev();
extern void _ZN7S8513C12v9Ev();
extern void ABISELECT(_ZThn352_N7S8513C1D1Ev,_ZThn316_N7S8513C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S8513C1D0Ev,_ZThn316_N7S8513C1D0Ev)();
extern void _ZN8S8513C123v21Ev();
static  VTBL_ENTRY vtc_S8513C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8513C1[0]),
  (VTBL_ENTRY)&_ZN7S8513C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8513C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8513C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8513C12v9Ev,
  ABISELECT(-352,-316),
  (VTBL_ENTRY)&(_ZTI7S8513C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8513C1D1Ev,_ZThn316_N7S8513C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8513C1D0Ev,_ZThn316_N7S8513C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8513C123v21Ev,
};
extern VTBL_ENTRY _ZTI7S8513C1[];
extern  VTBL_ENTRY _ZTV7S8513C1[];
Class_Descriptor cd_S8513C1 = {  "S8513C1", // class name
  bases_S8513C1, 2,
  &(vtc_S8513C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(760,700), // object size
  NSPAIRA(_ZTI7S8513C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8513C1),29, //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  S8518C2  {
  ::S8520C3_nt s8518c2f0;
  int s8518c2f1[4];
  ::S8516C5 s8518c2f2[32];
  char s8518c2f3;
  int s8518c2f4[2];
  ::S8520C5_nt s8518c2f5;
  ::S8520C10 s8518c2f6;
  int s8518c2f7[4];
  void *s8518c2f8;
  virtual  ~S8518C2(); // _ZN7S8518C2D1Ev
  virtual void  v10(); // _ZN7S8518C23v10Ev
  virtual void  v11(); // _ZN7S8518C23v11Ev
  virtual void  v12(); // _ZN7S8518C23v12Ev
  virtual void  v13(); // _ZN7S8518C23v13Ev
  virtual void  v14(); // _ZN7S8518C23v14Ev
  virtual void  v15(); // _ZN7S8518C23v15Ev
  virtual void  v16(); // _ZN7S8518C23v16Ev
  virtual void  v17(); // _ZN7S8518C23v17Ev
  virtual void  v18(); // _ZN7S8518C23v18Ev
  virtual void  v19(); // _ZN7S8518C23v19Ev
  virtual void  v20(); // _ZN7S8518C23v20Ev
  S8518C2(); // tgen
};
//SIG(-1 S8518C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FL[4]} Fi[4] FC3{ Fc[2]}[32] Fc Fi[2] FC4{ m Fi Fc FC5{ m Fp Fi[2] FC6{ m}} FC2 FC7{ m Fp FC8{ Fi[4]}} FC7} FC9{ m FC2 FC7 Fi[5]} Fi[4] Fp}


 S8518C2 ::~S8518C2(){ note_dtor("S8518C2", this);}
void  S8518C2 ::v10(){vfunc_called(this, "_ZN7S8518C23v10Ev");}
void  S8518C2 ::v11(){vfunc_called(this, "_ZN7S8518C23v11Ev");}
void  S8518C2 ::v12(){vfunc_called(this, "_ZN7S8518C23v12Ev");}
void  S8518C2 ::v13(){vfunc_called(this, "_ZN7S8518C23v13Ev");}
void  S8518C2 ::v14(){vfunc_called(this, "_ZN7S8518C23v14Ev");}
void  S8518C2 ::v15(){vfunc_called(this, "_ZN7S8518C23v15Ev");}
void  S8518C2 ::v16(){vfunc_called(this, "_ZN7S8518C23v16Ev");}
void  S8518C2 ::v17(){vfunc_called(this, "_ZN7S8518C23v17Ev");}
void  S8518C2 ::v18(){vfunc_called(this, "_ZN7S8518C23v18Ev");}
void  S8518C2 ::v19(){vfunc_called(this, "_ZN7S8518C23v19Ev");}
void  S8518C2 ::v20(){vfunc_called(this, "_ZN7S8518C23v20Ev");}
S8518C2 ::S8518C2(){ note_ctor("S8518C2", this);} // tgen

static void Test_S8518C2()
{
  extern Class_Descriptor cd_S8518C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,80)];
    init_test(&cd_S8518C2, buf);
    S8518C2 *dp, &lv = *(dp=new (buf) S8518C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,316), "sizeof(S8518C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8518C2)");
    check_field_offset(lv, s8518c2f0, ABISELECT(8,4), "S8518C2.s8518c2f0");
    check_field_offset(lv, s8518c2f1, ABISELECT(40,36), "S8518C2.s8518c2f1");
    check_field_offset(lv, s8518c2f2, ABISELECT(56,52), "S8518C2.s8518c2f2");
    check_field_offset(lv, s8518c2f3, ABISELECT(120,116), "S8518C2.s8518c2f3");
    check_field_offset(lv, s8518c2f4, ABISELECT(124,120), "S8518C2.s8518c2f4");
    check_field_offset(lv, s8518c2f5, ABISELECT(136,128), "S8518C2.s8518c2f5");
    check_field_offset(lv, s8518c2f6, ABISELECT(248,224), "S8518C2.s8518c2f6");
    check_field_offset(lv, s8518c2f7, ABISELECT(328,296), "S8518C2.s8518c2f7");
    check_field_offset(lv, s8518c2f8, ABISELECT(344,312), "S8518C2.s8518c2f8");
    test_class_info(&lv, &cd_S8518C2);
    dp->~S8518C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8518C2(Test_S8518C2, "S8518C2", ABISELECT(352,316));

#else // __cplusplus

extern void _ZN7S8518C2C1Ev();
extern void _ZN7S8518C2D1Ev();
Name_Map name_map_S8518C2[] = {
  NSPAIR(_ZN7S8518C2C1Ev),
  NSPAIR(_ZN7S8518C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8518C2[];
extern void _ZN7S8518C2D1Ev();
extern void _ZN7S8518C2D0Ev();
extern void _ZN7S8518C23v10Ev();
extern void _ZN7S8518C23v11Ev();
extern void _ZN7S8518C23v12Ev();
extern void _ZN7S8518C23v13Ev();
extern void _ZN7S8518C23v14Ev();
extern void _ZN7S8518C23v15Ev();
extern void _ZN7S8518C23v16Ev();
extern void _ZN7S8518C23v17Ev();
extern void _ZN7S8518C23v18Ev();
extern void _ZN7S8518C23v19Ev();
extern void _ZN7S8518C23v20Ev();
static  VTBL_ENTRY vtc_S8518C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8518C2[0]),
  (VTBL_ENTRY)&_ZN7S8518C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8518C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S8518C2[];
extern  VTBL_ENTRY _ZTV7S8518C2[];
Class_Descriptor cd_S8518C2 = {  "S8518C2", // class name
  0,0,//no base classes
  &(vtc_S8518C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,316), // object size
  NSPAIRA(_ZTI7S8518C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8518C2),15, //virtual function table var
  2, // 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  S8518C11  {
  void *s8518c11f0;
  int s8518c11f1;
  virtual  ~S8518C11(); // _ZN8S8518C11D1Ev
  virtual void  v21(); // _ZN8S8518C113v21Ev
  S8518C11(); // tgen
};
//SIG(-1 S8518C11) C1{ vd v1 Fp Fi}


 S8518C11 ::~S8518C11(){ note_dtor("S8518C11", this);}
void  S8518C11 ::v21(){vfunc_called(this, "_ZN8S8518C113v21Ev");}
S8518C11 ::S8518C11(){ note_ctor("S8518C11", this);} // tgen

static void Test_S8518C11()
{
  extern Class_Descriptor cd_S8518C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8518C11, buf);
    S8518C11 *dp, &lv = *(dp=new (buf) S8518C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8518C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8518C11)");
    check_field_offset(lv, s8518c11f0, ABISELECT(8,4), "S8518C11.s8518c11f0");
    check_field_offset(lv, s8518c11f1, ABISELECT(16,8), "S8518C11.s8518c11f1");
    test_class_info(&lv, &cd_S8518C11);
    dp->~S8518C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8518C11(Test_S8518C11, "S8518C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S8518C11C1Ev();
extern void _ZN8S8518C11D1Ev();
Name_Map name_map_S8518C11[] = {
  NSPAIR(_ZN8S8518C11C1Ev),
  NSPAIR(_ZN8S8518C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S8518C11[];
extern void _ZN8S8518C11D1Ev();
extern void _ZN8S8518C11D0Ev();
extern void _ZN8S8518C113v21Ev();
static  VTBL_ENTRY vtc_S8518C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8518C11[0]),
  (VTBL_ENTRY)&_ZN8S8518C11D1Ev,
  (VTBL_ENTRY)&_ZN8S8518C11D0Ev,
  (VTBL_ENTRY)&_ZN8S8518C113v21Ev,
};
extern VTBL_ENTRY _ZTI8S8518C11[];
extern  VTBL_ENTRY _ZTV8S8518C11[];
Class_Descriptor cd_S8518C11 = {  "S8518C11", // class name
  0,0,//no base classes
  &(vtc_S8518C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S8518C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S8518C11),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  S8518C1  : S8518C2 , S8518C11 {
  ::S8520C3_nt s8518c1f0;
  char s8518c1f1;
  ::S22028C11_nt s8518c1f2;
  ::S8512C15_nt s8518c1f3;
  ::S8512C16_nt s8518c1f4;
  int s8518c1f5;
  void *s8518c1f6;
  int s8518c1f7;
  ::S8512C17 s8518c1f8;
  ::S8512C18 s8518c1f9;
  virtual  ~S8518C1(); // _ZN7S8518C1D1Ev
  virtual void  v1(); // _ZN7S8518C12v1Ev
  virtual void  v2(); // _ZN7S8518C12v2Ev
  virtual void  v3(); // _ZN7S8518C12v3Ev
  virtual void  v4(); // _ZN7S8518C12v4Ev
  virtual void  v5(); // _ZN7S8518C12v5Ev
  virtual void  v6(); // _ZN7S8518C12v6Ev
  virtual void  v7(); // _ZN7S8518C12v7Ev
  virtual void  v8(); // _ZN7S8518C12v8Ev
  virtual void  v9(); // _ZN7S8518C12v9Ev
  S8518C1(); // tgen
};
//SIG(1 S8518C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC3{ m FL[4]} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC3 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC3 FC8 Fi[5]} Fi[4] Fp} BC11{ vd v21 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC3 Fc FC12{ m Fp Fi FC13{ m}} FC14{ Fc[52]} FC15{ Fi[3] Fc[4]} Fi Fp Fi FC16{ Fi Fc[24]} FC17{ Fi[3] Fc[2] Fs Fc[20] FC18{ Fs Fc[2] Fs[2] Fi}[15]}}


 S8518C1 ::~S8518C1(){ note_dtor("S8518C1", this);}
void  S8518C1 ::v1(){vfunc_called(this, "_ZN7S8518C12v1Ev");}
void  S8518C1 ::v2(){vfunc_called(this, "_ZN7S8518C12v2Ev");}
void  S8518C1 ::v3(){vfunc_called(this, "_ZN7S8518C12v3Ev");}
void  S8518C1 ::v4(){vfunc_called(this, "_ZN7S8518C12v4Ev");}
void  S8518C1 ::v5(){vfunc_called(this, "_ZN7S8518C12v5Ev");}
void  S8518C1 ::v6(){vfunc_called(this, "_ZN7S8518C12v6Ev");}
void  S8518C1 ::v7(){vfunc_called(this, "_ZN7S8518C12v7Ev");}
void  S8518C1 ::v8(){vfunc_called(this, "_ZN7S8518C12v8Ev");}
void  S8518C1 ::v9(){vfunc_called(this, "_ZN7S8518C12v9Ev");}
S8518C1 ::S8518C1(){ note_ctor("S8518C1", this);} // tgen

static void Test_S8518C1()
{
  extern Class_Descriptor cd_S8518C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(96,176)];
    init_test(&cd_S8518C1, buf);
    S8518C1 *dp, &lv = *(dp=new (buf) S8518C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(760,700), "sizeof(S8518C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8518C1)");
    check_base_class_offset(lv, (S8518C2*), 0, "S8518C1");
    check_base_class_offset(lv, (S8518C11*), ABISELECT(352,316), "S8518C1");
    check_field_offset(lv, s8518c1f0, ABISELECT(376,328), "S8518C1.s8518c1f0");
    check_field_offset(lv, s8518c1f1, ABISELECT(408,360), "S8518C1.s8518c1f1");
    check_field_offset(lv, s8518c1f2, ABISELECT(416,364), "S8518C1.s8518c1f2");
    check_field_offset(lv, s8518c1f3, ABISELECT(432,376), "S8518C1.s8518c1f3");
    check_field_offset(lv, s8518c1f4, ABISELECT(484,428), "S8518C1.s8518c1f4");
    check_field_offset(lv, s8518c1f5, ABISELECT(500,444), "S8518C1.s8518c1f5");
    check_field_offset(lv, s8518c1f6, ABISELECT(504,448), "S8518C1.s8518c1f6");
    check_field_offset(lv, s8518c1f7, ABISELECT(512,452), "S8518C1.s8518c1f7");
    check_field_offset(lv, s8518c1f8, ABISELECT(516,456), "S8518C1.s8518c1f8");
    check_field_offset(lv, s8518c1f9, ABISELECT(544,484), "S8518C1.s8518c1f9");
    test_class_info(&lv, &cd_S8518C1);
    dp->~S8518C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8518C1(Test_S8518C1, "S8518C1", ABISELECT(760,700));

#else // __cplusplus

extern void _ZN7S8518C1C1Ev();
extern void _ZN7S8518C1D1Ev();
Name_Map name_map_S8518C1[] = {
  NSPAIR(_ZN7S8518C1C1Ev),
  NSPAIR(_ZN7S8518C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8518C2;
extern VTBL_ENTRY _ZTI7S8518C2[];
extern  VTBL_ENTRY _ZTV7S8518C2[];
extern Class_Descriptor cd_S8518C11;
extern VTBL_ENTRY _ZTI8S8518C11[];
extern  VTBL_ENTRY _ZTV8S8518C11[];
static Base_Class bases_S8518C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8518C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8518C11,    ABISELECT(352,316), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8518C1[];
extern void _ZN7S8518C1D1Ev();
extern void _ZN7S8518C1D0Ev();
extern void _ZN7S8518C23v10Ev();
extern void _ZN7S8518C23v11Ev();
extern void _ZN7S8518C23v12Ev();
extern void _ZN7S8518C23v13Ev();
extern void _ZN7S8518C23v14Ev();
extern void _ZN7S8518C23v15Ev();
extern void _ZN7S8518C23v16Ev();
extern void _ZN7S8518C23v17Ev();
extern void _ZN7S8518C23v18Ev();
extern void _ZN7S8518C23v19Ev();
extern void _ZN7S8518C23v20Ev();
extern void _ZN7S8518C12v1Ev();
extern void _ZN7S8518C12v2Ev();
extern void _ZN7S8518C12v3Ev();
extern void _ZN7S8518C12v4Ev();
extern void _ZN7S8518C12v5Ev();
extern void _ZN7S8518C12v6Ev();
extern void _ZN7S8518C12v7Ev();
extern void _ZN7S8518C12v8Ev();
extern void _ZN7S8518C12v9Ev();
extern void ABISELECT(_ZThn352_N7S8518C1D1Ev,_ZThn316_N7S8518C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S8518C1D0Ev,_ZThn316_N7S8518C1D0Ev)();
extern void _ZN8S8518C113v21Ev();
static  VTBL_ENTRY vtc_S8518C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8518C1[0]),
  (VTBL_ENTRY)&_ZN7S8518C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8518C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v10Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8518C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8518C12v9Ev,
  ABISELECT(-352,-316),
  (VTBL_ENTRY)&(_ZTI7S8518C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8518C1D1Ev,_ZThn316_N7S8518C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N7S8518C1D0Ev,_ZThn316_N7S8518C1D0Ev),
  (VTBL_ENTRY)&_ZN8S8518C113v21Ev,
};
extern VTBL_ENTRY _ZTI7S8518C1[];
extern  VTBL_ENTRY _ZTV7S8518C1[];
Class_Descriptor cd_S8518C1 = {  "S8518C1", // class name
  bases_S8518C1, 2,
  &(vtc_S8518C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(760,700), // object size
  NSPAIRA(_ZTI7S8518C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8518C1),29, //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  S20347C2  {
  void *s20347c2f0;
  char s20347c2f1[2];
  virtual void  v7(); // _ZN8S20347C22v7Ev
  virtual void  v8(); // _ZN8S20347C22v8Ev
  virtual void  v9(); // _ZN8S20347C22v9Ev
  virtual void  v10(); // _ZN8S20347C23v10Ev
  ~S20347C2(); // tgen
  S20347C2(); // tgen
};
//SIG(-1 S20347C2) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S20347C2 ::v7(){vfunc_called(this, "_ZN8S20347C22v7Ev");}
void  S20347C2 ::v8(){vfunc_called(this, "_ZN8S20347C22v8Ev");}
void  S20347C2 ::v9(){vfunc_called(this, "_ZN8S20347C22v9Ev");}
void  S20347C2 ::v10(){vfunc_called(this, "_ZN8S20347C23v10Ev");}
S20347C2 ::~S20347C2(){ note_dtor("S20347C2", this);} // tgen
S20347C2 ::S20347C2(){ note_ctor("S20347C2", this);} // tgen

static void Test_S20347C2()
{
  extern Class_Descriptor cd_S20347C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20347C2, buf);
    S20347C2 *dp, &lv = *(dp=new (buf) S20347C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20347C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C2)");
    check_field_offset(lv, s20347c2f0, ABISELECT(8,4), "S20347C2.s20347c2f0");
    check_field_offset(lv, s20347c2f1, ABISELECT(16,8), "S20347C2.s20347c2f1");
    test_class_info(&lv, &cd_S20347C2);
    dp->~S20347C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C2(Test_S20347C2, "S20347C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20347C2C1Ev();
extern void _ZN8S20347C2D1Ev();
Name_Map name_map_S20347C2[] = {
  NSPAIR(_ZN8S20347C2C1Ev),
  NSPAIR(_ZN8S20347C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20347C2[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY vtc_S20347C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C2[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
Class_Descriptor cd_S20347C2 = {  "S20347C2", // class name
  0,0,//no base classes
  &(vtc_S20347C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20347C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20347C2),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  S20347C4_nt  {
  long double s20347c4f0;
  virtual void  v11(); // _ZN11S20347C4_nt3v11Ev
  ~S20347C4_nt(); // tgen
  S20347C4_nt(); // tgen
};
//SIG(-1 S20347C4_nt) C1{ v1 FD}


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

//skip512 S20347C4_nt

#else // __cplusplus

extern void _ZN11S20347C4_ntC1Ev();
extern void _ZN11S20347C4_ntD1Ev();
Name_Map name_map_S20347C4_nt[] = {
  NSPAIR(_ZN11S20347C4_ntC1Ev),
  NSPAIR(_ZN11S20347C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20347C4_nt[];
extern void _ZN11S20347C4_nt3v11Ev();
static  VTBL_ENTRY vtc_S20347C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20347C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20347C4_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI11S20347C4_nt[];
VTBL_ENTRY *P__ZTI11S20347C4_nt = _ZTI11S20347C4_nt; 
extern  VTBL_ENTRY _ZTV11S20347C4_nt[];
Class_Descriptor cd_S20347C4_nt = {  "S20347C4_nt", // class name
  0,0,//no base classes
  &(vtc_S20347C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI11S20347C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20347C4_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  S20347C6  : S20347C2 {
  void *s20347c6f0[4];
  ~S20347C6(); // tgen
  S20347C6(); // tgen
};
//SIG(-1 S20347C6) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S20347C6()
{
  extern Class_Descriptor cd_S20347C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20347C6, buf);
    S20347C6 *dp, &lv = *(dp=new (buf) S20347C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20347C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C6)");
    check_base_class_offset(lv, (S20347C2*), 0, "S20347C6");
    check_field_offset(lv, s20347c6f0, ABISELECT(24,12), "S20347C6.s20347c6f0");
    test_class_info(&lv, &cd_S20347C6);
    dp->~S20347C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C6(Test_S20347C6, "S20347C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20347C6C1Ev();
extern void _ZN8S20347C6D1Ev();
Name_Map name_map_S20347C6[] = {
  NSPAIR(_ZN8S20347C6C1Ev),
  NSPAIR(_ZN8S20347C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
static Base_Class bases_S20347C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C2,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20347C6[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY vtc_S20347C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C6[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
Class_Descriptor cd_S20347C6 = {  "S20347C6", // class name
  bases_S20347C6, 1,
  &(vtc_S20347C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20347C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20347C6),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  S20347C5  : S20347C6 {
  virtual void  v12(); // _ZN8S20347C53v12Ev
  virtual void  v13(); // _ZN8S20347C53v13Ev
  virtual void  v14(); // _ZN8S20347C53v14Ev
  ~S20347C5(); // tgen
  S20347C5(); // tgen
};
//SIG(-1 S20347C5) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fc[2]} Fp[4]} v1 v2 v3}


void  S20347C5 ::v12(){vfunc_called(this, "_ZN8S20347C53v12Ev");}
void  S20347C5 ::v13(){vfunc_called(this, "_ZN8S20347C53v13Ev");}
void  S20347C5 ::v14(){vfunc_called(this, "_ZN8S20347C53v14Ev");}
S20347C5 ::~S20347C5(){ note_dtor("S20347C5", this);} // tgen
S20347C5 ::S20347C5(){ note_ctor("S20347C5", this);} // tgen

static void Test_S20347C5()
{
  extern Class_Descriptor cd_S20347C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20347C5, buf);
    S20347C5 *dp, &lv = *(dp=new (buf) S20347C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20347C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C5)");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*), 0, "S20347C5");
    check_base_class_offset(lv, (S20347C6*), 0, "S20347C5");
    test_class_info(&lv, &cd_S20347C5);
    dp->~S20347C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C5(Test_S20347C5, "S20347C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20347C5C1Ev();
extern void _ZN8S20347C5D1Ev();
Name_Map name_map_S20347C5[] = {
  NSPAIR(_ZN8S20347C5C1Ev),
  NSPAIR(_ZN8S20347C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
static Base_Class bases_S20347C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20347C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20347C5[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C53v12Ev();
extern void _ZN8S20347C53v13Ev();
extern void _ZN8S20347C53v14Ev();
static  VTBL_ENTRY vtc_S20347C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C5[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S20347C5[];
extern  VTBL_ENTRY _ZTV8S20347C5[];
Class_Descriptor cd_S20347C5 = {  "S20347C5", // class name
  bases_S20347C5, 2,
  &(vtc_S20347C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20347C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20347C5),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  S20347C3  : virtual S20347C4_nt , S20347C5 {
  void *s20347c3f0;
  virtual void  v15(); // _ZN8S20347C33v15Ev
  virtual void  v16(); // _ZN8S20347C33v16Ev
  virtual void  v17(); // _ZN8S20347C33v17Ev
  virtual void  v18(); // _ZN8S20347C33v18Ev
  virtual void  v19(); // _ZN8S20347C33v19Ev
  virtual void  v20(); // _ZN8S20347C33v20Ev
  virtual void  v21(); // _ZN8S20347C33v21Ev
  ~S20347C3(); // tgen
  S20347C3(); // tgen
};
//SIG(-1 S20347C3) C1{ VBC2{ v8 FD} BC3{ BC4{ BC5{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} v13 v14 v15} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S20347C3 ::v15(){vfunc_called(this, "_ZN8S20347C33v15Ev");}
void  S20347C3 ::v16(){vfunc_called(this, "_ZN8S20347C33v16Ev");}
void  S20347C3 ::v17(){vfunc_called(this, "_ZN8S20347C33v17Ev");}
void  S20347C3 ::v18(){vfunc_called(this, "_ZN8S20347C33v18Ev");}
void  S20347C3 ::v19(){vfunc_called(this, "_ZN8S20347C33v19Ev");}
void  S20347C3 ::v20(){vfunc_called(this, "_ZN8S20347C33v20Ev");}
void  S20347C3 ::v21(){vfunc_called(this, "_ZN8S20347C33v21Ev");}
S20347C3 ::~S20347C3(){ note_dtor("S20347C3", this);} // tgen
S20347C3 ::S20347C3(){ note_ctor("S20347C3", this);} // tgen

static void Test_S20347C3()
{
  extern Class_Descriptor cd_S20347C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20347C3, buf);
    S20347C3 *dp, &lv = *(dp=new (buf) S20347C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20347C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20347C3)");
    check_base_class_offset(lv, (S20347C4_nt*), ABISELECT(64,32), "S20347C3");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C5*), 0, "S20347C3");
    check_base_class_offset(lv, (S20347C6*)(S20347C5*), 0, "S20347C3");
    check_base_class_offset(lv, (S20347C5*), 0, "S20347C3");
    check_field_offset(lv, s20347c3f0, ABISELECT(56,28), "S20347C3.s20347c3f0");
    test_class_info(&lv, &cd_S20347C3);
    dp->~S20347C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C3(Test_S20347C3, "S20347C3", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20347C3C1Ev();
extern void _ZN8S20347C3D1Ev();
Name_Map name_map_S20347C3[] = {
  NSPAIR(_ZN8S20347C3C1Ev),
  NSPAIR(_ZN8S20347C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C4_nt;
extern VTBL_ENTRY _ZTI11S20347C4_nt[];
extern  VTBL_ENTRY _ZTV11S20347C4_nt[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C5;
extern VTBL_ENTRY _ZTI8S20347C5[];
extern  VTBL_ENTRY _ZTV8S20347C5[];
static Base_Class bases_S20347C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C4_nt,    ABISELECT(64,32), //bcp->offset
    17, //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_S20347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20347C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20347C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20347C3[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C53v12Ev();
extern void _ZN8S20347C53v13Ev();
extern void _ZN8S20347C53v14Ev();
extern void _ZN8S20347C33v15Ev();
extern void _ZN8S20347C33v16Ev();
extern void _ZN8S20347C33v17Ev();
extern void _ZN8S20347C33v18Ev();
extern void _ZN8S20347C33v19Ev();
extern void _ZN8S20347C33v20Ev();
extern void _ZN8S20347C33v21Ev();
extern void _ZN11S20347C4_nt3v11Ev();
static  VTBL_ENTRY vtc_S20347C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C3[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v21Ev,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20347C3[0]),
  (VTBL_ENTRY)&_ZN11S20347C4_nt3v11Ev,
};
extern VTBL_ENTRY _ZTV8S20347C3[];
static  VTT_ENTRY vtt_S20347C3[] = {
  {&(_ZTV8S20347C3[3]),  3,21},
  {&(_ZTV8S20347C3[20]),  20,21},
};
extern VTBL_ENTRY _ZTI8S20347C3[];
extern  VTBL_ENTRY _ZTV8S20347C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C3[];
Class_Descriptor cd_S20347C3 = {  "S20347C3", // class name
  bases_S20347C3, 4,
  &(vtc_S20347C3[0]), // expected_vtbl_contents
  &(vtt_S20347C3[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20347C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20347C3),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20347C3),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20347C8  : S20347C6 , virtual S20347C2 {
  int s20347c8f0;
  virtual  ~S20347C8(); // _ZN8S20347C8D2Ev
  virtual void  v22(); // _ZN8S20347C83v22Ev
  virtual void  v23(); // _ZN8S20347C83v23Ev
  virtual void  v24(); // _ZN8S20347C83v24Ev
  virtual void  v25(); // _ZN8S20347C83v25Ev
  virtual void  v26(); // _ZN8S20347C83v26Ev
  virtual void  v27(); // _ZN8S20347C83v27Ev
  virtual void  v28(); // _ZN8S20347C83v28Ev
  S20347C8(); // tgen
};
//SIG(-1 S20347C8) C1{ BC2{ BC3{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S20347C8 ::~S20347C8(){ note_dtor("S20347C8", this);}
void  S20347C8 ::v22(){vfunc_called(this, "_ZN8S20347C83v22Ev");}
void  S20347C8 ::v23(){vfunc_called(this, "_ZN8S20347C83v23Ev");}
void  S20347C8 ::v24(){vfunc_called(this, "_ZN8S20347C83v24Ev");}
void  S20347C8 ::v25(){vfunc_called(this, "_ZN8S20347C83v25Ev");}
void  S20347C8 ::v26(){vfunc_called(this, "_ZN8S20347C83v26Ev");}
void  S20347C8 ::v27(){vfunc_called(this, "_ZN8S20347C83v27Ev");}
void  S20347C8 ::v28(){vfunc_called(this, "_ZN8S20347C83v28Ev");}
S20347C8 ::S20347C8(){ note_ctor("S20347C8", this);} // tgen

static void Test_S20347C8()
{
  extern Class_Descriptor cd_S20347C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S20347C8, buf);
    S20347C8 *dp, &lv = *(dp=new (buf) S20347C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S20347C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C8)");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*), 0, "S20347C8");
    check_base_class_offset(lv, (S20347C6*), 0, "S20347C8");
    /*is_ambiguous_... S20347C8::S20347C2 */ AMB_check_base_class_offset(lv, (S20347C2*), ABISELECT(64,32), "S20347C8");
    check_field_offset(lv, s20347c8f0, ABISELECT(56,28), "S20347C8.s20347c8f0");
    test_class_info(&lv, &cd_S20347C8);
    dp->~S20347C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C8(Test_S20347C8, "S20347C8", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S20347C8C1Ev();
extern void _ZN8S20347C8D2Ev();
Name_Map name_map_S20347C8[] = {
  NSPAIR(_ZN8S20347C8C1Ev),
  NSPAIR(_ZN8S20347C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
static Base_Class bases_S20347C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20347C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20347C2,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20347C8[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C8D1Ev();
extern void _ZN8S20347C8D0Ev();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY vtc_S20347C8[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20347C8[];
static  VTT_ENTRY vtt_S20347C8[] = {
  {&(_ZTV8S20347C8[3]),  3,26},
  {&(_ZTV8S20347C8[22]),  22,26},
};
extern VTBL_ENTRY _ZTI8S20347C8[];
extern  VTBL_ENTRY _ZTV8S20347C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C8[];
Class_Descriptor cd_S20347C8 = {  "S20347C8", // class name
  bases_S20347C8, 3,
  &(vtc_S20347C8[0]), // expected_vtbl_contents
  &(vtt_S20347C8[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S20347C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20347C8),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20347C8),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20347C7  : S20347C6 , S20347C8 {
  virtual  ~S20347C7(); // _ZN8S20347C7D2Ev
  virtual void  v29(); // _ZN8S20347C73v29Ev
  virtual void  v30(); // _ZN8S20347C73v30Ev
  virtual void  v31(); // _ZN8S20347C73v31Ev
  virtual void  v32(); // _ZN8S20347C73v32Ev
  virtual void  v33(); // _ZN8S20347C73v33Ev
  virtual void  v34(); // _ZN8S20347C73v34Ev
  virtual void  v35(); // _ZN8S20347C73v35Ev
  virtual void  v36(); // _ZN8S20347C73v36Ev
  S20347C7(); // tgen
};
//SIG(-1 S20347C7) C1{ BC2{ BC3{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} BC4{ BC2 VBC3 vd v13 v14 v15 v16 v17 v18 v19 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S20347C7 ::~S20347C7(){ note_dtor("S20347C7", this);}
void  S20347C7 ::v29(){vfunc_called(this, "_ZN8S20347C73v29Ev");}
void  S20347C7 ::v30(){vfunc_called(this, "_ZN8S20347C73v30Ev");}
void  S20347C7 ::v31(){vfunc_called(this, "_ZN8S20347C73v31Ev");}
void  S20347C7 ::v32(){vfunc_called(this, "_ZN8S20347C73v32Ev");}
void  S20347C7 ::v33(){vfunc_called(this, "_ZN8S20347C73v33Ev");}
void  S20347C7 ::v34(){vfunc_called(this, "_ZN8S20347C73v34Ev");}
void  S20347C7 ::v35(){vfunc_called(this, "_ZN8S20347C73v35Ev");}
void  S20347C7 ::v36(){vfunc_called(this, "_ZN8S20347C73v36Ev");}
S20347C7 ::S20347C7(){ note_ctor("S20347C7", this);} // tgen

static void Test_S20347C7()
{
  extern Class_Descriptor cd_S20347C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[19];
    init_test(&cd_S20347C7, buf);
    S20347C7 *dp, &lv = *(dp=new (buf) S20347C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S20347C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C7)");
    /*is_ambiguous_... S20347C7::S20347C6 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C6*), 0, "S20347C7");
    /*is_ambiguous_... S20347C7::S20347C6 */ AMB_check_base_class_offset(lv, (S20347C6*), 0, "S20347C7");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C8*), ABISELECT(56,28), "S20347C7");
    check_base_class_offset(lv, (S20347C6*)(S20347C8*), ABISELECT(56,28), "S20347C7");
    /*is_ambiguous_... S20347C8::S20347C2 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C8*), ABISELECT(120,60), "S20347C7");
    check_base_class_offset(lv, (S20347C8*), ABISELECT(56,28), "S20347C7");
    test_class_info(&lv, &cd_S20347C7);
    dp->~S20347C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C7(Test_S20347C7, "S20347C7", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S20347C7C1Ev();
extern void _ZN8S20347C7D2Ev();
Name_Map name_map_S20347C7[] = {
  NSPAIR(_ZN8S20347C7C1Ev),
  NSPAIR(_ZN8S20347C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C8;
extern VTBL_ENTRY _ZTI8S20347C8[];
extern  VTBL_ENTRY _ZTV8S20347C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C8[];
static Base_Class bases_S20347C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20347C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20347C2,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20347C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20347C2,    ABISELECT(120,60), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20347C8,    ABISELECT(56,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20347C7[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C7D1Ev();
extern void _ZN8S20347C7D0Ev();
extern void _ZN8S20347C73v29Ev();
extern void _ZN8S20347C73v30Ev();
extern void _ZN8S20347C73v31Ev();
extern void _ZN8S20347C73v32Ev();
extern void _ZN8S20347C73v33Ev();
extern void _ZN8S20347C73v34Ev();
extern void _ZN8S20347C73v35Ev();
extern void _ZN8S20347C73v36Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZThn56_N8S20347C7D1Ev,_ZThn28_N8S20347C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20347C7D0Ev,_ZThn28_N8S20347C7D0Ev)();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY vtc_S20347C7[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v36Ev,
  ABISELECT(64,32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20347C7D1Ev,_ZThn28_N8S20347C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20347C7D0Ev,_ZThn28_N8S20347C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20347C7[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C8D1Ev();
extern void _ZN8S20347C8D0Ev();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C8__8S20347C7[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A1__8S20347C8__8S20347C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
static  VTT_ENTRY vtt_S20347C7[] = {
  {&(_ZTV8S20347C7[3]),  3,43},
  {&(_tg__ZTV8S20347C8__8S20347C7[3]),  3,16},
  {&(_tg__ZTV8S20347C2__A1__8S20347C8__8S20347C7[6]),  6,10},
  {&(_ZTV8S20347C7[20]),  20,43},
  {&(_ZTV8S20347C7[39]),  39,43},
};
extern VTBL_ENTRY _ZTI8S20347C7[];
extern  VTBL_ENTRY _ZTV8S20347C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C7[];
Class_Descriptor cd_S20347C7 = {  "S20347C7", // class name
  bases_S20347C7, 6,
  &(vtc_S20347C7[0]), // expected_vtbl_contents
  &(vtt_S20347C7[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S20347C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20347C7),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20347C7),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20347C10  {
  __tsi64 s20347c10f0[5];
  void *s20347c10f1;
  virtual void  v37(); // _ZN9S20347C103v37Ev
  virtual void  v38(); // _ZN9S20347C103v38Ev
  virtual void  v39(); // _ZN9S20347C103v39Ev
  virtual void  v40(); // _ZN9S20347C103v40Ev
  ~S20347C10(); // tgen
  S20347C10(); // tgen
};
//SIG(-1 S20347C10) C1{ v1 v2 v3 v4 FL[5] Fp}


void  S20347C10 ::v37(){vfunc_called(this, "_ZN9S20347C103v37Ev");}
void  S20347C10 ::v38(){vfunc_called(this, "_ZN9S20347C103v38Ev");}
void  S20347C10 ::v39(){vfunc_called(this, "_ZN9S20347C103v39Ev");}
void  S20347C10 ::v40(){vfunc_called(this, "_ZN9S20347C103v40Ev");}
S20347C10 ::~S20347C10(){ note_dtor("S20347C10", this);} // tgen
S20347C10 ::S20347C10(){ note_ctor("S20347C10", this);} // tgen

static void Test_S20347C10()
{
  extern Class_Descriptor cd_S20347C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S20347C10, buf);
    S20347C10 *dp, &lv = *(dp=new (buf) S20347C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S20347C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C10)");
    check_field_offset(lv, s20347c10f0, ABISELECT(8,4), "S20347C10.s20347c10f0");
    check_field_offset(lv, s20347c10f1, ABISELECT(48,44), "S20347C10.s20347c10f1");
    test_class_info(&lv, &cd_S20347C10);
    dp->~S20347C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C10(Test_S20347C10, "S20347C10", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN9S20347C10C1Ev();
extern void _ZN9S20347C10D1Ev();
Name_Map name_map_S20347C10[] = {
  NSPAIR(_ZN9S20347C10C1Ev),
  NSPAIR(_ZN9S20347C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20347C10[];
extern void _ZN9S20347C103v37Ev();
extern void _ZN9S20347C103v38Ev();
extern void _ZN9S20347C103v39Ev();
extern void _ZN9S20347C103v40Ev();
static  VTBL_ENTRY vtc_S20347C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20347C10[0]),
  (VTBL_ENTRY)&_ZN9S20347C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v40Ev,
};
extern VTBL_ENTRY _ZTI9S20347C10[];
extern  VTBL_ENTRY _ZTV9S20347C10[];
Class_Descriptor cd_S20347C10 = {  "S20347C10", // class name
  0,0,//no base classes
  &(vtc_S20347C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI9S20347C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20347C10),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  S20347C9  : virtual S20347C8 , S20347C10 {
  long double s20347c9f0;
  virtual  ~S20347C9(); // _ZN8S20347C9D2Ev
  virtual void  v41(); // _ZN8S20347C93v41Ev
  virtual void  v42(); // _ZN8S20347C93v42Ev
  virtual void  v43(); // _ZN8S20347C93v43Ev
  virtual void  v44(); // _ZN8S20347C93v44Ev
  virtual void  v45(); // _ZN8S20347C93v45Ev
  virtual void  v46(); // _ZN8S20347C93v46Ev
  S20347C9(); // tgen
};
//SIG(-1 S20347C9) C1{ VBC2{ BC3{ BC4{ v7 v8 v9 v10 Fp Fc[2]} Fp[4]} VBC4 vd v11 v12 v13 v14 v15 v16 v17 Fi} BC5{ v18 v19 v20 v21 FL[5] Fp} vd v1 v2 v3 v4 v5 v6 FD}


 S20347C9 ::~S20347C9(){ note_dtor("S20347C9", this);}
void  S20347C9 ::v41(){vfunc_called(this, "_ZN8S20347C93v41Ev");}
void  S20347C9 ::v42(){vfunc_called(this, "_ZN8S20347C93v42Ev");}
void  S20347C9 ::v43(){vfunc_called(this, "_ZN8S20347C93v43Ev");}
void  S20347C9 ::v44(){vfunc_called(this, "_ZN8S20347C93v44Ev");}
void  S20347C9 ::v45(){vfunc_called(this, "_ZN8S20347C93v45Ev");}
void  S20347C9 ::v46(){vfunc_called(this, "_ZN8S20347C93v46Ev");}
S20347C9 ::S20347C9(){ note_ctor("S20347C9", this);} // tgen

static void Test_S20347C9()
{
  extern Class_Descriptor cd_S20347C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,27)];
    init_test(&cd_S20347C9, buf);
    S20347C9 *dp, &lv = *(dp=new (buf) S20347C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S20347C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20347C9)");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C8*), ABISELECT(80,60), "S20347C9");
    check_base_class_offset(lv, (S20347C6*)(S20347C8*), ABISELECT(80,60), "S20347C9");
    /*is_ambiguous_... S20347C8::S20347C2 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C8*), ABISELECT(144,92), "S20347C9");
    check_base_class_offset(lv, (S20347C8*), ABISELECT(80,60), "S20347C9");
    check_base_class_offset(lv, (S20347C10*), 0, "S20347C9");
    check_field_offset(lv, s20347c9f0, ABISELECT(64,48), "S20347C9.s20347c9f0");
    test_class_info(&lv, &cd_S20347C9);
    dp->~S20347C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C9(Test_S20347C9, "S20347C9", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN8S20347C9C1Ev();
extern void _ZN8S20347C9D2Ev();
Name_Map name_map_S20347C9[] = {
  NSPAIR(_ZN8S20347C9C1Ev),
  NSPAIR(_ZN8S20347C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C8;
extern VTBL_ENTRY _ZTI8S20347C8[];
extern  VTBL_ENTRY _ZTV8S20347C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C8[];
extern Class_Descriptor cd_S20347C10;
extern VTBL_ENTRY _ZTI9S20347C10[];
extern  VTBL_ENTRY _ZTV9S20347C10[];
static Base_Class bases_S20347C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C2,    ABISELECT(80,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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20347C6,    ABISELECT(80,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20347C2,    ABISELECT(144,92), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20347C8,    ABISELECT(80,60), //bcp->offset
    16, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20347C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20347C9[];
extern void _ZN9S20347C103v37Ev();
extern void _ZN9S20347C103v38Ev();
extern void _ZN9S20347C103v39Ev();
extern void _ZN9S20347C103v40Ev();
extern void _ZN8S20347C9D1Ev();
extern void _ZN8S20347C9D0Ev();
extern void _ZN8S20347C93v41Ev();
extern void _ZN8S20347C93v42Ev();
extern void _ZN8S20347C93v43Ev();
extern void _ZN8S20347C93v44Ev();
extern void _ZN8S20347C93v45Ev();
extern void _ZN8S20347C93v46Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20347C9D1Ev,_ZTv0_n32_N8S20347C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S20347C9D1Ev,_ZThn60_N8S20347C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20347C9D0Ev,_ZTv0_n32_N8S20347C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S20347C9D0Ev,_ZThn60_N8S20347C9D0Ev)() __attribute__((weak));
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY vtc_S20347C9[] = {
  ABISELECT(144,92),
  ABISELECT(80,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C9[0]),
  (VTBL_ENTRY)&_ZN9S20347C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v40Ev,
  (VTBL_ENTRY)&_ZN8S20347C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v43Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v44Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v45Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-60),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20347C9[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C9D1Ev,_ZTv0_n32_N8S20347C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C9D0Ev,_ZTv0_n32_N8S20347C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S20347C9[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20347C9[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C8D1Ev();
extern void _ZN8S20347C8D0Ev();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C8__8S20347C9[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A1__8S20347C8__8S20347C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
static  VTT_ENTRY vtt_S20347C9[] = {
  {&(_ZTV8S20347C9[4]),  4,54},
  {&(_ZTV8S20347C9[31]),  31,54},
  {&(_ZTV8S20347C9[50]),  50,54},
  {&(_tg__ZTV8S20347C8__8S20347C9[3]),  3,16},
  {&(_tg__ZTV8S20347C2__A1__8S20347C8__8S20347C9[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20347C9[];
extern  VTBL_ENTRY _ZTV8S20347C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C9[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20347C9D0Ev,_ZTv0_n32_N8S20347C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20347C9D0Ev,_ZThn60_N8S20347C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20347C9D1Ev,_ZTv0_n32_N8S20347C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20347C9D1Ev,_ZThn60_N8S20347C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20347C9 = {  "S20347C9", // class name
  bases_S20347C9, 5,
  &(vtc_S20347C9[0]), // expected_vtbl_contents
  &(vtt_S20347C9[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI8S20347C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20347C9),54, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20347C9),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20347C12  {
  ::S20347C6 s20347c12f0;
  virtual void  v51(); // _ZN9S20347C123v51Ev
  virtual void  v52(); // _ZN9S20347C123v52Ev
  virtual void  v53(); // _ZN9S20347C123v53Ev
  virtual void  v54(); // _ZN9S20347C123v54Ev
  virtual void  v55(); // _ZN9S20347C123v55Ev
  ~S20347C12(); // tgen
  S20347C12(); // tgen
};
//SIG(-1 S20347C12) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v6 v7 v8 v9 Fp Fc[2]} Fp[4]}}


void  S20347C12 ::v51(){vfunc_called(this, "_ZN9S20347C123v51Ev");}
void  S20347C12 ::v52(){vfunc_called(this, "_ZN9S20347C123v52Ev");}
void  S20347C12 ::v53(){vfunc_called(this, "_ZN9S20347C123v53Ev");}
void  S20347C12 ::v54(){vfunc_called(this, "_ZN9S20347C123v54Ev");}
void  S20347C12 ::v55(){vfunc_called(this, "_ZN9S20347C123v55Ev");}
S20347C12 ::~S20347C12(){ note_dtor("S20347C12", this);} // tgen
S20347C12 ::S20347C12(){ note_ctor("S20347C12", this);} // tgen

static void Test_S20347C12()
{
  extern Class_Descriptor cd_S20347C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20347C12, buf);
    S20347C12 *dp, &lv = *(dp=new (buf) S20347C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20347C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C12)");
    check_field_offset(lv, s20347c12f0, ABISELECT(8,4), "S20347C12.s20347c12f0");
    test_class_info(&lv, &cd_S20347C12);
    dp->~S20347C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C12(Test_S20347C12, "S20347C12", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20347C12C1Ev();
extern void _ZN9S20347C12D1Ev();
Name_Map name_map_S20347C12[] = {
  NSPAIR(_ZN9S20347C12C1Ev),
  NSPAIR(_ZN9S20347C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20347C12[];
extern void _ZN9S20347C123v51Ev();
extern void _ZN9S20347C123v52Ev();
extern void _ZN9S20347C123v53Ev();
extern void _ZN9S20347C123v54Ev();
extern void _ZN9S20347C123v55Ev();
static  VTBL_ENTRY vtc_S20347C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20347C12[0]),
  (VTBL_ENTRY)&_ZN9S20347C123v51Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v55Ev,
};
extern VTBL_ENTRY _ZTI9S20347C12[];
extern  VTBL_ENTRY _ZTV9S20347C12[];
Class_Descriptor cd_S20347C12 = {  "S20347C12", // class name
  0,0,//no base classes
  &(vtc_S20347C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20347C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20347C12),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  S20347C11  : virtual S20347C12 , S20347C7 {
  virtual  ~S20347C11(); // _ZN9S20347C11D2Ev
  virtual void  v47(); // _ZN9S20347C113v47Ev
  virtual void  v48(); // _ZN9S20347C113v48Ev
  virtual void  v49(); // _ZN9S20347C113v49Ev
  virtual void  v50(); // _ZN9S20347C113v50Ev
  S20347C11(); // tgen
};
//SIG(-1 S20347C11) C1{ VBC2{ v5 v6 v7 v8 v9 FC3{ BC4{ v10 v11 v12 v13 Fp Fc[2]} Fp[4]}} BC5{ BC3 BC6{ BC3 VBC4 vd v14 v15 v16 v17 v18 v19 v20 Fi} vd v21 v22 v23 v24 v25 v26 v27 v28} vd v1 v2 v3 v4}


 S20347C11 ::~S20347C11(){ note_dtor("S20347C11", this);}
void  S20347C11 ::v47(){vfunc_called(this, "_ZN9S20347C113v47Ev");}
void  S20347C11 ::v48(){vfunc_called(this, "_ZN9S20347C113v48Ev");}
void  S20347C11 ::v49(){vfunc_called(this, "_ZN9S20347C113v49Ev");}
void  S20347C11 ::v50(){vfunc_called(this, "_ZN9S20347C113v50Ev");}
S20347C11 ::S20347C11(){ note_ctor("S20347C11", this);} // tgen

static void Test_S20347C11()
{
  extern Class_Descriptor cd_S20347C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[27];
    init_test(&cd_S20347C11, buf);
    S20347C11 *dp, &lv = *(dp=new (buf) S20347C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,104), "sizeof(S20347C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20347C11)");
    check_base_class_offset(lv, (S20347C12*), ABISELECT(120,60), "S20347C11");
    /*is_ambiguous_... S20347C7::S20347C6 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C7*), 0, "S20347C11");
    /*is_ambiguous_... S20347C7::S20347C6 */ AMB_check_base_class_offset(lv, (S20347C6*)(S20347C7*), 0, "S20347C11");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C8*)(S20347C7*), ABISELECT(56,28), "S20347C11");
    check_base_class_offset(lv, (S20347C6*)(S20347C8*)(S20347C7*), ABISELECT(56,28), "S20347C11");
    /*is_ambiguous_... S20347C8::S20347C2 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C8*)(S20347C7*), ABISELECT(184,92), "S20347C11");
    check_base_class_offset(lv, (S20347C8*)(S20347C7*), ABISELECT(56,28), "S20347C11");
    check_base_class_offset(lv, (S20347C7*), 0, "S20347C11");
    test_class_info(&lv, &cd_S20347C11);
    dp->~S20347C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C11(Test_S20347C11, "S20347C11", ABISELECT(208,104));

#else // __cplusplus

extern void _ZN9S20347C11C1Ev();
extern void _ZN9S20347C11D2Ev();
Name_Map name_map_S20347C11[] = {
  NSPAIR(_ZN9S20347C11C1Ev),
  NSPAIR(_ZN9S20347C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C12;
extern VTBL_ENTRY _ZTI9S20347C12[];
extern  VTBL_ENTRY _ZTV9S20347C12[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C8;
extern VTBL_ENTRY _ZTI8S20347C8[];
extern  VTBL_ENTRY _ZTV8S20347C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C8[];
extern Class_Descriptor cd_S20347C7;
extern VTBL_ENTRY _ZTI8S20347C7[];
extern  VTBL_ENTRY _ZTV8S20347C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C7[];
static Base_Class bases_S20347C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C12,    ABISELECT(120,60), //bcp->offset
    38, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S20347C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20347C2,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20347C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20347C2,    ABISELECT(184,92), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20347C8,    ABISELECT(56,28), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20347C7,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20347C11[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN9S20347C11D1Ev();
extern void _ZN9S20347C11D0Ev();
extern void _ZN8S20347C73v29Ev();
extern void _ZN8S20347C73v30Ev();
extern void _ZN8S20347C73v31Ev();
extern void _ZN8S20347C73v32Ev();
extern void _ZN8S20347C73v33Ev();
extern void _ZN8S20347C73v34Ev();
extern void _ZN8S20347C73v35Ev();
extern void _ZN8S20347C73v36Ev();
extern void _ZN9S20347C113v47Ev();
extern void _ZN9S20347C113v48Ev();
extern void _ZN9S20347C113v49Ev();
extern void _ZN9S20347C113v50Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZThn56_N9S20347C11D1Ev,_ZThn28_N9S20347C11D1Ev)();
extern void ABISELECT(_ZThn56_N9S20347C11D0Ev,_ZThn28_N9S20347C11D0Ev)();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
extern void _ZN9S20347C123v51Ev();
extern void _ZN9S20347C123v52Ev();
extern void _ZN9S20347C123v53Ev();
extern void _ZN9S20347C123v54Ev();
extern void _ZN9S20347C123v55Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY vtc_S20347C11[] = {
  ABISELECT(120,60),
  ABISELECT(184,92),
  0,
  (VTBL_ENTRY)&(_ZTI9S20347C11[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN9S20347C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20347C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v36Ev,
  (VTBL_ENTRY)&_ZN9S20347C113v47Ev,
  (VTBL_ENTRY)&_ZN9S20347C113v48Ev,
  (VTBL_ENTRY)&_ZN9S20347C113v49Ev,
  (VTBL_ENTRY)&_ZN9S20347C113v50Ev,
  ABISELECT(128,64),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20347C11[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S20347C11D1Ev,_ZThn28_N9S20347C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N9S20347C11D0Ev,_ZThn28_N9S20347C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S20347C11[0]),
  (VTBL_ENTRY)&_ZN9S20347C123v51Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v52Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v53Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v54Ev,
  (VTBL_ENTRY)&_ZN9S20347C123v55Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI9S20347C11[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern VTBL_ENTRY _ZTV9S20347C11[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C7D1Ev();
extern void _ZN8S20347C7D0Ev();
extern void _ZN8S20347C73v29Ev();
extern void _ZN8S20347C73v30Ev();
extern void _ZN8S20347C73v31Ev();
extern void _ZN8S20347C73v32Ev();
extern void _ZN8S20347C73v33Ev();
extern void _ZN8S20347C73v34Ev();
extern void _ZN8S20347C73v35Ev();
extern void _ZN8S20347C73v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C7__9S20347C11[] = {
  ABISELECT(184,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v36Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C8D1Ev();
extern void _ZN8S20347C8D0Ev();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C88S20347C7__9S20347C11[] = {
  ABISELECT(128,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A1__8S20347C88S20347C7__9S20347C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZThn56_N8S20347C7D1Ev,_ZThn28_N8S20347C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20347C7D0Ev,_ZThn28_N8S20347C7D0Ev)();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C8__8S20347C7__9S20347C11[] = {
  ABISELECT(128,64),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20347C7D1Ev,_ZThn28_N8S20347C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20347C7D0Ev,_ZThn28_N8S20347C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A2__8S20347C7__9S20347C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-184,-92),
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
static  VTT_ENTRY vtt_S20347C11[] = {
  {&(_ZTV9S20347C11[4]),  4,60},
  {&(_tg__ZTV8S20347C7__9S20347C11[3]),  3,17},
  {&(_tg__ZTV8S20347C88S20347C7__9S20347C11[3]),  3,16},
  {&(_tg__ZTV8S20347C2__A1__8S20347C88S20347C7__9S20347C11[6]),  6,10},
  {&(_tg__ZTV8S20347C8__8S20347C7__9S20347C11[3]),  3,16},
  {&(_tg__ZTV8S20347C2__A2__8S20347C7__9S20347C11[6]),  6,10},
  {&(_ZTV9S20347C11[45]),  45,60},
  {&(_ZTV9S20347C11[25]),  25,60},
  {&(_ZTV9S20347C11[56]),  56,60},
};
extern VTBL_ENTRY _ZTI9S20347C11[];
extern  VTBL_ENTRY _ZTV9S20347C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20347C11[];
Class_Descriptor cd_S20347C11 = {  "S20347C11", // class name
  bases_S20347C11, 8,
  &(vtc_S20347C11[0]), // expected_vtbl_contents
  &(vtt_S20347C11[0]), // expected_vtt_contents
  ABISELECT(208,104), // object size
  NSPAIRA(_ZTI9S20347C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20347C11),60, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20347C11),9, //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  S20347C1  : virtual S20347C2 , S20347C3 , virtual S20347C7 , S20347C9 {
  long s20347c1f0;
  ::S20347C11 s20347c1f1;
  virtual  ~S20347C1(); // _ZN8S20347C1D2Ev
  virtual void  v1(); // _ZN8S20347C12v1Ev
  virtual void  v2(); // _ZN8S20347C12v2Ev
  virtual void  v3(); // _ZN8S20347C12v3Ev
  virtual void  v4(); // _ZN8S20347C12v4Ev
  virtual void  v5(); // _ZN8S20347C12v5Ev
  virtual void  v6(); // _ZN8S20347C12v6Ev
  S20347C1(); // tgen
};
//SIG(1 S20347C1) C1{ VBC2{ v7 v8 v9 v10 Fp Fc[2]} BC3{ VBC4{ v11 FD} BC5{ BC6{ BC2 Fp[4]} v12 v13 v14} v15 v16 v17 v18 v19 v20 v21 Fp} VBC7{ BC6 BC8{ BC6 VBC2 vd v22 v23 v24 v25 v26 v27 v28 Fi} vd v29 v30 v31 v32 v33 v34 v35 v36} BC9{ VBC8 BC10{ v37 v38 v39 v40 FL[5] Fp} vd v41 v42 v43 v44 v45 v46 FD} vd v1 v2 v3 v4 v5 v6 Fl FC11{ VBC12{ v51 v52 v53 v54 v55 FC6} BC7 vd v47 v48 v49 v50}}


 S20347C1 ::~S20347C1(){ note_dtor("S20347C1", this);}
void  S20347C1 ::v1(){vfunc_called(this, "_ZN8S20347C12v1Ev");}
void  S20347C1 ::v2(){vfunc_called(this, "_ZN8S20347C12v2Ev");}
void  S20347C1 ::v3(){vfunc_called(this, "_ZN8S20347C12v3Ev");}
void  S20347C1 ::v4(){vfunc_called(this, "_ZN8S20347C12v4Ev");}
void  S20347C1 ::v5(){vfunc_called(this, "_ZN8S20347C12v5Ev");}
void  S20347C1 ::v6(){vfunc_called(this, "_ZN8S20347C12v6Ev");}
S20347C1 ::S20347C1(){ note_ctor("S20347C1", this);} // tgen

static void Test_S20347C1()
{
  extern Class_Descriptor cd_S20347C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,81)];
    init_test(&cd_S20347C1, buf);
    S20347C1 *dp, &lv = *(dp=new (buf) S20347C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,320), "sizeof(S20347C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20347C1)");
    /*is_ambiguous_... S20347C1::S20347C2 */ AMB_check_base_class_offset(lv, (S20347C2*), ABISELECT(360,200), "S20347C1");
    /*is_ambiguous_... S20347C8::S20347C2 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C8*)(S20347C7*), ABISELECT(360,200), "S20347C1");
    /*is_ambiguous_... S20347C1::S20347C8 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C8*), ABISELECT(360,200), "S20347C1");
    check_base_class_offset(lv, (S20347C4_nt*)(S20347C3*), ABISELECT(384,212), "S20347C1");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C5*)(S20347C3*), 0, "S20347C1");
    check_base_class_offset(lv, (S20347C6*)(S20347C5*)(S20347C3*), 0, "S20347C1");
    check_base_class_offset(lv, (S20347C5*)(S20347C3*), 0, "S20347C1");
    check_base_class_offset(lv, (S20347C3*), 0, "S20347C1");
    /*is_ambiguous_... S20347C7::S20347C6 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C7*), ABISELECT(416,228), "S20347C1");
    /*is_ambiguous_... S20347C7::S20347C6 */ AMB_check_base_class_offset(lv, (S20347C6*)(S20347C7*), ABISELECT(416,228), "S20347C1");
    check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C8*)(S20347C7*), ABISELECT(472,256), "S20347C1");
    check_base_class_offset(lv, (S20347C6*)(S20347C8*)(S20347C7*), ABISELECT(472,256), "S20347C1");
    check_base_class_offset(lv, (S20347C8*)(S20347C7*), ABISELECT(472,256), "S20347C1");
    check_base_class_offset(lv, (S20347C7*), ABISELECT(416,228), "S20347C1");
    /*is_ambiguous_... S20347C1::S20347C8 */ AMB_check_base_class_offset(lv, (S20347C2*)(S20347C6*)(S20347C8*), ABISELECT(536,288), "S20347C1");
    /*is_ambiguous_... S20347C1::S20347C8 */ AMB_check_base_class_offset(lv, (S20347C6*)(S20347C8*), ABISELECT(536,288), "S20347C1");
    check_base_class_offset(lv, (S20347C8*)(S20347C9*), ABISELECT(536,288), "S20347C1");
    check_base_class_offset(lv, (S20347C10*)(S20347C9*), ABISELECT(64,32), "S20347C1");
    check_base_class_offset(lv, (S20347C9*), ABISELECT(64,32), "S20347C1");
    check_field_offset(lv, s20347c1f0, ABISELECT(144,92), "S20347C1.s20347c1f0");
    check_field_offset(lv, s20347c1f1, ABISELECT(152,96), "S20347C1.s20347c1f1");
    test_class_info(&lv, &cd_S20347C1);
    dp->~S20347C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20347C1(Test_S20347C1, "S20347C1", ABISELECT(608,320));

#else // __cplusplus

extern void _ZN8S20347C1C1Ev();
extern void _ZN8S20347C1D2Ev();
Name_Map name_map_S20347C1[] = {
  NSPAIR(_ZN8S20347C1C1Ev),
  NSPAIR(_ZN8S20347C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C4_nt;
extern VTBL_ENTRY _ZTI11S20347C4_nt[];
extern  VTBL_ENTRY _ZTV11S20347C4_nt[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C5;
extern VTBL_ENTRY _ZTI8S20347C5[];
extern  VTBL_ENTRY _ZTV8S20347C5[];
extern Class_Descriptor cd_S20347C3;
extern VTBL_ENTRY _ZTI8S20347C3[];
extern  VTBL_ENTRY _ZTV8S20347C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C3[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C8;
extern VTBL_ENTRY _ZTI8S20347C8[];
extern  VTBL_ENTRY _ZTV8S20347C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C8[];
extern Class_Descriptor cd_S20347C7;
extern VTBL_ENTRY _ZTI8S20347C7[];
extern  VTBL_ENTRY _ZTV8S20347C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C7[];
extern Class_Descriptor cd_S20347C2;
extern VTBL_ENTRY _ZTI8S20347C2[];
extern  VTBL_ENTRY _ZTV8S20347C2[];
extern Class_Descriptor cd_S20347C6;
extern VTBL_ENTRY _ZTI8S20347C6[];
extern  VTBL_ENTRY _ZTV8S20347C6[];
extern Class_Descriptor cd_S20347C8;
extern VTBL_ENTRY _ZTI8S20347C8[];
extern  VTBL_ENTRY _ZTV8S20347C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C8[];
extern Class_Descriptor cd_S20347C10;
extern VTBL_ENTRY _ZTI9S20347C10[];
extern  VTBL_ENTRY _ZTV9S20347C10[];
extern Class_Descriptor cd_S20347C9;
extern VTBL_ENTRY _ZTI8S20347C9[];
extern  VTBL_ENTRY _ZTV8S20347C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C9[];
static Base_Class bases_S20347C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20347C2,    ABISELECT(360,200), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20347C4_nt,    ABISELECT(384,212), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20347C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20347C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20347C3,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20347C2,    ABISELECT(416,228), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S20347C6,    ABISELECT(416,228), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S20347C2,    ABISELECT(472,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20347C6,    ABISELECT(472,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20347C8,    ABISELECT(472,256), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20347C7,    ABISELECT(416,228), //bcp->offset
    58, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20347C2,    ABISELECT(536,288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    13, //immediately_derived
  0, 0},
  {&cd_S20347C6,    ABISELECT(536,288), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S20347C8,    ABISELECT(536,288), //bcp->offset
    111, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20347C10,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20347C9,    ABISELECT(64,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20347C1[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C53v12Ev();
extern void _ZN8S20347C53v13Ev();
extern void _ZN8S20347C53v14Ev();
extern void _ZN8S20347C33v15Ev();
extern void _ZN8S20347C33v16Ev();
extern void _ZN8S20347C33v17Ev();
extern void _ZN8S20347C33v18Ev();
extern void _ZN8S20347C33v19Ev();
extern void _ZN8S20347C33v20Ev();
extern void _ZN8S20347C33v21Ev();
extern void _ZN8S20347C1D1Ev();
extern void _ZN8S20347C1D0Ev();
extern void _ZN8S20347C12v1Ev();
extern void _ZN8S20347C12v2Ev();
extern void _ZN8S20347C12v3Ev();
extern void _ZN8S20347C12v4Ev();
extern void _ZN8S20347C12v5Ev();
extern void _ZN8S20347C12v6Ev();
extern void _ZN9S20347C103v37Ev();
extern void _ZN9S20347C103v38Ev();
extern void _ZN9S20347C103v39Ev();
extern void _ZN9S20347C103v40Ev();
extern void ABISELECT(_ZThn64_N8S20347C1D1Ev,_ZThn32_N8S20347C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20347C1D0Ev,_ZThn32_N8S20347C1D0Ev)();
extern void _ZN8S20347C93v41Ev();
extern void _ZN8S20347C93v42Ev();
extern void _ZN8S20347C93v43Ev();
extern void _ZN8S20347C93v44Ev();
extern void _ZN8S20347C93v45Ev();
extern void _ZN8S20347C93v46Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN11S20347C4_nt3v11Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20347C1D1Ev,_ZTv0_n32_N8S20347C1D1Ev)();
extern void ABISELECT(_ZThn416_N8S20347C1D1Ev,_ZThn228_N8S20347C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20347C1D0Ev,_ZTv0_n32_N8S20347C1D0Ev)();
extern void ABISELECT(_ZThn416_N8S20347C1D0Ev,_ZThn228_N8S20347C1D0Ev)() __attribute__((weak));
extern void _ZN8S20347C73v29Ev();
extern void _ZN8S20347C73v30Ev();
extern void _ZN8S20347C73v31Ev();
extern void _ZN8S20347C73v32Ev();
extern void _ZN8S20347C73v33Ev();
extern void _ZN8S20347C73v34Ev();
extern void _ZN8S20347C73v35Ev();
extern void _ZN8S20347C73v36Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZTvn56_n64_N8S20347C1D1Ev,_ZTvn28_n32_N8S20347C1D1Ev)();
extern void ABISELECT(_ZTvn56_n64_N8S20347C1D0Ev,_ZTvn28_n32_N8S20347C1D0Ev)();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20347C1D1Ev,_ZTv0_n32_N8S20347C1D1Ev)();
extern void ABISELECT(_ZThn536_N8S20347C1D1Ev,_ZThn288_N8S20347C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20347C1D0Ev,_ZTv0_n32_N8S20347C1D0Ev)();
extern void ABISELECT(_ZThn536_N8S20347C1D0Ev,_ZThn288_N8S20347C1D0Ev)() __attribute__((weak));
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY vtc_S20347C1[] = {
  ABISELECT(536,288),
  ABISELECT(416,228),
  ABISELECT(360,200),
  ABISELECT(384,212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C1[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20347C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20347C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20347C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20347C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20347C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20347C12v6Ev,
  ABISELECT(296,168),
  ABISELECT(472,256),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20347C1[0]),
  (VTBL_ENTRY)&_ZN9S20347C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v40Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S20347C1D1Ev,_ZThn32_N8S20347C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S20347C1D0Ev,_ZThn32_N8S20347C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v43Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v44Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v45Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-200),
  (VTBL_ENTRY)&(_ZTI8S20347C1[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  0,
  ABISELECT(-384,-212),
  (VTBL_ENTRY)&(_ZTI8S20347C1[0]),
  (VTBL_ENTRY)&_ZN11S20347C4_nt3v11Ev,
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-228),
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-416,-228),
  (VTBL_ENTRY)&(_ZTI8S20347C1[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C1D1Ev,_ZTv0_n32_N8S20347C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C1D0Ev,_ZTv0_n32_N8S20347C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v36Ev,
  ABISELECT(-112,-56),
  ABISELECT(-472,-256),
  (VTBL_ENTRY)&(_ZTI8S20347C1[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20347C1D1Ev,_ZTvn28_n32_N8S20347C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20347C1D0Ev,_ZTvn28_n32_N8S20347C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-536,-288),
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  ABISELECT(-536,-288),
  (VTBL_ENTRY)&(_ZTI8S20347C1[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C1D1Ev,_ZTv0_n32_N8S20347C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C1D0Ev,_ZTv0_n32_N8S20347C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern VTBL_ENTRY _ZTV8S20347C1[];
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C53v12Ev();
extern void _ZN8S20347C53v13Ev();
extern void _ZN8S20347C53v14Ev();
extern void _ZN8S20347C33v15Ev();
extern void _ZN8S20347C33v16Ev();
extern void _ZN8S20347C33v17Ev();
extern void _ZN8S20347C33v18Ev();
extern void _ZN8S20347C33v19Ev();
extern void _ZN8S20347C33v20Ev();
extern void _ZN8S20347C33v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C3__8S20347C1[] = {
  ABISELECT(384,212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C3[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20347C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20347C33v21Ev,
};
extern void _ZN11S20347C4_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV11S20347C4_nt__8S20347C3__8S20347C1[] = {
  0,
  ABISELECT(-384,-212),
  (VTBL_ENTRY)&(_ZTI8S20347C3[0]),
  (VTBL_ENTRY)&_ZN11S20347C4_nt3v11Ev,
};
extern void _ZN9S20347C103v37Ev();
extern void _ZN9S20347C103v38Ev();
extern void _ZN9S20347C103v39Ev();
extern void _ZN9S20347C103v40Ev();
extern void _ZN8S20347C9D1Ev();
extern void _ZN8S20347C9D0Ev();
extern void _ZN8S20347C93v41Ev();
extern void _ZN8S20347C93v42Ev();
extern void _ZN8S20347C93v43Ev();
extern void _ZN8S20347C93v44Ev();
extern void _ZN8S20347C93v45Ev();
extern void _ZN8S20347C93v46Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C9__8S20347C1[] = {
  ABISELECT(296,168),
  ABISELECT(472,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C9[0]),
  (VTBL_ENTRY)&_ZN9S20347C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20347C103v40Ev,
  (VTBL_ENTRY)&_ZN8S20347C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v43Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v44Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v45Ev,
  (VTBL_ENTRY)&_ZN8S20347C93v46Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20347C9D1Ev,_ZTv0_n32_N8S20347C9D1Ev)();
extern void ABISELECT(_ZThn472_N8S20347C9D1Ev,_ZThn256_N8S20347C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20347C9D0Ev,_ZTv0_n32_N8S20347C9D0Ev)();
extern void ABISELECT(_ZThn472_N8S20347C9D0Ev,_ZThn256_N8S20347C9D0Ev)() __attribute__((weak));
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C8__8S20347C9__8S20347C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-472,-256),
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  ABISELECT(-472,-256),
  (VTBL_ENTRY)&(_ZTI8S20347C9[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C9D1Ev,_ZTv0_n32_N8S20347C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20347C9D0Ev,_ZTv0_n32_N8S20347C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A1__8S20347C9__8S20347C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-296,-168),
  (VTBL_ENTRY)&(_ZTI8S20347C9[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C7D1Ev();
extern void _ZN8S20347C7D0Ev();
extern void _ZN8S20347C73v29Ev();
extern void _ZN8S20347C73v30Ev();
extern void _ZN8S20347C73v31Ev();
extern void _ZN8S20347C73v32Ev();
extern void _ZN8S20347C73v33Ev();
extern void _ZN8S20347C73v34Ev();
extern void _ZN8S20347C73v35Ev();
extern void _ZN8S20347C73v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C7__8S20347C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20347C73v36Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C8D1Ev();
extern void _ZN8S20347C8D0Ev();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C88S20347C7__8S20347C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A1__8S20347C88S20347C7__8S20347C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void ABISELECT(_ZThn56_N8S20347C7D1Ev,_ZThn28_N8S20347C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20347C7D0Ev,_ZThn28_N8S20347C7D0Ev)();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C8__8S20347C7__8S20347C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20347C7D1Ev,_ZThn28_N8S20347C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20347C7D0Ev,_ZThn28_N8S20347C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A2__8S20347C7__8S20347C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S20347C7[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
extern void _ZN8S20347C8D1Ev();
extern void _ZN8S20347C8D0Ev();
extern void _ZN8S20347C83v22Ev();
extern void _ZN8S20347C83v23Ev();
extern void _ZN8S20347C83v24Ev();
extern void _ZN8S20347C83v25Ev();
extern void _ZN8S20347C83v26Ev();
extern void _ZN8S20347C83v27Ev();
extern void _ZN8S20347C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C8__A1__8S20347C1[] = {
  ABISELECT(-176,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20347C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20347C83v28Ev,
};
extern void _ZN8S20347C22v7Ev();
extern void _ZN8S20347C22v8Ev();
extern void _ZN8S20347C22v9Ev();
extern void _ZN8S20347C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20347C2__A1__8S20347C8__A1__8S20347C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,88),
  (VTBL_ENTRY)&(_ZTI8S20347C8[0]),
  (VTBL_ENTRY)&_ZN8S20347C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20347C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20347C23v10Ev,
};
static  VTT_ENTRY vtt_S20347C1[] = {
  {&(_ZTV8S20347C1[6]),  6,139},
  {&(_tg__ZTV8S20347C3__8S20347C1[3]),  3,17},
  {&(_tg__ZTV11S20347C4_nt__8S20347C3__8S20347C1[3]),  3,4},
  {&(_tg__ZTV8S20347C9__8S20347C1[4]),  4,16},
  {&(_tg__ZTV8S20347C8__8S20347C9__8S20347C1[15]),  15,28},
  {&(_tg__ZTV8S20347C2__A1__8S20347C9__8S20347C1[6]),  6,10},
  {&(_ZTV8S20347C1[50]),  50,139},
  {&(_ZTV8S20347C1[57]),  57,139},
  {&(_ZTV8S20347C1[81]),  81,139},
  {&(_ZTV8S20347C1[98]),  98,139},
  {&(_ZTV8S20347C1[32]),  32,139},
  {&(_ZTV8S20347C1[126]),  126,139},
  {&(_tg__ZTV8S20347C7__8S20347C1[3]),  3,17},
  {&(_tg__ZTV8S20347C88S20347C7__8S20347C1[3]),  3,16},
  {&(_tg__ZTV8S20347C2__A1__8S20347C88S20347C7__8S20347C1[6]),  6,10},
  {&(_tg__ZTV8S20347C8__8S20347C7__8S20347C1[3]),  3,16},
  {&(_tg__ZTV8S20347C2__A2__8S20347C7__8S20347C1[6]),  6,10},
  {&(_tg__ZTV8S20347C8__A1__8S20347C1[3]),  3,16},
  {&(_tg__ZTV8S20347C2__A1__8S20347C8__A1__8S20347C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20347C1[];
extern  VTBL_ENTRY _ZTV8S20347C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20347C1[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20347C9D0Ev,_ZTv0_n32_N8S20347C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S20347C9D0Ev,_ZThn256_N8S20347C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20347C9D1Ev,_ZTv0_n32_N8S20347C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S20347C9D1Ev,_ZThn256_N8S20347C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20347C1D0Ev,_ZTv0_n32_N8S20347C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S20347C1D0Ev,_ZThn288_N8S20347C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20347C1D0Ev,_ZThn228_N8S20347C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20347C1D1Ev,_ZTv0_n32_N8S20347C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S20347C1D1Ev,_ZThn288_N8S20347C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20347C1D1Ev,_ZThn228_N8S20347C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20347C1 = {  "S20347C1", // class name
  bases_S20347C1, 17,
  &(vtc_S20347C1[0]), // expected_vtbl_contents
  &(vtt_S20347C1[0]), // expected_vtt_contents
  ABISELECT(608,320), // object size
  NSPAIRA(_ZTI8S20347C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20347C1),139, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20347C1),19, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20346C2  {
  void *s20346c2f0;
  char s20346c2f1[2];
  virtual void  v7(); // _ZN8S20346C22v7Ev
  virtual void  v8(); // _ZN8S20346C22v8Ev
  virtual void  v9(); // _ZN8S20346C22v9Ev
  virtual void  v10(); // _ZN8S20346C23v10Ev
  ~S20346C2(); // tgen
  S20346C2(); // tgen
};
//SIG(-1 S20346C2) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S20346C2 ::v7(){vfunc_called(this, "_ZN8S20346C22v7Ev");}
void  S20346C2 ::v8(){vfunc_called(this, "_ZN8S20346C22v8Ev");}
void  S20346C2 ::v9(){vfunc_called(this, "_ZN8S20346C22v9Ev");}
void  S20346C2 ::v10(){vfunc_called(this, "_ZN8S20346C23v10Ev");}
S20346C2 ::~S20346C2(){ note_dtor("S20346C2", this);} // tgen
S20346C2 ::S20346C2(){ note_ctor("S20346C2", this);} // tgen

static void Test_S20346C2()
{
  extern Class_Descriptor cd_S20346C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20346C2, buf);
    S20346C2 *dp, &lv = *(dp=new (buf) S20346C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20346C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20346C2)");
    check_field_offset(lv, s20346c2f0, ABISELECT(8,4), "S20346C2.s20346c2f0");
    check_field_offset(lv, s20346c2f1, ABISELECT(16,8), "S20346C2.s20346c2f1");
    test_class_info(&lv, &cd_S20346C2);
    dp->~S20346C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C2(Test_S20346C2, "S20346C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20346C2C1Ev();
extern void _ZN8S20346C2D1Ev();
Name_Map name_map_S20346C2[] = {
  NSPAIR(_ZN8S20346C2C1Ev),
  NSPAIR(_ZN8S20346C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20346C2[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY vtc_S20346C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C2[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
Class_Descriptor cd_S20346C2 = {  "S20346C2", // class name
  0,0,//no base classes
  &(vtc_S20346C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20346C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20346C2),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  S20346C4  {
  long double s20346c4f0;
  virtual void  v11(); // _ZN8S20346C43v11Ev
  ~S20346C4(); // tgen
  S20346C4(); // tgen
};
//SIG(-1 S20346C4) C1{ v1 FD}


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

static void Test_S20346C4()
{
  extern Class_Descriptor cd_S20346C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S20346C4, buf);
    S20346C4 *dp, &lv = *(dp=new (buf) S20346C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20346C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20346C4)");
    check_field_offset(lv, s20346c4f0, ABISELECT(16,4), "S20346C4.s20346c4f0");
    test_class_info(&lv, &cd_S20346C4);
    dp->~S20346C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C4(Test_S20346C4, "S20346C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20346C4C1Ev();
extern void _ZN8S20346C4D1Ev();
Name_Map name_map_S20346C4[] = {
  NSPAIR(_ZN8S20346C4C1Ev),
  NSPAIR(_ZN8S20346C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20346C4[];
extern void _ZN8S20346C43v11Ev();
static  VTBL_ENTRY vtc_S20346C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C4[0]),
  (VTBL_ENTRY)&_ZN8S20346C43v11Ev,
};
extern VTBL_ENTRY _ZTI8S20346C4[];
extern  VTBL_ENTRY _ZTV8S20346C4[];
Class_Descriptor cd_S20346C4 = {  "S20346C4", // class name
  0,0,//no base classes
  &(vtc_S20346C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20346C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20346C4),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  S20346C6  : S20346C2 {
  void *s20346c6f0[4];
  ~S20346C6(); // tgen
  S20346C6(); // tgen
};
//SIG(-1 S20346C6) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S20346C6()
{
  extern Class_Descriptor cd_S20346C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20346C6, buf);
    S20346C6 *dp, &lv = *(dp=new (buf) S20346C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20346C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20346C6)");
    check_base_class_offset(lv, (S20346C2*), 0, "S20346C6");
    check_field_offset(lv, s20346c6f0, ABISELECT(24,12), "S20346C6.s20346c6f0");
    test_class_info(&lv, &cd_S20346C6);
    dp->~S20346C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C6(Test_S20346C6, "S20346C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20346C6C1Ev();
extern void _ZN8S20346C6D1Ev();
Name_Map name_map_S20346C6[] = {
  NSPAIR(_ZN8S20346C6C1Ev),
  NSPAIR(_ZN8S20346C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
static Base_Class bases_S20346C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20346C2,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20346C6[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY vtc_S20346C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C6[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
Class_Descriptor cd_S20346C6 = {  "S20346C6", // class name
  bases_S20346C6, 1,
  &(vtc_S20346C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20346C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20346C6),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  S20346C5  : S20346C6 {
  virtual void  v12(); // _ZN8S20346C53v12Ev
  virtual void  v13(); // _ZN8S20346C53v13Ev
  virtual void  v14(); // _ZN8S20346C53v14Ev
  ~S20346C5(); // tgen
  S20346C5(); // tgen
};
//SIG(-1 S20346C5) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fc[2]} Fp[4]} v1 v2 v3}


void  S20346C5 ::v12(){vfunc_called(this, "_ZN8S20346C53v12Ev");}
void  S20346C5 ::v13(){vfunc_called(this, "_ZN8S20346C53v13Ev");}
void  S20346C5 ::v14(){vfunc_called(this, "_ZN8S20346C53v14Ev");}
S20346C5 ::~S20346C5(){ note_dtor("S20346C5", this);} // tgen
S20346C5 ::S20346C5(){ note_ctor("S20346C5", this);} // tgen

static void Test_S20346C5()
{
  extern Class_Descriptor cd_S20346C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20346C5, buf);
    S20346C5 *dp, &lv = *(dp=new (buf) S20346C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20346C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20346C5)");
    check_base_class_offset(lv, (S20346C2*)(S20346C6*), 0, "S20346C5");
    check_base_class_offset(lv, (S20346C6*), 0, "S20346C5");
    test_class_info(&lv, &cd_S20346C5);
    dp->~S20346C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C5(Test_S20346C5, "S20346C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20346C5C1Ev();
extern void _ZN8S20346C5D1Ev();
Name_Map name_map_S20346C5[] = {
  NSPAIR(_ZN8S20346C5C1Ev),
  NSPAIR(_ZN8S20346C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
static Base_Class bases_S20346C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20346C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20346C5[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C53v12Ev();
extern void _ZN8S20346C53v13Ev();
extern void _ZN8S20346C53v14Ev();
static  VTBL_ENTRY vtc_S20346C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C5[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S20346C5[];
extern  VTBL_ENTRY _ZTV8S20346C5[];
Class_Descriptor cd_S20346C5 = {  "S20346C5", // class name
  bases_S20346C5, 2,
  &(vtc_S20346C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20346C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20346C5),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  S20346C3  : virtual S20346C4 , S20346C5 {
  void *s20346c3f0;
  virtual void  v15(); // _ZN8S20346C33v15Ev
  virtual void  v16(); // _ZN8S20346C33v16Ev
  virtual void  v17(); // _ZN8S20346C33v17Ev
  virtual void  v18(); // _ZN8S20346C33v18Ev
  virtual void  v19(); // _ZN8S20346C33v19Ev
  virtual void  v20(); // _ZN8S20346C33v20Ev
  virtual void  v21(); // _ZN8S20346C33v21Ev
  ~S20346C3(); // tgen
  S20346C3(); // tgen
};
//SIG(-1 S20346C3) C1{ VBC2{ v8 FD} BC3{ BC4{ BC5{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} v13 v14 v15} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S20346C3 ::v15(){vfunc_called(this, "_ZN8S20346C33v15Ev");}
void  S20346C3 ::v16(){vfunc_called(this, "_ZN8S20346C33v16Ev");}
void  S20346C3 ::v17(){vfunc_called(this, "_ZN8S20346C33v17Ev");}
void  S20346C3 ::v18(){vfunc_called(this, "_ZN8S20346C33v18Ev");}
void  S20346C3 ::v19(){vfunc_called(this, "_ZN8S20346C33v19Ev");}
void  S20346C3 ::v20(){vfunc_called(this, "_ZN8S20346C33v20Ev");}
void  S20346C3 ::v21(){vfunc_called(this, "_ZN8S20346C33v21Ev");}
S20346C3 ::~S20346C3(){ note_dtor("S20346C3", this);} // tgen
S20346C3 ::S20346C3(){ note_ctor("S20346C3", this);} // tgen

static void Test_S20346C3()
{
  extern Class_Descriptor cd_S20346C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20346C3, buf);
    S20346C3 *dp, &lv = *(dp=new (buf) S20346C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20346C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20346C3)");
    check_base_class_offset(lv, (S20346C4*), ABISELECT(64,32), "S20346C3");
    check_base_class_offset(lv, (S20346C2*)(S20346C6*)(S20346C5*), 0, "S20346C3");
    check_base_class_offset(lv, (S20346C6*)(S20346C5*), 0, "S20346C3");
    check_base_class_offset(lv, (S20346C5*), 0, "S20346C3");
    check_field_offset(lv, s20346c3f0, ABISELECT(56,28), "S20346C3.s20346c3f0");
    test_class_info(&lv, &cd_S20346C3);
    dp->~S20346C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C3(Test_S20346C3, "S20346C3", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20346C3C1Ev();
extern void _ZN8S20346C3D1Ev();
Name_Map name_map_S20346C3[] = {
  NSPAIR(_ZN8S20346C3C1Ev),
  NSPAIR(_ZN8S20346C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20346C4;
extern VTBL_ENTRY _ZTI8S20346C4[];
extern  VTBL_ENTRY _ZTV8S20346C4[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C5;
extern VTBL_ENTRY _ZTI8S20346C5[];
extern  VTBL_ENTRY _ZTV8S20346C5[];
static Base_Class bases_S20346C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20346C4,    ABISELECT(64,32), //bcp->offset
    17, //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_S20346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20346C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20346C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20346C3[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C53v12Ev();
extern void _ZN8S20346C53v13Ev();
extern void _ZN8S20346C53v14Ev();
extern void _ZN8S20346C33v15Ev();
extern void _ZN8S20346C33v16Ev();
extern void _ZN8S20346C33v17Ev();
extern void _ZN8S20346C33v18Ev();
extern void _ZN8S20346C33v19Ev();
extern void _ZN8S20346C33v20Ev();
extern void _ZN8S20346C33v21Ev();
extern void _ZN8S20346C43v11Ev();
static  VTBL_ENTRY vtc_S20346C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C3[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v21Ev,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20346C3[0]),
  (VTBL_ENTRY)&_ZN8S20346C43v11Ev,
};
extern VTBL_ENTRY _ZTV8S20346C3[];
static  VTT_ENTRY vtt_S20346C3[] = {
  {&(_ZTV8S20346C3[3]),  3,21},
  {&(_ZTV8S20346C3[20]),  20,21},
};
extern VTBL_ENTRY _ZTI8S20346C3[];
extern  VTBL_ENTRY _ZTV8S20346C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C3[];
Class_Descriptor cd_S20346C3 = {  "S20346C3", // class name
  bases_S20346C3, 4,
  &(vtc_S20346C3[0]), // expected_vtbl_contents
  &(vtt_S20346C3[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20346C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20346C3),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20346C3),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20346C8  : S20346C6 , virtual S20346C2 {
  int s20346c8f0;
  virtual  ~S20346C8(); // _ZN8S20346C8D2Ev
  virtual void  v22(); // _ZN8S20346C83v22Ev
  virtual void  v23(); // _ZN8S20346C83v23Ev
  virtual void  v24(); // _ZN8S20346C83v24Ev
  virtual void  v25(); // _ZN8S20346C83v25Ev
  virtual void  v26(); // _ZN8S20346C83v26Ev
  virtual void  v27(); // _ZN8S20346C83v27Ev
  virtual void  v28(); // _ZN8S20346C83v28Ev
  S20346C8(); // tgen
};
//SIG(-1 S20346C8) C1{ BC2{ BC3{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S20346C8 ::~S20346C8(){ note_dtor("S20346C8", this);}
void  S20346C8 ::v22(){vfunc_called(this, "_ZN8S20346C83v22Ev");}
void  S20346C8 ::v23(){vfunc_called(this, "_ZN8S20346C83v23Ev");}
void  S20346C8 ::v24(){vfunc_called(this, "_ZN8S20346C83v24Ev");}
void  S20346C8 ::v25(){vfunc_called(this, "_ZN8S20346C83v25Ev");}
void  S20346C8 ::v26(){vfunc_called(this, "_ZN8S20346C83v26Ev");}
void  S20346C8 ::v27(){vfunc_called(this, "_ZN8S20346C83v27Ev");}
void  S20346C8 ::v28(){vfunc_called(this, "_ZN8S20346C83v28Ev");}
S20346C8 ::S20346C8(){ note_ctor("S20346C8", this);} // tgen

static void Test_S20346C8()
{
  extern Class_Descriptor cd_S20346C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S20346C8, buf);
    S20346C8 *dp, &lv = *(dp=new (buf) S20346C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S20346C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20346C8)");
    check_base_class_offset(lv, (S20346C2*)(S20346C6*), 0, "S20346C8");
    check_base_class_offset(lv, (S20346C6*), 0, "S20346C8");
    /*is_ambiguous_... S20346C8::S20346C2 */ AMB_check_base_class_offset(lv, (S20346C2*), ABISELECT(64,32), "S20346C8");
    check_field_offset(lv, s20346c8f0, ABISELECT(56,28), "S20346C8.s20346c8f0");
    test_class_info(&lv, &cd_S20346C8);
    dp->~S20346C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C8(Test_S20346C8, "S20346C8", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S20346C8C1Ev();
extern void _ZN8S20346C8D2Ev();
Name_Map name_map_S20346C8[] = {
  NSPAIR(_ZN8S20346C8C1Ev),
  NSPAIR(_ZN8S20346C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
static Base_Class bases_S20346C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20346C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20346C2,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20346C8[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C8D1Ev();
extern void _ZN8S20346C8D0Ev();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY vtc_S20346C8[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20346C8[];
static  VTT_ENTRY vtt_S20346C8[] = {
  {&(_ZTV8S20346C8[3]),  3,26},
  {&(_ZTV8S20346C8[22]),  22,26},
};
extern VTBL_ENTRY _ZTI8S20346C8[];
extern  VTBL_ENTRY _ZTV8S20346C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C8[];
Class_Descriptor cd_S20346C8 = {  "S20346C8", // class name
  bases_S20346C8, 3,
  &(vtc_S20346C8[0]), // expected_vtbl_contents
  &(vtt_S20346C8[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S20346C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20346C8),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20346C8),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20346C7  : S20346C6 , S20346C8 {
  virtual  ~S20346C7(); // _ZN8S20346C7D2Ev
  virtual void  v29(); // _ZN8S20346C73v29Ev
  virtual void  v30(); // _ZN8S20346C73v30Ev
  virtual void  v31(); // _ZN8S20346C73v31Ev
  virtual void  v32(); // _ZN8S20346C73v32Ev
  virtual void  v33(); // _ZN8S20346C73v33Ev
  virtual void  v34(); // _ZN8S20346C73v34Ev
  virtual void  v35(); // _ZN8S20346C73v35Ev
  virtual void  v36(); // _ZN8S20346C73v36Ev
  S20346C7(); // tgen
};
//SIG(-1 S20346C7) C1{ BC2{ BC3{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} BC4{ BC2 VBC3 vd v13 v14 v15 v16 v17 v18 v19 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S20346C7 ::~S20346C7(){ note_dtor("S20346C7", this);}
void  S20346C7 ::v29(){vfunc_called(this, "_ZN8S20346C73v29Ev");}
void  S20346C7 ::v30(){vfunc_called(this, "_ZN8S20346C73v30Ev");}
void  S20346C7 ::v31(){vfunc_called(this, "_ZN8S20346C73v31Ev");}
void  S20346C7 ::v32(){vfunc_called(this, "_ZN8S20346C73v32Ev");}
void  S20346C7 ::v33(){vfunc_called(this, "_ZN8S20346C73v33Ev");}
void  S20346C7 ::v34(){vfunc_called(this, "_ZN8S20346C73v34Ev");}
void  S20346C7 ::v35(){vfunc_called(this, "_ZN8S20346C73v35Ev");}
void  S20346C7 ::v36(){vfunc_called(this, "_ZN8S20346C73v36Ev");}
S20346C7 ::S20346C7(){ note_ctor("S20346C7", this);} // tgen

static void Test_S20346C7()
{
  extern Class_Descriptor cd_S20346C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[19];
    init_test(&cd_S20346C7, buf);
    S20346C7 *dp, &lv = *(dp=new (buf) S20346C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S20346C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20346C7)");
    /*is_ambiguous_... S20346C7::S20346C6 */ AMB_check_base_class_offset(lv, (S20346C2*)(S20346C6*), 0, "S20346C7");
    /*is_ambiguous_... S20346C7::S20346C6 */ AMB_check_base_class_offset(lv, (S20346C6*), 0, "S20346C7");
    check_base_class_offset(lv, (S20346C2*)(S20346C6*)(S20346C8*), ABISELECT(56,28), "S20346C7");
    check_base_class_offset(lv, (S20346C6*)(S20346C8*), ABISELECT(56,28), "S20346C7");
    /*is_ambiguous_... S20346C8::S20346C2 */ AMB_check_base_class_offset(lv, (S20346C2*)(S20346C8*), ABISELECT(120,60), "S20346C7");
    check_base_class_offset(lv, (S20346C8*), ABISELECT(56,28), "S20346C7");
    test_class_info(&lv, &cd_S20346C7);
    dp->~S20346C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C7(Test_S20346C7, "S20346C7", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S20346C7C1Ev();
extern void _ZN8S20346C7D2Ev();
Name_Map name_map_S20346C7[] = {
  NSPAIR(_ZN8S20346C7C1Ev),
  NSPAIR(_ZN8S20346C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C8;
extern VTBL_ENTRY _ZTI8S20346C8[];
extern  VTBL_ENTRY _ZTV8S20346C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C8[];
static Base_Class bases_S20346C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20346C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20346C2,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20346C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20346C2,    ABISELECT(120,60), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20346C8,    ABISELECT(56,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20346C7[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C7D1Ev();
extern void _ZN8S20346C7D0Ev();
extern void _ZN8S20346C73v29Ev();
extern void _ZN8S20346C73v30Ev();
extern void _ZN8S20346C73v31Ev();
extern void _ZN8S20346C73v32Ev();
extern void _ZN8S20346C73v33Ev();
extern void _ZN8S20346C73v34Ev();
extern void _ZN8S20346C73v35Ev();
extern void _ZN8S20346C73v36Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void ABISELECT(_ZThn56_N8S20346C7D1Ev,_ZThn28_N8S20346C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20346C7D0Ev,_ZThn28_N8S20346C7D0Ev)();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY vtc_S20346C7[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C7[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v36Ev,
  ABISELECT(64,32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20346C7[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20346C7D1Ev,_ZThn28_N8S20346C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20346C7D0Ev,_ZThn28_N8S20346C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20346C7[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20346C7[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C8D1Ev();
extern void _ZN8S20346C8D0Ev();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C8__8S20346C7[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C2__A1__8S20346C8__8S20346C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
static  VTT_ENTRY vtt_S20346C7[] = {
  {&(_ZTV8S20346C7[3]),  3,43},
  {&(_tg__ZTV8S20346C8__8S20346C7[3]),  3,16},
  {&(_tg__ZTV8S20346C2__A1__8S20346C8__8S20346C7[6]),  6,10},
  {&(_ZTV8S20346C7[20]),  20,43},
  {&(_ZTV8S20346C7[39]),  39,43},
};
extern VTBL_ENTRY _ZTI8S20346C7[];
extern  VTBL_ENTRY _ZTV8S20346C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C7[];
Class_Descriptor cd_S20346C7 = {  "S20346C7", // class name
  bases_S20346C7, 6,
  &(vtc_S20346C7[0]), // expected_vtbl_contents
  &(vtt_S20346C7[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S20346C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20346C7),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20346C7),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20346C10  {
  long s20346c10f0[5];
  void *s20346c10f1;
  virtual void  v37(); // _ZN9S20346C103v37Ev
  virtual void  v38(); // _ZN9S20346C103v38Ev
  virtual void  v39(); // _ZN9S20346C103v39Ev
  virtual void  v40(); // _ZN9S20346C103v40Ev
  ~S20346C10(); // tgen
  S20346C10(); // tgen
};
//SIG(-1 S20346C10) C1{ v1 v2 v3 v4 Fl[5] Fp}


void  S20346C10 ::v37(){vfunc_called(this, "_ZN9S20346C103v37Ev");}
void  S20346C10 ::v38(){vfunc_called(this, "_ZN9S20346C103v38Ev");}
void  S20346C10 ::v39(){vfunc_called(this, "_ZN9S20346C103v39Ev");}
void  S20346C10 ::v40(){vfunc_called(this, "_ZN9S20346C103v40Ev");}
S20346C10 ::~S20346C10(){ note_dtor("S20346C10", this);} // tgen
S20346C10 ::S20346C10(){ note_ctor("S20346C10", this);} // tgen

static void Test_S20346C10()
{
  extern Class_Descriptor cd_S20346C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20346C10, buf);
    S20346C10 *dp, &lv = *(dp=new (buf) S20346C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20346C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20346C10)");
    check_field_offset(lv, s20346c10f0, ABISELECT(8,4), "S20346C10.s20346c10f0");
    check_field_offset(lv, s20346c10f1, ABISELECT(48,24), "S20346C10.s20346c10f1");
    test_class_info(&lv, &cd_S20346C10);
    dp->~S20346C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C10(Test_S20346C10, "S20346C10", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S20346C10C1Ev();
extern void _ZN9S20346C10D1Ev();
Name_Map name_map_S20346C10[] = {
  NSPAIR(_ZN9S20346C10C1Ev),
  NSPAIR(_ZN9S20346C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20346C10[];
extern void _ZN9S20346C103v37Ev();
extern void _ZN9S20346C103v38Ev();
extern void _ZN9S20346C103v39Ev();
extern void _ZN9S20346C103v40Ev();
static  VTBL_ENTRY vtc_S20346C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20346C10[0]),
  (VTBL_ENTRY)&_ZN9S20346C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v40Ev,
};
extern VTBL_ENTRY _ZTI9S20346C10[];
extern  VTBL_ENTRY _ZTV9S20346C10[];
Class_Descriptor cd_S20346C10 = {  "S20346C10", // class name
  0,0,//no base classes
  &(vtc_S20346C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S20346C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20346C10),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  S20346C9  : virtual S20346C8 , S20346C10 {
  long double s20346c9f0;
  virtual  ~S20346C9(); // _ZN8S20346C9D2Ev
  virtual void  v41(); // _ZN8S20346C93v41Ev
  virtual void  v42(); // _ZN8S20346C93v42Ev
  virtual void  v43(); // _ZN8S20346C93v43Ev
  virtual void  v44(); // _ZN8S20346C93v44Ev
  virtual void  v45(); // _ZN8S20346C93v45Ev
  virtual void  v46(); // _ZN8S20346C93v46Ev
  S20346C9(); // tgen
};
//SIG(-1 S20346C9) C1{ VBC2{ BC3{ BC4{ v7 v8 v9 v10 Fp Fc[2]} Fp[4]} VBC4 vd v11 v12 v13 v14 v15 v16 v17 Fi} BC5{ v18 v19 v20 v21 Fl[5] Fp} vd v1 v2 v3 v4 v5 v6 FD}


 S20346C9 ::~S20346C9(){ note_dtor("S20346C9", this);}
void  S20346C9 ::v41(){vfunc_called(this, "_ZN8S20346C93v41Ev");}
void  S20346C9 ::v42(){vfunc_called(this, "_ZN8S20346C93v42Ev");}
void  S20346C9 ::v43(){vfunc_called(this, "_ZN8S20346C93v43Ev");}
void  S20346C9 ::v44(){vfunc_called(this, "_ZN8S20346C93v44Ev");}
void  S20346C9 ::v45(){vfunc_called(this, "_ZN8S20346C93v45Ev");}
void  S20346C9 ::v46(){vfunc_called(this, "_ZN8S20346C93v46Ev");}
S20346C9 ::S20346C9(){ note_ctor("S20346C9", this);} // tgen

static void Test_S20346C9()
{
  extern Class_Descriptor cd_S20346C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S20346C9, buf);
    S20346C9 *dp, &lv = *(dp=new (buf) S20346C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S20346C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20346C9)");
    check_base_class_offset(lv, (S20346C2*)(S20346C6*)(S20346C8*), ABISELECT(80,40), "S20346C9");
    check_base_class_offset(lv, (S20346C6*)(S20346C8*), ABISELECT(80,40), "S20346C9");
    /*is_ambiguous_... S20346C8::S20346C2 */ AMB_check_base_class_offset(lv, (S20346C2*)(S20346C8*), ABISELECT(144,72), "S20346C9");
    check_base_class_offset(lv, (S20346C8*), ABISELECT(80,40), "S20346C9");
    check_base_class_offset(lv, (S20346C10*), 0, "S20346C9");
    check_field_offset(lv, s20346c9f0, ABISELECT(64,28), "S20346C9.s20346c9f0");
    test_class_info(&lv, &cd_S20346C9);
    dp->~S20346C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C9(Test_S20346C9, "S20346C9", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN8S20346C9C1Ev();
extern void _ZN8S20346C9D2Ev();
Name_Map name_map_S20346C9[] = {
  NSPAIR(_ZN8S20346C9C1Ev),
  NSPAIR(_ZN8S20346C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C8;
extern VTBL_ENTRY _ZTI8S20346C8[];
extern  VTBL_ENTRY _ZTV8S20346C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C8[];
extern Class_Descriptor cd_S20346C10;
extern VTBL_ENTRY _ZTI9S20346C10[];
extern  VTBL_ENTRY _ZTV9S20346C10[];
static Base_Class bases_S20346C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20346C2,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20346C6,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20346C2,    ABISELECT(144,72), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20346C8,    ABISELECT(80,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20346C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20346C9[];
extern void _ZN9S20346C103v37Ev();
extern void _ZN9S20346C103v38Ev();
extern void _ZN9S20346C103v39Ev();
extern void _ZN9S20346C103v40Ev();
extern void _ZN8S20346C9D1Ev();
extern void _ZN8S20346C9D0Ev();
extern void _ZN8S20346C93v41Ev();
extern void _ZN8S20346C93v42Ev();
extern void _ZN8S20346C93v43Ev();
extern void _ZN8S20346C93v44Ev();
extern void _ZN8S20346C93v45Ev();
extern void _ZN8S20346C93v46Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20346C9D1Ev,_ZTv0_n32_N8S20346C9D1Ev)();
extern void ABISELECT(_ZThn80_N8S20346C9D1Ev,_ZThn40_N8S20346C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20346C9D0Ev,_ZTv0_n32_N8S20346C9D0Ev)();
extern void ABISELECT(_ZThn80_N8S20346C9D0Ev,_ZThn40_N8S20346C9D0Ev)() __attribute__((weak));
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY vtc_S20346C9[] = {
  ABISELECT(144,72),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C9[0]),
  (VTBL_ENTRY)&_ZN9S20346C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v40Ev,
  (VTBL_ENTRY)&_ZN8S20346C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v43Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v44Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v45Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20346C9[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C9D1Ev,_ZTv0_n32_N8S20346C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C9D0Ev,_ZTv0_n32_N8S20346C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S20346C9[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20346C9[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C8D1Ev();
extern void _ZN8S20346C8D0Ev();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C8__8S20346C9[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C2__A1__8S20346C8__8S20346C9[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
static  VTT_ENTRY vtt_S20346C9[] = {
  {&(_ZTV8S20346C9[4]),  4,54},
  {&(_ZTV8S20346C9[31]),  31,54},
  {&(_ZTV8S20346C9[50]),  50,54},
  {&(_tg__ZTV8S20346C8__8S20346C9[3]),  3,16},
  {&(_tg__ZTV8S20346C2__A1__8S20346C8__8S20346C9[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20346C9[];
extern  VTBL_ENTRY _ZTV8S20346C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C9[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20346C9D0Ev,_ZTv0_n32_N8S20346C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20346C9D0Ev,_ZThn40_N8S20346C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20346C9D1Ev,_ZTv0_n32_N8S20346C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20346C9D1Ev,_ZThn40_N8S20346C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20346C9 = {  "S20346C9", // class name
  bases_S20346C9, 5,
  &(vtc_S20346C9[0]), // expected_vtbl_contents
  &(vtt_S20346C9[0]), // expected_vtt_contents
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI8S20346C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20346C9),54, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20346C9),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20346C1  : virtual S20346C2 , S20346C3 , virtual S20346C7 , S20346C9 {
  long s20346c1f0;
  ::S20347C11 s20346c1f1;
  virtual  ~S20346C1(); // _ZN8S20346C1D2Ev
  virtual void  v1(); // _ZN8S20346C12v1Ev
  virtual void  v2(); // _ZN8S20346C12v2Ev
  virtual void  v3(); // _ZN8S20346C12v3Ev
  virtual void  v4(); // _ZN8S20346C12v4Ev
  virtual void  v5(); // _ZN8S20346C12v5Ev
  virtual void  v6(); // _ZN8S20346C12v6Ev
  S20346C1(); // tgen
};
//SIG(1 S20346C1) C1{ VBC2{ v7 v8 v9 v10 Fp Fc[2]} BC3{ VBC4{ v11 FD} BC5{ BC6{ BC2 Fp[4]} v12 v13 v14} v15 v16 v17 v18 v19 v20 v21 Fp} VBC7{ BC6 BC8{ BC6 VBC2 vd v22 v23 v24 v25 v26 v27 v28 Fi} vd v29 v30 v31 v32 v33 v34 v35 v36} BC9{ VBC8 BC10{ v37 v38 v39 v40 Fl[5] Fp} vd v41 v42 v43 v44 v45 v46 FD} vd v1 v2 v3 v4 v5 v6 Fl FC11{ VBC12{ v51 v52 v53 v54 v55 FC13{ BC14{ v56 v57 v58 v59 Fp Fc[2]} Fp[4]}} BC15{ BC13 BC16{ BC13 VBC14 vd v60 v61 v62 v63 v64 v65 v66 Fi} vd v67 v68 v69 v70 v71 v72 v73 v74} vd v47 v48 v49 v50}}


 S20346C1 ::~S20346C1(){ note_dtor("S20346C1", this);}
void  S20346C1 ::v1(){vfunc_called(this, "_ZN8S20346C12v1Ev");}
void  S20346C1 ::v2(){vfunc_called(this, "_ZN8S20346C12v2Ev");}
void  S20346C1 ::v3(){vfunc_called(this, "_ZN8S20346C12v3Ev");}
void  S20346C1 ::v4(){vfunc_called(this, "_ZN8S20346C12v4Ev");}
void  S20346C1 ::v5(){vfunc_called(this, "_ZN8S20346C12v5Ev");}
void  S20346C1 ::v6(){vfunc_called(this, "_ZN8S20346C12v6Ev");}
S20346C1 ::S20346C1(){ note_ctor("S20346C1", this);} // tgen

static void Test_S20346C1()
{
  extern Class_Descriptor cd_S20346C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(39,76)];
    init_test(&cd_S20346C1, buf);
    S20346C1 *dp, &lv = *(dp=new (buf) S20346C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,300), "sizeof(S20346C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20346C1)");
    /*is_ambiguous_... S20346C1::S20346C2 */ AMB_check_base_class_offset(lv, (S20346C2*), ABISELECT(360,180), "S20346C1");
    /*is_ambiguous_... S20346C8::S20346C2 */ AMB_check_base_class_offset(lv, (S20346C2*)(S20346C8*)(S20346C7*), ABISELECT(360,180), "S20346C1");
    /*is_ambiguous_... S20346C1::S20346C8 */ AMB_check_base_class_offset(lv, (S20346C2*)(S20346C8*), ABISELECT(360,180), "S20346C1");
    check_base_class_offset(lv, (S20346C4*)(S20346C3*), ABISELECT(384,192), "S20346C1");
    check_base_class_offset(lv, (S20346C2*)(S20346C6*)(S20346C5*)(S20346C3*), 0, "S20346C1");
    check_base_class_offset(lv, (S20346C6*)(S20346C5*)(S20346C3*), 0, "S20346C1");
    check_base_class_offset(lv, (S20346C5*)(S20346C3*), 0, "S20346C1");
    check_base_class_offset(lv, (S20346C3*), 0, "S20346C1");
    /*is_ambiguous_... S20346C7::S20346C6 */ AMB_check_base_class_offset(lv, (S20346C2*)(S20346C6*)(S20346C7*), ABISELECT(416,208), "S20346C1");
    /*is_ambiguous_... S20346C7::S20346C6 */ AMB_check_base_class_offset(lv, (S20346C6*)(S20346C7*), ABISELECT(416,208), "S20346C1");
    check_base_class_offset(lv, (S20346C2*)(S20346C6*)(S20346C8*)(S20346C7*), ABISELECT(472,236), "S20346C1");
    check_base_class_offset(lv, (S20346C6*)(S20346C8*)(S20346C7*), ABISELECT(472,236), "S20346C1");
    check_base_class_offset(lv, (S20346C8*)(S20346C7*), ABISELECT(472,236), "S20346C1");
    check_base_class_offset(lv, (S20346C7*), ABISELECT(416,208), "S20346C1");
    /*is_ambiguous_... S20346C1::S20346C8 */ AMB_check_base_class_offset(lv, (S20346C2*)(S20346C6*)(S20346C8*), ABISELECT(536,268), "S20346C1");
    /*is_ambiguous_... S20346C1::S20346C8 */ AMB_check_base_class_offset(lv, (S20346C6*)(S20346C8*), ABISELECT(536,268), "S20346C1");
    check_base_class_offset(lv, (S20346C8*)(S20346C9*), ABISELECT(536,268), "S20346C1");
    check_base_class_offset(lv, (S20346C10*)(S20346C9*), ABISELECT(64,32), "S20346C1");
    check_base_class_offset(lv, (S20346C9*), ABISELECT(64,32), "S20346C1");
    check_field_offset(lv, s20346c1f0, ABISELECT(144,72), "S20346C1.s20346c1f0");
    check_field_offset(lv, s20346c1f1, ABISELECT(152,76), "S20346C1.s20346c1f1");
    test_class_info(&lv, &cd_S20346C1);
    dp->~S20346C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20346C1(Test_S20346C1, "S20346C1", ABISELECT(608,300));

#else // __cplusplus

extern void _ZN8S20346C1C1Ev();
extern void _ZN8S20346C1D2Ev();
Name_Map name_map_S20346C1[] = {
  NSPAIR(_ZN8S20346C1C1Ev),
  NSPAIR(_ZN8S20346C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C4;
extern VTBL_ENTRY _ZTI8S20346C4[];
extern  VTBL_ENTRY _ZTV8S20346C4[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C5;
extern VTBL_ENTRY _ZTI8S20346C5[];
extern  VTBL_ENTRY _ZTV8S20346C5[];
extern Class_Descriptor cd_S20346C3;
extern VTBL_ENTRY _ZTI8S20346C3[];
extern  VTBL_ENTRY _ZTV8S20346C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C3[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C8;
extern VTBL_ENTRY _ZTI8S20346C8[];
extern  VTBL_ENTRY _ZTV8S20346C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C8[];
extern Class_Descriptor cd_S20346C7;
extern VTBL_ENTRY _ZTI8S20346C7[];
extern  VTBL_ENTRY _ZTV8S20346C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C7[];
extern Class_Descriptor cd_S20346C2;
extern VTBL_ENTRY _ZTI8S20346C2[];
extern  VTBL_ENTRY _ZTV8S20346C2[];
extern Class_Descriptor cd_S20346C6;
extern VTBL_ENTRY _ZTI8S20346C6[];
extern  VTBL_ENTRY _ZTV8S20346C6[];
extern Class_Descriptor cd_S20346C8;
extern VTBL_ENTRY _ZTI8S20346C8[];
extern  VTBL_ENTRY _ZTV8S20346C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C8[];
extern Class_Descriptor cd_S20346C10;
extern VTBL_ENTRY _ZTI9S20346C10[];
extern  VTBL_ENTRY _ZTV9S20346C10[];
extern Class_Descriptor cd_S20346C9;
extern VTBL_ENTRY _ZTI8S20346C9[];
extern  VTBL_ENTRY _ZTV8S20346C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C9[];
static Base_Class bases_S20346C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20346C2,    ABISELECT(360,180), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20346C4,    ABISELECT(384,192), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20346C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20346C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20346C3,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20346C2,    ABISELECT(416,208), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S20346C6,    ABISELECT(416,208), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S20346C2,    ABISELECT(472,236), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S20346C6,    ABISELECT(472,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20346C8,    ABISELECT(472,236), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20346C7,    ABISELECT(416,208), //bcp->offset
    58, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20346C2,    ABISELECT(536,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
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20346C6,    ABISELECT(536,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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20346C8,    ABISELECT(536,268), //bcp->offset
    111, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20346C10,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20346C9,    ABISELECT(64,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20346C1[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C53v12Ev();
extern void _ZN8S20346C53v13Ev();
extern void _ZN8S20346C53v14Ev();
extern void _ZN8S20346C33v15Ev();
extern void _ZN8S20346C33v16Ev();
extern void _ZN8S20346C33v17Ev();
extern void _ZN8S20346C33v18Ev();
extern void _ZN8S20346C33v19Ev();
extern void _ZN8S20346C33v20Ev();
extern void _ZN8S20346C33v21Ev();
extern void _ZN8S20346C1D1Ev();
extern void _ZN8S20346C1D0Ev();
extern void _ZN8S20346C12v1Ev();
extern void _ZN8S20346C12v2Ev();
extern void _ZN8S20346C12v3Ev();
extern void _ZN8S20346C12v4Ev();
extern void _ZN8S20346C12v5Ev();
extern void _ZN8S20346C12v6Ev();
extern void _ZN9S20346C103v37Ev();
extern void _ZN9S20346C103v38Ev();
extern void _ZN9S20346C103v39Ev();
extern void _ZN9S20346C103v40Ev();
extern void ABISELECT(_ZThn64_N8S20346C1D1Ev,_ZThn32_N8S20346C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20346C1D0Ev,_ZThn32_N8S20346C1D0Ev)();
extern void _ZN8S20346C93v41Ev();
extern void _ZN8S20346C93v42Ev();
extern void _ZN8S20346C93v43Ev();
extern void _ZN8S20346C93v44Ev();
extern void _ZN8S20346C93v45Ev();
extern void _ZN8S20346C93v46Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C43v11Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20346C1D1Ev,_ZTv0_n32_N8S20346C1D1Ev)();
extern void ABISELECT(_ZThn416_N8S20346C1D1Ev,_ZThn208_N8S20346C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20346C1D0Ev,_ZTv0_n32_N8S20346C1D0Ev)();
extern void ABISELECT(_ZThn416_N8S20346C1D0Ev,_ZThn208_N8S20346C1D0Ev)() __attribute__((weak));
extern void _ZN8S20346C73v29Ev();
extern void _ZN8S20346C73v30Ev();
extern void _ZN8S20346C73v31Ev();
extern void _ZN8S20346C73v32Ev();
extern void _ZN8S20346C73v33Ev();
extern void _ZN8S20346C73v34Ev();
extern void _ZN8S20346C73v35Ev();
extern void _ZN8S20346C73v36Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void ABISELECT(_ZTvn56_n64_N8S20346C1D1Ev,_ZTvn28_n32_N8S20346C1D1Ev)();
extern void ABISELECT(_ZTvn56_n64_N8S20346C1D0Ev,_ZTvn28_n32_N8S20346C1D0Ev)();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20346C1D1Ev,_ZTv0_n32_N8S20346C1D1Ev)();
extern void ABISELECT(_ZThn536_N8S20346C1D1Ev,_ZThn268_N8S20346C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20346C1D0Ev,_ZTv0_n32_N8S20346C1D0Ev)();
extern void ABISELECT(_ZThn536_N8S20346C1D0Ev,_ZThn268_N8S20346C1D0Ev)() __attribute__((weak));
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
static  VTBL_ENTRY vtc_S20346C1[] = {
  ABISELECT(536,268),
  ABISELECT(416,208),
  ABISELECT(360,180),
  ABISELECT(384,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C1[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20346C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20346C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20346C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20346C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20346C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20346C12v6Ev,
  ABISELECT(296,148),
  ABISELECT(472,236),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20346C1[0]),
  (VTBL_ENTRY)&_ZN9S20346C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v40Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S20346C1D1Ev,_ZThn32_N8S20346C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S20346C1D0Ev,_ZThn32_N8S20346C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v43Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v44Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v45Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v46Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-360,-180),
  (VTBL_ENTRY)&(_ZTI8S20346C1[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  0,
  ABISELECT(-384,-192),
  (VTBL_ENTRY)&(_ZTI8S20346C1[0]),
  (VTBL_ENTRY)&_ZN8S20346C43v11Ev,
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-208),
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-416,-208),
  (VTBL_ENTRY)&(_ZTI8S20346C1[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C1D1Ev,_ZTv0_n32_N8S20346C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C1D0Ev,_ZTv0_n32_N8S20346C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v36Ev,
  ABISELECT(-112,-56),
  ABISELECT(-472,-236),
  (VTBL_ENTRY)&(_ZTI8S20346C1[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20346C1D1Ev,_ZTvn28_n32_N8S20346C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20346C1D0Ev,_ZTvn28_n32_N8S20346C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-536,-268),
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  ABISELECT(-536,-268),
  (VTBL_ENTRY)&(_ZTI8S20346C1[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C1D1Ev,_ZTv0_n32_N8S20346C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C1D0Ev,_ZTv0_n32_N8S20346C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
};
extern VTBL_ENTRY _ZTV8S20346C1[];
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C53v12Ev();
extern void _ZN8S20346C53v13Ev();
extern void _ZN8S20346C53v14Ev();
extern void _ZN8S20346C33v15Ev();
extern void _ZN8S20346C33v16Ev();
extern void _ZN8S20346C33v17Ev();
extern void _ZN8S20346C33v18Ev();
extern void _ZN8S20346C33v19Ev();
extern void _ZN8S20346C33v20Ev();
extern void _ZN8S20346C33v21Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C3__8S20346C1[] = {
  ABISELECT(384,192),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C3[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20346C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20346C33v21Ev,
};
extern void _ZN8S20346C43v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C4__8S20346C3__8S20346C1[] = {
  0,
  ABISELECT(-384,-192),
  (VTBL_ENTRY)&(_ZTI8S20346C3[0]),
  (VTBL_ENTRY)&_ZN8S20346C43v11Ev,
};
extern void _ZN9S20346C103v37Ev();
extern void _ZN9S20346C103v38Ev();
extern void _ZN9S20346C103v39Ev();
extern void _ZN9S20346C103v40Ev();
extern void _ZN8S20346C9D1Ev();
extern void _ZN8S20346C9D0Ev();
extern void _ZN8S20346C93v41Ev();
extern void _ZN8S20346C93v42Ev();
extern void _ZN8S20346C93v43Ev();
extern void _ZN8S20346C93v44Ev();
extern void _ZN8S20346C93v45Ev();
extern void _ZN8S20346C93v46Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C9__8S20346C1[] = {
  ABISELECT(296,148),
  ABISELECT(472,236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C9[0]),
  (VTBL_ENTRY)&_ZN9S20346C103v37Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20346C103v40Ev,
  (VTBL_ENTRY)&_ZN8S20346C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v41Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v42Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v43Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v44Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v45Ev,
  (VTBL_ENTRY)&_ZN8S20346C93v46Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void ABISELECT(_ZTv0_n64_N8S20346C9D1Ev,_ZTv0_n32_N8S20346C9D1Ev)();
extern void ABISELECT(_ZThn472_N8S20346C9D1Ev,_ZThn236_N8S20346C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20346C9D0Ev,_ZTv0_n32_N8S20346C9D0Ev)();
extern void ABISELECT(_ZThn472_N8S20346C9D0Ev,_ZThn236_N8S20346C9D0Ev)() __attribute__((weak));
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C8__8S20346C9__8S20346C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-472,-236),
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  ABISELECT(-472,-236),
  (VTBL_ENTRY)&(_ZTI8S20346C9[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C9D1Ev,_ZTv0_n32_N8S20346C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20346C9D0Ev,_ZTv0_n32_N8S20346C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C2__A1__8S20346C9__8S20346C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-296,-148),
  (VTBL_ENTRY)&(_ZTI8S20346C9[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C7D1Ev();
extern void _ZN8S20346C7D0Ev();
extern void _ZN8S20346C73v29Ev();
extern void _ZN8S20346C73v30Ev();
extern void _ZN8S20346C73v31Ev();
extern void _ZN8S20346C73v32Ev();
extern void _ZN8S20346C73v33Ev();
extern void _ZN8S20346C73v34Ev();
extern void _ZN8S20346C73v35Ev();
extern void _ZN8S20346C73v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C7__8S20346C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C7[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v29Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v30Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v31Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v32Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v33Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v34Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v35Ev,
  (VTBL_ENTRY)&_ZN8S20346C73v36Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C8D1Ev();
extern void _ZN8S20346C8D0Ev();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C88S20346C7__8S20346C1[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C2__A1__8S20346C88S20346C7__8S20346C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void ABISELECT(_ZThn56_N8S20346C7D1Ev,_ZThn28_N8S20346C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20346C7D0Ev,_ZThn28_N8S20346C7D0Ev)();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C8__8S20346C7__8S20346C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20346C7[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20346C7D1Ev,_ZThn28_N8S20346C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20346C7D0Ev,_ZThn28_N8S20346C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C2__A2__8S20346C7__8S20346C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S20346C7[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
extern void _ZN8S20346C8D1Ev();
extern void _ZN8S20346C8D0Ev();
extern void _ZN8S20346C83v22Ev();
extern void _ZN8S20346C83v23Ev();
extern void _ZN8S20346C83v24Ev();
extern void _ZN8S20346C83v25Ev();
extern void _ZN8S20346C83v26Ev();
extern void _ZN8S20346C83v27Ev();
extern void _ZN8S20346C83v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C8__A1__8S20346C1[] = {
  ABISELECT(-176,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20346C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v22Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v23Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v24Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v25Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v26Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v27Ev,
  (VTBL_ENTRY)&_ZN8S20346C83v28Ev,
};
extern void _ZN8S20346C22v7Ev();
extern void _ZN8S20346C22v8Ev();
extern void _ZN8S20346C22v9Ev();
extern void _ZN8S20346C23v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20346C2__A1__8S20346C8__A1__8S20346C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(176,88),
  (VTBL_ENTRY)&(_ZTI8S20346C8[0]),
  (VTBL_ENTRY)&_ZN8S20346C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20346C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20346C23v10Ev,
};
static  VTT_ENTRY vtt_S20346C1[] = {
  {&(_ZTV8S20346C1[6]),  6,139},
  {&(_tg__ZTV8S20346C3__8S20346C1[3]),  3,17},
  {&(_tg__ZTV8S20346C4__8S20346C3__8S20346C1[3]),  3,4},
  {&(_tg__ZTV8S20346C9__8S20346C1[4]),  4,16},
  {&(_tg__ZTV8S20346C8__8S20346C9__8S20346C1[15]),  15,28},
  {&(_tg__ZTV8S20346C2__A1__8S20346C9__8S20346C1[6]),  6,10},
  {&(_ZTV8S20346C1[50]),  50,139},
  {&(_ZTV8S20346C1[57]),  57,139},
  {&(_ZTV8S20346C1[81]),  81,139},
  {&(_ZTV8S20346C1[98]),  98,139},
  {&(_ZTV8S20346C1[32]),  32,139},
  {&(_ZTV8S20346C1[126]),  126,139},
  {&(_tg__ZTV8S20346C7__8S20346C1[3]),  3,17},
  {&(_tg__ZTV8S20346C88S20346C7__8S20346C1[3]),  3,16},
  {&(_tg__ZTV8S20346C2__A1__8S20346C88S20346C7__8S20346C1[6]),  6,10},
  {&(_tg__ZTV8S20346C8__8S20346C7__8S20346C1[3]),  3,16},
  {&(_tg__ZTV8S20346C2__A2__8S20346C7__8S20346C1[6]),  6,10},
  {&(_tg__ZTV8S20346C8__A1__8S20346C1[3]),  3,16},
  {&(_tg__ZTV8S20346C2__A1__8S20346C8__A1__8S20346C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20346C1[];
extern  VTBL_ENTRY _ZTV8S20346C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20346C1[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20346C9D0Ev,_ZTv0_n32_N8S20346C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S20346C9D0Ev,_ZThn236_N8S20346C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20346C9D1Ev,_ZTv0_n32_N8S20346C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn472_N8S20346C9D1Ev,_ZThn236_N8S20346C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20346C1D0Ev,_ZTv0_n32_N8S20346C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S20346C1D0Ev,_ZThn268_N8S20346C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20346C1D0Ev,_ZThn208_N8S20346C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20346C1D1Ev,_ZTv0_n32_N8S20346C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S20346C1D1Ev,_ZThn268_N8S20346C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20346C1D1Ev,_ZThn208_N8S20346C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20346C1 = {  "S20346C1", // class name
  bases_S20346C1, 17,
  &(vtc_S20346C1[0]), // expected_vtbl_contents
  &(vtt_S20346C1[0]), // expected_vtt_contents
  ABISELECT(608,300), // object size
  NSPAIRA(_ZTI8S20346C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20346C1),139, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20346C1),19, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6849C2  {
  int s6849c2f0;
  __tsi64 s6849c2f1;
  void *s6849c2f2[4];
  int s6849c2f3[2];
  void *s6849c2f4;
  ::S3280C4_nt s6849c2f5;
  void *s6849c2f6[2];
  virtual  ~S6849C2(); // _ZN7S6849C2D1Ev
  virtual void  v4(); // _ZN7S6849C22v4Ev
  virtual void  v5(); // _ZN7S6849C22v5Ev
  virtual void  v6(); // _ZN7S6849C22v6Ev
  virtual void  v7(); // _ZN7S6849C22v7Ev
  virtual void  v8(); // _ZN7S6849C22v8Ev
  virtual void  v9(); // _ZN7S6849C22v9Ev
  virtual void  v10(); // _ZN7S6849C23v10Ev
  virtual void  v11(); // _ZN7S6849C23v11Ev
  virtual void  v12(); // _ZN7S6849C23v12Ev
  virtual void  v13(); // _ZN7S6849C23v13Ev
  virtual void  v14(); // _ZN7S6849C23v14Ev
  virtual void  v15(); // _ZN7S6849C23v15Ev
  virtual void  v16(); // _ZN7S6849C23v16Ev
  virtual void  v17(); // _ZN7S6849C23v17Ev
  virtual void  v18(); // _ZN7S6849C23v18Ev
  virtual void  v19(); // _ZN7S6849C23v19Ev
  virtual void  v20(); // _ZN7S6849C23v20Ev
  virtual void  v21(); // _ZN7S6849C23v21Ev
  virtual void  v22(); // _ZN7S6849C23v22Ev
  virtual void  v23(); // _ZN7S6849C23v23Ev
  virtual void  v24(); // _ZN7S6849C23v24Ev
  virtual void  v25(); // _ZN7S6849C23v25Ev
  virtual void  v26(); // _ZN7S6849C23v26Ev
  virtual void  v27(); // _ZN7S6849C23v27Ev
  virtual void  v28(); // _ZN7S6849C23v28Ev
  virtual void  v29(); // _ZN7S6849C23v29Ev
  virtual void  v30(); // _ZN7S6849C23v30Ev
  virtual void  v31(); // _ZN7S6849C23v31Ev
  virtual void  v32(); // _ZN7S6849C23v32Ev
  virtual void  v33(); // _ZN7S6849C23v33Ev
  virtual void  v34(); // _ZN7S6849C23v34Ev
  virtual void  v35(); // _ZN7S6849C23v35Ev
  virtual void  v36(); // _ZN7S6849C23v36Ev
  virtual void  v37(); // _ZN7S6849C23v37Ev
  virtual void  v38(); // _ZN7S6849C23v38Ev
  virtual void  v39(); // _ZN7S6849C23v39Ev
  virtual void  v40(); // _ZN7S6849C23v40Ev
  virtual void  v41(); // _ZN7S6849C23v41Ev
  virtual void  v42(); // _ZN7S6849C23v42Ev
  virtual void  v43(); // _ZN7S6849C23v43Ev
  virtual void  v44(); // _ZN7S6849C23v44Ev
  virtual void  v45(); // _ZN7S6849C23v45Ev
  virtual void  v46(); // _ZN7S6849C23v46Ev
  virtual void  v47(); // _ZN7S6849C23v47Ev
  virtual void  v48(); // _ZN7S6849C23v48Ev
  virtual void  v49(); // _ZN7S6849C23v49Ev
  virtual void  v50(); // _ZN7S6849C23v50Ev
  virtual void  v51(); // _ZN7S6849C23v51Ev
  virtual void  v52(); // _ZN7S6849C23v52Ev
  virtual void  v53(); // _ZN7S6849C23v53Ev
  virtual void  v54(); // _ZN7S6849C23v54Ev
  virtual void  v55(); // _ZN7S6849C23v55Ev
  virtual void  v56(); // _ZN7S6849C23v56Ev
  virtual void  v57(); // _ZN7S6849C23v57Ev
  virtual void  v58(); // _ZN7S6849C23v58Ev
  virtual void  v59(); // _ZN7S6849C23v59Ev
  virtual void  v60(); // _ZN7S6849C23v60Ev
  virtual void  v61(); // _ZN7S6849C23v61Ev
  virtual void  v62(); // _ZN7S6849C23v62Ev
  virtual void  v63(); // _ZN7S6849C23v63Ev
  virtual void  v64(); // _ZN7S6849C23v64Ev
  virtual void  v65(); // _ZN7S6849C23v65Ev
  virtual void  v66(); // _ZN7S6849C23v66Ev
  virtual void  v67(); // _ZN7S6849C23v67Ev
  S6849C2(); // tgen
};
//SIG(-1 S6849C2) 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]}


 S6849C2 ::~S6849C2(){ note_dtor("S6849C2", this);}
void  S6849C2 ::v4(){vfunc_called(this, "_ZN7S6849C22v4Ev");}
void  S6849C2 ::v5(){vfunc_called(this, "_ZN7S6849C22v5Ev");}
void  S6849C2 ::v6(){vfunc_called(this, "_ZN7S6849C22v6Ev");}
void  S6849C2 ::v7(){vfunc_called(this, "_ZN7S6849C22v7Ev");}
void  S6849C2 ::v8(){vfunc_called(this, "_ZN7S6849C22v8Ev");}
void  S6849C2 ::v9(){vfunc_called(this, "_ZN7S6849C22v9Ev");}
void  S6849C2 ::v10(){vfunc_called(this, "_ZN7S6849C23v10Ev");}
void  S6849C2 ::v11(){vfunc_called(this, "_ZN7S6849C23v11Ev");}
void  S6849C2 ::v12(){vfunc_called(this, "_ZN7S6849C23v12Ev");}
void  S6849C2 ::v13(){vfunc_called(this, "_ZN7S6849C23v13Ev");}
void  S6849C2 ::v14(){vfunc_called(this, "_ZN7S6849C23v14Ev");}
void  S6849C2 ::v15(){vfunc_called(this, "_ZN7S6849C23v15Ev");}
void  S6849C2 ::v16(){vfunc_called(this, "_ZN7S6849C23v16Ev");}
void  S6849C2 ::v17(){vfunc_called(this, "_ZN7S6849C23v17Ev");}
void  S6849C2 ::v18(){vfunc_called(this, "_ZN7S6849C23v18Ev");}
void  S6849C2 ::v19(){vfunc_called(this, "_ZN7S6849C23v19Ev");}
void  S6849C2 ::v20(){vfunc_called(this, "_ZN7S6849C23v20Ev");}
void  S6849C2 ::v21(){vfunc_called(this, "_ZN7S6849C23v21Ev");}
void  S6849C2 ::v22(){vfunc_called(this, "_ZN7S6849C23v22Ev");}
void  S6849C2 ::v23(){vfunc_called(this, "_ZN7S6849C23v23Ev");}
void  S6849C2 ::v24(){vfunc_called(this, "_ZN7S6849C23v24Ev");}
void  S6849C2 ::v25(){vfunc_called(this, "_ZN7S6849C23v25Ev");}
void  S6849C2 ::v26(){vfunc_called(this, "_ZN7S6849C23v26Ev");}
void  S6849C2 ::v27(){vfunc_called(this, "_ZN7S6849C23v27Ev");}
void  S6849C2 ::v28(){vfunc_called(this, "_ZN7S6849C23v28Ev");}
void  S6849C2 ::v29(){vfunc_called(this, "_ZN7S6849C23v29Ev");}
void  S6849C2 ::v30(){vfunc_called(this, "_ZN7S6849C23v30Ev");}
void  S6849C2 ::v31(){vfunc_called(this, "_ZN7S6849C23v31Ev");}
void  S6849C2 ::v32(){vfunc_called(this, "_ZN7S6849C23v32Ev");}
void  S6849C2 ::v33(){vfunc_called(this, "_ZN7S6849C23v33Ev");}
void  S6849C2 ::v34(){vfunc_called(this, "_ZN7S6849C23v34Ev");}
void  S6849C2 ::v35(){vfunc_called(this, "_ZN7S6849C23v35Ev");}
void  S6849C2 ::v36(){vfunc_called(this, "_ZN7S6849C23v36Ev");}
void  S6849C2 ::v37(){vfunc_called(this, "_ZN7S6849C23v37Ev");}
void  S6849C2 ::v38(){vfunc_called(this, "_ZN7S6849C23v38Ev");}
void  S6849C2 ::v39(){vfunc_called(this, "_ZN7S6849C23v39Ev");}
void  S6849C2 ::v40(){vfunc_called(this, "_ZN7S6849C23v40Ev");}
void  S6849C2 ::v41(){vfunc_called(this, "_ZN7S6849C23v41Ev");}
void  S6849C2 ::v42(){vfunc_called(this, "_ZN7S6849C23v42Ev");}
void  S6849C2 ::v43(){vfunc_called(this, "_ZN7S6849C23v43Ev");}
void  S6849C2 ::v44(){vfunc_called(this, "_ZN7S6849C23v44Ev");}
void  S6849C2 ::v45(){vfunc_called(this, "_ZN7S6849C23v45Ev");}
void  S6849C2 ::v46(){vfunc_called(this, "_ZN7S6849C23v46Ev");}
void  S6849C2 ::v47(){vfunc_called(this, "_ZN7S6849C23v47Ev");}
void  S6849C2 ::v48(){vfunc_called(this, "_ZN7S6849C23v48Ev");}
void  S6849C2 ::v49(){vfunc_called(this, "_ZN7S6849C23v49Ev");}
void  S6849C2 ::v50(){vfunc_called(this, "_ZN7S6849C23v50Ev");}
void  S6849C2 ::v51(){vfunc_called(this, "_ZN7S6849C23v51Ev");}
void  S6849C2 ::v52(){vfunc_called(this, "_ZN7S6849C23v52Ev");}
void  S6849C2 ::v53(){vfunc_called(this, "_ZN7S6849C23v53Ev");}
void  S6849C2 ::v54(){vfunc_called(this, "_ZN7S6849C23v54Ev");}
void  S6849C2 ::v55(){vfunc_called(this, "_ZN7S6849C23v55Ev");}
void  S6849C2 ::v56(){vfunc_called(this, "_ZN7S6849C23v56Ev");}
void  S6849C2 ::v57(){vfunc_called(this, "_ZN7S6849C23v57Ev");}
void  S6849C2 ::v58(){vfunc_called(this, "_ZN7S6849C23v58Ev");}
void  S6849C2 ::v59(){vfunc_called(this, "_ZN7S6849C23v59Ev");}
void  S6849C2 ::v60(){vfunc_called(this, "_ZN7S6849C23v60Ev");}
void  S6849C2 ::v61(){vfunc_called(this, "_ZN7S6849C23v61Ev");}
void  S6849C2 ::v62(){vfunc_called(this, "_ZN7S6849C23v62Ev");}
void  S6849C2 ::v63(){vfunc_called(this, "_ZN7S6849C23v63Ev");}
void  S6849C2 ::v64(){vfunc_called(this, "_ZN7S6849C23v64Ev");}
void  S6849C2 ::v65(){vfunc_called(this, "_ZN7S6849C23v65Ev");}
void  S6849C2 ::v66(){vfunc_called(this, "_ZN7S6849C23v66Ev");}
void  S6849C2 ::v67(){vfunc_called(this, "_ZN7S6849C23v67Ev");}
S6849C2 ::S6849C2(){ note_ctor("S6849C2", this);} // tgen

static void Test_S6849C2()
{
  extern Class_Descriptor cd_S6849C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6849C2, buf);
    S6849C2 *dp, &lv = *(dp=new (buf) S6849C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6849C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6849C2)");
    check_field_offset(lv, s6849c2f0, ABISELECT(8,4), "S6849C2.s6849c2f0");
    check_field_offset(lv, s6849c2f1, ABISELECT(16,8), "S6849C2.s6849c2f1");
    check_field_offset(lv, s6849c2f2, ABISELECT(24,16), "S6849C2.s6849c2f2");
    check_field_offset(lv, s6849c2f3, ABISELECT(56,32), "S6849C2.s6849c2f3");
    check_field_offset(lv, s6849c2f4, ABISELECT(64,40), "S6849C2.s6849c2f4");
    check_field_offset(lv, s6849c2f5, ABISELECT(72,44), "S6849C2.s6849c2f5");
    check_field_offset(lv, s6849c2f6, ABISELECT(80,52), "S6849C2.s6849c2f6");
    test_class_info(&lv, &cd_S6849C2);
    dp->~S6849C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6849C2(Test_S6849C2, "S6849C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6849C2C1Ev();
extern void _ZN7S6849C2D1Ev();
Name_Map name_map_S6849C2[] = {
  NSPAIR(_ZN7S6849C2C1Ev),
  NSPAIR(_ZN7S6849C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6849C2[];
extern void _ZN7S6849C2D1Ev();
extern void _ZN7S6849C2D0Ev();
extern void _ZN7S6849C22v4Ev();
extern void _ZN7S6849C22v5Ev();
extern void _ZN7S6849C22v6Ev();
extern void _ZN7S6849C22v7Ev();
extern void _ZN7S6849C22v8Ev();
extern void _ZN7S6849C22v9Ev();
extern void _ZN7S6849C23v10Ev();
extern void _ZN7S6849C23v11Ev();
extern void _ZN7S6849C23v12Ev();
extern void _ZN7S6849C23v13Ev();
extern void _ZN7S6849C23v14Ev();
extern void _ZN7S6849C23v15Ev();
extern void _ZN7S6849C23v16Ev();
extern void _ZN7S6849C23v17Ev();
extern void _ZN7S6849C23v18Ev();
extern void _ZN7S6849C23v19Ev();
extern void _ZN7S6849C23v20Ev();
extern void _ZN7S6849C23v21Ev();
extern void _ZN7S6849C23v22Ev();
extern void _ZN7S6849C23v23Ev();
extern void _ZN7S6849C23v24Ev();
extern void _ZN7S6849C23v25Ev();
extern void _ZN7S6849C23v26Ev();
extern void _ZN7S6849C23v27Ev();
extern void _ZN7S6849C23v28Ev();
extern void _ZN7S6849C23v29Ev();
extern void _ZN7S6849C23v30Ev();
extern void _ZN7S6849C23v31Ev();
extern void _ZN7S6849C23v32Ev();
extern void _ZN7S6849C23v33Ev();
extern void _ZN7S6849C23v34Ev();
extern void _ZN7S6849C23v35Ev();
extern void _ZN7S6849C23v36Ev();
extern void _ZN7S6849C23v37Ev();
extern void _ZN7S6849C23v38Ev();
extern void _ZN7S6849C23v39Ev();
extern void _ZN7S6849C23v40Ev();
extern void _ZN7S6849C23v41Ev();
extern void _ZN7S6849C23v42Ev();
extern void _ZN7S6849C23v43Ev();
extern void _ZN7S6849C23v44Ev();
extern void _ZN7S6849C23v45Ev();
extern void _ZN7S6849C23v46Ev();
extern void _ZN7S6849C23v47Ev();
extern void _ZN7S6849C23v48Ev();
extern void _ZN7S6849C23v49Ev();
extern void _ZN7S6849C23v50Ev();
extern void _ZN7S6849C23v51Ev();
extern void _ZN7S6849C23v52Ev();
extern void _ZN7S6849C23v53Ev();
extern void _ZN7S6849C23v54Ev();
extern void _ZN7S6849C23v55Ev();
extern void _ZN7S6849C23v56Ev();
extern void _ZN7S6849C23v57Ev();
extern void _ZN7S6849C23v58Ev();
extern void _ZN7S6849C23v59Ev();
extern void _ZN7S6849C23v60Ev();
extern void _ZN7S6849C23v61Ev();
extern void _ZN7S6849C23v62Ev();
extern void _ZN7S6849C23v63Ev();
extern void _ZN7S6849C23v64Ev();
extern void _ZN7S6849C23v65Ev();
extern void _ZN7S6849C23v66Ev();
extern void _ZN7S6849C23v67Ev();
static  VTBL_ENTRY vtc_S6849C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6849C2[0]),
  (VTBL_ENTRY)&_ZN7S6849C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6849C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v67Ev,
};
extern VTBL_ENTRY _ZTI7S6849C2[];
extern  VTBL_ENTRY _ZTV7S6849C2[];
Class_Descriptor cd_S6849C2 = {  "S6849C2", // class name
  0,0,//no base classes
  &(vtc_S6849C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6849C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6849C2),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  S6849C1  : S6849C2 {
  int s6849c1f0;
  ::S7190C16 s6849c1f1;
  virtual  ~S6849C1(); // _ZN7S6849C1D1Ev
  virtual void  v1(); // _ZN7S6849C12v1Ev
  virtual void  v2(); // _ZN7S6849C12v2Ev
  virtual void  v3(); // _ZN7S6849C12v3Ev
  S6849C1(); // tgen
};
//SIG(1 S6849C1) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 Fi FC4{ BC5{ m Fp Fi[2]}}}


 S6849C1 ::~S6849C1(){ note_dtor("S6849C1", this);}
void  S6849C1 ::v1(){vfunc_called(this, "_ZN7S6849C12v1Ev");}
void  S6849C1 ::v2(){vfunc_called(this, "_ZN7S6849C12v2Ev");}
void  S6849C1 ::v3(){vfunc_called(this, "_ZN7S6849C12v3Ev");}
S6849C1 ::S6849C1(){ note_ctor("S6849C1", this);} // tgen

static void Test_S6849C1()
{
  extern Class_Descriptor cd_S6849C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S6849C1, buf);
    S6849C1 *dp, &lv = *(dp=new (buf) S6849C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S6849C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6849C1)");
    check_base_class_offset(lv, (S6849C2*), 0, "S6849C1");
    check_field_offset(lv, s6849c1f0, ABISELECT(96,60), "S6849C1.s6849c1f0");
    check_field_offset(lv, s6849c1f1, ABISELECT(104,64), "S6849C1.s6849c1f1");
    test_class_info(&lv, &cd_S6849C1);
    dp->~S6849C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6849C1(Test_S6849C1, "S6849C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S6849C1C1Ev();
extern void _ZN7S6849C1D1Ev();
Name_Map name_map_S6849C1[] = {
  NSPAIR(_ZN7S6849C1C1Ev),
  NSPAIR(_ZN7S6849C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6849C2;
extern VTBL_ENTRY _ZTI7S6849C2[];
extern  VTBL_ENTRY _ZTV7S6849C2[];
static Base_Class bases_S6849C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6849C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6849C1[];
extern void _ZN7S6849C1D1Ev();
extern void _ZN7S6849C1D0Ev();
extern void _ZN7S6849C22v4Ev();
extern void _ZN7S6849C22v5Ev();
extern void _ZN7S6849C22v6Ev();
extern void _ZN7S6849C22v7Ev();
extern void _ZN7S6849C22v8Ev();
extern void _ZN7S6849C22v9Ev();
extern void _ZN7S6849C23v10Ev();
extern void _ZN7S6849C23v11Ev();
extern void _ZN7S6849C23v12Ev();
extern void _ZN7S6849C23v13Ev();
extern void _ZN7S6849C23v14Ev();
extern void _ZN7S6849C23v15Ev();
extern void _ZN7S6849C23v16Ev();
extern void _ZN7S6849C23v17Ev();
extern void _ZN7S6849C23v18Ev();
extern void _ZN7S6849C23v19Ev();
extern void _ZN7S6849C23v20Ev();
extern void _ZN7S6849C23v21Ev();
extern void _ZN7S6849C23v22Ev();
extern void _ZN7S6849C23v23Ev();
extern void _ZN7S6849C23v24Ev();
extern void _ZN7S6849C23v25Ev();
extern void _ZN7S6849C23v26Ev();
extern void _ZN7S6849C23v27Ev();
extern void _ZN7S6849C23v28Ev();
extern void _ZN7S6849C23v29Ev();
extern void _ZN7S6849C23v30Ev();
extern void _ZN7S6849C23v31Ev();
extern void _ZN7S6849C23v32Ev();
extern void _ZN7S6849C23v33Ev();
extern void _ZN7S6849C23v34Ev();
extern void _ZN7S6849C23v35Ev();
extern void _ZN7S6849C23v36Ev();
extern void _ZN7S6849C23v37Ev();
extern void _ZN7S6849C23v38Ev();
extern void _ZN7S6849C23v39Ev();
extern void _ZN7S6849C23v40Ev();
extern void _ZN7S6849C23v41Ev();
extern void _ZN7S6849C23v42Ev();
extern void _ZN7S6849C23v43Ev();
extern void _ZN7S6849C23v44Ev();
extern void _ZN7S6849C23v45Ev();
extern void _ZN7S6849C23v46Ev();
extern void _ZN7S6849C23v47Ev();
extern void _ZN7S6849C23v48Ev();
extern void _ZN7S6849C23v49Ev();
extern void _ZN7S6849C23v50Ev();
extern void _ZN7S6849C23v51Ev();
extern void _ZN7S6849C23v52Ev();
extern void _ZN7S6849C23v53Ev();
extern void _ZN7S6849C23v54Ev();
extern void _ZN7S6849C23v55Ev();
extern void _ZN7S6849C23v56Ev();
extern void _ZN7S6849C23v57Ev();
extern void _ZN7S6849C23v58Ev();
extern void _ZN7S6849C23v59Ev();
extern void _ZN7S6849C23v60Ev();
extern void _ZN7S6849C23v61Ev();
extern void _ZN7S6849C23v62Ev();
extern void _ZN7S6849C23v63Ev();
extern void _ZN7S6849C23v64Ev();
extern void _ZN7S6849C23v65Ev();
extern void _ZN7S6849C23v66Ev();
extern void _ZN7S6849C23v67Ev();
extern void _ZN7S6849C12v1Ev();
extern void _ZN7S6849C12v2Ev();
extern void _ZN7S6849C12v3Ev();
static  VTBL_ENTRY vtc_S6849C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6849C1[0]),
  (VTBL_ENTRY)&_ZN7S6849C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6849C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6849C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6849C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6849C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6849C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6849C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6849C1[];
extern  VTBL_ENTRY _ZTV7S6849C1[];
Class_Descriptor cd_S6849C1 = {  "S6849C1", // class name
  bases_S6849C1, 1,
  &(vtc_S6849C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S6849C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6849C1),71, //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  S6727C2  {
  int s6727c2f0;
  __tsi64 s6727c2f1;
  void *s6727c2f2[4];
  int s6727c2f3[2];
  void *s6727c2f4;
  ::S3280C4_nt s6727c2f5;
  void *s6727c2f6[2];
  virtual  ~S6727C2(); // _ZN7S6727C2D1Ev
  virtual void  v3(); // _ZN7S6727C22v3Ev
  virtual void  v4(); // _ZN7S6727C22v4Ev
  virtual void  v5(); // _ZN7S6727C22v5Ev
  virtual void  v6(); // _ZN7S6727C22v6Ev
  virtual void  v7(); // _ZN7S6727C22v7Ev
  virtual void  v8(); // _ZN7S6727C22v8Ev
  virtual void  v9(); // _ZN7S6727C22v9Ev
  virtual void  v10(); // _ZN7S6727C23v10Ev
  virtual void  v11(); // _ZN7S6727C23v11Ev
  virtual void  v12(); // _ZN7S6727C23v12Ev
  virtual void  v13(); // _ZN7S6727C23v13Ev
  virtual void  v14(); // _ZN7S6727C23v14Ev
  virtual void  v15(); // _ZN7S6727C23v15Ev
  virtual void  v16(); // _ZN7S6727C23v16Ev
  virtual void  v17(); // _ZN7S6727C23v17Ev
  virtual void  v18(); // _ZN7S6727C23v18Ev
  virtual void  v19(); // _ZN7S6727C23v19Ev
  virtual void  v20(); // _ZN7S6727C23v20Ev
  virtual void  v21(); // _ZN7S6727C23v21Ev
  virtual void  v22(); // _ZN7S6727C23v22Ev
  virtual void  v23(); // _ZN7S6727C23v23Ev
  virtual void  v24(); // _ZN7S6727C23v24Ev
  virtual void  v25(); // _ZN7S6727C23v25Ev
  virtual void  v26(); // _ZN7S6727C23v26Ev
  virtual void  v27(); // _ZN7S6727C23v27Ev
  virtual void  v28(); // _ZN7S6727C23v28Ev
  virtual void  v29(); // _ZN7S6727C23v29Ev
  virtual void  v30(); // _ZN7S6727C23v30Ev
  virtual void  v31(); // _ZN7S6727C23v31Ev
  virtual void  v32(); // _ZN7S6727C23v32Ev
  virtual void  v33(); // _ZN7S6727C23v33Ev
  virtual void  v34(); // _ZN7S6727C23v34Ev
  virtual void  v35(); // _ZN7S6727C23v35Ev
  virtual void  v36(); // _ZN7S6727C23v36Ev
  virtual void  v37(); // _ZN7S6727C23v37Ev
  virtual void  v38(); // _ZN7S6727C23v38Ev
  virtual void  v39(); // _ZN7S6727C23v39Ev
  virtual void  v40(); // _ZN7S6727C23v40Ev
  virtual void  v41(); // _ZN7S6727C23v41Ev
  virtual void  v42(); // _ZN7S6727C23v42Ev
  virtual void  v43(); // _ZN7S6727C23v43Ev
  virtual void  v44(); // _ZN7S6727C23v44Ev
  virtual void  v45(); // _ZN7S6727C23v45Ev
  virtual void  v46(); // _ZN7S6727C23v46Ev
  virtual void  v47(); // _ZN7S6727C23v47Ev
  virtual void  v48(); // _ZN7S6727C23v48Ev
  virtual void  v49(); // _ZN7S6727C23v49Ev
  virtual void  v50(); // _ZN7S6727C23v50Ev
  virtual void  v51(); // _ZN7S6727C23v51Ev
  virtual void  v52(); // _ZN7S6727C23v52Ev
  virtual void  v53(); // _ZN7S6727C23v53Ev
  virtual void  v54(); // _ZN7S6727C23v54Ev
  virtual void  v55(); // _ZN7S6727C23v55Ev
  virtual void  v56(); // _ZN7S6727C23v56Ev
  virtual void  v57(); // _ZN7S6727C23v57Ev
  virtual void  v58(); // _ZN7S6727C23v58Ev
  virtual void  v59(); // _ZN7S6727C23v59Ev
  virtual void  v60(); // _ZN7S6727C23v60Ev
  virtual void  v61(); // _ZN7S6727C23v61Ev
  virtual void  v62(); // _ZN7S6727C23v62Ev
  virtual void  v63(); // _ZN7S6727C23v63Ev
  virtual void  v64(); // _ZN7S6727C23v64Ev
  virtual void  v65(); // _ZN7S6727C23v65Ev
  virtual void  v66(); // _ZN7S6727C23v66Ev
  S6727C2(); // tgen
};
//SIG(-1 S6727C2) 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]}


 S6727C2 ::~S6727C2(){ note_dtor("S6727C2", this);}
void  S6727C2 ::v3(){vfunc_called(this, "_ZN7S6727C22v3Ev");}
void  S6727C2 ::v4(){vfunc_called(this, "_ZN7S6727C22v4Ev");}
void  S6727C2 ::v5(){vfunc_called(this, "_ZN7S6727C22v5Ev");}
void  S6727C2 ::v6(){vfunc_called(this, "_ZN7S6727C22v6Ev");}
void  S6727C2 ::v7(){vfunc_called(this, "_ZN7S6727C22v7Ev");}
void  S6727C2 ::v8(){vfunc_called(this, "_ZN7S6727C22v8Ev");}
void  S6727C2 ::v9(){vfunc_called(this, "_ZN7S6727C22v9Ev");}
void  S6727C2 ::v10(){vfunc_called(this, "_ZN7S6727C23v10Ev");}
void  S6727C2 ::v11(){vfunc_called(this, "_ZN7S6727C23v11Ev");}
void  S6727C2 ::v12(){vfunc_called(this, "_ZN7S6727C23v12Ev");}
void  S6727C2 ::v13(){vfunc_called(this, "_ZN7S6727C23v13Ev");}
void  S6727C2 ::v14(){vfunc_called(this, "_ZN7S6727C23v14Ev");}
void  S6727C2 ::v15(){vfunc_called(this, "_ZN7S6727C23v15Ev");}
void  S6727C2 ::v16(){vfunc_called(this, "_ZN7S6727C23v16Ev");}
void  S6727C2 ::v17(){vfunc_called(this, "_ZN7S6727C23v17Ev");}
void  S6727C2 ::v18(){vfunc_called(this, "_ZN7S6727C23v18Ev");}
void  S6727C2 ::v19(){vfunc_called(this, "_ZN7S6727C23v19Ev");}
void  S6727C2 ::v20(){vfunc_called(this, "_ZN7S6727C23v20Ev");}
void  S6727C2 ::v21(){vfunc_called(this, "_ZN7S6727C23v21Ev");}
void  S6727C2 ::v22(){vfunc_called(this, "_ZN7S6727C23v22Ev");}
void  S6727C2 ::v23(){vfunc_called(this, "_ZN7S6727C23v23Ev");}
void  S6727C2 ::v24(){vfunc_called(this, "_ZN7S6727C23v24Ev");}
void  S6727C2 ::v25(){vfunc_called(this, "_ZN7S6727C23v25Ev");}
void  S6727C2 ::v26(){vfunc_called(this, "_ZN7S6727C23v26Ev");}
void  S6727C2 ::v27(){vfunc_called(this, "_ZN7S6727C23v27Ev");}
void  S6727C2 ::v28(){vfunc_called(this, "_ZN7S6727C23v28Ev");}
void  S6727C2 ::v29(){vfunc_called(this, "_ZN7S6727C23v29Ev");}
void  S6727C2 ::v30(){vfunc_called(this, "_ZN7S6727C23v30Ev");}
void  S6727C2 ::v31(){vfunc_called(this, "_ZN7S6727C23v31Ev");}
void  S6727C2 ::v32(){vfunc_called(this, "_ZN7S6727C23v32Ev");}
void  S6727C2 ::v33(){vfunc_called(this, "_ZN7S6727C23v33Ev");}
void  S6727C2 ::v34(){vfunc_called(this, "_ZN7S6727C23v34Ev");}
void  S6727C2 ::v35(){vfunc_called(this, "_ZN7S6727C23v35Ev");}
void  S6727C2 ::v36(){vfunc_called(this, "_ZN7S6727C23v36Ev");}
void  S6727C2 ::v37(){vfunc_called(this, "_ZN7S6727C23v37Ev");}
void  S6727C2 ::v38(){vfunc_called(this, "_ZN7S6727C23v38Ev");}
void  S6727C2 ::v39(){vfunc_called(this, "_ZN7S6727C23v39Ev");}
void  S6727C2 ::v40(){vfunc_called(this, "_ZN7S6727C23v40Ev");}
void  S6727C2 ::v41(){vfunc_called(this, "_ZN7S6727C23v41Ev");}
void  S6727C2 ::v42(){vfunc_called(this, "_ZN7S6727C23v42Ev");}
void  S6727C2 ::v43(){vfunc_called(this, "_ZN7S6727C23v43Ev");}
void  S6727C2 ::v44(){vfunc_called(this, "_ZN7S6727C23v44Ev");}
void  S6727C2 ::v45(){vfunc_called(this, "_ZN7S6727C23v45Ev");}
void  S6727C2 ::v46(){vfunc_called(this, "_ZN7S6727C23v46Ev");}
void  S6727C2 ::v47(){vfunc_called(this, "_ZN7S6727C23v47Ev");}
void  S6727C2 ::v48(){vfunc_called(this, "_ZN7S6727C23v48Ev");}
void  S6727C2 ::v49(){vfunc_called(this, "_ZN7S6727C23v49Ev");}
void  S6727C2 ::v50(){vfunc_called(this, "_ZN7S6727C23v50Ev");}
void  S6727C2 ::v51(){vfunc_called(this, "_ZN7S6727C23v51Ev");}
void  S6727C2 ::v52(){vfunc_called(this, "_ZN7S6727C23v52Ev");}
void  S6727C2 ::v53(){vfunc_called(this, "_ZN7S6727C23v53Ev");}
void  S6727C2 ::v54(){vfunc_called(this, "_ZN7S6727C23v54Ev");}
void  S6727C2 ::v55(){vfunc_called(this, "_ZN7S6727C23v55Ev");}
void  S6727C2 ::v56(){vfunc_called(this, "_ZN7S6727C23v56Ev");}
void  S6727C2 ::v57(){vfunc_called(this, "_ZN7S6727C23v57Ev");}
void  S6727C2 ::v58(){vfunc_called(this, "_ZN7S6727C23v58Ev");}
void  S6727C2 ::v59(){vfunc_called(this, "_ZN7S6727C23v59Ev");}
void  S6727C2 ::v60(){vfunc_called(this, "_ZN7S6727C23v60Ev");}
void  S6727C2 ::v61(){vfunc_called(this, "_ZN7S6727C23v61Ev");}
void  S6727C2 ::v62(){vfunc_called(this, "_ZN7S6727C23v62Ev");}
void  S6727C2 ::v63(){vfunc_called(this, "_ZN7S6727C23v63Ev");}
void  S6727C2 ::v64(){vfunc_called(this, "_ZN7S6727C23v64Ev");}
void  S6727C2 ::v65(){vfunc_called(this, "_ZN7S6727C23v65Ev");}
void  S6727C2 ::v66(){vfunc_called(this, "_ZN7S6727C23v66Ev");}
S6727C2 ::S6727C2(){ note_ctor("S6727C2", this);} // tgen

static void Test_S6727C2()
{
  extern Class_Descriptor cd_S6727C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6727C2, buf);
    S6727C2 *dp, &lv = *(dp=new (buf) S6727C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6727C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6727C2)");
    check_field_offset(lv, s6727c2f0, ABISELECT(8,4), "S6727C2.s6727c2f0");
    check_field_offset(lv, s6727c2f1, ABISELECT(16,8), "S6727C2.s6727c2f1");
    check_field_offset(lv, s6727c2f2, ABISELECT(24,16), "S6727C2.s6727c2f2");
    check_field_offset(lv, s6727c2f3, ABISELECT(56,32), "S6727C2.s6727c2f3");
    check_field_offset(lv, s6727c2f4, ABISELECT(64,40), "S6727C2.s6727c2f4");
    check_field_offset(lv, s6727c2f5, ABISELECT(72,44), "S6727C2.s6727c2f5");
    check_field_offset(lv, s6727c2f6, ABISELECT(80,52), "S6727C2.s6727c2f6");
    test_class_info(&lv, &cd_S6727C2);
    dp->~S6727C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6727C2(Test_S6727C2, "S6727C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6727C2C1Ev();
extern void _ZN7S6727C2D1Ev();
Name_Map name_map_S6727C2[] = {
  NSPAIR(_ZN7S6727C2C1Ev),
  NSPAIR(_ZN7S6727C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6727C2[];
extern void _ZN7S6727C2D1Ev();
extern void _ZN7S6727C2D0Ev();
extern void _ZN7S6727C22v3Ev();
extern void _ZN7S6727C22v4Ev();
extern void _ZN7S6727C22v5Ev();
extern void _ZN7S6727C22v6Ev();
extern void _ZN7S6727C22v7Ev();
extern void _ZN7S6727C22v8Ev();
extern void _ZN7S6727C22v9Ev();
extern void _ZN7S6727C23v10Ev();
extern void _ZN7S6727C23v11Ev();
extern void _ZN7S6727C23v12Ev();
extern void _ZN7S6727C23v13Ev();
extern void _ZN7S6727C23v14Ev();
extern void _ZN7S6727C23v15Ev();
extern void _ZN7S6727C23v16Ev();
extern void _ZN7S6727C23v17Ev();
extern void _ZN7S6727C23v18Ev();
extern void _ZN7S6727C23v19Ev();
extern void _ZN7S6727C23v20Ev();
extern void _ZN7S6727C23v21Ev();
extern void _ZN7S6727C23v22Ev();
extern void _ZN7S6727C23v23Ev();
extern void _ZN7S6727C23v24Ev();
extern void _ZN7S6727C23v25Ev();
extern void _ZN7S6727C23v26Ev();
extern void _ZN7S6727C23v27Ev();
extern void _ZN7S6727C23v28Ev();
extern void _ZN7S6727C23v29Ev();
extern void _ZN7S6727C23v30Ev();
extern void _ZN7S6727C23v31Ev();
extern void _ZN7S6727C23v32Ev();
extern void _ZN7S6727C23v33Ev();
extern void _ZN7S6727C23v34Ev();
extern void _ZN7S6727C23v35Ev();
extern void _ZN7S6727C23v36Ev();
extern void _ZN7S6727C23v37Ev();
extern void _ZN7S6727C23v38Ev();
extern void _ZN7S6727C23v39Ev();
extern void _ZN7S6727C23v40Ev();
extern void _ZN7S6727C23v41Ev();
extern void _ZN7S6727C23v42Ev();
extern void _ZN7S6727C23v43Ev();
extern void _ZN7S6727C23v44Ev();
extern void _ZN7S6727C23v45Ev();
extern void _ZN7S6727C23v46Ev();
extern void _ZN7S6727C23v47Ev();
extern void _ZN7S6727C23v48Ev();
extern void _ZN7S6727C23v49Ev();
extern void _ZN7S6727C23v50Ev();
extern void _ZN7S6727C23v51Ev();
extern void _ZN7S6727C23v52Ev();
extern void _ZN7S6727C23v53Ev();
extern void _ZN7S6727C23v54Ev();
extern void _ZN7S6727C23v55Ev();
extern void _ZN7S6727C23v56Ev();
extern void _ZN7S6727C23v57Ev();
extern void _ZN7S6727C23v58Ev();
extern void _ZN7S6727C23v59Ev();
extern void _ZN7S6727C23v60Ev();
extern void _ZN7S6727C23v61Ev();
extern void _ZN7S6727C23v62Ev();
extern void _ZN7S6727C23v63Ev();
extern void _ZN7S6727C23v64Ev();
extern void _ZN7S6727C23v65Ev();
extern void _ZN7S6727C23v66Ev();
static  VTBL_ENTRY vtc_S6727C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6727C2[0]),
  (VTBL_ENTRY)&_ZN7S6727C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6727C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v66Ev,
};
extern VTBL_ENTRY _ZTI7S6727C2[];
extern  VTBL_ENTRY _ZTV7S6727C2[];
Class_Descriptor cd_S6727C2 = {  "S6727C2", // class name
  0,0,//no base classes
  &(vtc_S6727C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6727C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6727C2),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  S6727C1  : S6727C2 {
  void *s6727c1f0;
  ::S22028C29_nt s6727c1f1;
  virtual  ~S6727C1(); // _ZN7S6727C1D1Ev
  virtual void  v1(); // _ZN7S6727C12v1Ev
  virtual void  v2(); // _ZN7S6727C12v2Ev
  S6727C1(); // tgen
};
//SIG(1 S6727C1) 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 Fp FC4{ m Fi[3]}}


 S6727C1 ::~S6727C1(){ note_dtor("S6727C1", this);}
void  S6727C1 ::v1(){vfunc_called(this, "_ZN7S6727C12v1Ev");}
void  S6727C1 ::v2(){vfunc_called(this, "_ZN7S6727C12v2Ev");}
S6727C1 ::S6727C1(){ note_ctor("S6727C1", this);} // tgen

static void Test_S6727C1()
{
  extern Class_Descriptor cd_S6727C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,20)];
    init_test(&cd_S6727C1, buf);
    S6727C1 *dp, &lv = *(dp=new (buf) S6727C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,76), "sizeof(S6727C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6727C1)");
    check_base_class_offset(lv, (S6727C2*), 0, "S6727C1");
    check_field_offset(lv, s6727c1f0, ABISELECT(96,60), "S6727C1.s6727c1f0");
    check_field_offset(lv, s6727c1f1, ABISELECT(104,64), "S6727C1.s6727c1f1");
    test_class_info(&lv, &cd_S6727C1);
    dp->~S6727C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6727C1(Test_S6727C1, "S6727C1", ABISELECT(120,76));

#else // __cplusplus

extern void _ZN7S6727C1C1Ev();
extern void _ZN7S6727C1D1Ev();
Name_Map name_map_S6727C1[] = {
  NSPAIR(_ZN7S6727C1C1Ev),
  NSPAIR(_ZN7S6727C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6727C2;
extern VTBL_ENTRY _ZTI7S6727C2[];
extern  VTBL_ENTRY _ZTV7S6727C2[];
static Base_Class bases_S6727C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6727C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6727C1[];
extern void _ZN7S6727C1D1Ev();
extern void _ZN7S6727C1D0Ev();
extern void _ZN7S6727C22v3Ev();
extern void _ZN7S6727C22v4Ev();
extern void _ZN7S6727C22v5Ev();
extern void _ZN7S6727C22v6Ev();
extern void _ZN7S6727C22v7Ev();
extern void _ZN7S6727C22v8Ev();
extern void _ZN7S6727C22v9Ev();
extern void _ZN7S6727C23v10Ev();
extern void _ZN7S6727C23v11Ev();
extern void _ZN7S6727C23v12Ev();
extern void _ZN7S6727C23v13Ev();
extern void _ZN7S6727C23v14Ev();
extern void _ZN7S6727C23v15Ev();
extern void _ZN7S6727C23v16Ev();
extern void _ZN7S6727C23v17Ev();
extern void _ZN7S6727C23v18Ev();
extern void _ZN7S6727C23v19Ev();
extern void _ZN7S6727C23v20Ev();
extern void _ZN7S6727C23v21Ev();
extern void _ZN7S6727C23v22Ev();
extern void _ZN7S6727C23v23Ev();
extern void _ZN7S6727C23v24Ev();
extern void _ZN7S6727C23v25Ev();
extern void _ZN7S6727C23v26Ev();
extern void _ZN7S6727C23v27Ev();
extern void _ZN7S6727C23v28Ev();
extern void _ZN7S6727C23v29Ev();
extern void _ZN7S6727C23v30Ev();
extern void _ZN7S6727C23v31Ev();
extern void _ZN7S6727C23v32Ev();
extern void _ZN7S6727C23v33Ev();
extern void _ZN7S6727C23v34Ev();
extern void _ZN7S6727C23v35Ev();
extern void _ZN7S6727C23v36Ev();
extern void _ZN7S6727C23v37Ev();
extern void _ZN7S6727C23v38Ev();
extern void _ZN7S6727C23v39Ev();
extern void _ZN7S6727C23v40Ev();
extern void _ZN7S6727C23v41Ev();
extern void _ZN7S6727C23v42Ev();
extern void _ZN7S6727C23v43Ev();
extern void _ZN7S6727C23v44Ev();
extern void _ZN7S6727C23v45Ev();
extern void _ZN7S6727C23v46Ev();
extern void _ZN7S6727C23v47Ev();
extern void _ZN7S6727C23v48Ev();
extern void _ZN7S6727C23v49Ev();
extern void _ZN7S6727C23v50Ev();
extern void _ZN7S6727C23v51Ev();
extern void _ZN7S6727C23v52Ev();
extern void _ZN7S6727C23v53Ev();
extern void _ZN7S6727C23v54Ev();
extern void _ZN7S6727C23v55Ev();
extern void _ZN7S6727C23v56Ev();
extern void _ZN7S6727C23v57Ev();
extern void _ZN7S6727C23v58Ev();
extern void _ZN7S6727C23v59Ev();
extern void _ZN7S6727C23v60Ev();
extern void _ZN7S6727C23v61Ev();
extern void _ZN7S6727C23v62Ev();
extern void _ZN7S6727C23v63Ev();
extern void _ZN7S6727C23v64Ev();
extern void _ZN7S6727C23v65Ev();
extern void _ZN7S6727C23v66Ev();
extern void _ZN7S6727C12v1Ev();
extern void _ZN7S6727C12v2Ev();
static  VTBL_ENTRY vtc_S6727C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6727C1[0]),
  (VTBL_ENTRY)&_ZN7S6727C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6727C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6727C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6727C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6727C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6727C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6727C1[];
extern  VTBL_ENTRY _ZTV7S6727C1[];
Class_Descriptor cd_S6727C1 = {  "S6727C1", // class name
  bases_S6727C1, 1,
  &(vtc_S6727C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,76), // object size
  NSPAIRA(_ZTI7S6727C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6727C1),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  S4252C3_nt  {
  virtual  ~S4252C3_nt(); // _ZN10S4252C3_ntD1Ev
  virtual void  v13(); // _ZN10S4252C3_nt3v13Ev
  S4252C3_nt(); // tgen
};
//SIG(-1 S4252C3_nt) C1{ vd v1}


 S4252C3_nt ::~S4252C3_nt(){ note_dtor("S4252C3_nt", this);}
void  S4252C3_nt ::v13(){vfunc_called(this, "_ZN10S4252C3_nt3v13Ev");}
S4252C3_nt ::S4252C3_nt(){ note_ctor("S4252C3_nt", this);} // tgen

//skip512 S4252C3_nt

#else // __cplusplus

extern void _ZN10S4252C3_ntC1Ev();
extern void _ZN10S4252C3_ntD1Ev();
Name_Map name_map_S4252C3_nt[] = {
  NSPAIR(_ZN10S4252C3_ntC1Ev),
  NSPAIR(_ZN10S4252C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4252C3_nt[];
extern void _ZN10S4252C3_ntD1Ev();
extern void _ZN10S4252C3_ntD0Ev();
extern void _ZN10S4252C3_nt3v13Ev();
static  VTBL_ENTRY vtc_S4252C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4252C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4252C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4252C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4252C3_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S4252C3_nt[];
VTBL_ENTRY *P__ZTI10S4252C3_nt = _ZTI10S4252C3_nt; 
extern  VTBL_ENTRY _ZTV10S4252C3_nt[];
Class_Descriptor cd_S4252C3_nt = {  "S4252C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4252C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4252C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4252C3_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  S4252C2_nt  : S4252C3_nt {
  void *s4252c2f0;
  virtual void  v14(); // _ZN10S4252C2_nt3v14Ev
  virtual void  v15(); // _ZN10S4252C2_nt3v15Ev
  virtual void  v16(); // _ZN10S4252C2_nt3v16Ev
  virtual void  v17(); // _ZN10S4252C2_nt3v17Ev
  virtual void  v18(); // _ZN10S4252C2_nt3v18Ev
  virtual void  v19(); // _ZN10S4252C2_nt3v19Ev
  virtual void  v20(); // _ZN10S4252C2_nt3v20Ev
  ~S4252C2_nt(); // tgen
  S4252C2_nt(); // tgen
};
//SIG(-1 S4252C2_nt) C1{ BC2{ vd v8} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S4252C2_nt ::v14(){vfunc_called(this, "_ZN10S4252C2_nt3v14Ev");}
void  S4252C2_nt ::v15(){vfunc_called(this, "_ZN10S4252C2_nt3v15Ev");}
void  S4252C2_nt ::v16(){vfunc_called(this, "_ZN10S4252C2_nt3v16Ev");}
void  S4252C2_nt ::v17(){vfunc_called(this, "_ZN10S4252C2_nt3v17Ev");}
void  S4252C2_nt ::v18(){vfunc_called(this, "_ZN10S4252C2_nt3v18Ev");}
void  S4252C2_nt ::v19(){vfunc_called(this, "_ZN10S4252C2_nt3v19Ev");}
void  S4252C2_nt ::v20(){vfunc_called(this, "_ZN10S4252C2_nt3v20Ev");}
S4252C2_nt ::~S4252C2_nt(){ note_dtor("S4252C2_nt", this);} // tgen
S4252C2_nt ::S4252C2_nt(){ note_ctor("S4252C2_nt", this);} // tgen

//skip512 S4252C2_nt

#else // __cplusplus

extern void _ZN10S4252C2_ntC1Ev();
extern void _ZN10S4252C2_ntD1Ev();
Name_Map name_map_S4252C2_nt[] = {
  NSPAIR(_ZN10S4252C2_ntC1Ev),
  NSPAIR(_ZN10S4252C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4252C3_nt;
extern VTBL_ENTRY _ZTI10S4252C3_nt[];
extern  VTBL_ENTRY _ZTV10S4252C3_nt[];
static Base_Class bases_S4252C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4252C3_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 _ZTI10S4252C2_nt[];
extern void _ZN10S4252C2_ntD1Ev();
extern void _ZN10S4252C2_ntD0Ev();
extern void _ZN10S4252C3_nt3v13Ev();
extern void _ZN10S4252C2_nt3v14Ev();
extern void _ZN10S4252C2_nt3v15Ev();
extern void _ZN10S4252C2_nt3v16Ev();
extern void _ZN10S4252C2_nt3v17Ev();
extern void _ZN10S4252C2_nt3v18Ev();
extern void _ZN10S4252C2_nt3v19Ev();
extern void _ZN10S4252C2_nt3v20Ev();
static  VTBL_ENTRY vtc_S4252C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4252C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4252C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4252C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S4252C2_nt[];
VTBL_ENTRY *P__ZTI10S4252C2_nt = _ZTI10S4252C2_nt; 
extern  VTBL_ENTRY _ZTV10S4252C2_nt[];
Class_Descriptor cd_S4252C2_nt = {  "S4252C2_nt", // class name
  bases_S4252C2_nt, 1,
  &(vtc_S4252C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4252C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4252C2_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S4252C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S22028C14_nt;
static Base_Class bases_S4252C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C14_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  S4252C5  {
  void *s4252c5f0;
  ::S22028C13_nt s4252c5f1;
  ::S4252C10_nt s4252c5f2;
  ::S8520C3_nt s4252c5f3;
  int s4252c5f4[2];
  virtual  ~S4252C5(); // _ZN7S4252C5D1Ev
  virtual void  v24(); // _ZN7S4252C53v24Ev
  virtual void  v25(); // _ZN7S4252C53v25Ev
  virtual void  v26(); // _ZN7S4252C53v26Ev
  virtual void  v27(); // _ZN7S4252C53v27Ev
  virtual void  v28(); // _ZN7S4252C53v28Ev
  virtual void  v29(); // _ZN7S4252C53v29Ev
  virtual void  v30(); // _ZN7S4252C53v30Ev
  virtual void  v31(); // _ZN7S4252C53v31Ev
  virtual void  v32(); // _ZN7S4252C53v32Ev
  virtual void  v33(); // _ZN7S4252C53v33Ev
  virtual void  v34(); // _ZN7S4252C53v34Ev
  virtual void  v35(); // _ZN7S4252C53v35Ev
  virtual void  v36(); // _ZN7S4252C53v36Ev
  virtual void  v37(); // _ZN7S4252C53v37Ev
  S4252C5(); // tgen
};
//SIG(-1 S4252C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC6{ BC3} FC7{ m FL[4]} Fi[2]}


 S4252C5 ::~S4252C5(){ note_dtor("S4252C5", this);}
void  S4252C5 ::v24(){vfunc_called(this, "_ZN7S4252C53v24Ev");}
void  S4252C5 ::v25(){vfunc_called(this, "_ZN7S4252C53v25Ev");}
void  S4252C5 ::v26(){vfunc_called(this, "_ZN7S4252C53v26Ev");}
void  S4252C5 ::v27(){vfunc_called(this, "_ZN7S4252C53v27Ev");}
void  S4252C5 ::v28(){vfunc_called(this, "_ZN7S4252C53v28Ev");}
void  S4252C5 ::v29(){vfunc_called(this, "_ZN7S4252C53v29Ev");}
void  S4252C5 ::v30(){vfunc_called(this, "_ZN7S4252C53v30Ev");}
void  S4252C5 ::v31(){vfunc_called(this, "_ZN7S4252C53v31Ev");}
void  S4252C5 ::v32(){vfunc_called(this, "_ZN7S4252C53v32Ev");}
void  S4252C5 ::v33(){vfunc_called(this, "_ZN7S4252C53v33Ev");}
void  S4252C5 ::v34(){vfunc_called(this, "_ZN7S4252C53v34Ev");}
void  S4252C5 ::v35(){vfunc_called(this, "_ZN7S4252C53v35Ev");}
void  S4252C5 ::v36(){vfunc_called(this, "_ZN7S4252C53v36Ev");}
void  S4252C5 ::v37(){vfunc_called(this, "_ZN7S4252C53v37Ev");}
S4252C5 ::S4252C5(){ note_ctor("S4252C5", this);} // tgen

static void Test_S4252C5()
{
  extern Class_Descriptor cd_S4252C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S4252C5, buf);
    S4252C5 *dp, &lv = *(dp=new (buf) S4252C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S4252C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4252C5)");
    check_field_offset(lv, s4252c5f0, ABISELECT(8,4), "S4252C5.s4252c5f0");
    check_field_offset(lv, s4252c5f1, ABISELECT(16,8), "S4252C5.s4252c5f1");
    check_field_offset(lv, s4252c5f2, ABISELECT(32,20), "S4252C5.s4252c5f2");
    check_field_offset(lv, s4252c5f3, ABISELECT(48,32), "S4252C5.s4252c5f3");
    check_field_offset(lv, s4252c5f4, ABISELECT(80,64), "S4252C5.s4252c5f4");
    test_class_info(&lv, &cd_S4252C5);
    dp->~S4252C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4252C5(Test_S4252C5, "S4252C5", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S4252C5C1Ev();
extern void _ZN7S4252C5D1Ev();
Name_Map name_map_S4252C5[] = {
  NSPAIR(_ZN7S4252C5C1Ev),
  NSPAIR(_ZN7S4252C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4252C5[];
extern void _ZN7S4252C5D1Ev();
extern void _ZN7S4252C5D0Ev();
extern void _ZN7S4252C53v24Ev();
extern void _ZN7S4252C53v25Ev();
extern void _ZN7S4252C53v26Ev();
extern void _ZN7S4252C53v27Ev();
extern void _ZN7S4252C53v28Ev();
extern void _ZN7S4252C53v29Ev();
extern void _ZN7S4252C53v30Ev();
extern void _ZN7S4252C53v31Ev();
extern void _ZN7S4252C53v32Ev();
extern void _ZN7S4252C53v33Ev();
extern void _ZN7S4252C53v34Ev();
extern void _ZN7S4252C53v35Ev();
extern void _ZN7S4252C53v36Ev();
extern void _ZN7S4252C53v37Ev();
static  VTBL_ENTRY vtc_S4252C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4252C5[0]),
  (VTBL_ENTRY)&_ZN7S4252C5D1Ev,
  (VTBL_ENTRY)&_ZN7S4252C5D0Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v24Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v25Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v26Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v27Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v28Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v29Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v30Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v31Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v32Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v33Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v34Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v35Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v36Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v37Ev,
};
extern VTBL_ENTRY _ZTI7S4252C5[];
extern  VTBL_ENTRY _ZTV7S4252C5[];
Class_Descriptor cd_S4252C5 = {  "S4252C5", // class name
  0,0,//no base classes
  &(vtc_S4252C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S4252C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4252C5),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4252C4  : S4252C5 {
  int s4252c4f0;
  virtual  ~S4252C4(); // _ZN7S4252C4D1Ev
  virtual void  v21(); // _ZN7S4252C43v21Ev
  virtual void  v22(); // _ZN7S4252C43v22Ev
  virtual void  v23(); // _ZN7S4252C43v23Ev
  S4252C4(); // tgen
};
//SIG(-1 S4252C4) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ BC4} FC8{ m FL[4]} Fi[2]} vd v1 v2 v3 Fi}


 S4252C4 ::~S4252C4(){ note_dtor("S4252C4", this);}
void  S4252C4 ::v21(){vfunc_called(this, "_ZN7S4252C43v21Ev");}
void  S4252C4 ::v22(){vfunc_called(this, "_ZN7S4252C43v22Ev");}
void  S4252C4 ::v23(){vfunc_called(this, "_ZN7S4252C43v23Ev");}
S4252C4 ::S4252C4(){ note_ctor("S4252C4", this);} // tgen

static void Test_S4252C4()
{
  extern Class_Descriptor cd_S4252C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S4252C4, buf);
    S4252C4 *dp, &lv = *(dp=new (buf) S4252C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S4252C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4252C4)");
    check_base_class_offset(lv, (S4252C5*), 0, "S4252C4");
    check_field_offset(lv, s4252c4f0, ABISELECT(88,72), "S4252C4.s4252c4f0");
    test_class_info(&lv, &cd_S4252C4);
    dp->~S4252C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4252C4(Test_S4252C4, "S4252C4", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S4252C4C1Ev();
extern void _ZN7S4252C4D1Ev();
Name_Map name_map_S4252C4[] = {
  NSPAIR(_ZN7S4252C4C1Ev),
  NSPAIR(_ZN7S4252C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4252C5;
extern VTBL_ENTRY _ZTI7S4252C5[];
extern  VTBL_ENTRY _ZTV7S4252C5[];
static Base_Class bases_S4252C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4252C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4252C4[];
extern void _ZN7S4252C4D1Ev();
extern void _ZN7S4252C4D0Ev();
extern void _ZN7S4252C53v24Ev();
extern void _ZN7S4252C53v25Ev();
extern void _ZN7S4252C53v26Ev();
extern void _ZN7S4252C53v27Ev();
extern void _ZN7S4252C53v28Ev();
extern void _ZN7S4252C53v29Ev();
extern void _ZN7S4252C53v30Ev();
extern void _ZN7S4252C53v31Ev();
extern void _ZN7S4252C53v32Ev();
extern void _ZN7S4252C53v33Ev();
extern void _ZN7S4252C53v34Ev();
extern void _ZN7S4252C53v35Ev();
extern void _ZN7S4252C53v36Ev();
extern void _ZN7S4252C53v37Ev();
extern void _ZN7S4252C43v21Ev();
extern void _ZN7S4252C43v22Ev();
extern void _ZN7S4252C43v23Ev();
static  VTBL_ENTRY vtc_S4252C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4252C4[0]),
  (VTBL_ENTRY)&_ZN7S4252C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4252C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v24Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v25Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v26Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v27Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v28Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v29Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v30Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v31Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v32Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v33Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v34Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v35Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v36Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v37Ev,
  (VTBL_ENTRY)&_ZN7S4252C43v21Ev,
  (VTBL_ENTRY)&_ZN7S4252C43v22Ev,
  (VTBL_ENTRY)&_ZN7S4252C43v23Ev,
};
extern VTBL_ENTRY _ZTI7S4252C4[];
extern  VTBL_ENTRY _ZTV7S4252C4[];
Class_Descriptor cd_S4252C4 = {  "S4252C4", // class name
  bases_S4252C4, 1,
  &(vtc_S4252C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S4252C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4252C4),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4252C15  : S4252C5 {
  void *s4252c15f0[2];
  int s4252c15f1[2];
  virtual  ~S4252C15(); // _ZN8S4252C15D1Ev
  virtual void  v38(); // _ZN8S4252C153v38Ev
  virtual void  v39(); // _ZN8S4252C153v39Ev
  virtual void  v40(); // _ZN8S4252C153v40Ev
  virtual void  v41(); // _ZN8S4252C153v41Ev
  virtual void  v42(); // _ZN8S4252C153v42Ev
  virtual void  v43(); // _ZN8S4252C153v43Ev
  virtual void  v44(); // _ZN8S4252C153v44Ev
  S4252C15(); // tgen
};
//SIG(-1 S4252C15) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC7{ BC4} FC8{ m FL[4]} Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 Fp[2] Fi[2]}


 S4252C15 ::~S4252C15(){ note_dtor("S4252C15", this);}
void  S4252C15 ::v38(){vfunc_called(this, "_ZN8S4252C153v38Ev");}
void  S4252C15 ::v39(){vfunc_called(this, "_ZN8S4252C153v39Ev");}
void  S4252C15 ::v40(){vfunc_called(this, "_ZN8S4252C153v40Ev");}
void  S4252C15 ::v41(){vfunc_called(this, "_ZN8S4252C153v41Ev");}
void  S4252C15 ::v42(){vfunc_called(this, "_ZN8S4252C153v42Ev");}
void  S4252C15 ::v43(){vfunc_called(this, "_ZN8S4252C153v43Ev");}
void  S4252C15 ::v44(){vfunc_called(this, "_ZN8S4252C153v44Ev");}
S4252C15 ::S4252C15(){ note_ctor("S4252C15", this);} // tgen

static void Test_S4252C15()
{
  extern Class_Descriptor cd_S4252C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,23)];
    init_test(&cd_S4252C15, buf);
    S4252C15 *dp, &lv = *(dp=new (buf) S4252C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S4252C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4252C15)");
    check_base_class_offset(lv, (S4252C5*), 0, "S4252C15");
    check_field_offset(lv, s4252c15f0, ABISELECT(88,72), "S4252C15.s4252c15f0");
    check_field_offset(lv, s4252c15f1, ABISELECT(104,80), "S4252C15.s4252c15f1");
    test_class_info(&lv, &cd_S4252C15);
    dp->~S4252C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4252C15(Test_S4252C15, "S4252C15", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN8S4252C15C1Ev();
extern void _ZN8S4252C15D1Ev();
Name_Map name_map_S4252C15[] = {
  NSPAIR(_ZN8S4252C15C1Ev),
  NSPAIR(_ZN8S4252C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4252C5;
extern VTBL_ENTRY _ZTI7S4252C5[];
extern  VTBL_ENTRY _ZTV7S4252C5[];
static Base_Class bases_S4252C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4252C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S4252C15[];
extern void _ZN8S4252C15D1Ev();
extern void _ZN8S4252C15D0Ev();
extern void _ZN7S4252C53v24Ev();
extern void _ZN7S4252C53v25Ev();
extern void _ZN7S4252C53v26Ev();
extern void _ZN7S4252C53v27Ev();
extern void _ZN7S4252C53v28Ev();
extern void _ZN7S4252C53v29Ev();
extern void _ZN7S4252C53v30Ev();
extern void _ZN7S4252C53v31Ev();
extern void _ZN7S4252C53v32Ev();
extern void _ZN7S4252C53v33Ev();
extern void _ZN7S4252C53v34Ev();
extern void _ZN7S4252C53v35Ev();
extern void _ZN7S4252C53v36Ev();
extern void _ZN7S4252C53v37Ev();
extern void _ZN8S4252C153v38Ev();
extern void _ZN8S4252C153v39Ev();
extern void _ZN8S4252C153v40Ev();
extern void _ZN8S4252C153v41Ev();
extern void _ZN8S4252C153v42Ev();
extern void _ZN8S4252C153v43Ev();
extern void _ZN8S4252C153v44Ev();
static  VTBL_ENTRY vtc_S4252C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4252C15[0]),
  (VTBL_ENTRY)&_ZN8S4252C15D1Ev,
  (VTBL_ENTRY)&_ZN8S4252C15D0Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v24Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v25Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v26Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v27Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v28Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v29Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v30Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v31Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v32Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v33Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v34Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v35Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v36Ev,
  (VTBL_ENTRY)&_ZN7S4252C53v37Ev,
  (VTBL_ENTRY)&_ZN8S4252C153v38Ev,
  (VTBL_ENTRY)&_ZN8S4252C153v39Ev,
  (VTBL_ENTRY)&_ZN8S4252C153v40Ev,
  (VTBL_ENTRY)&_ZN8S4252C153v41Ev,
  (VTBL_ENTRY)&_ZN8S4252C153v42Ev,
  (VTBL_ENTRY)&_ZN8S4252C153v43Ev,
  (VTBL_ENTRY)&_ZN8S4252C153v44Ev,
};
extern VTBL_ENTRY _ZTI8S4252C15[];
extern  VTBL_ENTRY _ZTV8S4252C15[];
Class_Descriptor cd_S4252C15 = {  "S4252C15", // class name
  bases_S4252C15, 1,
  &(vtc_S4252C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI8S4252C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4252C15),25, //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  S4252C1  : S4252C2_nt {
  ::S4252C4 s4252c1f0;
  ::S4252C15 s4252c1f1;
  virtual  ~S4252C1(); // _ZN7S4252C1D1Ev
  virtual void  v1(); // _ZN7S4252C12v1Ev
  virtual void  v2(); // _ZN7S4252C12v2Ev
  virtual void  v3(); // _ZN7S4252C12v3Ev
  virtual void  v4(); // _ZN7S4252C12v4Ev
  virtual void  v5(); // _ZN7S4252C12v5Ev
  virtual void  v6(); // _ZN7S4252C12v6Ev
  virtual void  v7(); // _ZN7S4252C12v7Ev
  virtual void  v8(); // _ZN7S4252C12v8Ev
  virtual void  v9(); // _ZN7S4252C12v9Ev
  virtual void  v10(); // _ZN7S4252C13v10Ev
  virtual void  v11(); // _ZN7S4252C13v11Ev
  virtual void  v12(); // _ZN7S4252C13v12Ev
  S4252C1(); // tgen
};
//SIG(1 S4252C1) C1{ BC2{ BC3{ vd v13} v14 v15 v16 v17 v18 v19 v20 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC4{ BC5{ vd v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fp FC6{ BC7{ m Fp Fi FC8{ m} FC9{ m}}} FC10{ BC7} FC11{ m FL[4]} Fi[2]} vd v21 v22 v23 Fi} FC12{ BC5 vd v38 v39 v40 v41 v42 v43 v44 Fp[2] Fi[2]}}


 S4252C1 ::~S4252C1(){ note_dtor("S4252C1", this);}
void  S4252C1 ::v1(){vfunc_called(this, "_ZN7S4252C12v1Ev");}
void  S4252C1 ::v2(){vfunc_called(this, "_ZN7S4252C12v2Ev");}
void  S4252C1 ::v3(){vfunc_called(this, "_ZN7S4252C12v3Ev");}
void  S4252C1 ::v4(){vfunc_called(this, "_ZN7S4252C12v4Ev");}
void  S4252C1 ::v5(){vfunc_called(this, "_ZN7S4252C12v5Ev");}
void  S4252C1 ::v6(){vfunc_called(this, "_ZN7S4252C12v6Ev");}
void  S4252C1 ::v7(){vfunc_called(this, "_ZN7S4252C12v7Ev");}
void  S4252C1 ::v8(){vfunc_called(this, "_ZN7S4252C12v8Ev");}
void  S4252C1 ::v9(){vfunc_called(this, "_ZN7S4252C12v9Ev");}
void  S4252C1 ::v10(){vfunc_called(this, "_ZN7S4252C13v10Ev");}
void  S4252C1 ::v11(){vfunc_called(this, "_ZN7S4252C13v11Ev");}
void  S4252C1 ::v12(){vfunc_called(this, "_ZN7S4252C13v12Ev");}
S4252C1 ::S4252C1(){ note_ctor("S4252C1", this);} // tgen

static void Test_S4252C1()
{
  extern Class_Descriptor cd_S4252C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,44)];
    init_test(&cd_S4252C1, buf);
    S4252C1 *dp, &lv = *(dp=new (buf) S4252C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,172), "sizeof(S4252C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4252C1)");
    check_base_class_offset(lv, (S4252C3_nt*)(S4252C2_nt*), 0, "S4252C1");
    check_base_class_offset(lv, (S4252C2_nt*), 0, "S4252C1");
    check_field_offset(lv, s4252c1f0, ABISELECT(16,8), "S4252C1.s4252c1f0");
    check_field_offset(lv, s4252c1f1, ABISELECT(112,84), "S4252C1.s4252c1f1");
    test_class_info(&lv, &cd_S4252C1);
    dp->~S4252C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4252C1(Test_S4252C1, "S4252C1", ABISELECT(224,172));

#else // __cplusplus

extern void _ZN7S4252C1C1Ev();
extern void _ZN7S4252C1D1Ev();
Name_Map name_map_S4252C1[] = {
  NSPAIR(_ZN7S4252C1C1Ev),
  NSPAIR(_ZN7S4252C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4252C3_nt;
extern VTBL_ENTRY _ZTI10S4252C3_nt[];
extern  VTBL_ENTRY _ZTV10S4252C3_nt[];
extern Class_Descriptor cd_S4252C2_nt;
extern VTBL_ENTRY _ZTI10S4252C2_nt[];
extern  VTBL_ENTRY _ZTV10S4252C2_nt[];
static Base_Class bases_S4252C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4252C3_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_S4252C2_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 _ZTI7S4252C1[];
extern void _ZN7S4252C1D1Ev();
extern void _ZN7S4252C1D0Ev();
extern void _ZN10S4252C3_nt3v13Ev();
extern void _ZN10S4252C2_nt3v14Ev();
extern void _ZN10S4252C2_nt3v15Ev();
extern void _ZN10S4252C2_nt3v16Ev();
extern void _ZN10S4252C2_nt3v17Ev();
extern void _ZN10S4252C2_nt3v18Ev();
extern void _ZN10S4252C2_nt3v19Ev();
extern void _ZN10S4252C2_nt3v20Ev();
extern void _ZN7S4252C12v1Ev();
extern void _ZN7S4252C12v2Ev();
extern void _ZN7S4252C12v3Ev();
extern void _ZN7S4252C12v4Ev();
extern void _ZN7S4252C12v5Ev();
extern void _ZN7S4252C12v6Ev();
extern void _ZN7S4252C12v7Ev();
extern void _ZN7S4252C12v8Ev();
extern void _ZN7S4252C12v9Ev();
extern void _ZN7S4252C13v10Ev();
extern void _ZN7S4252C13v11Ev();
extern void _ZN7S4252C13v12Ev();
static  VTBL_ENTRY vtc_S4252C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4252C1[0]),
  (VTBL_ENTRY)&_ZN7S4252C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4252C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4252C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4252C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4252C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4252C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4252C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4252C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S4252C1[];
extern  VTBL_ENTRY _ZTV7S4252C1[];
Class_Descriptor cd_S4252C1 = {  "S4252C1", // class name
  bases_S4252C1, 2,
  &(vtc_S4252C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,172), // object size
  NSPAIRA(_ZTI7S4252C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4252C1),24, //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  S3715C3_nt  {
  int s3715c3f0;
  void  mf3715c3(); // _ZN10S3715C3_nt8mf3715c3Ev
  virtual  ~S3715C3_nt(); // _ZN10S3715C3_ntD1Ev
  S3715C3_nt(); // tgen
};
//SIG(-1 S3715C3_nt) C1{ vd m Fi}


void  S3715C3_nt ::mf3715c3(){}
 S3715C3_nt ::~S3715C3_nt(){ note_dtor("S3715C3_nt", this);}
S3715C3_nt ::S3715C3_nt(){ note_ctor("S3715C3_nt", this);} // tgen

//skip512 S3715C3_nt

#else // __cplusplus

extern void _ZN10S3715C3_ntC1Ev();
extern void _ZN10S3715C3_ntD1Ev();
Name_Map name_map_S3715C3_nt[] = {
  NSPAIR(_ZN10S3715C3_ntC1Ev),
  NSPAIR(_ZN10S3715C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern void _ZN10S3715C3_ntD1Ev();
extern void _ZN10S3715C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3715C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3715C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3715C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3715C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
VTBL_ENTRY *P__ZTI10S3715C3_nt = _ZTI10S3715C3_nt; 
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
Class_Descriptor cd_S3715C3_nt = {  "S3715C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3715C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3715C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3715C3_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  S3715C2  : S3715C3_nt {
  virtual  ~S3715C2(); // _ZN7S3715C2D1Ev
  virtual void  v21(); // _ZN7S3715C23v21Ev
  virtual void  v22(); // _ZN7S3715C23v22Ev
  virtual void  v23(); // _ZN7S3715C23v23Ev
  virtual void  v24(); // _ZN7S3715C23v24Ev
  virtual void  v25(); // _ZN7S3715C23v25Ev
  virtual void  v26(); // _ZN7S3715C23v26Ev
  virtual void  v27(); // _ZN7S3715C23v27Ev
  virtual void  v28(); // _ZN7S3715C23v28Ev
  virtual void  v29(); // _ZN7S3715C23v29Ev
  virtual void  v30(); // _ZN7S3715C23v30Ev
  virtual void  v31(); // _ZN7S3715C23v31Ev
  virtual void  v32(); // _ZN7S3715C23v32Ev
  virtual void  v33(); // _ZN7S3715C23v33Ev
  S3715C2(); // tgen
};
//SIG(-1 S3715C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S3715C2 ::~S3715C2(){ note_dtor("S3715C2", this);}
void  S3715C2 ::v21(){vfunc_called(this, "_ZN7S3715C23v21Ev");}
void  S3715C2 ::v22(){vfunc_called(this, "_ZN7S3715C23v22Ev");}
void  S3715C2 ::v23(){vfunc_called(this, "_ZN7S3715C23v23Ev");}
void  S3715C2 ::v24(){vfunc_called(this, "_ZN7S3715C23v24Ev");}
void  S3715C2 ::v25(){vfunc_called(this, "_ZN7S3715C23v25Ev");}
void  S3715C2 ::v26(){vfunc_called(this, "_ZN7S3715C23v26Ev");}
void  S3715C2 ::v27(){vfunc_called(this, "_ZN7S3715C23v27Ev");}
void  S3715C2 ::v28(){vfunc_called(this, "_ZN7S3715C23v28Ev");}
void  S3715C2 ::v29(){vfunc_called(this, "_ZN7S3715C23v29Ev");}
void  S3715C2 ::v30(){vfunc_called(this, "_ZN7S3715C23v30Ev");}
void  S3715C2 ::v31(){vfunc_called(this, "_ZN7S3715C23v31Ev");}
void  S3715C2 ::v32(){vfunc_called(this, "_ZN7S3715C23v32Ev");}
void  S3715C2 ::v33(){vfunc_called(this, "_ZN7S3715C23v33Ev");}
S3715C2 ::S3715C2(){ note_ctor("S3715C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3715C2C1Ev();
extern void _ZN7S3715C2D1Ev();
Name_Map name_map_S3715C2[] = {
  NSPAIR(_ZN7S3715C2C1Ev),
  NSPAIR(_ZN7S3715C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
static Base_Class bases_S3715C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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 _ZTI7S3715C2[];
extern void _ZN7S3715C2D1Ev();
extern void _ZN7S3715C2D0Ev();
extern void _ZN7S3715C23v21Ev();
extern void _ZN7S3715C23v22Ev();
extern void _ZN7S3715C23v23Ev();
extern void _ZN7S3715C23v24Ev();
extern void _ZN7S3715C23v25Ev();
extern void _ZN7S3715C23v26Ev();
extern void _ZN7S3715C23v27Ev();
extern void _ZN7S3715C23v28Ev();
extern void _ZN7S3715C23v29Ev();
extern void _ZN7S3715C23v30Ev();
extern void _ZN7S3715C23v31Ev();
extern void _ZN7S3715C23v32Ev();
extern void _ZN7S3715C23v33Ev();
static  VTBL_ENTRY vtc_S3715C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3715C2[0]),
  (VTBL_ENTRY)&_ZN7S3715C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3715C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3715C2[];
extern  VTBL_ENTRY _ZTV7S3715C2[];
Class_Descriptor cd_S3715C2 = {  "S3715C2", // class name
  bases_S3715C2, 1,
  &(vtc_S3715C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3715C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3715C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3715C4  {
  virtual  ~S3715C4(); // _ZN7S3715C4D1Ev
  virtual void  v34(); // _ZN7S3715C43v34Ev
  virtual void  v35(); // _ZN7S3715C43v35Ev
  virtual void  v36(); // _ZN7S3715C43v36Ev
  virtual void  v37(); // _ZN7S3715C43v37Ev
  virtual void  v38(); // _ZN7S3715C43v38Ev
  virtual void  v39(); // _ZN7S3715C43v39Ev
  virtual void  v40(); // _ZN7S3715C43v40Ev
  S3715C4(); // tgen
};
//SIG(-1 S3715C4) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S3715C4 ::~S3715C4(){ note_dtor("S3715C4", this);}
void  S3715C4 ::v34(){vfunc_called(this, "_ZN7S3715C43v34Ev");}
void  S3715C4 ::v35(){vfunc_called(this, "_ZN7S3715C43v35Ev");}
void  S3715C4 ::v36(){vfunc_called(this, "_ZN7S3715C43v36Ev");}
void  S3715C4 ::v37(){vfunc_called(this, "_ZN7S3715C43v37Ev");}
void  S3715C4 ::v38(){vfunc_called(this, "_ZN7S3715C43v38Ev");}
void  S3715C4 ::v39(){vfunc_called(this, "_ZN7S3715C43v39Ev");}
void  S3715C4 ::v40(){vfunc_called(this, "_ZN7S3715C43v40Ev");}
S3715C4 ::S3715C4(){ note_ctor("S3715C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3715C4C1Ev();
extern void _ZN7S3715C4D1Ev();
Name_Map name_map_S3715C4[] = {
  NSPAIR(_ZN7S3715C4C1Ev),
  NSPAIR(_ZN7S3715C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3715C4[];
extern void _ZN7S3715C4D1Ev();
extern void _ZN7S3715C4D0Ev();
extern void _ZN7S3715C43v34Ev();
extern void _ZN7S3715C43v35Ev();
extern void _ZN7S3715C43v36Ev();
extern void _ZN7S3715C43v37Ev();
extern void _ZN7S3715C43v38Ev();
extern void _ZN7S3715C43v39Ev();
extern void _ZN7S3715C43v40Ev();
static  VTBL_ENTRY vtc_S3715C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3715C4[0]),
  (VTBL_ENTRY)&_ZN7S3715C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3715C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v34Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v35Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v36Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v37Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v38Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v39Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v40Ev,
};
extern VTBL_ENTRY _ZTI7S3715C4[];
extern  VTBL_ENTRY _ZTV7S3715C4[];
Class_Descriptor cd_S3715C4 = {  "S3715C4", // class name
  0,0,//no base classes
  &(vtc_S3715C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3715C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3715C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3715C6  {
  char s3715c6f0[16];
  int s3715c6f1;
  char s3715c6f2[40];
};
//SIG(-1 S3715C6) C1{ Fc[16] Fi Fc[40]}



static void Test_S3715C6()
{
  {
    init_simple_test("S3715C6");
    S3715C6 lv;
    check2(sizeof(lv), 60, "sizeof(S3715C6)");
    check2(__alignof__(lv), 4, "__alignof__(S3715C6)");
    check_field_offset(lv, s3715c6f0, 0, "S3715C6.s3715c6f0");
    check_field_offset(lv, s3715c6f1, 16, "S3715C6.s3715c6f1");
    check_field_offset(lv, s3715c6f2, 20, "S3715C6.s3715c6f2");
  }
}
static Arrange_To_Call_Me vS3715C6(Test_S3715C6, "S3715C6", 60);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3715C8  {
  char s3715c8f0[384];
  int s3715c8f1;
  char s3715c8f2[64];
};
//SIG(-1 S3715C8) C1{ Fc[384] Fi Fc[64]}



static void Test_S3715C8()
{
  {
    init_simple_test("S3715C8");
    S3715C8 lv;
    check2(sizeof(lv), 452, "sizeof(S3715C8)");
    check2(__alignof__(lv), 4, "__alignof__(S3715C8)");
    check_field_offset(lv, s3715c8f0, 0, "S3715C8.s3715c8f0");
    check_field_offset(lv, s3715c8f1, 384, "S3715C8.s3715c8f1");
    check_field_offset(lv, s3715c8f2, 388, "S3715C8.s3715c8f2");
  }
}
static Arrange_To_Call_Me vS3715C8(Test_S3715C8, "S3715C8", 452);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3715C9_nt  {
  void *s3715c9f0;
  void  mf3715c9(); // _ZN10S3715C9_nt8mf3715c9Ev
};
//SIG(-1 S3715C9_nt) C1{ m Fp}


void  S3715C9_nt ::mf3715c9(){}

//skip512 S3715C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3715C1  : S3715C2 , S3715C4 {
  ::S22028C73 s3715c1f0;
  ::S3715C6 s3715c1f1;
  ::S22028C68_nt s3715c1f2;
  ::S3715C8 s3715c1f3;
  ::S3715C9_nt s3715c1f4;
  ::S3715C9_nt s3715c1f5;
  ::S8517C3_nt s3715c1f6;
  char s3715c1f7;
  ::S22028C63 s3715c1f8;
  ::S22028C63 s3715c1f9;
  virtual  ~S3715C1(); // _ZN7S3715C1D1Ev
  virtual void  v1(); // _ZN7S3715C12v1Ev
  virtual void  v2(); // _ZN7S3715C12v2Ev
  virtual void  v3(); // _ZN7S3715C12v3Ev
  virtual void  v4(); // _ZN7S3715C12v4Ev
  virtual void  v5(); // _ZN7S3715C12v5Ev
  virtual void  v6(); // _ZN7S3715C12v6Ev
  virtual void  v7(); // _ZN7S3715C12v7Ev
  virtual void  v8(); // _ZN7S3715C12v8Ev
  virtual void  v9(); // _ZN7S3715C12v9Ev
  virtual void  v10(); // _ZN7S3715C13v10Ev
  virtual void  v11(); // _ZN7S3715C13v11Ev
  virtual void  v12(); // _ZN7S3715C13v12Ev
  virtual void  v13(); // _ZN7S3715C13v13Ev
  virtual void  v14(); // _ZN7S3715C13v14Ev
  virtual void  v15(); // _ZN7S3715C13v15Ev
  virtual void  v16(); // _ZN7S3715C13v16Ev
  virtual void  v17(); // _ZN7S3715C13v17Ev
  virtual void  v18(); // _ZN7S3715C13v18Ev
  virtual void  v19(); // _ZN7S3715C13v19Ev
  virtual void  v20(); // _ZN7S3715C13v20Ev
  S3715C1(); // tgen
};
//SIG(1 S3715C1) C1{ BC2{ BC3{ vd m Fi} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33} BC4{ vd v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC5{ m Fp[2]} FC6{ Fc[16] Fi Fc[40]} FC7{ m Fp} FC8{ Fc[384] Fi Fc[64]} FC9{ m Fp} FC9 FC10{ m FC11{ FL[4]}} Fc FC12{ m Fp[2]} FC12}


 S3715C1 ::~S3715C1(){ note_dtor("S3715C1", this);}
void  S3715C1 ::v1(){vfunc_called(this, "_ZN7S3715C12v1Ev");}
void  S3715C1 ::v2(){vfunc_called(this, "_ZN7S3715C12v2Ev");}
void  S3715C1 ::v3(){vfunc_called(this, "_ZN7S3715C12v3Ev");}
void  S3715C1 ::v4(){vfunc_called(this, "_ZN7S3715C12v4Ev");}
void  S3715C1 ::v5(){vfunc_called(this, "_ZN7S3715C12v5Ev");}
void  S3715C1 ::v6(){vfunc_called(this, "_ZN7S3715C12v6Ev");}
void  S3715C1 ::v7(){vfunc_called(this, "_ZN7S3715C12v7Ev");}
void  S3715C1 ::v8(){vfunc_called(this, "_ZN7S3715C12v8Ev");}
void  S3715C1 ::v9(){vfunc_called(this, "_ZN7S3715C12v9Ev");}
void  S3715C1 ::v10(){vfunc_called(this, "_ZN7S3715C13v10Ev");}
void  S3715C1 ::v11(){vfunc_called(this, "_ZN7S3715C13v11Ev");}
void  S3715C1 ::v12(){vfunc_called(this, "_ZN7S3715C13v12Ev");}
void  S3715C1 ::v13(){vfunc_called(this, "_ZN7S3715C13v13Ev");}
void  S3715C1 ::v14(){vfunc_called(this, "_ZN7S3715C13v14Ev");}
void  S3715C1 ::v15(){vfunc_called(this, "_ZN7S3715C13v15Ev");}
void  S3715C1 ::v16(){vfunc_called(this, "_ZN7S3715C13v16Ev");}
void  S3715C1 ::v17(){vfunc_called(this, "_ZN7S3715C13v17Ev");}
void  S3715C1 ::v18(){vfunc_called(this, "_ZN7S3715C13v18Ev");}
void  S3715C1 ::v19(){vfunc_called(this, "_ZN7S3715C13v19Ev");}
void  S3715C1 ::v20(){vfunc_called(this, "_ZN7S3715C13v20Ev");}
S3715C1 ::S3715C1(){ note_ctor("S3715C1", this);} // tgen

static void Test_S3715C1()
{
  extern Class_Descriptor cd_S3715C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,150)];
    init_test(&cd_S3715C1, buf);
    S3715C1 *dp, &lv = *(dp=new (buf) S3715C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,596), "sizeof(S3715C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3715C1)");
    check_base_class_offset(lv, (S3715C3_nt*)(S3715C2*), 0, "S3715C1");
    check_base_class_offset(lv, (S3715C2*), 0, "S3715C1");
    check_base_class_offset(lv, (S3715C4*), ABISELECT(16,8), "S3715C1");
    check_field_offset(lv, s3715c1f0, ABISELECT(24,12), "S3715C1.s3715c1f0");
    check_field_offset(lv, s3715c1f1, ABISELECT(40,20), "S3715C1.s3715c1f1");
    check_field_offset(lv, s3715c1f2, ABISELECT(104,80), "S3715C1.s3715c1f2");
    check_field_offset(lv, s3715c1f3, ABISELECT(112,84), "S3715C1.s3715c1f3");
    check_field_offset(lv, s3715c1f4, ABISELECT(568,536), "S3715C1.s3715c1f4");
    check_field_offset(lv, s3715c1f5, ABISELECT(576,540), "S3715C1.s3715c1f5");
    check_field_offset(lv, s3715c1f6, ABISELECT(584,544), "S3715C1.s3715c1f6");
    check_field_offset(lv, s3715c1f7, ABISELECT(616,576), "S3715C1.s3715c1f7");
    check_field_offset(lv, s3715c1f8, ABISELECT(624,580), "S3715C1.s3715c1f8");
    check_field_offset(lv, s3715c1f9, ABISELECT(640,588), "S3715C1.s3715c1f9");
    test_class_info(&lv, &cd_S3715C1);
    dp->~S3715C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3715C1(Test_S3715C1, "S3715C1", ABISELECT(656,596));

#else // __cplusplus

extern void _ZN7S3715C1C1Ev();
extern void _ZN7S3715C1D1Ev();
Name_Map name_map_S3715C1[] = {
  NSPAIR(_ZN7S3715C1C1Ev),
  NSPAIR(_ZN7S3715C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S3715C2;
extern VTBL_ENTRY _ZTI7S3715C2[];
extern  VTBL_ENTRY _ZTV7S3715C2[];
extern Class_Descriptor cd_S3715C4;
extern VTBL_ENTRY _ZTI7S3715C4[];
extern  VTBL_ENTRY _ZTV7S3715C4[];
static Base_Class bases_S3715C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S3715C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3715C4,    ABISELECT(16,8), //bcp->offset
    37, //bcp->virtual_function_table_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 _ZTI7S3715C1[];
extern void _ZN7S3715C1D1Ev();
extern void _ZN7S3715C1D0Ev();
extern void _ZN7S3715C23v21Ev();
extern void _ZN7S3715C23v22Ev();
extern void _ZN7S3715C23v23Ev();
extern void _ZN7S3715C23v24Ev();
extern void _ZN7S3715C23v25Ev();
extern void _ZN7S3715C23v26Ev();
extern void _ZN7S3715C23v27Ev();
extern void _ZN7S3715C23v28Ev();
extern void _ZN7S3715C23v29Ev();
extern void _ZN7S3715C23v30Ev();
extern void _ZN7S3715C23v31Ev();
extern void _ZN7S3715C23v32Ev();
extern void _ZN7S3715C23v33Ev();
extern void _ZN7S3715C12v1Ev();
extern void _ZN7S3715C12v2Ev();
extern void _ZN7S3715C12v3Ev();
extern void _ZN7S3715C12v4Ev();
extern void _ZN7S3715C12v5Ev();
extern void _ZN7S3715C12v6Ev();
extern void _ZN7S3715C12v7Ev();
extern void _ZN7S3715C12v8Ev();
extern void _ZN7S3715C12v9Ev();
extern void _ZN7S3715C13v10Ev();
extern void _ZN7S3715C13v11Ev();
extern void _ZN7S3715C13v12Ev();
extern void _ZN7S3715C13v13Ev();
extern void _ZN7S3715C13v14Ev();
extern void _ZN7S3715C13v15Ev();
extern void _ZN7S3715C13v16Ev();
extern void _ZN7S3715C13v17Ev();
extern void _ZN7S3715C13v18Ev();
extern void _ZN7S3715C13v19Ev();
extern void _ZN7S3715C13v20Ev();
extern void ABISELECT(_ZThn16_N7S3715C1D1Ev,_ZThn8_N7S3715C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3715C1D0Ev,_ZThn8_N7S3715C1D0Ev)();
extern void _ZN7S3715C43v34Ev();
extern void _ZN7S3715C43v35Ev();
extern void _ZN7S3715C43v36Ev();
extern void _ZN7S3715C43v37Ev();
extern void _ZN7S3715C43v38Ev();
extern void _ZN7S3715C43v39Ev();
extern void _ZN7S3715C43v40Ev();
static  VTBL_ENTRY vtc_S3715C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3715C1[0]),
  (VTBL_ENTRY)&_ZN7S3715C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3715C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3715C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3715C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3715C13v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3715C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3715C1D1Ev,_ZThn8_N7S3715C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3715C1D0Ev,_ZThn8_N7S3715C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3715C43v34Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v35Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v36Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v37Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v38Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v39Ev,
  (VTBL_ENTRY)&_ZN7S3715C43v40Ev,
};
extern VTBL_ENTRY _ZTI7S3715C1[];
extern  VTBL_ENTRY _ZTV7S3715C1[];
Class_Descriptor cd_S3715C1 = {  "S3715C1", // class name
  bases_S3715C1, 3,
  &(vtc_S3715C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,596), // object size
  NSPAIRA(_ZTI7S3715C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3715C1),48, //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  S3714C2  : S3715C3_nt {
  virtual  ~S3714C2(); // _ZN7S3714C2D1Ev
  virtual void  v21(); // _ZN7S3714C23v21Ev
  virtual void  v22(); // _ZN7S3714C23v22Ev
  virtual void  v23(); // _ZN7S3714C23v23Ev
  virtual void  v24(); // _ZN7S3714C23v24Ev
  virtual void  v25(); // _ZN7S3714C23v25Ev
  virtual void  v26(); // _ZN7S3714C23v26Ev
  virtual void  v27(); // _ZN7S3714C23v27Ev
  virtual void  v28(); // _ZN7S3714C23v28Ev
  virtual void  v29(); // _ZN7S3714C23v29Ev
  virtual void  v30(); // _ZN7S3714C23v30Ev
  virtual void  v31(); // _ZN7S3714C23v31Ev
  virtual void  v32(); // _ZN7S3714C23v32Ev
  virtual void  v33(); // _ZN7S3714C23v33Ev
  S3714C2(); // tgen
};
//SIG(-1 S3714C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S3714C2 ::~S3714C2(){ note_dtor("S3714C2", this);}
void  S3714C2 ::v21(){vfunc_called(this, "_ZN7S3714C23v21Ev");}
void  S3714C2 ::v22(){vfunc_called(this, "_ZN7S3714C23v22Ev");}
void  S3714C2 ::v23(){vfunc_called(this, "_ZN7S3714C23v23Ev");}
void  S3714C2 ::v24(){vfunc_called(this, "_ZN7S3714C23v24Ev");}
void  S3714C2 ::v25(){vfunc_called(this, "_ZN7S3714C23v25Ev");}
void  S3714C2 ::v26(){vfunc_called(this, "_ZN7S3714C23v26Ev");}
void  S3714C2 ::v27(){vfunc_called(this, "_ZN7S3714C23v27Ev");}
void  S3714C2 ::v28(){vfunc_called(this, "_ZN7S3714C23v28Ev");}
void  S3714C2 ::v29(){vfunc_called(this, "_ZN7S3714C23v29Ev");}
void  S3714C2 ::v30(){vfunc_called(this, "_ZN7S3714C23v30Ev");}
void  S3714C2 ::v31(){vfunc_called(this, "_ZN7S3714C23v31Ev");}
void  S3714C2 ::v32(){vfunc_called(this, "_ZN7S3714C23v32Ev");}
void  S3714C2 ::v33(){vfunc_called(this, "_ZN7S3714C23v33Ev");}
S3714C2 ::S3714C2(){ note_ctor("S3714C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3714C2C1Ev();
extern void _ZN7S3714C2D1Ev();
Name_Map name_map_S3714C2[] = {
  NSPAIR(_ZN7S3714C2C1Ev),
  NSPAIR(_ZN7S3714C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
static Base_Class bases_S3714C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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 _ZTI7S3714C2[];
extern void _ZN7S3714C2D1Ev();
extern void _ZN7S3714C2D0Ev();
extern void _ZN7S3714C23v21Ev();
extern void _ZN7S3714C23v22Ev();
extern void _ZN7S3714C23v23Ev();
extern void _ZN7S3714C23v24Ev();
extern void _ZN7S3714C23v25Ev();
extern void _ZN7S3714C23v26Ev();
extern void _ZN7S3714C23v27Ev();
extern void _ZN7S3714C23v28Ev();
extern void _ZN7S3714C23v29Ev();
extern void _ZN7S3714C23v30Ev();
extern void _ZN7S3714C23v31Ev();
extern void _ZN7S3714C23v32Ev();
extern void _ZN7S3714C23v33Ev();
static  VTBL_ENTRY vtc_S3714C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3714C2[0]),
  (VTBL_ENTRY)&_ZN7S3714C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3714C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3714C2[];
extern  VTBL_ENTRY _ZTV7S3714C2[];
Class_Descriptor cd_S3714C2 = {  "S3714C2", // class name
  bases_S3714C2, 1,
  &(vtc_S3714C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3714C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3714C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3714C4  {
  virtual  ~S3714C4(); // _ZN7S3714C4D1Ev
  virtual void  v34(); // _ZN7S3714C43v34Ev
  virtual void  v35(); // _ZN7S3714C43v35Ev
  virtual void  v36(); // _ZN7S3714C43v36Ev
  virtual void  v37(); // _ZN7S3714C43v37Ev
  virtual void  v38(); // _ZN7S3714C43v38Ev
  virtual void  v39(); // _ZN7S3714C43v39Ev
  virtual void  v40(); // _ZN7S3714C43v40Ev
  S3714C4(); // tgen
};
//SIG(-1 S3714C4) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S3714C4 ::~S3714C4(){ note_dtor("S3714C4", this);}
void  S3714C4 ::v34(){vfunc_called(this, "_ZN7S3714C43v34Ev");}
void  S3714C4 ::v35(){vfunc_called(this, "_ZN7S3714C43v35Ev");}
void  S3714C4 ::v36(){vfunc_called(this, "_ZN7S3714C43v36Ev");}
void  S3714C4 ::v37(){vfunc_called(this, "_ZN7S3714C43v37Ev");}
void  S3714C4 ::v38(){vfunc_called(this, "_ZN7S3714C43v38Ev");}
void  S3714C4 ::v39(){vfunc_called(this, "_ZN7S3714C43v39Ev");}
void  S3714C4 ::v40(){vfunc_called(this, "_ZN7S3714C43v40Ev");}
S3714C4 ::S3714C4(){ note_ctor("S3714C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3714C4C1Ev();
extern void _ZN7S3714C4D1Ev();
Name_Map name_map_S3714C4[] = {
  NSPAIR(_ZN7S3714C4C1Ev),
  NSPAIR(_ZN7S3714C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3714C4[];
extern void _ZN7S3714C4D1Ev();
extern void _ZN7S3714C4D0Ev();
extern void _ZN7S3714C43v34Ev();
extern void _ZN7S3714C43v35Ev();
extern void _ZN7S3714C43v36Ev();
extern void _ZN7S3714C43v37Ev();
extern void _ZN7S3714C43v38Ev();
extern void _ZN7S3714C43v39Ev();
extern void _ZN7S3714C43v40Ev();
static  VTBL_ENTRY vtc_S3714C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3714C4[0]),
  (VTBL_ENTRY)&_ZN7S3714C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3714C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v34Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v35Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v36Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v37Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v38Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v39Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v40Ev,
};
extern VTBL_ENTRY _ZTI7S3714C4[];
extern  VTBL_ENTRY _ZTV7S3714C4[];
Class_Descriptor cd_S3714C4 = {  "S3714C4", // class name
  0,0,//no base classes
  &(vtc_S3714C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3714C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3714C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3714C10  {
  void *s3714c10f0;
  void  mf3714c10(); // _ZN8S3714C109mf3714c10Ev
};
//SIG(-1 S3714C10) C1{ m Fp}


void  S3714C10 ::mf3714c10(){}

static void Test_S3714C10()
{
  {
    init_simple_test("S3714C10");
    S3714C10 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3714C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3714C10)");
    check_field_offset(lv, s3714c10f0, 0, "S3714C10.s3714c10f0");
  }
}
static Arrange_To_Call_Me vS3714C10(Test_S3714C10, "S3714C10", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3714C1  : S3714C2 , S3714C4 {
  ::S22028C73 s3714c1f0;
  ::S3715C6 s3714c1f1;
  ::S22028C68_nt s3714c1f2;
  ::S3715C8 s3714c1f3;
  ::S3715C9_nt s3714c1f4;
  ::S3714C10 s3714c1f5;
  ::S8516C3_nt s3714c1f6;
  char s3714c1f7;
  ::S22028C63 s3714c1f8;
  ::S22028C63 s3714c1f9;
  virtual  ~S3714C1(); // _ZN7S3714C1D1Ev
  virtual void  v1(); // _ZN7S3714C12v1Ev
  virtual void  v2(); // _ZN7S3714C12v2Ev
  virtual void  v3(); // _ZN7S3714C12v3Ev
  virtual void  v4(); // _ZN7S3714C12v4Ev
  virtual void  v5(); // _ZN7S3714C12v5Ev
  virtual void  v6(); // _ZN7S3714C12v6Ev
  virtual void  v7(); // _ZN7S3714C12v7Ev
  virtual void  v8(); // _ZN7S3714C12v8Ev
  virtual void  v9(); // _ZN7S3714C12v9Ev
  virtual void  v10(); // _ZN7S3714C13v10Ev
  virtual void  v11(); // _ZN7S3714C13v11Ev
  virtual void  v12(); // _ZN7S3714C13v12Ev
  virtual void  v13(); // _ZN7S3714C13v13Ev
  virtual void  v14(); // _ZN7S3714C13v14Ev
  virtual void  v15(); // _ZN7S3714C13v15Ev
  virtual void  v16(); // _ZN7S3714C13v16Ev
  virtual void  v17(); // _ZN7S3714C13v17Ev
  virtual void  v18(); // _ZN7S3714C13v18Ev
  virtual void  v19(); // _ZN7S3714C13v19Ev
  virtual void  v20(); // _ZN7S3714C13v20Ev
  S3714C1(); // tgen
};
//SIG(1 S3714C1) C1{ BC2{ BC3{ vd m Fi} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33} BC4{ vd v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC5{ m Fp[2]} FC6{ Fc[16] Fi Fc[40]} FC7{ m Fp} FC8{ Fc[384] Fi Fc[64]} FC9{ m Fp} FC10{ m Fp} FC11{ m FC12{ Fl[4]}} Fc FC13{ m Fp[2]} FC13}


 S3714C1 ::~S3714C1(){ note_dtor("S3714C1", this);}
void  S3714C1 ::v1(){vfunc_called(this, "_ZN7S3714C12v1Ev");}
void  S3714C1 ::v2(){vfunc_called(this, "_ZN7S3714C12v2Ev");}
void  S3714C1 ::v3(){vfunc_called(this, "_ZN7S3714C12v3Ev");}
void  S3714C1 ::v4(){vfunc_called(this, "_ZN7S3714C12v4Ev");}
void  S3714C1 ::v5(){vfunc_called(this, "_ZN7S3714C12v5Ev");}
void  S3714C1 ::v6(){vfunc_called(this, "_ZN7S3714C12v6Ev");}
void  S3714C1 ::v7(){vfunc_called(this, "_ZN7S3714C12v7Ev");}
void  S3714C1 ::v8(){vfunc_called(this, "_ZN7S3714C12v8Ev");}
void  S3714C1 ::v9(){vfunc_called(this, "_ZN7S3714C12v9Ev");}
void  S3714C1 ::v10(){vfunc_called(this, "_ZN7S3714C13v10Ev");}
void  S3714C1 ::v11(){vfunc_called(this, "_ZN7S3714C13v11Ev");}
void  S3714C1 ::v12(){vfunc_called(this, "_ZN7S3714C13v12Ev");}
void  S3714C1 ::v13(){vfunc_called(this, "_ZN7S3714C13v13Ev");}
void  S3714C1 ::v14(){vfunc_called(this, "_ZN7S3714C13v14Ev");}
void  S3714C1 ::v15(){vfunc_called(this, "_ZN7S3714C13v15Ev");}
void  S3714C1 ::v16(){vfunc_called(this, "_ZN7S3714C13v16Ev");}
void  S3714C1 ::v17(){vfunc_called(this, "_ZN7S3714C13v17Ev");}
void  S3714C1 ::v18(){vfunc_called(this, "_ZN7S3714C13v18Ev");}
void  S3714C1 ::v19(){vfunc_called(this, "_ZN7S3714C13v19Ev");}
void  S3714C1 ::v20(){vfunc_called(this, "_ZN7S3714C13v20Ev");}
S3714C1 ::S3714C1(){ note_ctor("S3714C1", this);} // tgen

static void Test_S3714C1()
{
  extern Class_Descriptor cd_S3714C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,146)];
    init_test(&cd_S3714C1, buf);
    S3714C1 *dp, &lv = *(dp=new (buf) S3714C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,580), "sizeof(S3714C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3714C1)");
    check_base_class_offset(lv, (S3715C3_nt*)(S3714C2*), 0, "S3714C1");
    check_base_class_offset(lv, (S3714C2*), 0, "S3714C1");
    check_base_class_offset(lv, (S3714C4*), ABISELECT(16,8), "S3714C1");
    check_field_offset(lv, s3714c1f0, ABISELECT(24,12), "S3714C1.s3714c1f0");
    check_field_offset(lv, s3714c1f1, ABISELECT(40,20), "S3714C1.s3714c1f1");
    check_field_offset(lv, s3714c1f2, ABISELECT(104,80), "S3714C1.s3714c1f2");
    check_field_offset(lv, s3714c1f3, ABISELECT(112,84), "S3714C1.s3714c1f3");
    check_field_offset(lv, s3714c1f4, ABISELECT(568,536), "S3714C1.s3714c1f4");
    check_field_offset(lv, s3714c1f5, ABISELECT(576,540), "S3714C1.s3714c1f5");
    check_field_offset(lv, s3714c1f6, ABISELECT(584,544), "S3714C1.s3714c1f6");
    check_field_offset(lv, s3714c1f7, ABISELECT(616,560), "S3714C1.s3714c1f7");
    check_field_offset(lv, s3714c1f8, ABISELECT(624,564), "S3714C1.s3714c1f8");
    check_field_offset(lv, s3714c1f9, ABISELECT(640,572), "S3714C1.s3714c1f9");
    test_class_info(&lv, &cd_S3714C1);
    dp->~S3714C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3714C1(Test_S3714C1, "S3714C1", ABISELECT(656,580));

#else // __cplusplus

extern void _ZN7S3714C1C1Ev();
extern void _ZN7S3714C1D1Ev();
Name_Map name_map_S3714C1[] = {
  NSPAIR(_ZN7S3714C1C1Ev),
  NSPAIR(_ZN7S3714C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S3714C2;
extern VTBL_ENTRY _ZTI7S3714C2[];
extern  VTBL_ENTRY _ZTV7S3714C2[];
extern Class_Descriptor cd_S3714C4;
extern VTBL_ENTRY _ZTI7S3714C4[];
extern  VTBL_ENTRY _ZTV7S3714C4[];
static Base_Class bases_S3714C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S3714C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3714C4,    ABISELECT(16,8), //bcp->offset
    37, //bcp->virtual_function_table_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 _ZTI7S3714C1[];
extern void _ZN7S3714C1D1Ev();
extern void _ZN7S3714C1D0Ev();
extern void _ZN7S3714C23v21Ev();
extern void _ZN7S3714C23v22Ev();
extern void _ZN7S3714C23v23Ev();
extern void _ZN7S3714C23v24Ev();
extern void _ZN7S3714C23v25Ev();
extern void _ZN7S3714C23v26Ev();
extern void _ZN7S3714C23v27Ev();
extern void _ZN7S3714C23v28Ev();
extern void _ZN7S3714C23v29Ev();
extern void _ZN7S3714C23v30Ev();
extern void _ZN7S3714C23v31Ev();
extern void _ZN7S3714C23v32Ev();
extern void _ZN7S3714C23v33Ev();
extern void _ZN7S3714C12v1Ev();
extern void _ZN7S3714C12v2Ev();
extern void _ZN7S3714C12v3Ev();
extern void _ZN7S3714C12v4Ev();
extern void _ZN7S3714C12v5Ev();
extern void _ZN7S3714C12v6Ev();
extern void _ZN7S3714C12v7Ev();
extern void _ZN7S3714C12v8Ev();
extern void _ZN7S3714C12v9Ev();
extern void _ZN7S3714C13v10Ev();
extern void _ZN7S3714C13v11Ev();
extern void _ZN7S3714C13v12Ev();
extern void _ZN7S3714C13v13Ev();
extern void _ZN7S3714C13v14Ev();
extern void _ZN7S3714C13v15Ev();
extern void _ZN7S3714C13v16Ev();
extern void _ZN7S3714C13v17Ev();
extern void _ZN7S3714C13v18Ev();
extern void _ZN7S3714C13v19Ev();
extern void _ZN7S3714C13v20Ev();
extern void ABISELECT(_ZThn16_N7S3714C1D1Ev,_ZThn8_N7S3714C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3714C1D0Ev,_ZThn8_N7S3714C1D0Ev)();
extern void _ZN7S3714C43v34Ev();
extern void _ZN7S3714C43v35Ev();
extern void _ZN7S3714C43v36Ev();
extern void _ZN7S3714C43v37Ev();
extern void _ZN7S3714C43v38Ev();
extern void _ZN7S3714C43v39Ev();
extern void _ZN7S3714C43v40Ev();
static  VTBL_ENTRY vtc_S3714C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3714C1[0]),
  (VTBL_ENTRY)&_ZN7S3714C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3714C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3714C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3714C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3714C13v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3714C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3714C1D1Ev,_ZThn8_N7S3714C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3714C1D0Ev,_ZThn8_N7S3714C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3714C43v34Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v35Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v36Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v37Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v38Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v39Ev,
  (VTBL_ENTRY)&_ZN7S3714C43v40Ev,
};
extern VTBL_ENTRY _ZTI7S3714C1[];
extern  VTBL_ENTRY _ZTV7S3714C1[];
Class_Descriptor cd_S3714C1 = {  "S3714C1", // class name
  bases_S3714C1, 3,
  &(vtc_S3714C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,580), // object size
  NSPAIRA(_ZTI7S3714C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3714C1),48, //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  S3716C2  : S3715C3_nt {
  virtual  ~S3716C2(); // _ZN7S3716C2D1Ev
  virtual void  v21(); // _ZN7S3716C23v21Ev
  virtual void  v22(); // _ZN7S3716C23v22Ev
  virtual void  v23(); // _ZN7S3716C23v23Ev
  virtual void  v24(); // _ZN7S3716C23v24Ev
  virtual void  v25(); // _ZN7S3716C23v25Ev
  virtual void  v26(); // _ZN7S3716C23v26Ev
  virtual void  v27(); // _ZN7S3716C23v27Ev
  virtual void  v28(); // _ZN7S3716C23v28Ev
  virtual void  v29(); // _ZN7S3716C23v29Ev
  virtual void  v30(); // _ZN7S3716C23v30Ev
  virtual void  v31(); // _ZN7S3716C23v31Ev
  virtual void  v32(); // _ZN7S3716C23v32Ev
  virtual void  v33(); // _ZN7S3716C23v33Ev
  S3716C2(); // tgen
};
//SIG(-1 S3716C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S3716C2 ::~S3716C2(){ note_dtor("S3716C2", this);}
void  S3716C2 ::v21(){vfunc_called(this, "_ZN7S3716C23v21Ev");}
void  S3716C2 ::v22(){vfunc_called(this, "_ZN7S3716C23v22Ev");}
void  S3716C2 ::v23(){vfunc_called(this, "_ZN7S3716C23v23Ev");}
void  S3716C2 ::v24(){vfunc_called(this, "_ZN7S3716C23v24Ev");}
void  S3716C2 ::v25(){vfunc_called(this, "_ZN7S3716C23v25Ev");}
void  S3716C2 ::v26(){vfunc_called(this, "_ZN7S3716C23v26Ev");}
void  S3716C2 ::v27(){vfunc_called(this, "_ZN7S3716C23v27Ev");}
void  S3716C2 ::v28(){vfunc_called(this, "_ZN7S3716C23v28Ev");}
void  S3716C2 ::v29(){vfunc_called(this, "_ZN7S3716C23v29Ev");}
void  S3716C2 ::v30(){vfunc_called(this, "_ZN7S3716C23v30Ev");}
void  S3716C2 ::v31(){vfunc_called(this, "_ZN7S3716C23v31Ev");}
void  S3716C2 ::v32(){vfunc_called(this, "_ZN7S3716C23v32Ev");}
void  S3716C2 ::v33(){vfunc_called(this, "_ZN7S3716C23v33Ev");}
S3716C2 ::S3716C2(){ note_ctor("S3716C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3716C2C1Ev();
extern void _ZN7S3716C2D1Ev();
Name_Map name_map_S3716C2[] = {
  NSPAIR(_ZN7S3716C2C1Ev),
  NSPAIR(_ZN7S3716C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
static Base_Class bases_S3716C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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 _ZTI7S3716C2[];
extern void _ZN7S3716C2D1Ev();
extern void _ZN7S3716C2D0Ev();
extern void _ZN7S3716C23v21Ev();
extern void _ZN7S3716C23v22Ev();
extern void _ZN7S3716C23v23Ev();
extern void _ZN7S3716C23v24Ev();
extern void _ZN7S3716C23v25Ev();
extern void _ZN7S3716C23v26Ev();
extern void _ZN7S3716C23v27Ev();
extern void _ZN7S3716C23v28Ev();
extern void _ZN7S3716C23v29Ev();
extern void _ZN7S3716C23v30Ev();
extern void _ZN7S3716C23v31Ev();
extern void _ZN7S3716C23v32Ev();
extern void _ZN7S3716C23v33Ev();
static  VTBL_ENTRY vtc_S3716C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3716C2[0]),
  (VTBL_ENTRY)&_ZN7S3716C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3716C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3716C2[];
extern  VTBL_ENTRY _ZTV7S3716C2[];
Class_Descriptor cd_S3716C2 = {  "S3716C2", // class name
  bases_S3716C2, 1,
  &(vtc_S3716C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3716C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3716C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3716C4  {
  virtual  ~S3716C4(); // _ZN7S3716C4D1Ev
  virtual void  v34(); // _ZN7S3716C43v34Ev
  virtual void  v35(); // _ZN7S3716C43v35Ev
  virtual void  v36(); // _ZN7S3716C43v36Ev
  virtual void  v37(); // _ZN7S3716C43v37Ev
  virtual void  v38(); // _ZN7S3716C43v38Ev
  virtual void  v39(); // _ZN7S3716C43v39Ev
  virtual void  v40(); // _ZN7S3716C43v40Ev
  S3716C4(); // tgen
};
//SIG(-1 S3716C4) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S3716C4 ::~S3716C4(){ note_dtor("S3716C4", this);}
void  S3716C4 ::v34(){vfunc_called(this, "_ZN7S3716C43v34Ev");}
void  S3716C4 ::v35(){vfunc_called(this, "_ZN7S3716C43v35Ev");}
void  S3716C4 ::v36(){vfunc_called(this, "_ZN7S3716C43v36Ev");}
void  S3716C4 ::v37(){vfunc_called(this, "_ZN7S3716C43v37Ev");}
void  S3716C4 ::v38(){vfunc_called(this, "_ZN7S3716C43v38Ev");}
void  S3716C4 ::v39(){vfunc_called(this, "_ZN7S3716C43v39Ev");}
void  S3716C4 ::v40(){vfunc_called(this, "_ZN7S3716C43v40Ev");}
S3716C4 ::S3716C4(){ note_ctor("S3716C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3716C4C1Ev();
extern void _ZN7S3716C4D1Ev();
Name_Map name_map_S3716C4[] = {
  NSPAIR(_ZN7S3716C4C1Ev),
  NSPAIR(_ZN7S3716C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3716C4[];
extern void _ZN7S3716C4D1Ev();
extern void _ZN7S3716C4D0Ev();
extern void _ZN7S3716C43v34Ev();
extern void _ZN7S3716C43v35Ev();
extern void _ZN7S3716C43v36Ev();
extern void _ZN7S3716C43v37Ev();
extern void _ZN7S3716C43v38Ev();
extern void _ZN7S3716C43v39Ev();
extern void _ZN7S3716C43v40Ev();
static  VTBL_ENTRY vtc_S3716C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3716C4[0]),
  (VTBL_ENTRY)&_ZN7S3716C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3716C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v34Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v35Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v36Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v37Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v38Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v39Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v40Ev,
};
extern VTBL_ENTRY _ZTI7S3716C4[];
extern  VTBL_ENTRY _ZTV7S3716C4[];
Class_Descriptor cd_S3716C4 = {  "S3716C4", // class name
  0,0,//no base classes
  &(vtc_S3716C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3716C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3716C4),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3716C1  : S3716C2 , S3716C4 {
  ::S22028C73 s3716c1f0;
  ::S3715C6 s3716c1f1;
  ::S22028C68_nt s3716c1f2;
  ::S3715C8 s3716c1f3;
  ::S3715C9_nt s3716c1f4;
  ::S3714C10 s3716c1f5;
  ::S8520C3_nt s3716c1f6;
  char s3716c1f7;
  ::S22028C63 s3716c1f8;
  ::S22028C63 s3716c1f9;
  virtual  ~S3716C1(); // _ZN7S3716C1D1Ev
  virtual void  v1(); // _ZN7S3716C12v1Ev
  virtual void  v2(); // _ZN7S3716C12v2Ev
  virtual void  v3(); // _ZN7S3716C12v3Ev
  virtual void  v4(); // _ZN7S3716C12v4Ev
  virtual void  v5(); // _ZN7S3716C12v5Ev
  virtual void  v6(); // _ZN7S3716C12v6Ev
  virtual void  v7(); // _ZN7S3716C12v7Ev
  virtual void  v8(); // _ZN7S3716C12v8Ev
  virtual void  v9(); // _ZN7S3716C12v9Ev
  virtual void  v10(); // _ZN7S3716C13v10Ev
  virtual void  v11(); // _ZN7S3716C13v11Ev
  virtual void  v12(); // _ZN7S3716C13v12Ev
  virtual void  v13(); // _ZN7S3716C13v13Ev
  virtual void  v14(); // _ZN7S3716C13v14Ev
  virtual void  v15(); // _ZN7S3716C13v15Ev
  virtual void  v16(); // _ZN7S3716C13v16Ev
  virtual void  v17(); // _ZN7S3716C13v17Ev
  virtual void  v18(); // _ZN7S3716C13v18Ev
  virtual void  v19(); // _ZN7S3716C13v19Ev
  virtual void  v20(); // _ZN7S3716C13v20Ev
  S3716C1(); // tgen
};
//SIG(1 S3716C1) C1{ BC2{ BC3{ vd m Fi} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33} BC4{ vd v34 v35 v36 v37 v38 v39 v40} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC5{ m Fp[2]} FC6{ Fc[16] Fi Fc[40]} FC7{ m Fp} FC8{ Fc[384] Fi Fc[64]} FC9{ m Fp} FC10{ m Fp} FC11{ m FL[4]} Fc FC12{ m Fp[2]} FC12}


 S3716C1 ::~S3716C1(){ note_dtor("S3716C1", this);}
void  S3716C1 ::v1(){vfunc_called(this, "_ZN7S3716C12v1Ev");}
void  S3716C1 ::v2(){vfunc_called(this, "_ZN7S3716C12v2Ev");}
void  S3716C1 ::v3(){vfunc_called(this, "_ZN7S3716C12v3Ev");}
void  S3716C1 ::v4(){vfunc_called(this, "_ZN7S3716C12v4Ev");}
void  S3716C1 ::v5(){vfunc_called(this, "_ZN7S3716C12v5Ev");}
void  S3716C1 ::v6(){vfunc_called(this, "_ZN7S3716C12v6Ev");}
void  S3716C1 ::v7(){vfunc_called(this, "_ZN7S3716C12v7Ev");}
void  S3716C1 ::v8(){vfunc_called(this, "_ZN7S3716C12v8Ev");}
void  S3716C1 ::v9(){vfunc_called(this, "_ZN7S3716C12v9Ev");}
void  S3716C1 ::v10(){vfunc_called(this, "_ZN7S3716C13v10Ev");}
void  S3716C1 ::v11(){vfunc_called(this, "_ZN7S3716C13v11Ev");}
void  S3716C1 ::v12(){vfunc_called(this, "_ZN7S3716C13v12Ev");}
void  S3716C1 ::v13(){vfunc_called(this, "_ZN7S3716C13v13Ev");}
void  S3716C1 ::v14(){vfunc_called(this, "_ZN7S3716C13v14Ev");}
void  S3716C1 ::v15(){vfunc_called(this, "_ZN7S3716C13v15Ev");}
void  S3716C1 ::v16(){vfunc_called(this, "_ZN7S3716C13v16Ev");}
void  S3716C1 ::v17(){vfunc_called(this, "_ZN7S3716C13v17Ev");}
void  S3716C1 ::v18(){vfunc_called(this, "_ZN7S3716C13v18Ev");}
void  S3716C1 ::v19(){vfunc_called(this, "_ZN7S3716C13v19Ev");}
void  S3716C1 ::v20(){vfunc_called(this, "_ZN7S3716C13v20Ev");}
S3716C1 ::S3716C1(){ note_ctor("S3716C1", this);} // tgen

static void Test_S3716C1()
{
  extern Class_Descriptor cd_S3716C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,150)];
    init_test(&cd_S3716C1, buf);
    S3716C1 *dp, &lv = *(dp=new (buf) S3716C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,596), "sizeof(S3716C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3716C1)");
    check_base_class_offset(lv, (S3715C3_nt*)(S3716C2*), 0, "S3716C1");
    check_base_class_offset(lv, (S3716C2*), 0, "S3716C1");
    check_base_class_offset(lv, (S3716C4*), ABISELECT(16,8), "S3716C1");
    check_field_offset(lv, s3716c1f0, ABISELECT(24,12), "S3716C1.s3716c1f0");
    check_field_offset(lv, s3716c1f1, ABISELECT(40,20), "S3716C1.s3716c1f1");
    check_field_offset(lv, s3716c1f2, ABISELECT(104,80), "S3716C1.s3716c1f2");
    check_field_offset(lv, s3716c1f3, ABISELECT(112,84), "S3716C1.s3716c1f3");
    check_field_offset(lv, s3716c1f4, ABISELECT(568,536), "S3716C1.s3716c1f4");
    check_field_offset(lv, s3716c1f5, ABISELECT(576,540), "S3716C1.s3716c1f5");
    check_field_offset(lv, s3716c1f6, ABISELECT(584,544), "S3716C1.s3716c1f6");
    check_field_offset(lv, s3716c1f7, ABISELECT(616,576), "S3716C1.s3716c1f7");
    check_field_offset(lv, s3716c1f8, ABISELECT(624,580), "S3716C1.s3716c1f8");
    check_field_offset(lv, s3716c1f9, ABISELECT(640,588), "S3716C1.s3716c1f9");
    test_class_info(&lv, &cd_S3716C1);
    dp->~S3716C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3716C1(Test_S3716C1, "S3716C1", ABISELECT(656,596));

#else // __cplusplus

extern void _ZN7S3716C1C1Ev();
extern void _ZN7S3716C1D1Ev();
Name_Map name_map_S3716C1[] = {
  NSPAIR(_ZN7S3716C1C1Ev),
  NSPAIR(_ZN7S3716C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S3716C2;
extern VTBL_ENTRY _ZTI7S3716C2[];
extern  VTBL_ENTRY _ZTV7S3716C2[];
extern Class_Descriptor cd_S3716C4;
extern VTBL_ENTRY _ZTI7S3716C4[];
extern  VTBL_ENTRY _ZTV7S3716C4[];
static Base_Class bases_S3716C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S3716C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3716C4,    ABISELECT(16,8), //bcp->offset
    37, //bcp->virtual_function_table_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 _ZTI7S3716C1[];
extern void _ZN7S3716C1D1Ev();
extern void _ZN7S3716C1D0Ev();
extern void _ZN7S3716C23v21Ev();
extern void _ZN7S3716C23v22Ev();
extern void _ZN7S3716C23v23Ev();
extern void _ZN7S3716C23v24Ev();
extern void _ZN7S3716C23v25Ev();
extern void _ZN7S3716C23v26Ev();
extern void _ZN7S3716C23v27Ev();
extern void _ZN7S3716C23v28Ev();
extern void _ZN7S3716C23v29Ev();
extern void _ZN7S3716C23v30Ev();
extern void _ZN7S3716C23v31Ev();
extern void _ZN7S3716C23v32Ev();
extern void _ZN7S3716C23v33Ev();
extern void _ZN7S3716C12v1Ev();
extern void _ZN7S3716C12v2Ev();
extern void _ZN7S3716C12v3Ev();
extern void _ZN7S3716C12v4Ev();
extern void _ZN7S3716C12v5Ev();
extern void _ZN7S3716C12v6Ev();
extern void _ZN7S3716C12v7Ev();
extern void _ZN7S3716C12v8Ev();
extern void _ZN7S3716C12v9Ev();
extern void _ZN7S3716C13v10Ev();
extern void _ZN7S3716C13v11Ev();
extern void _ZN7S3716C13v12Ev();
extern void _ZN7S3716C13v13Ev();
extern void _ZN7S3716C13v14Ev();
extern void _ZN7S3716C13v15Ev();
extern void _ZN7S3716C13v16Ev();
extern void _ZN7S3716C13v17Ev();
extern void _ZN7S3716C13v18Ev();
extern void _ZN7S3716C13v19Ev();
extern void _ZN7S3716C13v20Ev();
extern void ABISELECT(_ZThn16_N7S3716C1D1Ev,_ZThn8_N7S3716C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3716C1D0Ev,_ZThn8_N7S3716C1D0Ev)();
extern void _ZN7S3716C43v34Ev();
extern void _ZN7S3716C43v35Ev();
extern void _ZN7S3716C43v36Ev();
extern void _ZN7S3716C43v37Ev();
extern void _ZN7S3716C43v38Ev();
extern void _ZN7S3716C43v39Ev();
extern void _ZN7S3716C43v40Ev();
static  VTBL_ENTRY vtc_S3716C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3716C1[0]),
  (VTBL_ENTRY)&_ZN7S3716C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3716C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3716C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3716C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v13Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v14Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v15Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v16Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v17Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v18Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v19Ev,
  (VTBL_ENTRY)&_ZN7S3716C13v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3716C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3716C1D1Ev,_ZThn8_N7S3716C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3716C1D0Ev,_ZThn8_N7S3716C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3716C43v34Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v35Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v36Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v37Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v38Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v39Ev,
  (VTBL_ENTRY)&_ZN7S3716C43v40Ev,
};
extern VTBL_ENTRY _ZTI7S3716C1[];
extern  VTBL_ENTRY _ZTV7S3716C1[];
Class_Descriptor cd_S3716C1 = {  "S3716C1", // class name
  bases_S3716C1, 3,
  &(vtc_S3716C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(656,596), // object size
  NSPAIRA(_ZTI7S3716C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3716C1),48, //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  S7216C5  {
  void *s7216c5f0;
  char s7216c5f1[2];
  virtual void  v5(); // _ZN7S7216C52v5Ev
  virtual void  v6(); // _ZN7S7216C52v6Ev
  virtual void  v7(); // _ZN7S7216C52v7Ev
  virtual void  v8(); // _ZN7S7216C52v8Ev
  ~S7216C5(); // tgen
  S7216C5(); // tgen
};
//SIG(-1 S7216C5) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S7216C5 ::v5(){vfunc_called(this, "_ZN7S7216C52v5Ev");}
void  S7216C5 ::v6(){vfunc_called(this, "_ZN7S7216C52v6Ev");}
void  S7216C5 ::v7(){vfunc_called(this, "_ZN7S7216C52v7Ev");}
void  S7216C5 ::v8(){vfunc_called(this, "_ZN7S7216C52v8Ev");}
S7216C5 ::~S7216C5(){ note_dtor("S7216C5", this);} // tgen
S7216C5 ::S7216C5(){ note_ctor("S7216C5", this);} // tgen

static void Test_S7216C5()
{
  extern Class_Descriptor cd_S7216C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7216C5, buf);
    S7216C5 *dp, &lv = *(dp=new (buf) S7216C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7216C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7216C5)");
    check_field_offset(lv, s7216c5f0, ABISELECT(8,4), "S7216C5.s7216c5f0");
    check_field_offset(lv, s7216c5f1, ABISELECT(16,8), "S7216C5.s7216c5f1");
    test_class_info(&lv, &cd_S7216C5);
    dp->~S7216C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C5(Test_S7216C5, "S7216C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7216C5C1Ev();
extern void _ZN7S7216C5D1Ev();
Name_Map name_map_S7216C5[] = {
  NSPAIR(_ZN7S7216C5C1Ev),
  NSPAIR(_ZN7S7216C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7216C5[];
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
static  VTBL_ENTRY vtc_S7216C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C5[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
Class_Descriptor cd_S7216C5 = {  "S7216C5", // class name
  0,0,//no base classes
  &(vtc_S7216C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7216C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7216C5),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  S7216C4  : S7216C5 {
  void *s7216c4f0[4];
  ~S7216C4(); // tgen
  S7216C4(); // tgen
};
//SIG(-1 S7216C4) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S7216C4()
{
  extern Class_Descriptor cd_S7216C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7216C4, buf);
    S7216C4 *dp, &lv = *(dp=new (buf) S7216C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7216C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7216C4)");
    check_base_class_offset(lv, (S7216C5*), 0, "S7216C4");
    check_field_offset(lv, s7216c4f0, ABISELECT(24,12), "S7216C4.s7216c4f0");
    test_class_info(&lv, &cd_S7216C4);
    dp->~S7216C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C4(Test_S7216C4, "S7216C4", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7216C4C1Ev();
extern void _ZN7S7216C4D1Ev();
Name_Map name_map_S7216C4[] = {
  NSPAIR(_ZN7S7216C4C1Ev),
  NSPAIR(_ZN7S7216C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
static Base_Class bases_S7216C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7216C5,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7216C4[];
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
static  VTBL_ENTRY vtc_S7216C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C4[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S7216C4[];
extern  VTBL_ENTRY _ZTV7S7216C4[];
Class_Descriptor cd_S7216C4 = {  "S7216C4", // class name
  bases_S7216C4, 1,
  &(vtc_S7216C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7216C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7216C4),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  S7216C3  : S7216C4 , virtual S7216C5 {
  int s7216c3f0;
  virtual  ~S7216C3(); // _ZN7S7216C3D2Ev
  virtual void  v9(); // _ZN7S7216C32v9Ev
  virtual void  v10(); // _ZN7S7216C33v10Ev
  virtual void  v11(); // _ZN7S7216C33v11Ev
  virtual void  v12(); // _ZN7S7216C33v12Ev
  virtual void  v13(); // _ZN7S7216C33v13Ev
  virtual void  v14(); // _ZN7S7216C33v14Ev
  virtual void  v15(); // _ZN7S7216C33v15Ev
  S7216C3(); // tgen
};
//SIG(-1 S7216C3) C1{ BC2{ BC3{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S7216C3 ::~S7216C3(){ note_dtor("S7216C3", this);}
void  S7216C3 ::v9(){vfunc_called(this, "_ZN7S7216C32v9Ev");}
void  S7216C3 ::v10(){vfunc_called(this, "_ZN7S7216C33v10Ev");}
void  S7216C3 ::v11(){vfunc_called(this, "_ZN7S7216C33v11Ev");}
void  S7216C3 ::v12(){vfunc_called(this, "_ZN7S7216C33v12Ev");}
void  S7216C3 ::v13(){vfunc_called(this, "_ZN7S7216C33v13Ev");}
void  S7216C3 ::v14(){vfunc_called(this, "_ZN7S7216C33v14Ev");}
void  S7216C3 ::v15(){vfunc_called(this, "_ZN7S7216C33v15Ev");}
S7216C3 ::S7216C3(){ note_ctor("S7216C3", this);} // tgen

static void Test_S7216C3()
{
  extern Class_Descriptor cd_S7216C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S7216C3, buf);
    S7216C3 *dp, &lv = *(dp=new (buf) S7216C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S7216C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7216C3)");
    check_base_class_offset(lv, (S7216C5*)(S7216C4*), 0, "S7216C3");
    check_base_class_offset(lv, (S7216C4*), 0, "S7216C3");
    /*is_ambiguous_... S7216C3::S7216C5 */ AMB_check_base_class_offset(lv, (S7216C5*), ABISELECT(64,32), "S7216C3");
    check_field_offset(lv, s7216c3f0, ABISELECT(56,28), "S7216C3.s7216c3f0");
    test_class_info(&lv, &cd_S7216C3);
    dp->~S7216C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C3(Test_S7216C3, "S7216C3", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S7216C3C1Ev();
extern void _ZN7S7216C3D2Ev();
Name_Map name_map_S7216C3[] = {
  NSPAIR(_ZN7S7216C3C1Ev),
  NSPAIR(_ZN7S7216C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C4;
extern VTBL_ENTRY _ZTI7S7216C4[];
extern  VTBL_ENTRY _ZTV7S7216C4[];
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
static Base_Class bases_S7216C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7216C5,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7216C3[];
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN7S7216C3D1Ev();
extern void _ZN7S7216C3D0Ev();
extern void _ZN7S7216C32v9Ev();
extern void _ZN7S7216C33v10Ev();
extern void _ZN7S7216C33v11Ev();
extern void _ZN7S7216C33v12Ev();
extern void _ZN7S7216C33v13Ev();
extern void _ZN7S7216C33v14Ev();
extern void _ZN7S7216C33v15Ev();
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
static  VTBL_ENTRY vtc_S7216C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C3[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7216C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7216C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7216C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7216C3[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S7216C3[];
static  VTT_ENTRY vtt_S7216C3[] = {
  {&(_ZTV7S7216C3[3]),  3,26},
  {&(_ZTV7S7216C3[22]),  22,26},
};
extern VTBL_ENTRY _ZTI7S7216C3[];
extern  VTBL_ENTRY _ZTV7S7216C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C3[];
Class_Descriptor cd_S7216C3 = {  "S7216C3", // class name
  bases_S7216C3, 3,
  &(vtc_S7216C3[0]), // expected_vtbl_contents
  &(vtt_S7216C3[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S7216C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7216C3),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7216C3),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7216C6  {
  __tsi64 s7216c6f0[5];
  void *s7216c6f1;
  virtual void  v16(); // _ZN7S7216C63v16Ev
  virtual void  v17(); // _ZN7S7216C63v17Ev
  virtual void  v18(); // _ZN7S7216C63v18Ev
  virtual void  v19(); // _ZN7S7216C63v19Ev
  ~S7216C6(); // tgen
  S7216C6(); // tgen
};
//SIG(-1 S7216C6) C1{ v1 v2 v3 v4 FL[5] Fp}


void  S7216C6 ::v16(){vfunc_called(this, "_ZN7S7216C63v16Ev");}
void  S7216C6 ::v17(){vfunc_called(this, "_ZN7S7216C63v17Ev");}
void  S7216C6 ::v18(){vfunc_called(this, "_ZN7S7216C63v18Ev");}
void  S7216C6 ::v19(){vfunc_called(this, "_ZN7S7216C63v19Ev");}
S7216C6 ::~S7216C6(){ note_dtor("S7216C6", this);} // tgen
S7216C6 ::S7216C6(){ note_ctor("S7216C6", this);} // tgen

static void Test_S7216C6()
{
  extern Class_Descriptor cd_S7216C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S7216C6, buf);
    S7216C6 *dp, &lv = *(dp=new (buf) S7216C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S7216C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7216C6)");
    check_field_offset(lv, s7216c6f0, ABISELECT(8,4), "S7216C6.s7216c6f0");
    check_field_offset(lv, s7216c6f1, ABISELECT(48,44), "S7216C6.s7216c6f1");
    test_class_info(&lv, &cd_S7216C6);
    dp->~S7216C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C6(Test_S7216C6, "S7216C6", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S7216C6C1Ev();
extern void _ZN7S7216C6D1Ev();
Name_Map name_map_S7216C6[] = {
  NSPAIR(_ZN7S7216C6C1Ev),
  NSPAIR(_ZN7S7216C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7216C6[];
extern void _ZN7S7216C63v16Ev();
extern void _ZN7S7216C63v17Ev();
extern void _ZN7S7216C63v18Ev();
extern void _ZN7S7216C63v19Ev();
static  VTBL_ENTRY vtc_S7216C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C6[0]),
  (VTBL_ENTRY)&_ZN7S7216C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S7216C6[];
extern  VTBL_ENTRY _ZTV7S7216C6[];
Class_Descriptor cd_S7216C6 = {  "S7216C6", // class name
  0,0,//no base classes
  &(vtc_S7216C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S7216C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7216C6),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  S7216C2  : virtual S7216C3 , S7216C6 {
  long double s7216c2f0;
  virtual  ~S7216C2(); // _ZN7S7216C2D2Ev
  virtual void  v20(); // _ZN7S7216C23v20Ev
  virtual void  v21(); // _ZN7S7216C23v21Ev
  virtual void  v22(); // _ZN7S7216C23v22Ev
  virtual void  v23(); // _ZN7S7216C23v23Ev
  virtual void  v24(); // _ZN7S7216C23v24Ev
  virtual void  v25(); // _ZN7S7216C23v25Ev
  S7216C2(); // tgen
};
//SIG(-1 S7216C2) C1{ VBC2{ BC3{ BC4{ v7 v8 v9 v10 Fp Fc[2]} Fp[4]} VBC4 vd v11 v12 v13 v14 v15 v16 v17 Fi} BC5{ v18 v19 v20 v21 FL[5] Fp} vd v1 v2 v3 v4 v5 v6 FD}


 S7216C2 ::~S7216C2(){ note_dtor("S7216C2", this);}
void  S7216C2 ::v20(){vfunc_called(this, "_ZN7S7216C23v20Ev");}
void  S7216C2 ::v21(){vfunc_called(this, "_ZN7S7216C23v21Ev");}
void  S7216C2 ::v22(){vfunc_called(this, "_ZN7S7216C23v22Ev");}
void  S7216C2 ::v23(){vfunc_called(this, "_ZN7S7216C23v23Ev");}
void  S7216C2 ::v24(){vfunc_called(this, "_ZN7S7216C23v24Ev");}
void  S7216C2 ::v25(){vfunc_called(this, "_ZN7S7216C23v25Ev");}
S7216C2 ::S7216C2(){ note_ctor("S7216C2", this);} // tgen

static void Test_S7216C2()
{
  extern Class_Descriptor cd_S7216C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,27)];
    init_test(&cd_S7216C2, buf);
    S7216C2 *dp, &lv = *(dp=new (buf) S7216C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,104), "sizeof(S7216C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7216C2)");
    check_base_class_offset(lv, (S7216C5*)(S7216C4*)(S7216C3*), ABISELECT(80,60), "S7216C2");
    check_base_class_offset(lv, (S7216C4*)(S7216C3*), ABISELECT(80,60), "S7216C2");
    /*is_ambiguous_... S7216C3::S7216C5 */ AMB_check_base_class_offset(lv, (S7216C5*)(S7216C3*), ABISELECT(144,92), "S7216C2");
    check_base_class_offset(lv, (S7216C3*), ABISELECT(80,60), "S7216C2");
    check_base_class_offset(lv, (S7216C6*), 0, "S7216C2");
    check_field_offset(lv, s7216c2f0, ABISELECT(64,48), "S7216C2.s7216c2f0");
    test_class_info(&lv, &cd_S7216C2);
    dp->~S7216C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C2(Test_S7216C2, "S7216C2", ABISELECT(176,104));

#else // __cplusplus

extern void _ZN7S7216C2C1Ev();
extern void _ZN7S7216C2D2Ev();
Name_Map name_map_S7216C2[] = {
  NSPAIR(_ZN7S7216C2C1Ev),
  NSPAIR(_ZN7S7216C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C4;
extern VTBL_ENTRY _ZTI7S7216C4[];
extern  VTBL_ENTRY _ZTV7S7216C4[];
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C3;
extern VTBL_ENTRY _ZTI7S7216C3[];
extern  VTBL_ENTRY _ZTV7S7216C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C3[];
extern Class_Descriptor cd_S7216C6;
extern VTBL_ENTRY _ZTI7S7216C6[];
extern  VTBL_ENTRY _ZTV7S7216C6[];
static Base_Class bases_S7216C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7216C5,    ABISELECT(80,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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7216C4,    ABISELECT(80,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7216C5,    ABISELECT(144,92), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7216C3,    ABISELECT(80,60), //bcp->offset
    16, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7216C2[];
extern void _ZN7S7216C63v16Ev();
extern void _ZN7S7216C63v17Ev();
extern void _ZN7S7216C63v18Ev();
extern void _ZN7S7216C63v19Ev();
extern void _ZN7S7216C2D1Ev();
extern void _ZN7S7216C2D0Ev();
extern void _ZN7S7216C23v20Ev();
extern void _ZN7S7216C23v21Ev();
extern void _ZN7S7216C23v22Ev();
extern void _ZN7S7216C23v23Ev();
extern void _ZN7S7216C23v24Ev();
extern void _ZN7S7216C23v25Ev();
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7216C2D1Ev,_ZTv0_n32_N7S7216C2D1Ev)();
extern void ABISELECT(_ZThn80_N7S7216C2D1Ev,_ZThn60_N7S7216C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7216C2D0Ev,_ZTv0_n32_N7S7216C2D0Ev)();
extern void ABISELECT(_ZThn80_N7S7216C2D0Ev,_ZThn60_N7S7216C2D0Ev)() __attribute__((weak));
extern void _ZN7S7216C32v9Ev();
extern void _ZN7S7216C33v10Ev();
extern void _ZN7S7216C33v11Ev();
extern void _ZN7S7216C33v12Ev();
extern void _ZN7S7216C33v13Ev();
extern void _ZN7S7216C33v14Ev();
extern void _ZN7S7216C33v15Ev();
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
static  VTBL_ENTRY vtc_S7216C2[] = {
  ABISELECT(144,92),
  ABISELECT(80,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C2[0]),
  (VTBL_ENTRY)&_ZN7S7216C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7216C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7216C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-60),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S7216C2[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7216C2D1Ev,_ZTv0_n32_N7S7216C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7216C2D0Ev,_ZTv0_n32_N7S7216C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7216C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7216C2[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S7216C2[];
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN7S7216C3D1Ev();
extern void _ZN7S7216C3D0Ev();
extern void _ZN7S7216C32v9Ev();
extern void _ZN7S7216C33v10Ev();
extern void _ZN7S7216C33v11Ev();
extern void _ZN7S7216C33v12Ev();
extern void _ZN7S7216C33v13Ev();
extern void _ZN7S7216C33v14Ev();
extern void _ZN7S7216C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C3__7S7216C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C3[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7216C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7216C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7216C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v15Ev,
};
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C5__A1__7S7216C3__7S7216C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7216C3[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
};
static  VTT_ENTRY vtt_S7216C2[] = {
  {&(_ZTV7S7216C2[4]),  4,54},
  {&(_ZTV7S7216C2[31]),  31,54},
  {&(_ZTV7S7216C2[50]),  50,54},
  {&(_tg__ZTV7S7216C3__7S7216C2[3]),  3,16},
  {&(_tg__ZTV7S7216C5__A1__7S7216C3__7S7216C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7216C2[];
extern  VTBL_ENTRY _ZTV7S7216C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C2[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7216C2D0Ev,_ZTv0_n32_N7S7216C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7216C2D0Ev,_ZThn60_N7S7216C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7216C2D1Ev,_ZTv0_n32_N7S7216C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7216C2D1Ev,_ZThn60_N7S7216C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7216C2 = {  "S7216C2", // class name
  bases_S7216C2, 5,
  &(vtc_S7216C2[0]), // expected_vtbl_contents
  &(vtt_S7216C2[0]), // expected_vtt_contents
  ABISELECT(176,104), // object size
  NSPAIRA(_ZTI7S7216C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7216C2),54, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7216C2),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7216C7  {
  ::S7216C4 s7216c7f0;
  virtual void  v26(); // _ZN7S7216C73v26Ev
  virtual void  v27(); // _ZN7S7216C73v27Ev
  virtual void  v28(); // _ZN7S7216C73v28Ev
  virtual void  v29(); // _ZN7S7216C73v29Ev
  virtual void  v30(); // _ZN7S7216C73v30Ev
  ~S7216C7(); // tgen
  S7216C7(); // tgen
};
//SIG(-1 S7216C7) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v6 v7 v8 v9 Fp Fc[2]} Fp[4]}}


void  S7216C7 ::v26(){vfunc_called(this, "_ZN7S7216C73v26Ev");}
void  S7216C7 ::v27(){vfunc_called(this, "_ZN7S7216C73v27Ev");}
void  S7216C7 ::v28(){vfunc_called(this, "_ZN7S7216C73v28Ev");}
void  S7216C7 ::v29(){vfunc_called(this, "_ZN7S7216C73v29Ev");}
void  S7216C7 ::v30(){vfunc_called(this, "_ZN7S7216C73v30Ev");}
S7216C7 ::~S7216C7(){ note_dtor("S7216C7", this);} // tgen
S7216C7 ::S7216C7(){ note_ctor("S7216C7", this);} // tgen

static void Test_S7216C7()
{
  extern Class_Descriptor cd_S7216C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7216C7, buf);
    S7216C7 *dp, &lv = *(dp=new (buf) S7216C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7216C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7216C7)");
    check_field_offset(lv, s7216c7f0, ABISELECT(8,4), "S7216C7.s7216c7f0");
    test_class_info(&lv, &cd_S7216C7);
    dp->~S7216C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C7(Test_S7216C7, "S7216C7", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7216C7C1Ev();
extern void _ZN7S7216C7D1Ev();
Name_Map name_map_S7216C7[] = {
  NSPAIR(_ZN7S7216C7C1Ev),
  NSPAIR(_ZN7S7216C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7216C7[];
extern void _ZN7S7216C73v26Ev();
extern void _ZN7S7216C73v27Ev();
extern void _ZN7S7216C73v28Ev();
extern void _ZN7S7216C73v29Ev();
extern void _ZN7S7216C73v30Ev();
static  VTBL_ENTRY vtc_S7216C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C7[0]),
  (VTBL_ENTRY)&_ZN7S7216C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v29Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v30Ev,
};
extern VTBL_ENTRY _ZTI7S7216C7[];
extern  VTBL_ENTRY _ZTV7S7216C7[];
Class_Descriptor cd_S7216C7 = {  "S7216C7", // class name
  0,0,//no base classes
  &(vtc_S7216C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7216C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7216C7),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  S7216C9  {
  long double s7216c9f0;
  virtual void  v31(); // _ZN7S7216C93v31Ev
  ~S7216C9(); // tgen
  S7216C9(); // tgen
};
//SIG(-1 S7216C9) C1{ v1 FD}


void  S7216C9 ::v31(){vfunc_called(this, "_ZN7S7216C93v31Ev");}
S7216C9 ::~S7216C9(){ note_dtor("S7216C9", this);} // tgen
S7216C9 ::S7216C9(){ note_ctor("S7216C9", this);} // tgen

static void Test_S7216C9()
{
  extern Class_Descriptor cd_S7216C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S7216C9, buf);
    S7216C9 *dp, &lv = *(dp=new (buf) S7216C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7216C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7216C9)");
    check_field_offset(lv, s7216c9f0, ABISELECT(16,4), "S7216C9.s7216c9f0");
    test_class_info(&lv, &cd_S7216C9);
    dp->~S7216C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C9(Test_S7216C9, "S7216C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7216C9C1Ev();
extern void _ZN7S7216C9D1Ev();
Name_Map name_map_S7216C9[] = {
  NSPAIR(_ZN7S7216C9C1Ev),
  NSPAIR(_ZN7S7216C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7216C9[];
extern void _ZN7S7216C93v31Ev();
static  VTBL_ENTRY vtc_S7216C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C9[0]),
  (VTBL_ENTRY)&_ZN7S7216C93v31Ev,
};
extern VTBL_ENTRY _ZTI7S7216C9[];
extern  VTBL_ENTRY _ZTV7S7216C9[];
Class_Descriptor cd_S7216C9 = {  "S7216C9", // class name
  0,0,//no base classes
  &(vtc_S7216C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7216C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7216C9),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  S7216C10  : S7216C4 {
  virtual void  v32(); // _ZN8S7216C103v32Ev
  virtual void  v33(); // _ZN8S7216C103v33Ev
  virtual void  v34(); // _ZN8S7216C103v34Ev
  ~S7216C10(); // tgen
  S7216C10(); // tgen
};
//SIG(-1 S7216C10) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fc[2]} Fp[4]} v1 v2 v3}


void  S7216C10 ::v32(){vfunc_called(this, "_ZN8S7216C103v32Ev");}
void  S7216C10 ::v33(){vfunc_called(this, "_ZN8S7216C103v33Ev");}
void  S7216C10 ::v34(){vfunc_called(this, "_ZN8S7216C103v34Ev");}
S7216C10 ::~S7216C10(){ note_dtor("S7216C10", this);} // tgen
S7216C10 ::S7216C10(){ note_ctor("S7216C10", this);} // tgen

static void Test_S7216C10()
{
  extern Class_Descriptor cd_S7216C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7216C10, buf);
    S7216C10 *dp, &lv = *(dp=new (buf) S7216C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7216C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7216C10)");
    check_base_class_offset(lv, (S7216C5*)(S7216C4*), 0, "S7216C10");
    check_base_class_offset(lv, (S7216C4*), 0, "S7216C10");
    test_class_info(&lv, &cd_S7216C10);
    dp->~S7216C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C10(Test_S7216C10, "S7216C10", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S7216C10C1Ev();
extern void _ZN8S7216C10D1Ev();
Name_Map name_map_S7216C10[] = {
  NSPAIR(_ZN8S7216C10C1Ev),
  NSPAIR(_ZN8S7216C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C4;
extern VTBL_ENTRY _ZTI7S7216C4[];
extern  VTBL_ENTRY _ZTV7S7216C4[];
static Base_Class bases_S7216C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S7216C10[];
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN8S7216C103v32Ev();
extern void _ZN8S7216C103v33Ev();
extern void _ZN8S7216C103v34Ev();
static  VTBL_ENTRY vtc_S7216C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7216C10[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v34Ev,
};
extern VTBL_ENTRY _ZTI8S7216C10[];
extern  VTBL_ENTRY _ZTV8S7216C10[];
Class_Descriptor cd_S7216C10 = {  "S7216C10", // class name
  bases_S7216C10, 2,
  &(vtc_S7216C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S7216C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7216C10),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  S7216C8  : virtual S7216C9 , S7216C10 {
  void *s7216c8f0;
  virtual void  v35(); // _ZN7S7216C83v35Ev
  virtual void  v36(); // _ZN7S7216C83v36Ev
  virtual void  v37(); // _ZN7S7216C83v37Ev
  virtual void  v38(); // _ZN7S7216C83v38Ev
  virtual void  v39(); // _ZN7S7216C83v39Ev
  virtual void  v40(); // _ZN7S7216C83v40Ev
  virtual void  v41(); // _ZN7S7216C83v41Ev
  ~S7216C8(); // tgen
  S7216C8(); // tgen
};
//SIG(-1 S7216C8) C1{ VBC2{ v8 FD} BC3{ BC4{ BC5{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} v13 v14 v15} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S7216C8 ::v35(){vfunc_called(this, "_ZN7S7216C83v35Ev");}
void  S7216C8 ::v36(){vfunc_called(this, "_ZN7S7216C83v36Ev");}
void  S7216C8 ::v37(){vfunc_called(this, "_ZN7S7216C83v37Ev");}
void  S7216C8 ::v38(){vfunc_called(this, "_ZN7S7216C83v38Ev");}
void  S7216C8 ::v39(){vfunc_called(this, "_ZN7S7216C83v39Ev");}
void  S7216C8 ::v40(){vfunc_called(this, "_ZN7S7216C83v40Ev");}
void  S7216C8 ::v41(){vfunc_called(this, "_ZN7S7216C83v41Ev");}
S7216C8 ::~S7216C8(){ note_dtor("S7216C8", this);} // tgen
S7216C8 ::S7216C8(){ note_ctor("S7216C8", this);} // tgen

static void Test_S7216C8()
{
  extern Class_Descriptor cd_S7216C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S7216C8, buf);
    S7216C8 *dp, &lv = *(dp=new (buf) S7216C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7216C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7216C8)");
    check_base_class_offset(lv, (S7216C9*), ABISELECT(64,32), "S7216C8");
    check_base_class_offset(lv, (S7216C5*)(S7216C4*)(S7216C10*), 0, "S7216C8");
    check_base_class_offset(lv, (S7216C4*)(S7216C10*), 0, "S7216C8");
    check_base_class_offset(lv, (S7216C10*), 0, "S7216C8");
    check_field_offset(lv, s7216c8f0, ABISELECT(56,28), "S7216C8.s7216c8f0");
    test_class_info(&lv, &cd_S7216C8);
    dp->~S7216C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C8(Test_S7216C8, "S7216C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7216C8C1Ev();
extern void _ZN7S7216C8D1Ev();
Name_Map name_map_S7216C8[] = {
  NSPAIR(_ZN7S7216C8C1Ev),
  NSPAIR(_ZN7S7216C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7216C9;
extern VTBL_ENTRY _ZTI7S7216C9[];
extern  VTBL_ENTRY _ZTV7S7216C9[];
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C4;
extern VTBL_ENTRY _ZTI7S7216C4[];
extern  VTBL_ENTRY _ZTV7S7216C4[];
extern Class_Descriptor cd_S7216C10;
extern VTBL_ENTRY _ZTI8S7216C10[];
extern  VTBL_ENTRY _ZTV8S7216C10[];
static Base_Class bases_S7216C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7216C9,    ABISELECT(64,32), //bcp->offset
    17, //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_S7216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7216C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7216C8[];
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN8S7216C103v32Ev();
extern void _ZN8S7216C103v33Ev();
extern void _ZN8S7216C103v34Ev();
extern void _ZN7S7216C83v35Ev();
extern void _ZN7S7216C83v36Ev();
extern void _ZN7S7216C83v37Ev();
extern void _ZN7S7216C83v38Ev();
extern void _ZN7S7216C83v39Ev();
extern void _ZN7S7216C83v40Ev();
extern void _ZN7S7216C83v41Ev();
extern void _ZN7S7216C93v31Ev();
static  VTBL_ENTRY vtc_S7216C8[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C8[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v34Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v38Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v39Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v40Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v41Ev,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7216C8[0]),
  (VTBL_ENTRY)&_ZN7S7216C93v31Ev,
};
extern VTBL_ENTRY _ZTV7S7216C8[];
static  VTT_ENTRY vtt_S7216C8[] = {
  {&(_ZTV7S7216C8[3]),  3,21},
  {&(_ZTV7S7216C8[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S7216C8[];
extern  VTBL_ENTRY _ZTV7S7216C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C8[];
Class_Descriptor cd_S7216C8 = {  "S7216C8", // class name
  bases_S7216C8, 4,
  &(vtc_S7216C8[0]), // expected_vtbl_contents
  &(vtt_S7216C8[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7216C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7216C8),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7216C8),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7216C11  {
  void *s7216c11f0[2];
  char s7216c11f1;
  virtual void  v42(); // _ZN8S7216C113v42Ev
  virtual void  v43(); // _ZN8S7216C113v43Ev
  virtual void  v44(); // _ZN8S7216C113v44Ev
  virtual void  v45(); // _ZN8S7216C113v45Ev
  virtual void  v46(); // _ZN8S7216C113v46Ev
  ~S7216C11(); // tgen
  S7216C11(); // tgen
};
//SIG(-1 S7216C11) C1{ v1 v2 v3 v4 v5 Fp[2] Fc}


void  S7216C11 ::v42(){vfunc_called(this, "_ZN8S7216C113v42Ev");}
void  S7216C11 ::v43(){vfunc_called(this, "_ZN8S7216C113v43Ev");}
void  S7216C11 ::v44(){vfunc_called(this, "_ZN8S7216C113v44Ev");}
void  S7216C11 ::v45(){vfunc_called(this, "_ZN8S7216C113v45Ev");}
void  S7216C11 ::v46(){vfunc_called(this, "_ZN8S7216C113v46Ev");}
S7216C11 ::~S7216C11(){ note_dtor("S7216C11", this);} // tgen
S7216C11 ::S7216C11(){ note_ctor("S7216C11", this);} // tgen

static void Test_S7216C11()
{
  extern Class_Descriptor cd_S7216C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7216C11, buf);
    S7216C11 *dp, &lv = *(dp=new (buf) S7216C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7216C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7216C11)");
    check_field_offset(lv, s7216c11f0, ABISELECT(8,4), "S7216C11.s7216c11f0");
    check_field_offset(lv, s7216c11f1, ABISELECT(24,12), "S7216C11.s7216c11f1");
    test_class_info(&lv, &cd_S7216C11);
    dp->~S7216C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C11(Test_S7216C11, "S7216C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7216C11C1Ev();
extern void _ZN8S7216C11D1Ev();
Name_Map name_map_S7216C11[] = {
  NSPAIR(_ZN8S7216C11C1Ev),
  NSPAIR(_ZN8S7216C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7216C11[];
extern void _ZN8S7216C113v42Ev();
extern void _ZN8S7216C113v43Ev();
extern void _ZN8S7216C113v44Ev();
extern void _ZN8S7216C113v45Ev();
extern void _ZN8S7216C113v46Ev();
static  VTBL_ENTRY vtc_S7216C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7216C11[0]),
  (VTBL_ENTRY)&_ZN8S7216C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v46Ev,
};
extern VTBL_ENTRY _ZTI8S7216C11[];
extern  VTBL_ENTRY _ZTV8S7216C11[];
Class_Descriptor cd_S7216C11 = {  "S7216C11", // class name
  0,0,//no base classes
  &(vtc_S7216C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7216C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7216C11),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  S7216C1  : S7216C2 , S7216C7 , virtual S7216C8 , S7216C11 {
  virtual  ~S7216C1(); // _ZN7S7216C1D2Ev
  virtual void  v1(); // _ZN7S7216C12v1Ev
  virtual void  v2(); // _ZN7S7216C12v2Ev
  virtual void  v3(); // _ZN7S7216C12v3Ev
  virtual void  v4(); // _ZN7S7216C12v4Ev
  S7216C1(); // tgen
};
//SIG(1 S7216C1) C1{ BC2{ VBC3{ BC4{ BC5{ v5 v6 v7 v8 Fp Fc[2]} Fp[4]} VBC5 vd v9 v10 v11 v12 v13 v14 v15 Fi} BC6{ v16 v17 v18 v19 FL[5] Fp} vd v20 v21 v22 v23 v24 v25 FD} BC7{ v26 v27 v28 v29 v30 FC4} VBC8{ VBC9{ v31 FD} BC10{ BC4 v32 v33 v34} v35 v36 v37 v38 v39 v40 v41 Fp} BC11{ v42 v43 v44 v45 v46 Fp[2] Fc} vd v1 v2 v3 v4}


 S7216C1 ::~S7216C1(){ note_dtor("S7216C1", this);}
void  S7216C1 ::v1(){vfunc_called(this, "_ZN7S7216C12v1Ev");}
void  S7216C1 ::v2(){vfunc_called(this, "_ZN7S7216C12v2Ev");}
void  S7216C1 ::v3(){vfunc_called(this, "_ZN7S7216C12v3Ev");}
void  S7216C1 ::v4(){vfunc_called(this, "_ZN7S7216C12v4Ev");}
S7216C1 ::S7216C1(){ note_ctor("S7216C1", this);} // tgen

static void Test_S7216C1()
{
  extern Class_Descriptor cd_S7216C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,51)];
    init_test(&cd_S7216C1, buf);
    S7216C1 *dp, &lv = *(dp=new (buf) S7216C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,200), "sizeof(S7216C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7216C1)");
    check_base_class_offset(lv, (S7216C5*)(S7216C4*)(S7216C3*), ABISELECT(176,108), "S7216C1");
    check_base_class_offset(lv, (S7216C4*)(S7216C3*), ABISELECT(176,108), "S7216C1");
    /*is_ambiguous_... S7216C3::S7216C5 */ AMB_check_base_class_offset(lv, (S7216C5*)(S7216C3*), ABISELECT(240,140), "S7216C1");
    check_base_class_offset(lv, (S7216C3*)(S7216C2*), ABISELECT(176,108), "S7216C1");
    check_base_class_offset(lv, (S7216C6*)(S7216C2*), 0, "S7216C1");
    check_base_class_offset(lv, (S7216C2*), 0, "S7216C1");
    check_base_class_offset(lv, (S7216C7*), ABISELECT(80,60), "S7216C1");
    check_base_class_offset(lv, (S7216C9*)(S7216C8*), ABISELECT(336,184), "S7216C1");
    check_base_class_offset(lv, (S7216C5*)(S7216C4*)(S7216C10*)(S7216C8*), ABISELECT(264,152), "S7216C1");
    check_base_class_offset(lv, (S7216C4*)(S7216C10*)(S7216C8*), ABISELECT(264,152), "S7216C1");
    check_base_class_offset(lv, (S7216C10*)(S7216C8*), ABISELECT(264,152), "S7216C1");
    check_base_class_offset(lv, (S7216C8*), ABISELECT(264,152), "S7216C1");
    check_base_class_offset(lv, (S7216C11*), ABISELECT(144,92), "S7216C1");
    test_class_info(&lv, &cd_S7216C1);
    dp->~S7216C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7216C1(Test_S7216C1, "S7216C1", ABISELECT(368,200));

#else // __cplusplus

extern void _ZN7S7216C1C1Ev();
extern void _ZN7S7216C1D2Ev();
Name_Map name_map_S7216C1[] = {
  NSPAIR(_ZN7S7216C1C1Ev),
  NSPAIR(_ZN7S7216C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C4;
extern VTBL_ENTRY _ZTI7S7216C4[];
extern  VTBL_ENTRY _ZTV7S7216C4[];
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C3;
extern VTBL_ENTRY _ZTI7S7216C3[];
extern  VTBL_ENTRY _ZTV7S7216C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C3[];
extern Class_Descriptor cd_S7216C6;
extern VTBL_ENTRY _ZTI7S7216C6[];
extern  VTBL_ENTRY _ZTV7S7216C6[];
extern Class_Descriptor cd_S7216C2;
extern VTBL_ENTRY _ZTI7S7216C2[];
extern  VTBL_ENTRY _ZTV7S7216C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C2[];
extern Class_Descriptor cd_S7216C7;
extern VTBL_ENTRY _ZTI7S7216C7[];
extern  VTBL_ENTRY _ZTV7S7216C7[];
extern Class_Descriptor cd_S7216C9;
extern VTBL_ENTRY _ZTI7S7216C9[];
extern  VTBL_ENTRY _ZTV7S7216C9[];
extern Class_Descriptor cd_S7216C5;
extern VTBL_ENTRY _ZTI7S7216C5[];
extern  VTBL_ENTRY _ZTV7S7216C5[];
extern Class_Descriptor cd_S7216C4;
extern VTBL_ENTRY _ZTI7S7216C4[];
extern  VTBL_ENTRY _ZTV7S7216C4[];
extern Class_Descriptor cd_S7216C10;
extern VTBL_ENTRY _ZTI8S7216C10[];
extern  VTBL_ENTRY _ZTV8S7216C10[];
extern Class_Descriptor cd_S7216C8;
extern VTBL_ENTRY _ZTI7S7216C8[];
extern  VTBL_ENTRY _ZTV7S7216C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C8[];
extern Class_Descriptor cd_S7216C11;
extern VTBL_ENTRY _ZTI8S7216C11[];
extern  VTBL_ENTRY _ZTV8S7216C11[];
static Base_Class bases_S7216C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7216C5,    ABISELECT(176,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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7216C4,    ABISELECT(176,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7216C5,    ABISELECT(240,140), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7216C3,    ABISELECT(176,108), //bcp->offset
    36, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7216C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7216C7,    ABISELECT(80,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7216C9,    ABISELECT(336,184), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7216C5,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7216C4,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7216C10,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7216C8,    ABISELECT(264,152), //bcp->offset
    74, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7216C11,    ABISELECT(144,92), //bcp->offset
    29, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7216C1[];
extern void _ZN7S7216C63v16Ev();
extern void _ZN7S7216C63v17Ev();
extern void _ZN7S7216C63v18Ev();
extern void _ZN7S7216C63v19Ev();
extern void _ZN7S7216C1D1Ev();
extern void _ZN7S7216C1D0Ev();
extern void _ZN7S7216C23v20Ev();
extern void _ZN7S7216C23v21Ev();
extern void _ZN7S7216C23v22Ev();
extern void _ZN7S7216C23v23Ev();
extern void _ZN7S7216C23v24Ev();
extern void _ZN7S7216C23v25Ev();
extern void _ZN7S7216C12v1Ev();
extern void _ZN7S7216C12v2Ev();
extern void _ZN7S7216C12v3Ev();
extern void _ZN7S7216C12v4Ev();
extern void _ZN7S7216C73v26Ev();
extern void _ZN7S7216C73v27Ev();
extern void _ZN7S7216C73v28Ev();
extern void _ZN7S7216C73v29Ev();
extern void _ZN7S7216C73v30Ev();
extern void _ZN8S7216C113v42Ev();
extern void _ZN8S7216C113v43Ev();
extern void _ZN8S7216C113v44Ev();
extern void _ZN8S7216C113v45Ev();
extern void _ZN8S7216C113v46Ev();
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7216C1D1Ev,_ZTv0_n32_N7S7216C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S7216C1D1Ev,_ZThn108_N7S7216C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7216C1D0Ev,_ZTv0_n32_N7S7216C1D0Ev)();
extern void ABISELECT(_ZThn176_N7S7216C1D0Ev,_ZThn108_N7S7216C1D0Ev)() __attribute__((weak));
extern void _ZN7S7216C32v9Ev();
extern void _ZN7S7216C33v10Ev();
extern void _ZN7S7216C33v11Ev();
extern void _ZN7S7216C33v12Ev();
extern void _ZN7S7216C33v13Ev();
extern void _ZN7S7216C33v14Ev();
extern void _ZN7S7216C33v15Ev();
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN8S7216C103v32Ev();
extern void _ZN8S7216C103v33Ev();
extern void _ZN8S7216C103v34Ev();
extern void _ZN7S7216C83v35Ev();
extern void _ZN7S7216C83v36Ev();
extern void _ZN7S7216C83v37Ev();
extern void _ZN7S7216C83v38Ev();
extern void _ZN7S7216C83v39Ev();
extern void _ZN7S7216C83v40Ev();
extern void _ZN7S7216C83v41Ev();
extern void _ZN7S7216C93v31Ev();
static  VTBL_ENTRY vtc_S7216C1[] = {
  ABISELECT(336,184),
  ABISELECT(264,152),
  ABISELECT(240,140),
  ABISELECT(176,108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C1[0]),
  (VTBL_ENTRY)&_ZN7S7216C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7216C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7216C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7216C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7216C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7216C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7216C12v4Ev,
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S7216C1[0]),
  (VTBL_ENTRY)&_ZN7S7216C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v29Ev,
  (VTBL_ENTRY)&_ZN7S7216C73v30Ev,
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7216C1[0]),
  (VTBL_ENTRY)&_ZN8S7216C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7216C113v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-108),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI7S7216C1[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7216C1D1Ev,_ZTv0_n32_N7S7216C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7216C1D0Ev,_ZTv0_n32_N7S7216C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7216C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S7216C1[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,32),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI7S7216C1[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v34Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v38Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v39Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v40Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v41Ev,
  0,
  ABISELECT(-336,-184),
  (VTBL_ENTRY)&(_ZTI7S7216C1[0]),
  (VTBL_ENTRY)&_ZN7S7216C93v31Ev,
};
extern VTBL_ENTRY _ZTV7S7216C1[];
extern void _ZN7S7216C63v16Ev();
extern void _ZN7S7216C63v17Ev();
extern void _ZN7S7216C63v18Ev();
extern void _ZN7S7216C63v19Ev();
extern void _ZN7S7216C2D1Ev();
extern void _ZN7S7216C2D0Ev();
extern void _ZN7S7216C23v20Ev();
extern void _ZN7S7216C23v21Ev();
extern void _ZN7S7216C23v22Ev();
extern void _ZN7S7216C23v23Ev();
extern void _ZN7S7216C23v24Ev();
extern void _ZN7S7216C23v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C2__7S7216C1[] = {
  ABISELECT(240,140),
  ABISELECT(176,108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C2[0]),
  (VTBL_ENTRY)&_ZN7S7216C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7216C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7216C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7216C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7216C23v25Ev,
};
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7216C2D1Ev,_ZTv0_n32_N7S7216C2D1Ev)();
extern void ABISELECT(_ZThn176_N7S7216C2D1Ev,_ZThn108_N7S7216C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7216C2D0Ev,_ZTv0_n32_N7S7216C2D0Ev)();
extern void ABISELECT(_ZThn176_N7S7216C2D0Ev,_ZThn108_N7S7216C2D0Ev)() __attribute__((weak));
extern void _ZN7S7216C32v9Ev();
extern void _ZN7S7216C33v10Ev();
extern void _ZN7S7216C33v11Ev();
extern void _ZN7S7216C33v12Ev();
extern void _ZN7S7216C33v13Ev();
extern void _ZN7S7216C33v14Ev();
extern void _ZN7S7216C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C3__7S7216C2__7S7216C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-108),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI7S7216C2[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7216C2D1Ev,_ZTv0_n32_N7S7216C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7216C2D0Ev,_ZTv0_n32_N7S7216C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7216C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v15Ev,
};
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C5__A1__7S7216C2__7S7216C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI7S7216C2[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
};
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN7S7216C3D1Ev();
extern void _ZN7S7216C3D0Ev();
extern void _ZN7S7216C32v9Ev();
extern void _ZN7S7216C33v10Ev();
extern void _ZN7S7216C33v11Ev();
extern void _ZN7S7216C33v12Ev();
extern void _ZN7S7216C33v13Ev();
extern void _ZN7S7216C33v14Ev();
extern void _ZN7S7216C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C3__7S7216C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C3[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7216C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7216C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7216C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7216C33v15Ev,
};
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C5__A1__7S7216C3__7S7216C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7216C3[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
};
extern void _ZN7S7216C52v5Ev();
extern void _ZN7S7216C52v6Ev();
extern void _ZN7S7216C52v7Ev();
extern void _ZN7S7216C52v8Ev();
extern void _ZN8S7216C103v32Ev();
extern void _ZN8S7216C103v33Ev();
extern void _ZN8S7216C103v34Ev();
extern void _ZN7S7216C83v35Ev();
extern void _ZN7S7216C83v36Ev();
extern void _ZN7S7216C83v37Ev();
extern void _ZN7S7216C83v38Ev();
extern void _ZN7S7216C83v39Ev();
extern void _ZN7S7216C83v40Ev();
extern void _ZN7S7216C83v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C8__7S7216C1[] = {
  ABISELECT(72,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7216C8[0]),
  (VTBL_ENTRY)&_ZN7S7216C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7216C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7216C103v34Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v38Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v39Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v40Ev,
  (VTBL_ENTRY)&_ZN7S7216C83v41Ev,
};
extern void _ZN7S7216C93v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7216C9__7S7216C8__7S7216C1[] = {
  0,
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI7S7216C8[0]),
  (VTBL_ENTRY)&_ZN7S7216C93v31Ev,
};
static  VTT_ENTRY vtt_S7216C1[] = {
  {&(_ZTV7S7216C1[6]),  6,109},
  {&(_tg__ZTV7S7216C2__7S7216C1[4]),  4,16},
  {&(_tg__ZTV7S7216C3__7S7216C2__7S7216C1[15]),  15,28},
  {&(_tg__ZTV7S7216C5__A1__7S7216C2__7S7216C1[6]),  6,10},
  {&(_ZTV7S7216C1[51]),  51,109},
  {&(_ZTV7S7216C1[70]),  70,109},
  {&(_ZTV7S7216C1[91]),  91,109},
  {&(_ZTV7S7216C1[108]),  108,109},
  {&(_tg__ZTV7S7216C3__7S7216C1[3]),  3,16},
  {&(_tg__ZTV7S7216C5__A1__7S7216C3__7S7216C1[6]),  6,10},
  {&(_tg__ZTV7S7216C8__7S7216C1[3]),  3,17},
  {&(_tg__ZTV7S7216C9__7S7216C8__7S7216C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7216C1[];
extern  VTBL_ENTRY _ZTV7S7216C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7216C1[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7216C2D0Ev,_ZTv0_n32_N7S7216C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7216C2D0Ev,_ZThn108_N7S7216C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7216C2D1Ev,_ZTv0_n32_N7S7216C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7216C2D1Ev,_ZThn108_N7S7216C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7216C1D0Ev,_ZTv0_n32_N7S7216C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7216C1D0Ev,_ZThn108_N7S7216C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7216C1D1Ev,_ZTv0_n32_N7S7216C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7216C1D1Ev,_ZThn108_N7S7216C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7216C1 = {  "S7216C1", // class name
  bases_S7216C1, 13,
  &(vtc_S7216C1[0]), // expected_vtbl_contents
  &(vtt_S7216C1[0]), // expected_vtt_contents
  ABISELECT(368,200), // object size
  NSPAIRA(_ZTI7S7216C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7216C1),109, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7216C1),12, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7215C5  {
  void *s7215c5f0;
  char s7215c5f1[2];
  virtual void  v5(); // _ZN7S7215C52v5Ev
  virtual void  v6(); // _ZN7S7215C52v6Ev
  virtual void  v7(); // _ZN7S7215C52v7Ev
  virtual void  v8(); // _ZN7S7215C52v8Ev
  ~S7215C5(); // tgen
  S7215C5(); // tgen
};
//SIG(-1 S7215C5) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S7215C5 ::v5(){vfunc_called(this, "_ZN7S7215C52v5Ev");}
void  S7215C5 ::v6(){vfunc_called(this, "_ZN7S7215C52v6Ev");}
void  S7215C5 ::v7(){vfunc_called(this, "_ZN7S7215C52v7Ev");}
void  S7215C5 ::v8(){vfunc_called(this, "_ZN7S7215C52v8Ev");}
S7215C5 ::~S7215C5(){ note_dtor("S7215C5", this);} // tgen
S7215C5 ::S7215C5(){ note_ctor("S7215C5", this);} // tgen

static void Test_S7215C5()
{
  extern Class_Descriptor cd_S7215C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7215C5, buf);
    S7215C5 *dp, &lv = *(dp=new (buf) S7215C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7215C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7215C5)");
    check_field_offset(lv, s7215c5f0, ABISELECT(8,4), "S7215C5.s7215c5f0");
    check_field_offset(lv, s7215c5f1, ABISELECT(16,8), "S7215C5.s7215c5f1");
    test_class_info(&lv, &cd_S7215C5);
    dp->~S7215C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C5(Test_S7215C5, "S7215C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7215C5C1Ev();
extern void _ZN7S7215C5D1Ev();
Name_Map name_map_S7215C5[] = {
  NSPAIR(_ZN7S7215C5C1Ev),
  NSPAIR(_ZN7S7215C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7215C5[];
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
static  VTBL_ENTRY vtc_S7215C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C5[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
Class_Descriptor cd_S7215C5 = {  "S7215C5", // class name
  0,0,//no base classes
  &(vtc_S7215C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7215C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7215C5),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  S7215C4  : S7215C5 {
  void *s7215c4f0[4];
  ~S7215C4(); // tgen
  S7215C4(); // tgen
};
//SIG(-1 S7215C4) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S7215C4()
{
  extern Class_Descriptor cd_S7215C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7215C4, buf);
    S7215C4 *dp, &lv = *(dp=new (buf) S7215C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7215C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7215C4)");
    check_base_class_offset(lv, (S7215C5*), 0, "S7215C4");
    check_field_offset(lv, s7215c4f0, ABISELECT(24,12), "S7215C4.s7215c4f0");
    test_class_info(&lv, &cd_S7215C4);
    dp->~S7215C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C4(Test_S7215C4, "S7215C4", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7215C4C1Ev();
extern void _ZN7S7215C4D1Ev();
Name_Map name_map_S7215C4[] = {
  NSPAIR(_ZN7S7215C4C1Ev),
  NSPAIR(_ZN7S7215C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
static Base_Class bases_S7215C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7215C5,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7215C4[];
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
static  VTBL_ENTRY vtc_S7215C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C4[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S7215C4[];
extern  VTBL_ENTRY _ZTV7S7215C4[];
Class_Descriptor cd_S7215C4 = {  "S7215C4", // class name
  bases_S7215C4, 1,
  &(vtc_S7215C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7215C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7215C4),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  S7215C3  : S7215C4 , virtual S7215C5 {
  int s7215c3f0;
  virtual  ~S7215C3(); // _ZN7S7215C3D2Ev
  virtual void  v9(); // _ZN7S7215C32v9Ev
  virtual void  v10(); // _ZN7S7215C33v10Ev
  virtual void  v11(); // _ZN7S7215C33v11Ev
  virtual void  v12(); // _ZN7S7215C33v12Ev
  virtual void  v13(); // _ZN7S7215C33v13Ev
  virtual void  v14(); // _ZN7S7215C33v14Ev
  virtual void  v15(); // _ZN7S7215C33v15Ev
  S7215C3(); // tgen
};
//SIG(-1 S7215C3) C1{ BC2{ BC3{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S7215C3 ::~S7215C3(){ note_dtor("S7215C3", this);}
void  S7215C3 ::v9(){vfunc_called(this, "_ZN7S7215C32v9Ev");}
void  S7215C3 ::v10(){vfunc_called(this, "_ZN7S7215C33v10Ev");}
void  S7215C3 ::v11(){vfunc_called(this, "_ZN7S7215C33v11Ev");}
void  S7215C3 ::v12(){vfunc_called(this, "_ZN7S7215C33v12Ev");}
void  S7215C3 ::v13(){vfunc_called(this, "_ZN7S7215C33v13Ev");}
void  S7215C3 ::v14(){vfunc_called(this, "_ZN7S7215C33v14Ev");}
void  S7215C3 ::v15(){vfunc_called(this, "_ZN7S7215C33v15Ev");}
S7215C3 ::S7215C3(){ note_ctor("S7215C3", this);} // tgen

static void Test_S7215C3()
{
  extern Class_Descriptor cd_S7215C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S7215C3, buf);
    S7215C3 *dp, &lv = *(dp=new (buf) S7215C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S7215C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7215C3)");
    check_base_class_offset(lv, (S7215C5*)(S7215C4*), 0, "S7215C3");
    check_base_class_offset(lv, (S7215C4*), 0, "S7215C3");
    /*is_ambiguous_... S7215C3::S7215C5 */ AMB_check_base_class_offset(lv, (S7215C5*), ABISELECT(64,32), "S7215C3");
    check_field_offset(lv, s7215c3f0, ABISELECT(56,28), "S7215C3.s7215c3f0");
    test_class_info(&lv, &cd_S7215C3);
    dp->~S7215C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C3(Test_S7215C3, "S7215C3", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S7215C3C1Ev();
extern void _ZN7S7215C3D2Ev();
Name_Map name_map_S7215C3[] = {
  NSPAIR(_ZN7S7215C3C1Ev),
  NSPAIR(_ZN7S7215C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C4;
extern VTBL_ENTRY _ZTI7S7215C4[];
extern  VTBL_ENTRY _ZTV7S7215C4[];
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
static Base_Class bases_S7215C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7215C5,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7215C3[];
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN7S7215C3D1Ev();
extern void _ZN7S7215C3D0Ev();
extern void _ZN7S7215C32v9Ev();
extern void _ZN7S7215C33v10Ev();
extern void _ZN7S7215C33v11Ev();
extern void _ZN7S7215C33v12Ev();
extern void _ZN7S7215C33v13Ev();
extern void _ZN7S7215C33v14Ev();
extern void _ZN7S7215C33v15Ev();
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
static  VTBL_ENTRY vtc_S7215C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C3[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7215C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7215C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7215C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7215C3[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S7215C3[];
static  VTT_ENTRY vtt_S7215C3[] = {
  {&(_ZTV7S7215C3[3]),  3,26},
  {&(_ZTV7S7215C3[22]),  22,26},
};
extern VTBL_ENTRY _ZTI7S7215C3[];
extern  VTBL_ENTRY _ZTV7S7215C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C3[];
Class_Descriptor cd_S7215C3 = {  "S7215C3", // class name
  bases_S7215C3, 3,
  &(vtc_S7215C3[0]), // expected_vtbl_contents
  &(vtt_S7215C3[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S7215C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7215C3),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7215C3),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7215C6  {
  long s7215c6f0[5];
  void *s7215c6f1;
  virtual void  v16(); // _ZN7S7215C63v16Ev
  virtual void  v17(); // _ZN7S7215C63v17Ev
  virtual void  v18(); // _ZN7S7215C63v18Ev
  virtual void  v19(); // _ZN7S7215C63v19Ev
  ~S7215C6(); // tgen
  S7215C6(); // tgen
};
//SIG(-1 S7215C6) C1{ v1 v2 v3 v4 Fl[5] Fp}


void  S7215C6 ::v16(){vfunc_called(this, "_ZN7S7215C63v16Ev");}
void  S7215C6 ::v17(){vfunc_called(this, "_ZN7S7215C63v17Ev");}
void  S7215C6 ::v18(){vfunc_called(this, "_ZN7S7215C63v18Ev");}
void  S7215C6 ::v19(){vfunc_called(this, "_ZN7S7215C63v19Ev");}
S7215C6 ::~S7215C6(){ note_dtor("S7215C6", this);} // tgen
S7215C6 ::S7215C6(){ note_ctor("S7215C6", this);} // tgen

static void Test_S7215C6()
{
  extern Class_Descriptor cd_S7215C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7215C6, buf);
    S7215C6 *dp, &lv = *(dp=new (buf) S7215C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7215C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7215C6)");
    check_field_offset(lv, s7215c6f0, ABISELECT(8,4), "S7215C6.s7215c6f0");
    check_field_offset(lv, s7215c6f1, ABISELECT(48,24), "S7215C6.s7215c6f1");
    test_class_info(&lv, &cd_S7215C6);
    dp->~S7215C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C6(Test_S7215C6, "S7215C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7215C6C1Ev();
extern void _ZN7S7215C6D1Ev();
Name_Map name_map_S7215C6[] = {
  NSPAIR(_ZN7S7215C6C1Ev),
  NSPAIR(_ZN7S7215C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7215C6[];
extern void _ZN7S7215C63v16Ev();
extern void _ZN7S7215C63v17Ev();
extern void _ZN7S7215C63v18Ev();
extern void _ZN7S7215C63v19Ev();
static  VTBL_ENTRY vtc_S7215C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C6[0]),
  (VTBL_ENTRY)&_ZN7S7215C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S7215C6[];
extern  VTBL_ENTRY _ZTV7S7215C6[];
Class_Descriptor cd_S7215C6 = {  "S7215C6", // class name
  0,0,//no base classes
  &(vtc_S7215C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7215C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7215C6),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  S7215C2  : virtual S7215C3 , S7215C6 {
  long double s7215c2f0;
  virtual  ~S7215C2(); // _ZN7S7215C2D2Ev
  virtual void  v20(); // _ZN7S7215C23v20Ev
  virtual void  v21(); // _ZN7S7215C23v21Ev
  virtual void  v22(); // _ZN7S7215C23v22Ev
  virtual void  v23(); // _ZN7S7215C23v23Ev
  virtual void  v24(); // _ZN7S7215C23v24Ev
  virtual void  v25(); // _ZN7S7215C23v25Ev
  S7215C2(); // tgen
};
//SIG(-1 S7215C2) C1{ VBC2{ BC3{ BC4{ v7 v8 v9 v10 Fp Fc[2]} Fp[4]} VBC4 vd v11 v12 v13 v14 v15 v16 v17 Fi} BC5{ v18 v19 v20 v21 Fl[5] Fp} vd v1 v2 v3 v4 v5 v6 FD}


 S7215C2 ::~S7215C2(){ note_dtor("S7215C2", this);}
void  S7215C2 ::v20(){vfunc_called(this, "_ZN7S7215C23v20Ev");}
void  S7215C2 ::v21(){vfunc_called(this, "_ZN7S7215C23v21Ev");}
void  S7215C2 ::v22(){vfunc_called(this, "_ZN7S7215C23v22Ev");}
void  S7215C2 ::v23(){vfunc_called(this, "_ZN7S7215C23v23Ev");}
void  S7215C2 ::v24(){vfunc_called(this, "_ZN7S7215C23v24Ev");}
void  S7215C2 ::v25(){vfunc_called(this, "_ZN7S7215C23v25Ev");}
S7215C2 ::S7215C2(){ note_ctor("S7215C2", this);} // tgen

static void Test_S7215C2()
{
  extern Class_Descriptor cd_S7215C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S7215C2, buf);
    S7215C2 *dp, &lv = *(dp=new (buf) S7215C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S7215C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7215C2)");
    check_base_class_offset(lv, (S7215C5*)(S7215C4*)(S7215C3*), ABISELECT(80,40), "S7215C2");
    check_base_class_offset(lv, (S7215C4*)(S7215C3*), ABISELECT(80,40), "S7215C2");
    /*is_ambiguous_... S7215C3::S7215C5 */ AMB_check_base_class_offset(lv, (S7215C5*)(S7215C3*), ABISELECT(144,72), "S7215C2");
    check_base_class_offset(lv, (S7215C3*), ABISELECT(80,40), "S7215C2");
    check_base_class_offset(lv, (S7215C6*), 0, "S7215C2");
    check_field_offset(lv, s7215c2f0, ABISELECT(64,28), "S7215C2.s7215c2f0");
    test_class_info(&lv, &cd_S7215C2);
    dp->~S7215C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C2(Test_S7215C2, "S7215C2", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN7S7215C2C1Ev();
extern void _ZN7S7215C2D2Ev();
Name_Map name_map_S7215C2[] = {
  NSPAIR(_ZN7S7215C2C1Ev),
  NSPAIR(_ZN7S7215C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C4;
extern VTBL_ENTRY _ZTI7S7215C4[];
extern  VTBL_ENTRY _ZTV7S7215C4[];
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C3;
extern VTBL_ENTRY _ZTI7S7215C3[];
extern  VTBL_ENTRY _ZTV7S7215C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C3[];
extern Class_Descriptor cd_S7215C6;
extern VTBL_ENTRY _ZTI7S7215C6[];
extern  VTBL_ENTRY _ZTV7S7215C6[];
static Base_Class bases_S7215C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7215C5,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7215C4,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7215C5,    ABISELECT(144,72), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7215C3,    ABISELECT(80,40), //bcp->offset
    16, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7215C2[];
extern void _ZN7S7215C63v16Ev();
extern void _ZN7S7215C63v17Ev();
extern void _ZN7S7215C63v18Ev();
extern void _ZN7S7215C63v19Ev();
extern void _ZN7S7215C2D1Ev();
extern void _ZN7S7215C2D0Ev();
extern void _ZN7S7215C23v20Ev();
extern void _ZN7S7215C23v21Ev();
extern void _ZN7S7215C23v22Ev();
extern void _ZN7S7215C23v23Ev();
extern void _ZN7S7215C23v24Ev();
extern void _ZN7S7215C23v25Ev();
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7215C2D1Ev,_ZTv0_n32_N7S7215C2D1Ev)();
extern void ABISELECT(_ZThn80_N7S7215C2D1Ev,_ZThn40_N7S7215C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7215C2D0Ev,_ZTv0_n32_N7S7215C2D0Ev)();
extern void ABISELECT(_ZThn80_N7S7215C2D0Ev,_ZThn40_N7S7215C2D0Ev)() __attribute__((weak));
extern void _ZN7S7215C32v9Ev();
extern void _ZN7S7215C33v10Ev();
extern void _ZN7S7215C33v11Ev();
extern void _ZN7S7215C33v12Ev();
extern void _ZN7S7215C33v13Ev();
extern void _ZN7S7215C33v14Ev();
extern void _ZN7S7215C33v15Ev();
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
static  VTBL_ENTRY vtc_S7215C2[] = {
  ABISELECT(144,72),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C2[0]),
  (VTBL_ENTRY)&_ZN7S7215C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7215C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7215C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7215C2[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7215C2D1Ev,_ZTv0_n32_N7S7215C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7215C2D0Ev,_ZTv0_n32_N7S7215C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7215C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7215C2[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
};
extern VTBL_ENTRY _ZTV7S7215C2[];
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN7S7215C3D1Ev();
extern void _ZN7S7215C3D0Ev();
extern void _ZN7S7215C32v9Ev();
extern void _ZN7S7215C33v10Ev();
extern void _ZN7S7215C33v11Ev();
extern void _ZN7S7215C33v12Ev();
extern void _ZN7S7215C33v13Ev();
extern void _ZN7S7215C33v14Ev();
extern void _ZN7S7215C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C3__7S7215C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C3[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7215C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7215C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7215C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v15Ev,
};
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C5__A1__7S7215C3__7S7215C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7215C3[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
};
static  VTT_ENTRY vtt_S7215C2[] = {
  {&(_ZTV7S7215C2[4]),  4,54},
  {&(_ZTV7S7215C2[31]),  31,54},
  {&(_ZTV7S7215C2[50]),  50,54},
  {&(_tg__ZTV7S7215C3__7S7215C2[3]),  3,16},
  {&(_tg__ZTV7S7215C5__A1__7S7215C3__7S7215C2[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S7215C2[];
extern  VTBL_ENTRY _ZTV7S7215C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C2[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7215C2D0Ev,_ZTv0_n32_N7S7215C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7215C2D0Ev,_ZThn40_N7S7215C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7215C2D1Ev,_ZTv0_n32_N7S7215C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7215C2D1Ev,_ZThn40_N7S7215C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7215C2 = {  "S7215C2", // class name
  bases_S7215C2, 5,
  &(vtc_S7215C2[0]), // expected_vtbl_contents
  &(vtt_S7215C2[0]), // expected_vtt_contents
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI7S7215C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7215C2),54, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7215C2),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7215C7  {
  ::S7215C4 s7215c7f0;
  virtual void  v26(); // _ZN7S7215C73v26Ev
  virtual void  v27(); // _ZN7S7215C73v27Ev
  virtual void  v28(); // _ZN7S7215C73v28Ev
  virtual void  v29(); // _ZN7S7215C73v29Ev
  virtual void  v30(); // _ZN7S7215C73v30Ev
  ~S7215C7(); // tgen
  S7215C7(); // tgen
};
//SIG(-1 S7215C7) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v6 v7 v8 v9 Fp Fc[2]} Fp[4]}}


void  S7215C7 ::v26(){vfunc_called(this, "_ZN7S7215C73v26Ev");}
void  S7215C7 ::v27(){vfunc_called(this, "_ZN7S7215C73v27Ev");}
void  S7215C7 ::v28(){vfunc_called(this, "_ZN7S7215C73v28Ev");}
void  S7215C7 ::v29(){vfunc_called(this, "_ZN7S7215C73v29Ev");}
void  S7215C7 ::v30(){vfunc_called(this, "_ZN7S7215C73v30Ev");}
S7215C7 ::~S7215C7(){ note_dtor("S7215C7", this);} // tgen
S7215C7 ::S7215C7(){ note_ctor("S7215C7", this);} // tgen

static void Test_S7215C7()
{
  extern Class_Descriptor cd_S7215C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7215C7, buf);
    S7215C7 *dp, &lv = *(dp=new (buf) S7215C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7215C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7215C7)");
    check_field_offset(lv, s7215c7f0, ABISELECT(8,4), "S7215C7.s7215c7f0");
    test_class_info(&lv, &cd_S7215C7);
    dp->~S7215C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C7(Test_S7215C7, "S7215C7", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7215C7C1Ev();
extern void _ZN7S7215C7D1Ev();
Name_Map name_map_S7215C7[] = {
  NSPAIR(_ZN7S7215C7C1Ev),
  NSPAIR(_ZN7S7215C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7215C7[];
extern void _ZN7S7215C73v26Ev();
extern void _ZN7S7215C73v27Ev();
extern void _ZN7S7215C73v28Ev();
extern void _ZN7S7215C73v29Ev();
extern void _ZN7S7215C73v30Ev();
static  VTBL_ENTRY vtc_S7215C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C7[0]),
  (VTBL_ENTRY)&_ZN7S7215C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v29Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v30Ev,
};
extern VTBL_ENTRY _ZTI7S7215C7[];
extern  VTBL_ENTRY _ZTV7S7215C7[];
Class_Descriptor cd_S7215C7 = {  "S7215C7", // class name
  0,0,//no base classes
  &(vtc_S7215C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7215C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7215C7),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  S7215C9  {
  long double s7215c9f0;
  virtual void  v31(); // _ZN7S7215C93v31Ev
  ~S7215C9(); // tgen
  S7215C9(); // tgen
};
//SIG(-1 S7215C9) C1{ v1 FD}


void  S7215C9 ::v31(){vfunc_called(this, "_ZN7S7215C93v31Ev");}
S7215C9 ::~S7215C9(){ note_dtor("S7215C9", this);} // tgen
S7215C9 ::S7215C9(){ note_ctor("S7215C9", this);} // tgen

static void Test_S7215C9()
{
  extern Class_Descriptor cd_S7215C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S7215C9, buf);
    S7215C9 *dp, &lv = *(dp=new (buf) S7215C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7215C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7215C9)");
    check_field_offset(lv, s7215c9f0, ABISELECT(16,4), "S7215C9.s7215c9f0");
    test_class_info(&lv, &cd_S7215C9);
    dp->~S7215C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C9(Test_S7215C9, "S7215C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7215C9C1Ev();
extern void _ZN7S7215C9D1Ev();
Name_Map name_map_S7215C9[] = {
  NSPAIR(_ZN7S7215C9C1Ev),
  NSPAIR(_ZN7S7215C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7215C9[];
extern void _ZN7S7215C93v31Ev();
static  VTBL_ENTRY vtc_S7215C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C9[0]),
  (VTBL_ENTRY)&_ZN7S7215C93v31Ev,
};
extern VTBL_ENTRY _ZTI7S7215C9[];
extern  VTBL_ENTRY _ZTV7S7215C9[];
Class_Descriptor cd_S7215C9 = {  "S7215C9", // class name
  0,0,//no base classes
  &(vtc_S7215C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7215C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7215C9),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  S7215C10  : S7215C4 {
  virtual void  v32(); // _ZN8S7215C103v32Ev
  virtual void  v33(); // _ZN8S7215C103v33Ev
  virtual void  v34(); // _ZN8S7215C103v34Ev
  ~S7215C10(); // tgen
  S7215C10(); // tgen
};
//SIG(-1 S7215C10) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fc[2]} Fp[4]} v1 v2 v3}


void  S7215C10 ::v32(){vfunc_called(this, "_ZN8S7215C103v32Ev");}
void  S7215C10 ::v33(){vfunc_called(this, "_ZN8S7215C103v33Ev");}
void  S7215C10 ::v34(){vfunc_called(this, "_ZN8S7215C103v34Ev");}
S7215C10 ::~S7215C10(){ note_dtor("S7215C10", this);} // tgen
S7215C10 ::S7215C10(){ note_ctor("S7215C10", this);} // tgen

static void Test_S7215C10()
{
  extern Class_Descriptor cd_S7215C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7215C10, buf);
    S7215C10 *dp, &lv = *(dp=new (buf) S7215C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7215C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7215C10)");
    check_base_class_offset(lv, (S7215C5*)(S7215C4*), 0, "S7215C10");
    check_base_class_offset(lv, (S7215C4*), 0, "S7215C10");
    test_class_info(&lv, &cd_S7215C10);
    dp->~S7215C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C10(Test_S7215C10, "S7215C10", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S7215C10C1Ev();
extern void _ZN8S7215C10D1Ev();
Name_Map name_map_S7215C10[] = {
  NSPAIR(_ZN8S7215C10C1Ev),
  NSPAIR(_ZN8S7215C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C4;
extern VTBL_ENTRY _ZTI7S7215C4[];
extern  VTBL_ENTRY _ZTV7S7215C4[];
static Base_Class bases_S7215C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S7215C10[];
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN8S7215C103v32Ev();
extern void _ZN8S7215C103v33Ev();
extern void _ZN8S7215C103v34Ev();
static  VTBL_ENTRY vtc_S7215C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7215C10[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v34Ev,
};
extern VTBL_ENTRY _ZTI8S7215C10[];
extern  VTBL_ENTRY _ZTV8S7215C10[];
Class_Descriptor cd_S7215C10 = {  "S7215C10", // class name
  bases_S7215C10, 2,
  &(vtc_S7215C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S7215C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7215C10),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  S7215C8  : virtual S7215C9 , S7215C10 {
  void *s7215c8f0;
  virtual void  v35(); // _ZN7S7215C83v35Ev
  virtual void  v36(); // _ZN7S7215C83v36Ev
  virtual void  v37(); // _ZN7S7215C83v37Ev
  virtual void  v38(); // _ZN7S7215C83v38Ev
  virtual void  v39(); // _ZN7S7215C83v39Ev
  virtual void  v40(); // _ZN7S7215C83v40Ev
  virtual void  v41(); // _ZN7S7215C83v41Ev
  ~S7215C8(); // tgen
  S7215C8(); // tgen
};
//SIG(-1 S7215C8) C1{ VBC2{ v8 FD} BC3{ BC4{ BC5{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} v13 v14 v15} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S7215C8 ::v35(){vfunc_called(this, "_ZN7S7215C83v35Ev");}
void  S7215C8 ::v36(){vfunc_called(this, "_ZN7S7215C83v36Ev");}
void  S7215C8 ::v37(){vfunc_called(this, "_ZN7S7215C83v37Ev");}
void  S7215C8 ::v38(){vfunc_called(this, "_ZN7S7215C83v38Ev");}
void  S7215C8 ::v39(){vfunc_called(this, "_ZN7S7215C83v39Ev");}
void  S7215C8 ::v40(){vfunc_called(this, "_ZN7S7215C83v40Ev");}
void  S7215C8 ::v41(){vfunc_called(this, "_ZN7S7215C83v41Ev");}
S7215C8 ::~S7215C8(){ note_dtor("S7215C8", this);} // tgen
S7215C8 ::S7215C8(){ note_ctor("S7215C8", this);} // tgen

static void Test_S7215C8()
{
  extern Class_Descriptor cd_S7215C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S7215C8, buf);
    S7215C8 *dp, &lv = *(dp=new (buf) S7215C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7215C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7215C8)");
    check_base_class_offset(lv, (S7215C9*), ABISELECT(64,32), "S7215C8");
    check_base_class_offset(lv, (S7215C5*)(S7215C4*)(S7215C10*), 0, "S7215C8");
    check_base_class_offset(lv, (S7215C4*)(S7215C10*), 0, "S7215C8");
    check_base_class_offset(lv, (S7215C10*), 0, "S7215C8");
    check_field_offset(lv, s7215c8f0, ABISELECT(56,28), "S7215C8.s7215c8f0");
    test_class_info(&lv, &cd_S7215C8);
    dp->~S7215C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C8(Test_S7215C8, "S7215C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7215C8C1Ev();
extern void _ZN7S7215C8D1Ev();
Name_Map name_map_S7215C8[] = {
  NSPAIR(_ZN7S7215C8C1Ev),
  NSPAIR(_ZN7S7215C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7215C9;
extern VTBL_ENTRY _ZTI7S7215C9[];
extern  VTBL_ENTRY _ZTV7S7215C9[];
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C4;
extern VTBL_ENTRY _ZTI7S7215C4[];
extern  VTBL_ENTRY _ZTV7S7215C4[];
extern Class_Descriptor cd_S7215C10;
extern VTBL_ENTRY _ZTI8S7215C10[];
extern  VTBL_ENTRY _ZTV8S7215C10[];
static Base_Class bases_S7215C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7215C9,    ABISELECT(64,32), //bcp->offset
    17, //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_S7215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7215C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7215C8[];
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN8S7215C103v32Ev();
extern void _ZN8S7215C103v33Ev();
extern void _ZN8S7215C103v34Ev();
extern void _ZN7S7215C83v35Ev();
extern void _ZN7S7215C83v36Ev();
extern void _ZN7S7215C83v37Ev();
extern void _ZN7S7215C83v38Ev();
extern void _ZN7S7215C83v39Ev();
extern void _ZN7S7215C83v40Ev();
extern void _ZN7S7215C83v41Ev();
extern void _ZN7S7215C93v31Ev();
static  VTBL_ENTRY vtc_S7215C8[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C8[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v34Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v38Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v39Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v40Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v41Ev,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7215C8[0]),
  (VTBL_ENTRY)&_ZN7S7215C93v31Ev,
};
extern VTBL_ENTRY _ZTV7S7215C8[];
static  VTT_ENTRY vtt_S7215C8[] = {
  {&(_ZTV7S7215C8[3]),  3,21},
  {&(_ZTV7S7215C8[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S7215C8[];
extern  VTBL_ENTRY _ZTV7S7215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C8[];
Class_Descriptor cd_S7215C8 = {  "S7215C8", // class name
  bases_S7215C8, 4,
  &(vtc_S7215C8[0]), // expected_vtbl_contents
  &(vtt_S7215C8[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7215C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7215C8),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7215C8),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7215C11  {
  void *s7215c11f0[2];
  char s7215c11f1;
  virtual void  v42(); // _ZN8S7215C113v42Ev
  virtual void  v43(); // _ZN8S7215C113v43Ev
  virtual void  v44(); // _ZN8S7215C113v44Ev
  virtual void  v45(); // _ZN8S7215C113v45Ev
  virtual void  v46(); // _ZN8S7215C113v46Ev
  ~S7215C11(); // tgen
  S7215C11(); // tgen
};
//SIG(-1 S7215C11) C1{ v1 v2 v3 v4 v5 Fp[2] Fc}


void  S7215C11 ::v42(){vfunc_called(this, "_ZN8S7215C113v42Ev");}
void  S7215C11 ::v43(){vfunc_called(this, "_ZN8S7215C113v43Ev");}
void  S7215C11 ::v44(){vfunc_called(this, "_ZN8S7215C113v44Ev");}
void  S7215C11 ::v45(){vfunc_called(this, "_ZN8S7215C113v45Ev");}
void  S7215C11 ::v46(){vfunc_called(this, "_ZN8S7215C113v46Ev");}
S7215C11 ::~S7215C11(){ note_dtor("S7215C11", this);} // tgen
S7215C11 ::S7215C11(){ note_ctor("S7215C11", this);} // tgen

static void Test_S7215C11()
{
  extern Class_Descriptor cd_S7215C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7215C11, buf);
    S7215C11 *dp, &lv = *(dp=new (buf) S7215C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7215C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7215C11)");
    check_field_offset(lv, s7215c11f0, ABISELECT(8,4), "S7215C11.s7215c11f0");
    check_field_offset(lv, s7215c11f1, ABISELECT(24,12), "S7215C11.s7215c11f1");
    test_class_info(&lv, &cd_S7215C11);
    dp->~S7215C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C11(Test_S7215C11, "S7215C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7215C11C1Ev();
extern void _ZN8S7215C11D1Ev();
Name_Map name_map_S7215C11[] = {
  NSPAIR(_ZN8S7215C11C1Ev),
  NSPAIR(_ZN8S7215C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7215C11[];
extern void _ZN8S7215C113v42Ev();
extern void _ZN8S7215C113v43Ev();
extern void _ZN8S7215C113v44Ev();
extern void _ZN8S7215C113v45Ev();
extern void _ZN8S7215C113v46Ev();
static  VTBL_ENTRY vtc_S7215C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7215C11[0]),
  (VTBL_ENTRY)&_ZN8S7215C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v46Ev,
};
extern VTBL_ENTRY _ZTI8S7215C11[];
extern  VTBL_ENTRY _ZTV8S7215C11[];
Class_Descriptor cd_S7215C11 = {  "S7215C11", // class name
  0,0,//no base classes
  &(vtc_S7215C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7215C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7215C11),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  S7215C1  : S7215C2 , S7215C7 , virtual S7215C8 , S7215C11 {
  virtual  ~S7215C1(); // _ZN7S7215C1D2Ev
  virtual void  v1(); // _ZN7S7215C12v1Ev
  virtual void  v2(); // _ZN7S7215C12v2Ev
  virtual void  v3(); // _ZN7S7215C12v3Ev
  virtual void  v4(); // _ZN7S7215C12v4Ev
  S7215C1(); // tgen
};
//SIG(1 S7215C1) C1{ BC2{ VBC3{ BC4{ BC5{ v5 v6 v7 v8 Fp Fc[2]} Fp[4]} VBC5 vd v9 v10 v11 v12 v13 v14 v15 Fi} BC6{ v16 v17 v18 v19 Fl[5] Fp} vd v20 v21 v22 v23 v24 v25 FD} BC7{ v26 v27 v28 v29 v30 FC4} VBC8{ VBC9{ v31 FD} BC10{ BC4 v32 v33 v34} v35 v36 v37 v38 v39 v40 v41 Fp} BC11{ v42 v43 v44 v45 v46 Fp[2] Fc} vd v1 v2 v3 v4}


 S7215C1 ::~S7215C1(){ note_dtor("S7215C1", this);}
void  S7215C1 ::v1(){vfunc_called(this, "_ZN7S7215C12v1Ev");}
void  S7215C1 ::v2(){vfunc_called(this, "_ZN7S7215C12v2Ev");}
void  S7215C1 ::v3(){vfunc_called(this, "_ZN7S7215C12v3Ev");}
void  S7215C1 ::v4(){vfunc_called(this, "_ZN7S7215C12v4Ev");}
S7215C1 ::S7215C1(){ note_ctor("S7215C1", this);} // tgen

static void Test_S7215C1()
{
  extern Class_Descriptor cd_S7215C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,46)];
    init_test(&cd_S7215C1, buf);
    S7215C1 *dp, &lv = *(dp=new (buf) S7215C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,180), "sizeof(S7215C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7215C1)");
    check_base_class_offset(lv, (S7215C5*)(S7215C4*)(S7215C3*), ABISELECT(176,88), "S7215C1");
    check_base_class_offset(lv, (S7215C4*)(S7215C3*), ABISELECT(176,88), "S7215C1");
    /*is_ambiguous_... S7215C3::S7215C5 */ AMB_check_base_class_offset(lv, (S7215C5*)(S7215C3*), ABISELECT(240,120), "S7215C1");
    check_base_class_offset(lv, (S7215C3*)(S7215C2*), ABISELECT(176,88), "S7215C1");
    check_base_class_offset(lv, (S7215C6*)(S7215C2*), 0, "S7215C1");
    check_base_class_offset(lv, (S7215C2*), 0, "S7215C1");
    check_base_class_offset(lv, (S7215C7*), ABISELECT(80,40), "S7215C1");
    check_base_class_offset(lv, (S7215C9*)(S7215C8*), ABISELECT(336,164), "S7215C1");
    check_base_class_offset(lv, (S7215C5*)(S7215C4*)(S7215C10*)(S7215C8*), ABISELECT(264,132), "S7215C1");
    check_base_class_offset(lv, (S7215C4*)(S7215C10*)(S7215C8*), ABISELECT(264,132), "S7215C1");
    check_base_class_offset(lv, (S7215C10*)(S7215C8*), ABISELECT(264,132), "S7215C1");
    check_base_class_offset(lv, (S7215C8*), ABISELECT(264,132), "S7215C1");
    check_base_class_offset(lv, (S7215C11*), ABISELECT(144,72), "S7215C1");
    test_class_info(&lv, &cd_S7215C1);
    dp->~S7215C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7215C1(Test_S7215C1, "S7215C1", ABISELECT(368,180));

#else // __cplusplus

extern void _ZN7S7215C1C1Ev();
extern void _ZN7S7215C1D2Ev();
Name_Map name_map_S7215C1[] = {
  NSPAIR(_ZN7S7215C1C1Ev),
  NSPAIR(_ZN7S7215C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C4;
extern VTBL_ENTRY _ZTI7S7215C4[];
extern  VTBL_ENTRY _ZTV7S7215C4[];
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C3;
extern VTBL_ENTRY _ZTI7S7215C3[];
extern  VTBL_ENTRY _ZTV7S7215C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C3[];
extern Class_Descriptor cd_S7215C6;
extern VTBL_ENTRY _ZTI7S7215C6[];
extern  VTBL_ENTRY _ZTV7S7215C6[];
extern Class_Descriptor cd_S7215C2;
extern VTBL_ENTRY _ZTI7S7215C2[];
extern  VTBL_ENTRY _ZTV7S7215C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C2[];
extern Class_Descriptor cd_S7215C7;
extern VTBL_ENTRY _ZTI7S7215C7[];
extern  VTBL_ENTRY _ZTV7S7215C7[];
extern Class_Descriptor cd_S7215C9;
extern VTBL_ENTRY _ZTI7S7215C9[];
extern  VTBL_ENTRY _ZTV7S7215C9[];
extern Class_Descriptor cd_S7215C5;
extern VTBL_ENTRY _ZTI7S7215C5[];
extern  VTBL_ENTRY _ZTV7S7215C5[];
extern Class_Descriptor cd_S7215C4;
extern VTBL_ENTRY _ZTI7S7215C4[];
extern  VTBL_ENTRY _ZTV7S7215C4[];
extern Class_Descriptor cd_S7215C10;
extern VTBL_ENTRY _ZTI8S7215C10[];
extern  VTBL_ENTRY _ZTV8S7215C10[];
extern Class_Descriptor cd_S7215C8;
extern VTBL_ENTRY _ZTI7S7215C8[];
extern  VTBL_ENTRY _ZTV7S7215C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C8[];
extern Class_Descriptor cd_S7215C11;
extern VTBL_ENTRY _ZTI8S7215C11[];
extern  VTBL_ENTRY _ZTV8S7215C11[];
static Base_Class bases_S7215C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7215C5,    ABISELECT(176,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
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7215C4,    ABISELECT(176,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7215C5,    ABISELECT(240,120), //bcp->offset
    64, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7215C3,    ABISELECT(176,88), //bcp->offset
    36, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S7215C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7215C7,    ABISELECT(80,40), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7215C9,    ABISELECT(336,164), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7215C5,    ABISELECT(264,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7215C4,    ABISELECT(264,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7215C10,    ABISELECT(264,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7215C8,    ABISELECT(264,132), //bcp->offset
    74, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7215C11,    ABISELECT(144,72), //bcp->offset
    29, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7215C1[];
extern void _ZN7S7215C63v16Ev();
extern void _ZN7S7215C63v17Ev();
extern void _ZN7S7215C63v18Ev();
extern void _ZN7S7215C63v19Ev();
extern void _ZN7S7215C1D1Ev();
extern void _ZN7S7215C1D0Ev();
extern void _ZN7S7215C23v20Ev();
extern void _ZN7S7215C23v21Ev();
extern void _ZN7S7215C23v22Ev();
extern void _ZN7S7215C23v23Ev();
extern void _ZN7S7215C23v24Ev();
extern void _ZN7S7215C23v25Ev();
extern void _ZN7S7215C12v1Ev();
extern void _ZN7S7215C12v2Ev();
extern void _ZN7S7215C12v3Ev();
extern void _ZN7S7215C12v4Ev();
extern void _ZN7S7215C73v26Ev();
extern void _ZN7S7215C73v27Ev();
extern void _ZN7S7215C73v28Ev();
extern void _ZN7S7215C73v29Ev();
extern void _ZN7S7215C73v30Ev();
extern void _ZN8S7215C113v42Ev();
extern void _ZN8S7215C113v43Ev();
extern void _ZN8S7215C113v44Ev();
extern void _ZN8S7215C113v45Ev();
extern void _ZN8S7215C113v46Ev();
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7215C1D1Ev,_ZTv0_n32_N7S7215C1D1Ev)();
extern void ABISELECT(_ZThn176_N7S7215C1D1Ev,_ZThn88_N7S7215C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7215C1D0Ev,_ZTv0_n32_N7S7215C1D0Ev)();
extern void ABISELECT(_ZThn176_N7S7215C1D0Ev,_ZThn88_N7S7215C1D0Ev)() __attribute__((weak));
extern void _ZN7S7215C32v9Ev();
extern void _ZN7S7215C33v10Ev();
extern void _ZN7S7215C33v11Ev();
extern void _ZN7S7215C33v12Ev();
extern void _ZN7S7215C33v13Ev();
extern void _ZN7S7215C33v14Ev();
extern void _ZN7S7215C33v15Ev();
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN8S7215C103v32Ev();
extern void _ZN8S7215C103v33Ev();
extern void _ZN8S7215C103v34Ev();
extern void _ZN7S7215C83v35Ev();
extern void _ZN7S7215C83v36Ev();
extern void _ZN7S7215C83v37Ev();
extern void _ZN7S7215C83v38Ev();
extern void _ZN7S7215C83v39Ev();
extern void _ZN7S7215C83v40Ev();
extern void _ZN7S7215C83v41Ev();
extern void _ZN7S7215C93v31Ev();
static  VTBL_ENTRY vtc_S7215C1[] = {
  ABISELECT(336,164),
  ABISELECT(264,132),
  ABISELECT(240,120),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C1[0]),
  (VTBL_ENTRY)&_ZN7S7215C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7215C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7215C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7215C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7215C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7215C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7215C12v4Ev,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7215C1[0]),
  (VTBL_ENTRY)&_ZN7S7215C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v27Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v29Ev,
  (VTBL_ENTRY)&_ZN7S7215C73v30Ev,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7215C1[0]),
  (VTBL_ENTRY)&_ZN8S7215C113v42Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v43Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v44Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7215C113v46Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S7215C1[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7215C1D1Ev,_ZTv0_n32_N7S7215C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7215C1D0Ev,_ZTv0_n32_N7S7215C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7215C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S7215C1[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,32),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI7S7215C1[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v34Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v38Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v39Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v40Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v41Ev,
  0,
  ABISELECT(-336,-164),
  (VTBL_ENTRY)&(_ZTI7S7215C1[0]),
  (VTBL_ENTRY)&_ZN7S7215C93v31Ev,
};
extern VTBL_ENTRY _ZTV7S7215C1[];
extern void _ZN7S7215C63v16Ev();
extern void _ZN7S7215C63v17Ev();
extern void _ZN7S7215C63v18Ev();
extern void _ZN7S7215C63v19Ev();
extern void _ZN7S7215C2D1Ev();
extern void _ZN7S7215C2D0Ev();
extern void _ZN7S7215C23v20Ev();
extern void _ZN7S7215C23v21Ev();
extern void _ZN7S7215C23v22Ev();
extern void _ZN7S7215C23v23Ev();
extern void _ZN7S7215C23v24Ev();
extern void _ZN7S7215C23v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C2__7S7215C1[] = {
  ABISELECT(240,120),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C2[0]),
  (VTBL_ENTRY)&_ZN7S7215C63v16Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v18Ev,
  (VTBL_ENTRY)&_ZN7S7215C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7215C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7215C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7215C23v25Ev,
};
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void ABISELECT(_ZTv0_n64_N7S7215C2D1Ev,_ZTv0_n32_N7S7215C2D1Ev)();
extern void ABISELECT(_ZThn176_N7S7215C2D1Ev,_ZThn88_N7S7215C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7215C2D0Ev,_ZTv0_n32_N7S7215C2D0Ev)();
extern void ABISELECT(_ZThn176_N7S7215C2D0Ev,_ZThn88_N7S7215C2D0Ev)() __attribute__((weak));
extern void _ZN7S7215C32v9Ev();
extern void _ZN7S7215C33v10Ev();
extern void _ZN7S7215C33v11Ev();
extern void _ZN7S7215C33v12Ev();
extern void _ZN7S7215C33v13Ev();
extern void _ZN7S7215C33v14Ev();
extern void _ZN7S7215C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C3__7S7215C2__7S7215C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S7215C2[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7215C2D1Ev,_ZTv0_n32_N7S7215C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7215C2D0Ev,_ZTv0_n32_N7S7215C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7215C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v15Ev,
};
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C5__A1__7S7215C2__7S7215C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S7215C2[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
};
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN7S7215C3D1Ev();
extern void _ZN7S7215C3D0Ev();
extern void _ZN7S7215C32v9Ev();
extern void _ZN7S7215C33v10Ev();
extern void _ZN7S7215C33v11Ev();
extern void _ZN7S7215C33v12Ev();
extern void _ZN7S7215C33v13Ev();
extern void _ZN7S7215C33v14Ev();
extern void _ZN7S7215C33v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C3__7S7215C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C3[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7215C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7215C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7215C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7215C33v15Ev,
};
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C5__A1__7S7215C3__7S7215C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7215C3[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
};
extern void _ZN7S7215C52v5Ev();
extern void _ZN7S7215C52v6Ev();
extern void _ZN7S7215C52v7Ev();
extern void _ZN7S7215C52v8Ev();
extern void _ZN8S7215C103v32Ev();
extern void _ZN8S7215C103v33Ev();
extern void _ZN8S7215C103v34Ev();
extern void _ZN7S7215C83v35Ev();
extern void _ZN7S7215C83v36Ev();
extern void _ZN7S7215C83v37Ev();
extern void _ZN7S7215C83v38Ev();
extern void _ZN7S7215C83v39Ev();
extern void _ZN7S7215C83v40Ev();
extern void _ZN7S7215C83v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C8__7S7215C1[] = {
  ABISELECT(72,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7215C8[0]),
  (VTBL_ENTRY)&_ZN7S7215C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7215C52v8Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7215C103v34Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v35Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v36Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v37Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v38Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v39Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v40Ev,
  (VTBL_ENTRY)&_ZN7S7215C83v41Ev,
};
extern void _ZN7S7215C93v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7215C9__7S7215C8__7S7215C1[] = {
  0,
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI7S7215C8[0]),
  (VTBL_ENTRY)&_ZN7S7215C93v31Ev,
};
static  VTT_ENTRY vtt_S7215C1[] = {
  {&(_ZTV7S7215C1[6]),  6,109},
  {&(_tg__ZTV7S7215C2__7S7215C1[4]),  4,16},
  {&(_tg__ZTV7S7215C3__7S7215C2__7S7215C1[15]),  15,28},
  {&(_tg__ZTV7S7215C5__A1__7S7215C2__7S7215C1[6]),  6,10},
  {&(_ZTV7S7215C1[51]),  51,109},
  {&(_ZTV7S7215C1[70]),  70,109},
  {&(_ZTV7S7215C1[91]),  91,109},
  {&(_ZTV7S7215C1[108]),  108,109},
  {&(_tg__ZTV7S7215C3__7S7215C1[3]),  3,16},
  {&(_tg__ZTV7S7215C5__A1__7S7215C3__7S7215C1[6]),  6,10},
  {&(_tg__ZTV7S7215C8__7S7215C1[3]),  3,17},
  {&(_tg__ZTV7S7215C9__7S7215C8__7S7215C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7215C1[];
extern  VTBL_ENTRY _ZTV7S7215C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7215C1[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7215C2D0Ev,_ZTv0_n32_N7S7215C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7215C2D0Ev,_ZThn88_N7S7215C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7215C2D1Ev,_ZTv0_n32_N7S7215C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7215C2D1Ev,_ZThn88_N7S7215C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7215C1D0Ev,_ZTv0_n32_N7S7215C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7215C1D0Ev,_ZThn88_N7S7215C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7215C1D1Ev,_ZTv0_n32_N7S7215C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N7S7215C1D1Ev,_ZThn88_N7S7215C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7215C1 = {  "S7215C1", // class name
  bases_S7215C1, 13,
  &(vtc_S7215C1[0]), // expected_vtbl_contents
  &(vtt_S7215C1[0]), // expected_vtt_contents
  ABISELECT(368,180), // object size
  NSPAIRA(_ZTI7S7215C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7215C1),109, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7215C1),12, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7589C3_nt  {
  virtual void  v3(); // _ZN10S7589C3_nt2v3Ev
  virtual void  v4(); // _ZN10S7589C3_nt2v4Ev
  virtual void  v5(); // _ZN10S7589C3_nt2v5Ev
  ~S7589C3_nt(); // tgen
  S7589C3_nt(); // tgen
};
//SIG(-1 S7589C3_nt) C1{ v1 v2 v3}


void  S7589C3_nt ::v3(){vfunc_called(this, "_ZN10S7589C3_nt2v3Ev");}
void  S7589C3_nt ::v4(){vfunc_called(this, "_ZN10S7589C3_nt2v4Ev");}
void  S7589C3_nt ::v5(){vfunc_called(this, "_ZN10S7589C3_nt2v5Ev");}
S7589C3_nt ::~S7589C3_nt(){ note_dtor("S7589C3_nt", this);} // tgen
S7589C3_nt ::S7589C3_nt(){ note_ctor("S7589C3_nt", this);} // tgen

//skip512 S7589C3_nt

#else // __cplusplus

extern void _ZN10S7589C3_ntC1Ev();
extern void _ZN10S7589C3_ntD1Ev();
Name_Map name_map_S7589C3_nt[] = {
  NSPAIR(_ZN10S7589C3_ntC1Ev),
  NSPAIR(_ZN10S7589C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7589C3_nt[];
extern void _ZN10S7589C3_nt2v3Ev();
extern void _ZN10S7589C3_nt2v4Ev();
extern void _ZN10S7589C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S7589C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7589C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S7589C3_nt[];
VTBL_ENTRY *P__ZTI10S7589C3_nt = _ZTI10S7589C3_nt; 
extern  VTBL_ENTRY _ZTV10S7589C3_nt[];
Class_Descriptor cd_S7589C3_nt = {  "S7589C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7589C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7589C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7589C3_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  S7589C4_nt  {
  virtual void  v6(); // _ZN10S7589C4_nt2v6Ev
  virtual void  v7(); // _ZN10S7589C4_nt2v7Ev
  virtual void  v8(); // _ZN10S7589C4_nt2v8Ev
  virtual void  v9(); // _ZN10S7589C4_nt2v9Ev
  virtual void  v10(); // _ZN10S7589C4_nt3v10Ev
  virtual void  v11(); // _ZN10S7589C4_nt3v11Ev
  virtual void  v12(); // _ZN10S7589C4_nt3v12Ev
  virtual void  v13(); // _ZN10S7589C4_nt3v13Ev
  ~S7589C4_nt(); // tgen
  S7589C4_nt(); // tgen
};
//SIG(-1 S7589C4_nt) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S7589C4_nt ::v6(){vfunc_called(this, "_ZN10S7589C4_nt2v6Ev");}
void  S7589C4_nt ::v7(){vfunc_called(this, "_ZN10S7589C4_nt2v7Ev");}
void  S7589C4_nt ::v8(){vfunc_called(this, "_ZN10S7589C4_nt2v8Ev");}
void  S7589C4_nt ::v9(){vfunc_called(this, "_ZN10S7589C4_nt2v9Ev");}
void  S7589C4_nt ::v10(){vfunc_called(this, "_ZN10S7589C4_nt3v10Ev");}
void  S7589C4_nt ::v11(){vfunc_called(this, "_ZN10S7589C4_nt3v11Ev");}
void  S7589C4_nt ::v12(){vfunc_called(this, "_ZN10S7589C4_nt3v12Ev");}
void  S7589C4_nt ::v13(){vfunc_called(this, "_ZN10S7589C4_nt3v13Ev");}
S7589C4_nt ::~S7589C4_nt(){ note_dtor("S7589C4_nt", this);} // tgen
S7589C4_nt ::S7589C4_nt(){ note_ctor("S7589C4_nt", this);} // tgen

//skip512 S7589C4_nt

#else // __cplusplus

extern void _ZN10S7589C4_ntC1Ev();
extern void _ZN10S7589C4_ntD1Ev();
Name_Map name_map_S7589C4_nt[] = {
  NSPAIR(_ZN10S7589C4_ntC1Ev),
  NSPAIR(_ZN10S7589C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7589C4_nt[];
extern void _ZN10S7589C4_nt2v6Ev();
extern void _ZN10S7589C4_nt2v7Ev();
extern void _ZN10S7589C4_nt2v8Ev();
extern void _ZN10S7589C4_nt2v9Ev();
extern void _ZN10S7589C4_nt3v10Ev();
extern void _ZN10S7589C4_nt3v11Ev();
extern void _ZN10S7589C4_nt3v12Ev();
extern void _ZN10S7589C4_nt3v13Ev();
static  VTBL_ENTRY vtc_S7589C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7589C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S7589C4_nt[];
VTBL_ENTRY *P__ZTI10S7589C4_nt = _ZTI10S7589C4_nt; 
extern  VTBL_ENTRY _ZTV10S7589C4_nt[];
Class_Descriptor cd_S7589C4_nt = {  "S7589C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7589C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7589C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7589C4_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  S7589C2  : virtual S7589C3_nt , virtual S7589C4_nt {
  int s7589c2f0;
  virtual void  v14(); // _ZN7S7589C23v14Ev
  virtual void  v15(); // _ZN7S7589C23v15Ev
  virtual void  v16(); // _ZN7S7589C23v16Ev
  virtual void  v17(); // _ZN7S7589C23v17Ev
  virtual void  v18(); // _ZN7S7589C23v18Ev
  ~S7589C2(); // tgen
  S7589C2(); // tgen
};
//SIG(-1 S7589C2) C1{ VBC2{ v6 v7 v8} VBC3{ v9 v10 v11 v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 Fi}


void  S7589C2 ::v14(){vfunc_called(this, "_ZN7S7589C23v14Ev");}
void  S7589C2 ::v15(){vfunc_called(this, "_ZN7S7589C23v15Ev");}
void  S7589C2 ::v16(){vfunc_called(this, "_ZN7S7589C23v16Ev");}
void  S7589C2 ::v17(){vfunc_called(this, "_ZN7S7589C23v17Ev");}
void  S7589C2 ::v18(){vfunc_called(this, "_ZN7S7589C23v18Ev");}
S7589C2 ::~S7589C2(){ note_dtor("S7589C2", this);} // tgen
S7589C2 ::S7589C2(){ note_ctor("S7589C2", this);} // tgen

static void Test_S7589C2()
{
  extern Class_Descriptor cd_S7589C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7589C2, buf);
    S7589C2 *dp, &lv = *(dp=new (buf) S7589C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7589C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7589C2)");
    check_base_class_offset(lv, (S7589C3_nt*), 0, "S7589C2");
    check_base_class_offset(lv, (S7589C4_nt*), ABISELECT(16,8), "S7589C2");
    check_field_offset(lv, s7589c2f0, ABISELECT(8,4), "S7589C2.s7589c2f0");
    test_class_info(&lv, &cd_S7589C2);
    dp->~S7589C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7589C2(Test_S7589C2, "S7589C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7589C2C1Ev();
extern void _ZN7S7589C2D1Ev();
Name_Map name_map_S7589C2[] = {
  NSPAIR(_ZN7S7589C2C1Ev),
  NSPAIR(_ZN7S7589C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7589C3_nt;
extern VTBL_ENTRY _ZTI10S7589C3_nt[];
extern  VTBL_ENTRY _ZTV10S7589C3_nt[];
extern Class_Descriptor cd_S7589C4_nt;
extern VTBL_ENTRY _ZTI10S7589C4_nt[];
extern  VTBL_ENTRY _ZTV10S7589C4_nt[];
static Base_Class bases_S7589C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7589C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7589C4_nt,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7589C2[];
extern void _ZN10S7589C3_nt2v3Ev();
extern void _ZN10S7589C3_nt2v4Ev();
extern void _ZN10S7589C3_nt2v5Ev();
extern void _ZN7S7589C23v14Ev();
extern void _ZN7S7589C23v15Ev();
extern void _ZN7S7589C23v16Ev();
extern void _ZN7S7589C23v17Ev();
extern void _ZN7S7589C23v18Ev();
extern void _ZN10S7589C4_nt2v6Ev();
extern void _ZN10S7589C4_nt2v7Ev();
extern void _ZN10S7589C4_nt2v8Ev();
extern void _ZN10S7589C4_nt2v9Ev();
extern void _ZN10S7589C4_nt3v10Ev();
extern void _ZN10S7589C4_nt3v11Ev();
extern void _ZN10S7589C4_nt3v12Ev();
extern void _ZN10S7589C4_nt3v13Ev();
static  VTBL_ENTRY vtc_S7589C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C2[0]),
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7589C2[0]),
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v13Ev,
};
extern VTBL_ENTRY _ZTV7S7589C2[];
static  VTT_ENTRY vtt_S7589C2[] = {
  {&(_ZTV7S7589C2[7]),  7,33},
  {&(_ZTV7S7589C2[7]),  7,33},
  {&(_ZTV7S7589C2[25]),  25,33},
};
extern VTBL_ENTRY _ZTI7S7589C2[];
extern  VTBL_ENTRY _ZTV7S7589C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C2[];
Class_Descriptor cd_S7589C2 = {  "S7589C2", // class name
  bases_S7589C2, 2,
  &(vtc_S7589C2[0]), // expected_vtbl_contents
  &(vtt_S7589C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7589C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7589C2),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7589C2),3, //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  S7589C6  {
  short s7589c6f0;
  virtual  ~S7589C6(); // _ZN7S7589C6D1Ev
  virtual void  v19(); // _ZN7S7589C63v19Ev
  virtual void  v20(); // _ZN7S7589C63v20Ev
  virtual void  v21(); // _ZN7S7589C63v21Ev
  S7589C6(); // tgen
};
//SIG(-1 S7589C6) C1{ vd v1 v2 v3 Fs}


 S7589C6 ::~S7589C6(){ note_dtor("S7589C6", this);}
void  S7589C6 ::v19(){vfunc_called(this, "_ZN7S7589C63v19Ev");}
void  S7589C6 ::v20(){vfunc_called(this, "_ZN7S7589C63v20Ev");}
void  S7589C6 ::v21(){vfunc_called(this, "_ZN7S7589C63v21Ev");}
S7589C6 ::S7589C6(){ note_ctor("S7589C6", this);} // tgen

static void Test_S7589C6()
{
  extern Class_Descriptor cd_S7589C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7589C6, buf);
    S7589C6 *dp, &lv = *(dp=new (buf) S7589C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7589C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7589C6)");
    check_field_offset(lv, s7589c6f0, ABISELECT(8,4), "S7589C6.s7589c6f0");
    test_class_info(&lv, &cd_S7589C6);
    dp->~S7589C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7589C6(Test_S7589C6, "S7589C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7589C6C1Ev();
extern void _ZN7S7589C6D1Ev();
Name_Map name_map_S7589C6[] = {
  NSPAIR(_ZN7S7589C6C1Ev),
  NSPAIR(_ZN7S7589C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7589C6[];
extern void _ZN7S7589C6D1Ev();
extern void _ZN7S7589C6D0Ev();
extern void _ZN7S7589C63v19Ev();
extern void _ZN7S7589C63v20Ev();
extern void _ZN7S7589C63v21Ev();
static  VTBL_ENTRY vtc_S7589C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C6[0]),
  (VTBL_ENTRY)&_ZN7S7589C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7589C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v21Ev,
};
extern VTBL_ENTRY _ZTI7S7589C6[];
extern  VTBL_ENTRY _ZTV7S7589C6[];
Class_Descriptor cd_S7589C6 = {  "S7589C6", // class name
  0,0,//no base classes
  &(vtc_S7589C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7589C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7589C6),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  S7589C7  : virtual S7589C6 {
  int s7589c7f0;
  virtual  ~S7589C7(); // _ZN7S7589C7D2Ev
  virtual void  v22(); // _ZN7S7589C73v22Ev
  virtual void  v23(); // _ZN7S7589C73v23Ev
  virtual void  v24(); // _ZN7S7589C73v24Ev
  virtual void  v25(); // _ZN7S7589C73v25Ev
  S7589C7(); // tgen
};
//SIG(-1 S7589C7) C1{ VBC2{ vd v5 v6 v7 Fs} vd v1 v2 v3 v4 Fi}


 S7589C7 ::~S7589C7(){ note_dtor("S7589C7", this);}
void  S7589C7 ::v22(){vfunc_called(this, "_ZN7S7589C73v22Ev");}
void  S7589C7 ::v23(){vfunc_called(this, "_ZN7S7589C73v23Ev");}
void  S7589C7 ::v24(){vfunc_called(this, "_ZN7S7589C73v24Ev");}
void  S7589C7 ::v25(){vfunc_called(this, "_ZN7S7589C73v25Ev");}
S7589C7 ::S7589C7(){ note_ctor("S7589C7", this);} // tgen

static void Test_S7589C7()
{
  extern Class_Descriptor cd_S7589C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7589C7, buf);
    S7589C7 *dp, &lv = *(dp=new (buf) S7589C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7589C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7589C7)");
    check_base_class_offset(lv, (S7589C6*), ABISELECT(16,8), "S7589C7");
    check_field_offset(lv, s7589c7f0, ABISELECT(8,4), "S7589C7.s7589c7f0");
    test_class_info(&lv, &cd_S7589C7);
    dp->~S7589C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7589C7(Test_S7589C7, "S7589C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7589C7C1Ev();
extern void _ZN7S7589C7D2Ev();
Name_Map name_map_S7589C7[] = {
  NSPAIR(_ZN7S7589C7C1Ev),
  NSPAIR(_ZN7S7589C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7589C6;
extern VTBL_ENTRY _ZTI7S7589C6[];
extern  VTBL_ENTRY _ZTV7S7589C6[];
static Base_Class bases_S7589C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7589C6,    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
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7589C7[];
extern void _ZN7S7589C7D1Ev();
extern void _ZN7S7589C7D0Ev();
extern void _ZN7S7589C73v22Ev();
extern void _ZN7S7589C73v23Ev();
extern void _ZN7S7589C73v24Ev();
extern void _ZN7S7589C73v25Ev();
extern void ABISELECT(_ZTv0_n24_N7S7589C7D1Ev,_ZTv0_n12_N7S7589C7D1Ev)();
extern void ABISELECT(_ZThn16_N7S7589C7D1Ev,_ZThn8_N7S7589C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7589C7D0Ev,_ZTv0_n12_N7S7589C7D0Ev)();
extern void ABISELECT(_ZThn16_N7S7589C7D0Ev,_ZThn8_N7S7589C7D0Ev)() __attribute__((weak));
extern void _ZN7S7589C63v19Ev();
extern void _ZN7S7589C63v20Ev();
extern void _ZN7S7589C63v21Ev();
static  VTBL_ENTRY vtc_S7589C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C7[0]),
  (VTBL_ENTRY)&_ZN7S7589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7589C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v25Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C7D1Ev,_ZTv0_n12_N7S7589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C7D0Ev,_ZTv0_n12_N7S7589C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v21Ev,
};
extern VTBL_ENTRY _ZTV7S7589C7[];
static  VTT_ENTRY vtt_S7589C7[] = {
  {&(_ZTV7S7589C7[3]),  3,20},
  {&(_ZTV7S7589C7[15]),  15,20},
};
extern VTBL_ENTRY _ZTI7S7589C7[];
extern  VTBL_ENTRY _ZTV7S7589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C7[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C7D0Ev,_ZTv0_n12_N7S7589C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7589C7D0Ev,_ZThn8_N7S7589C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C7D1Ev,_ZTv0_n12_N7S7589C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7589C7D1Ev,_ZThn8_N7S7589C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7589C7 = {  "S7589C7", // class name
  bases_S7589C7, 1,
  &(vtc_S7589C7[0]), // expected_vtbl_contents
  &(vtt_S7589C7[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7589C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7589C7),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7589C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7589C8_nt  {
  int s7589c8f0;
  virtual void  v48(); // _ZN10S7589C8_nt3v48Ev
  ~S7589C8_nt(); // tgen
  S7589C8_nt(); // tgen
};
//SIG(1 S7589C8_nt) C1{ v1 Fi}


void  S7589C8_nt ::v48(){vfunc_called(this, "_ZN10S7589C8_nt3v48Ev");}
S7589C8_nt ::~S7589C8_nt(){ note_dtor("S7589C8_nt", this);} // tgen
S7589C8_nt ::S7589C8_nt(){ note_ctor("S7589C8_nt", this);} // tgen

//skip512 S7589C8_nt

#else // __cplusplus

extern void _ZN10S7589C8_ntC1Ev();
extern void _ZN10S7589C8_ntD1Ev();
Name_Map name_map_S7589C8_nt[] = {
  NSPAIR(_ZN10S7589C8_ntC1Ev),
  NSPAIR(_ZN10S7589C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7589C8_nt[];
extern void _ZN10S7589C8_nt3v48Ev();
static  VTBL_ENTRY vtc_S7589C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7589C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7589C8_nt3v48Ev,
};
extern VTBL_ENTRY _ZTI10S7589C8_nt[];
VTBL_ENTRY *P__ZTI10S7589C8_nt = _ZTI10S7589C8_nt; 
extern  VTBL_ENTRY _ZTV10S7589C8_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7589C5  : virtual S7589C6 , virtual S7589C7 {
  ::S7589C8_nt s7589c5f0[4];
  virtual void  v26(); // _ZN7S7589C53v26Ev
  virtual void  v27(); // _ZN7S7589C53v27Ev
  virtual void  v28(); // _ZN7S7589C53v28Ev
  virtual void  v29(); // _ZN7S7589C53v29Ev
  virtual void  v30(); // _ZN7S7589C53v30Ev
  ~S7589C5(); // tgen
  S7589C5(); // tgen
};
//SIG(-1 S7589C5) C1{ VBC2{ vd v6 v7 v8 Fs} VBC3{ VBC2 vd v9 v10 v11 v12 Fi} v1 v2 v3 v4 v5 FC4{ v13 Fi}[4]}


void  S7589C5 ::v26(){vfunc_called(this, "_ZN7S7589C53v26Ev");}
void  S7589C5 ::v27(){vfunc_called(this, "_ZN7S7589C53v27Ev");}
void  S7589C5 ::v28(){vfunc_called(this, "_ZN7S7589C53v28Ev");}
void  S7589C5 ::v29(){vfunc_called(this, "_ZN7S7589C53v29Ev");}
void  S7589C5 ::v30(){vfunc_called(this, "_ZN7S7589C53v30Ev");}
S7589C5 ::~S7589C5(){ note_dtor("S7589C5", this);} // tgen
S7589C5 ::S7589C5(){ note_ctor("S7589C5", this);} // tgen

static void Test_S7589C5()
{
  extern Class_Descriptor cd_S7589C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S7589C5, buf);
    S7589C5 *dp, &lv = *(dp=new (buf) S7589C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S7589C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7589C5)");
    check_base_class_offset(lv, (S7589C6*), ABISELECT(72,36), "S7589C5");
    check_base_class_offset(lv, (S7589C6*)(S7589C7*), ABISELECT(72,36), "S7589C5");
    check_base_class_offset(lv, (S7589C7*), ABISELECT(88,44), "S7589C5");
    check_field_offset(lv, s7589c5f0, ABISELECT(8,4), "S7589C5.s7589c5f0");
    test_class_info(&lv, &cd_S7589C5);
    dp->~S7589C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7589C5(Test_S7589C5, "S7589C5", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN7S7589C5C1Ev();
extern void _ZN7S7589C5D1Ev();
Name_Map name_map_S7589C5[] = {
  NSPAIR(_ZN7S7589C5C1Ev),
  NSPAIR(_ZN7S7589C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7589C6;
extern VTBL_ENTRY _ZTI7S7589C6[];
extern  VTBL_ENTRY _ZTV7S7589C6[];
extern Class_Descriptor cd_S7589C7;
extern VTBL_ENTRY _ZTI7S7589C7[];
extern  VTBL_ENTRY _ZTV7S7589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C7[];
static Base_Class bases_S7589C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7589C6,    ABISELECT(72,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7589C7,    ABISELECT(88,44), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7589C5[];
extern void _ZN7S7589C53v26Ev();
extern void _ZN7S7589C53v27Ev();
extern void _ZN7S7589C53v28Ev();
extern void _ZN7S7589C53v29Ev();
extern void _ZN7S7589C53v30Ev();
extern void _ZN7S7589C5D1Ev();
extern void _ZN7S7589C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7589C5D1Ev,_ZTv0_n12_N7S7589C5D1Ev)();
extern void ABISELECT(_ZThn72_N7S7589C5D1Ev,_ZThn36_N7S7589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7589C5D0Ev,_ZTv0_n12_N7S7589C5D0Ev)();
extern void ABISELECT(_ZThn72_N7S7589C5D0Ev,_ZThn36_N7S7589C5D0Ev)() __attribute__((weak));
extern void _ZN7S7589C63v19Ev();
extern void _ZN7S7589C63v20Ev();
extern void _ZN7S7589C63v21Ev();
extern void ABISELECT(_ZTv0_n32_N7S7589C5D1Ev,_ZTv0_n16_N7S7589C5D1Ev)();
extern void ABISELECT(_ZThn88_N7S7589C5D1Ev,_ZThn44_N7S7589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7589C5D0Ev,_ZTv0_n16_N7S7589C5D0Ev)();
extern void ABISELECT(_ZThn88_N7S7589C5D0Ev,_ZThn44_N7S7589C5D0Ev)() __attribute__((weak));
extern void _ZN7S7589C73v22Ev();
extern void _ZN7S7589C73v23Ev();
extern void _ZN7S7589C73v24Ev();
extern void _ZN7S7589C73v25Ev();
static  VTBL_ENTRY vtc_S7589C5[] = {
  ABISELECT(88,44),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C5[0]),
  (VTBL_ENTRY)&_ZN7S7589C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v28Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v29Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v30Ev,
  (VTBL_ENTRY)&_ZN7S7589C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7589C5D0Ev,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C5D1Ev,_ZTv0_n12_N7S7589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C5D0Ev,_ZTv0_n12_N7S7589C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v21Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7589C5D1Ev,_ZTv0_n16_N7S7589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7589C5D0Ev,_ZTv0_n16_N7S7589C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v25Ev,
};
extern VTBL_ENTRY _ZTV7S7589C5[];
extern void _ZN7S7589C7D1Ev();
extern void _ZN7S7589C7D0Ev();
extern void _ZN7S7589C73v22Ev();
extern void _ZN7S7589C73v23Ev();
extern void _ZN7S7589C73v24Ev();
extern void _ZN7S7589C73v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C7__7S7589C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C7[0]),
  (VTBL_ENTRY)&_ZN7S7589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7589C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v25Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7589C7D1Ev,_ZTv0_n12_N7S7589C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7589C7D0Ev,_ZTv0_n12_N7S7589C7D0Ev)();
extern void _ZN7S7589C63v19Ev();
extern void _ZN7S7589C63v20Ev();
extern void _ZN7S7589C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C6__7S7589C7__7S7589C5[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C7D1Ev,_ZTv0_n12_N7S7589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C7D0Ev,_ZTv0_n12_N7S7589C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v21Ev,
};
static  VTT_ENTRY vtt_S7589C5[] = {
  {&(_ZTV7S7589C5[4]),  4,36},
  {&(_ZTV7S7589C5[17]),  17,36},
  {&(_ZTV7S7589C5[30]),  30,36},
  {&(_tg__ZTV7S7589C7__7S7589C5[3]),  3,9},
  {&(_tg__ZTV7S7589C6__7S7589C7__7S7589C5[6]),  6,11},
};
extern VTBL_ENTRY _ZTI7S7589C5[];
extern  VTBL_ENTRY _ZTV7S7589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C5[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7589C5D0Ev,_ZTv0_n16_N7S7589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7589C5D0Ev,_ZThn44_N7S7589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7589C5D1Ev,_ZTv0_n16_N7S7589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7589C5D1Ev,_ZThn44_N7S7589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C5D0Ev,_ZTv0_n12_N7S7589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7589C5D0Ev,_ZThn36_N7S7589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C5D1Ev,_ZTv0_n12_N7S7589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7589C5D1Ev,_ZThn36_N7S7589C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7589C5 = {  "S7589C5", // class name
  bases_S7589C5, 2,
  &(vtc_S7589C5[0]), // expected_vtbl_contents
  &(vtt_S7589C5[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI7S7589C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7589C5),36, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7589C5),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7589C9  {
  virtual void  v31(); // _ZN7S7589C93v31Ev
  virtual void  v32(); // _ZN7S7589C93v32Ev
  virtual void  v33(); // _ZN7S7589C93v33Ev
  virtual void  v34(); // _ZN7S7589C93v34Ev
  virtual void  v35(); // _ZN7S7589C93v35Ev
  virtual void  v36(); // _ZN7S7589C93v36Ev
  virtual void  v37(); // _ZN7S7589C93v37Ev
  virtual void  v38(); // _ZN7S7589C93v38Ev
  ~S7589C9(); // tgen
  S7589C9(); // tgen
};
//SIG(-1 S7589C9) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S7589C9 ::v31(){vfunc_called(this, "_ZN7S7589C93v31Ev");}
void  S7589C9 ::v32(){vfunc_called(this, "_ZN7S7589C93v32Ev");}
void  S7589C9 ::v33(){vfunc_called(this, "_ZN7S7589C93v33Ev");}
void  S7589C9 ::v34(){vfunc_called(this, "_ZN7S7589C93v34Ev");}
void  S7589C9 ::v35(){vfunc_called(this, "_ZN7S7589C93v35Ev");}
void  S7589C9 ::v36(){vfunc_called(this, "_ZN7S7589C93v36Ev");}
void  S7589C9 ::v37(){vfunc_called(this, "_ZN7S7589C93v37Ev");}
void  S7589C9 ::v38(){vfunc_called(this, "_ZN7S7589C93v38Ev");}
S7589C9 ::~S7589C9(){ note_dtor("S7589C9", this);} // tgen
S7589C9 ::S7589C9(){ note_ctor("S7589C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7589C9C1Ev();
extern void _ZN7S7589C9D1Ev();
Name_Map name_map_S7589C9[] = {
  NSPAIR(_ZN7S7589C9C1Ev),
  NSPAIR(_ZN7S7589C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7589C9[];
extern void _ZN7S7589C93v31Ev();
extern void _ZN7S7589C93v32Ev();
extern void _ZN7S7589C93v33Ev();
extern void _ZN7S7589C93v34Ev();
extern void _ZN7S7589C93v35Ev();
extern void _ZN7S7589C93v36Ev();
extern void _ZN7S7589C93v37Ev();
extern void _ZN7S7589C93v38Ev();
static  VTBL_ENTRY vtc_S7589C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C9[0]),
  (VTBL_ENTRY)&_ZN7S7589C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7589C93v32Ev,
  (VTBL_ENTRY)&_ZN7S7589C93v33Ev,
  (VTBL_ENTRY)&_ZN7S7589C93v34Ev,
  (VTBL_ENTRY)&_ZN7S7589C93v35Ev,
  (VTBL_ENTRY)&_ZN7S7589C93v36Ev,
  (VTBL_ENTRY)&_ZN7S7589C93v37Ev,
  (VTBL_ENTRY)&_ZN7S7589C93v38Ev,
};
extern VTBL_ENTRY _ZTI7S7589C9[];
extern  VTBL_ENTRY _ZTV7S7589C9[];
Class_Descriptor cd_S7589C9 = {  "S7589C9", // class name
  0,0,//no base classes
  &(vtc_S7589C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7589C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7589C9),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  S7589C11  {
  void *s7589c11f0[2];
  int s7589c11f1;
  virtual void  v46(); // _ZN8S7589C113v46Ev
  virtual void  v47(); // _ZN8S7589C113v47Ev
  ~S7589C11(); // tgen
  S7589C11(); // tgen
};
//SIG(-1 S7589C11) C1{ v1 v2 Fp[2] Fi}


void  S7589C11 ::v46(){vfunc_called(this, "_ZN8S7589C113v46Ev");}
void  S7589C11 ::v47(){vfunc_called(this, "_ZN8S7589C113v47Ev");}
S7589C11 ::~S7589C11(){ note_dtor("S7589C11", this);} // tgen
S7589C11 ::S7589C11(){ note_ctor("S7589C11", this);} // tgen

static void Test_S7589C11()
{
  extern Class_Descriptor cd_S7589C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7589C11, buf);
    S7589C11 *dp, &lv = *(dp=new (buf) S7589C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7589C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7589C11)");
    check_field_offset(lv, s7589c11f0, ABISELECT(8,4), "S7589C11.s7589c11f0");
    check_field_offset(lv, s7589c11f1, ABISELECT(24,12), "S7589C11.s7589c11f1");
    test_class_info(&lv, &cd_S7589C11);
    dp->~S7589C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7589C11(Test_S7589C11, "S7589C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7589C11C1Ev();
extern void _ZN8S7589C11D1Ev();
Name_Map name_map_S7589C11[] = {
  NSPAIR(_ZN8S7589C11C1Ev),
  NSPAIR(_ZN8S7589C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7589C11[];
extern void _ZN8S7589C113v46Ev();
extern void _ZN8S7589C113v47Ev();
static  VTBL_ENTRY vtc_S7589C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7589C11[0]),
  (VTBL_ENTRY)&_ZN8S7589C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7589C113v47Ev,
};
extern VTBL_ENTRY _ZTI8S7589C11[];
extern  VTBL_ENTRY _ZTV8S7589C11[];
Class_Descriptor cd_S7589C11 = {  "S7589C11", // class name
  0,0,//no base classes
  &(vtc_S7589C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7589C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7589C11),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  S7589C10  : S7589C11 {
  virtual void  v39(); // _ZN8S7589C103v39Ev
  virtual void  v40(); // _ZN8S7589C103v40Ev
  virtual void  v41(); // _ZN8S7589C103v41Ev
  virtual void  v42(); // _ZN8S7589C103v42Ev
  virtual void  v43(); // _ZN8S7589C103v43Ev
  virtual void  v44(); // _ZN8S7589C103v44Ev
  virtual void  v45(); // _ZN8S7589C103v45Ev
  ~S7589C10(); // tgen
  S7589C10(); // tgen
};
//SIG(-1 S7589C10) C1{ BC2{ v8 v9 Fp[2] Fi} v1 v2 v3 v4 v5 v6 v7}


void  S7589C10 ::v39(){vfunc_called(this, "_ZN8S7589C103v39Ev");}
void  S7589C10 ::v40(){vfunc_called(this, "_ZN8S7589C103v40Ev");}
void  S7589C10 ::v41(){vfunc_called(this, "_ZN8S7589C103v41Ev");}
void  S7589C10 ::v42(){vfunc_called(this, "_ZN8S7589C103v42Ev");}
void  S7589C10 ::v43(){vfunc_called(this, "_ZN8S7589C103v43Ev");}
void  S7589C10 ::v44(){vfunc_called(this, "_ZN8S7589C103v44Ev");}
void  S7589C10 ::v45(){vfunc_called(this, "_ZN8S7589C103v45Ev");}
S7589C10 ::~S7589C10(){ note_dtor("S7589C10", this);} // tgen
S7589C10 ::S7589C10(){ note_ctor("S7589C10", this);} // tgen

static void Test_S7589C10()
{
  extern Class_Descriptor cd_S7589C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7589C10, buf);
    S7589C10 *dp, &lv = *(dp=new (buf) S7589C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7589C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7589C10)");
    check_base_class_offset(lv, (S7589C11*), 0, "S7589C10");
    test_class_info(&lv, &cd_S7589C10);
    dp->~S7589C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7589C10(Test_S7589C10, "S7589C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7589C10C1Ev();
extern void _ZN8S7589C10D1Ev();
Name_Map name_map_S7589C10[] = {
  NSPAIR(_ZN8S7589C10C1Ev),
  NSPAIR(_ZN8S7589C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7589C11;
extern VTBL_ENTRY _ZTI8S7589C11[];
extern  VTBL_ENTRY _ZTV8S7589C11[];
static Base_Class bases_S7589C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7589C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7589C10[];
extern void _ZN8S7589C113v46Ev();
extern void _ZN8S7589C113v47Ev();
extern void _ZN8S7589C103v39Ev();
extern void _ZN8S7589C103v40Ev();
extern void _ZN8S7589C103v41Ev();
extern void _ZN8S7589C103v42Ev();
extern void _ZN8S7589C103v43Ev();
extern void _ZN8S7589C103v44Ev();
extern void _ZN8S7589C103v45Ev();
static  VTBL_ENTRY vtc_S7589C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7589C10[0]),
  (VTBL_ENTRY)&_ZN8S7589C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7589C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7589C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7589C103v40Ev,
  (VTBL_ENTRY)&_ZN8S7589C103v41Ev,
  (VTBL_ENTRY)&_ZN8S7589C103v42Ev,
  (VTBL_ENTRY)&_ZN8S7589C103v43Ev,
  (VTBL_ENTRY)&_ZN8S7589C103v44Ev,
  (VTBL_ENTRY)&_ZN8S7589C103v45Ev,
};
extern VTBL_ENTRY _ZTI8S7589C10[];
extern  VTBL_ENTRY _ZTV8S7589C10[];
Class_Descriptor cd_S7589C10 = {  "S7589C10", // class name
  bases_S7589C10, 1,
  &(vtc_S7589C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7589C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7589C10),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7589C1  : S7589C2 , virtual S7589C5 {
  ::S7589C9 s7589c1f0;
  ::S7589C10 s7589c1f1;
  virtual  ~S7589C1(); // _ZN7S7589C1D2Ev
  virtual void  v1(); // _ZN7S7589C12v1Ev
  virtual void  v2(); // _ZN7S7589C12v2Ev
  S7589C1(); // tgen
};
//SIG(1 S7589C1) C1{ BC2{ VBC3{ v3 v4 v5} VBC4{ v6 v7 v8 v9 v10 v11 v12 v13} v14 v15 v16 v17 v18 Fi} VBC5{ VBC6{ vd v19 v20 v21 Fs} VBC7{ VBC6 vd v22 v23 v24 v25 Fi} v26 v27 v28 v29 v30 FC8{ v48 Fi}[4]} vd v1 v2 FC9{ v31 v32 v33 v34 v35 v36 v37 v38} FC10{ BC11{ v46 v47 Fp[2] Fi} v39 v40 v41 v42 v43 v44 v45}}


 S7589C1 ::~S7589C1(){ note_dtor("S7589C1", this);}
void  S7589C1 ::v1(){vfunc_called(this, "_ZN7S7589C12v1Ev");}
void  S7589C1 ::v2(){vfunc_called(this, "_ZN7S7589C12v2Ev");}
S7589C1 ::S7589C1(){ note_ctor("S7589C1", this);} // tgen

static void Test_S7589C1()
{
  extern Class_Descriptor cd_S7589C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[22];
    init_test(&cd_S7589C1, buf);
    S7589C1 *dp, &lv = *(dp=new (buf) S7589C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,84), "sizeof(S7589C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7589C1)");
    check_base_class_offset(lv, (S7589C3_nt*)(S7589C2*), 0, "S7589C1");
    check_base_class_offset(lv, (S7589C4_nt*)(S7589C2*), ABISELECT(56,28), "S7589C1");
    check_base_class_offset(lv, (S7589C2*), 0, "S7589C1");
    check_base_class_offset(lv, (S7589C6*)(S7589C5*), ABISELECT(136,68), "S7589C1");
    check_base_class_offset(lv, (S7589C6*)(S7589C7*), ABISELECT(136,68), "S7589C1");
    check_base_class_offset(lv, (S7589C7*)(S7589C5*), ABISELECT(152,76), "S7589C1");
    check_base_class_offset(lv, (S7589C5*), ABISELECT(64,32), "S7589C1");
    check_field_offset(lv, s7589c1f0, ABISELECT(16,8), "S7589C1.s7589c1f0");
    check_field_offset(lv, s7589c1f1, ABISELECT(24,12), "S7589C1.s7589c1f1");
    test_class_info(&lv, &cd_S7589C1);
    dp->~S7589C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7589C1(Test_S7589C1, "S7589C1", ABISELECT(168,84));

#else // __cplusplus

extern void _ZN7S7589C1C1Ev();
extern void _ZN7S7589C1D2Ev();
Name_Map name_map_S7589C1[] = {
  NSPAIR(_ZN7S7589C1C1Ev),
  NSPAIR(_ZN7S7589C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7589C3_nt;
extern VTBL_ENTRY _ZTI10S7589C3_nt[];
extern  VTBL_ENTRY _ZTV10S7589C3_nt[];
extern Class_Descriptor cd_S7589C4_nt;
extern VTBL_ENTRY _ZTI10S7589C4_nt[];
extern  VTBL_ENTRY _ZTV10S7589C4_nt[];
extern Class_Descriptor cd_S7589C2;
extern VTBL_ENTRY _ZTI7S7589C2[];
extern  VTBL_ENTRY _ZTV7S7589C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C2[];
extern Class_Descriptor cd_S7589C6;
extern VTBL_ENTRY _ZTI7S7589C6[];
extern  VTBL_ENTRY _ZTV7S7589C6[];
extern Class_Descriptor cd_S7589C7;
extern VTBL_ENTRY _ZTI7S7589C7[];
extern  VTBL_ENTRY _ZTV7S7589C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C7[];
extern Class_Descriptor cd_S7589C5;
extern VTBL_ENTRY _ZTI7S7589C5[];
extern  VTBL_ENTRY _ZTV7S7589C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C5[];
static Base_Class bases_S7589C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7589C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7589C4_nt,    ABISELECT(56,28), //bcp->offset
    22, //bcp->virtual_function_table_offset
    10, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7589C2,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7589C6,    ABISELECT(136,68), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //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_S7589C7,    ABISELECT(152,76), //bcp->offset
    68, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7589C5,    ABISELECT(64,32), //bcp->offset
    40, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7589C1[];
extern void _ZN10S7589C3_nt2v3Ev();
extern void _ZN10S7589C3_nt2v4Ev();
extern void _ZN10S7589C3_nt2v5Ev();
extern void _ZN7S7589C23v14Ev();
extern void _ZN7S7589C23v15Ev();
extern void _ZN7S7589C23v16Ev();
extern void _ZN7S7589C23v17Ev();
extern void _ZN7S7589C23v18Ev();
extern void _ZN7S7589C1D1Ev();
extern void _ZN7S7589C1D0Ev();
extern void _ZN7S7589C12v1Ev();
extern void _ZN7S7589C12v2Ev();
extern void _ZN10S7589C4_nt2v6Ev();
extern void _ZN10S7589C4_nt2v7Ev();
extern void _ZN10S7589C4_nt2v8Ev();
extern void _ZN10S7589C4_nt2v9Ev();
extern void _ZN10S7589C4_nt3v10Ev();
extern void _ZN10S7589C4_nt3v11Ev();
extern void _ZN10S7589C4_nt3v12Ev();
extern void _ZN10S7589C4_nt3v13Ev();
extern void _ZN7S7589C53v26Ev();
extern void _ZN7S7589C53v27Ev();
extern void _ZN7S7589C53v28Ev();
extern void _ZN7S7589C53v29Ev();
extern void _ZN7S7589C53v30Ev();
extern void ABISELECT(_ZTv0_n80_N7S7589C1D1Ev,_ZTv0_n40_N7S7589C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7589C1D1Ev,_ZThn32_N7S7589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7589C1D0Ev,_ZTv0_n40_N7S7589C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7589C1D0Ev,_ZThn32_N7S7589C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7589C1D1Ev,_ZTv0_n12_N7S7589C1D1Ev)();
extern void ABISELECT(_ZThn136_N7S7589C1D1Ev,_ZThn68_N7S7589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7589C1D0Ev,_ZTv0_n12_N7S7589C1D0Ev)();
extern void ABISELECT(_ZThn136_N7S7589C1D0Ev,_ZThn68_N7S7589C1D0Ev)() __attribute__((weak));
extern void _ZN7S7589C63v19Ev();
extern void _ZN7S7589C63v20Ev();
extern void _ZN7S7589C63v21Ev();
extern void ABISELECT(_ZTv0_n32_N7S7589C1D1Ev,_ZTv0_n16_N7S7589C1D1Ev)();
extern void ABISELECT(_ZThn152_N7S7589C1D1Ev,_ZThn76_N7S7589C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7589C1D0Ev,_ZTv0_n16_N7S7589C1D0Ev)();
extern void ABISELECT(_ZThn152_N7S7589C1D0Ev,_ZThn76_N7S7589C1D0Ev)() __attribute__((weak));
extern void _ZN7S7589C73v22Ev();
extern void _ZN7S7589C73v23Ev();
extern void _ZN7S7589C73v24Ev();
extern void _ZN7S7589C73v25Ev();
static  VTBL_ENTRY vtc_S7589C1[] = {
  ABISELECT(152,76),
  ABISELECT(136,68),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C1[0]),
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7589C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7589C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7589C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7589C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7589C1[0]),
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v13Ev,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,44),
  ABISELECT(72,36),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7589C1[0]),
  (VTBL_ENTRY)&_ZN7S7589C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v28Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v29Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v30Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7589C1D1Ev,_ZTv0_n40_N7S7589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7589C1D0Ev,_ZTv0_n40_N7S7589C1D0Ev),
  0,
  0,
  0,
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C1D1Ev,_ZTv0_n12_N7S7589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C1D0Ev,_ZTv0_n12_N7S7589C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v21Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-76),
  ABISELECT(-16,-8),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI7S7589C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7589C1D1Ev,_ZTv0_n16_N7S7589C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7589C1D0Ev,_ZTv0_n16_N7S7589C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v25Ev,
};
extern VTBL_ENTRY _ZTV7S7589C1[];
extern void _ZN10S7589C3_nt2v3Ev();
extern void _ZN10S7589C3_nt2v4Ev();
extern void _ZN10S7589C3_nt2v5Ev();
extern void _ZN7S7589C23v14Ev();
extern void _ZN7S7589C23v15Ev();
extern void _ZN7S7589C23v16Ev();
extern void _ZN7S7589C23v17Ev();
extern void _ZN7S7589C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C2__7S7589C1[] = {
  ABISELECT(56,28),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C2[0]),
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7589C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7589C23v18Ev,
};
extern void _ZN10S7589C4_nt2v6Ev();
extern void _ZN10S7589C4_nt2v7Ev();
extern void _ZN10S7589C4_nt2v8Ev();
extern void _ZN10S7589C4_nt2v9Ev();
extern void _ZN10S7589C4_nt3v10Ev();
extern void _ZN10S7589C4_nt3v11Ev();
extern void _ZN10S7589C4_nt3v12Ev();
extern void _ZN10S7589C4_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7589C4_nt__7S7589C2__7S7589C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7589C2[0]),
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7589C4_nt3v13Ev,
};
extern void _ZN7S7589C53v26Ev();
extern void _ZN7S7589C53v27Ev();
extern void _ZN7S7589C53v28Ev();
extern void _ZN7S7589C53v29Ev();
extern void _ZN7S7589C53v30Ev();
extern void _ZN7S7589C5D1Ev();
extern void _ZN7S7589C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C5__7S7589C1[] = {
  ABISELECT(88,44),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C5[0]),
  (VTBL_ENTRY)&_ZN7S7589C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v28Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v29Ev,
  (VTBL_ENTRY)&_ZN7S7589C53v30Ev,
  (VTBL_ENTRY)&_ZN7S7589C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7589C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7589C5D1Ev,_ZTv0_n12_N7S7589C5D1Ev)();
extern void ABISELECT(_ZThn72_N7S7589C5D1Ev,_ZThn36_N7S7589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7589C5D0Ev,_ZTv0_n12_N7S7589C5D0Ev)();
extern void ABISELECT(_ZThn72_N7S7589C5D0Ev,_ZThn36_N7S7589C5D0Ev)() __attribute__((weak));
extern void _ZN7S7589C63v19Ev();
extern void _ZN7S7589C63v20Ev();
extern void _ZN7S7589C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C6__7S7589C5__7S7589C1[] = {
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C5D1Ev,_ZTv0_n12_N7S7589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C5D0Ev,_ZTv0_n12_N7S7589C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v21Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7589C5D1Ev,_ZTv0_n16_N7S7589C5D1Ev)();
extern void ABISELECT(_ZThn88_N7S7589C5D1Ev,_ZThn44_N7S7589C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7589C5D0Ev,_ZTv0_n16_N7S7589C5D0Ev)();
extern void ABISELECT(_ZThn88_N7S7589C5D0Ev,_ZThn44_N7S7589C5D0Ev)() __attribute__((weak));
extern void _ZN7S7589C73v22Ev();
extern void _ZN7S7589C73v23Ev();
extern void _ZN7S7589C73v24Ev();
extern void _ZN7S7589C73v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C7__7S7589C5__7S7589C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7589C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7589C5D1Ev,_ZTv0_n16_N7S7589C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7589C5D0Ev,_ZTv0_n16_N7S7589C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v25Ev,
};
extern void _ZN7S7589C7D1Ev();
extern void _ZN7S7589C7D0Ev();
extern void _ZN7S7589C73v22Ev();
extern void _ZN7S7589C73v23Ev();
extern void _ZN7S7589C73v24Ev();
extern void _ZN7S7589C73v25Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C7__7S7589C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7589C7[0]),
  (VTBL_ENTRY)&_ZN7S7589C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7589C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7589C73v25Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7589C7D1Ev,_ZTv0_n12_N7S7589C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7589C7D0Ev,_ZTv0_n12_N7S7589C7D0Ev)();
extern void _ZN7S7589C63v19Ev();
extern void _ZN7S7589C63v20Ev();
extern void _ZN7S7589C63v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7589C6__7S7589C7__7S7589C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7589C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C7D1Ev,_ZTv0_n12_N7S7589C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7589C7D0Ev,_ZTv0_n12_N7S7589C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7589C63v19Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v20Ev,
  (VTBL_ENTRY)&_ZN7S7589C63v21Ev,
};
static  VTT_ENTRY vtt_S7589C1[] = {
  {&(_ZTV7S7589C1[10]),  10,82},
  {&(_tg__ZTV7S7589C2__7S7589C1[7]),  7,15},
  {&(_tg__ZTV7S7589C2__7S7589C1[7]),  7,15},
  {&(_tg__ZTV10S7589C4_nt__7S7589C2__7S7589C1[10]),  10,18},
  {&(_ZTV7S7589C1[10]),  10,82},
  {&(_ZTV7S7589C1[32]),  32,82},
  {&(_ZTV7S7589C1[50]),  50,82},
  {&(_ZTV7S7589C1[63]),  63,82},
  {&(_ZTV7S7589C1[76]),  76,82},
  {&(_tg__ZTV7S7589C5__7S7589C1[4]),  4,11},
  {&(_tg__ZTV7S7589C6__7S7589C5__7S7589C1[6]),  6,11},
  {&(_tg__ZTV7S7589C7__7S7589C5__7S7589C1[8]),  8,14},
  {&(_tg__ZTV7S7589C7__7S7589C1[3]),  3,9},
  {&(_tg__ZTV7S7589C6__7S7589C7__7S7589C1[6]),  6,11},
};
extern VTBL_ENTRY _ZTI7S7589C1[];
extern  VTBL_ENTRY _ZTV7S7589C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7589C1[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7589C5D0Ev,_ZTv0_n16_N7S7589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7589C5D0Ev,_ZThn44_N7S7589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7589C5D1Ev,_ZTv0_n16_N7S7589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7589C5D1Ev,_ZThn44_N7S7589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C5D0Ev,_ZTv0_n12_N7S7589C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7589C5D0Ev,_ZThn36_N7S7589C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C5D1Ev,_ZTv0_n12_N7S7589C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7589C5D1Ev,_ZThn36_N7S7589C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7589C1D0Ev,_ZTv0_n16_N7S7589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7589C1D0Ev,_ZThn76_N7S7589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7589C1D1Ev,_ZTv0_n16_N7S7589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7589C1D1Ev,_ZThn76_N7S7589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C1D0Ev,_ZTv0_n12_N7S7589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7589C1D0Ev,_ZThn68_N7S7589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7589C1D1Ev,_ZTv0_n12_N7S7589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7589C1D1Ev,_ZThn68_N7S7589C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7589C1D0Ev,_ZTv0_n40_N7S7589C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7589C1D0Ev,_ZThn32_N7S7589C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7589C1D1Ev,_ZTv0_n40_N7S7589C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7589C1D1Ev,_ZThn32_N7S7589C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7589C1 = {  "S7589C1", // class name
  bases_S7589C1, 6,
  &(vtc_S7589C1[0]), // expected_vtbl_contents
  &(vtt_S7589C1[0]), // expected_vtt_contents
  ABISELECT(168,84), // object size
  NSPAIRA(_ZTI7S7589C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7589C1),82, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7589C1),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10281C2  {
  ::S8517C3_nt s10281c2f0;
  int s10281c2f1[4];
  ::S8516C5 s10281c2f2[32];
  char s10281c2f3;
  int s10281c2f4[2];
  ::S8517C6_nt s10281c2f5;
  ::S8517C11 s10281c2f6;
  int s10281c2f7[4];
  void *s10281c2f8;
  virtual  ~S10281C2(); // _ZN8S10281C2D1Ev
  virtual void  v9(); // _ZN8S10281C22v9Ev
  virtual void  v10(); // _ZN8S10281C23v10Ev
  virtual void  v11(); // _ZN8S10281C23v11Ev
  virtual void  v12(); // _ZN8S10281C23v12Ev
  virtual void  v13(); // _ZN8S10281C23v13Ev
  virtual void  v14(); // _ZN8S10281C23v14Ev
  virtual void  v15(); // _ZN8S10281C23v15Ev
  virtual void  v16(); // _ZN8S10281C23v16Ev
  virtual void  v17(); // _ZN8S10281C23v17Ev
  virtual void  v18(); // _ZN8S10281C23v18Ev
  virtual void  v19(); // _ZN8S10281C23v19Ev
  S10281C2(); // tgen
};
//SIG(-1 S10281C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FC3{ FL[4]}} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC2 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC2 FC8 Fi[5]} Fi[4] Fp}


 S10281C2 ::~S10281C2(){ note_dtor("S10281C2", this);}
void  S10281C2 ::v9(){vfunc_called(this, "_ZN8S10281C22v9Ev");}
void  S10281C2 ::v10(){vfunc_called(this, "_ZN8S10281C23v10Ev");}
void  S10281C2 ::v11(){vfunc_called(this, "_ZN8S10281C23v11Ev");}
void  S10281C2 ::v12(){vfunc_called(this, "_ZN8S10281C23v12Ev");}
void  S10281C2 ::v13(){vfunc_called(this, "_ZN8S10281C23v13Ev");}
void  S10281C2 ::v14(){vfunc_called(this, "_ZN8S10281C23v14Ev");}
void  S10281C2 ::v15(){vfunc_called(this, "_ZN8S10281C23v15Ev");}
void  S10281C2 ::v16(){vfunc_called(this, "_ZN8S10281C23v16Ev");}
void  S10281C2 ::v17(){vfunc_called(this, "_ZN8S10281C23v17Ev");}
void  S10281C2 ::v18(){vfunc_called(this, "_ZN8S10281C23v18Ev");}
void  S10281C2 ::v19(){vfunc_called(this, "_ZN8S10281C23v19Ev");}
S10281C2 ::S10281C2(){ note_ctor("S10281C2", this);} // tgen

static void Test_S10281C2()
{
  extern Class_Descriptor cd_S10281C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,80)];
    init_test(&cd_S10281C2, buf);
    S10281C2 *dp, &lv = *(dp=new (buf) S10281C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,316), "sizeof(S10281C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10281C2)");
    check_field_offset(lv, s10281c2f0, ABISELECT(8,4), "S10281C2.s10281c2f0");
    check_field_offset(lv, s10281c2f1, ABISELECT(40,36), "S10281C2.s10281c2f1");
    check_field_offset(lv, s10281c2f2, ABISELECT(56,52), "S10281C2.s10281c2f2");
    check_field_offset(lv, s10281c2f3, ABISELECT(120,116), "S10281C2.s10281c2f3");
    check_field_offset(lv, s10281c2f4, ABISELECT(124,120), "S10281C2.s10281c2f4");
    check_field_offset(lv, s10281c2f5, ABISELECT(136,128), "S10281C2.s10281c2f5");
    check_field_offset(lv, s10281c2f6, ABISELECT(248,224), "S10281C2.s10281c2f6");
    check_field_offset(lv, s10281c2f7, ABISELECT(328,296), "S10281C2.s10281c2f7");
    check_field_offset(lv, s10281c2f8, ABISELECT(344,312), "S10281C2.s10281c2f8");
    test_class_info(&lv, &cd_S10281C2);
    dp->~S10281C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10281C2(Test_S10281C2, "S10281C2", ABISELECT(352,316));

#else // __cplusplus

extern void _ZN8S10281C2C1Ev();
extern void _ZN8S10281C2D1Ev();
Name_Map name_map_S10281C2[] = {
  NSPAIR(_ZN8S10281C2C1Ev),
  NSPAIR(_ZN8S10281C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10281C2[];
extern void _ZN8S10281C2D1Ev();
extern void _ZN8S10281C2D0Ev();
extern void _ZN8S10281C22v9Ev();
extern void _ZN8S10281C23v10Ev();
extern void _ZN8S10281C23v11Ev();
extern void _ZN8S10281C23v12Ev();
extern void _ZN8S10281C23v13Ev();
extern void _ZN8S10281C23v14Ev();
extern void _ZN8S10281C23v15Ev();
extern void _ZN8S10281C23v16Ev();
extern void _ZN8S10281C23v17Ev();
extern void _ZN8S10281C23v18Ev();
extern void _ZN8S10281C23v19Ev();
static  VTBL_ENTRY vtc_S10281C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10281C2[0]),
  (VTBL_ENTRY)&_ZN8S10281C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10281C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10281C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v19Ev,
};
extern VTBL_ENTRY _ZTI8S10281C2[];
extern  VTBL_ENTRY _ZTV8S10281C2[];
Class_Descriptor cd_S10281C2 = {  "S10281C2", // class name
  0,0,//no base classes
  &(vtc_S10281C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,316), // object size
  NSPAIRA(_ZTI8S10281C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10281C2),15, //virtual function table var
  2, // 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  S10281C12  {
  void *s10281c12f0;
  int s10281c12f1;
  virtual  ~S10281C12(); // _ZN9S10281C12D1Ev
  virtual void  v20(); // _ZN9S10281C123v20Ev
  S10281C12(); // tgen
};
//SIG(-1 S10281C12) C1{ vd v1 Fp Fi}


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

static void Test_S10281C12()
{
  extern Class_Descriptor cd_S10281C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10281C12, buf);
    S10281C12 *dp, &lv = *(dp=new (buf) S10281C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10281C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10281C12)");
    check_field_offset(lv, s10281c12f0, ABISELECT(8,4), "S10281C12.s10281c12f0");
    check_field_offset(lv, s10281c12f1, ABISELECT(16,8), "S10281C12.s10281c12f1");
    test_class_info(&lv, &cd_S10281C12);
    dp->~S10281C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10281C12(Test_S10281C12, "S10281C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S10281C12C1Ev();
extern void _ZN9S10281C12D1Ev();
Name_Map name_map_S10281C12[] = {
  NSPAIR(_ZN9S10281C12C1Ev),
  NSPAIR(_ZN9S10281C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10281C12[];
extern void _ZN9S10281C12D1Ev();
extern void _ZN9S10281C12D0Ev();
extern void _ZN9S10281C123v20Ev();
static  VTBL_ENTRY vtc_S10281C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10281C12[0]),
  (VTBL_ENTRY)&_ZN9S10281C12D1Ev,
  (VTBL_ENTRY)&_ZN9S10281C12D0Ev,
  (VTBL_ENTRY)&_ZN9S10281C123v20Ev,
};
extern VTBL_ENTRY _ZTI9S10281C12[];
extern  VTBL_ENTRY _ZTV9S10281C12[];
Class_Descriptor cd_S10281C12 = {  "S10281C12", // class name
  0,0,//no base classes
  &(vtc_S10281C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S10281C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10281C12),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  S10281C13_nt  {
  short s10281c13f0[2];
};
//SIG(-1 S10281C13_nt) C1{ Fs[2]}



//skip512 S10281C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10281C1  : S10281C2 , S10281C12 {
  ::S8517C3_nt s10281c1f0;
  ::S10281C13_nt s10281c1f1;
  ::S8516C16_nt s10281c1f2;
  int s10281c1f3[3];
  virtual  ~S10281C1(); // _ZN8S10281C1D1Ev
  virtual void  v1(); // _ZN8S10281C12v1Ev
  virtual void  v2(); // _ZN8S10281C12v2Ev
  virtual void  v3(); // _ZN8S10281C12v3Ev
  virtual void  v4(); // _ZN8S10281C12v4Ev
  virtual void  v5(); // _ZN8S10281C12v5Ev
  virtual void  v6(); // _ZN8S10281C12v6Ev
  virtual void  v7(); // _ZN8S10281C12v7Ev
  virtual void  v8(); // _ZN8S10281C12v8Ev
  S10281C1(); // tgen
};
//SIG(1 S10281C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC3{ m FC4{ FL[4]}} Fi[4] FC5{ Fc[2]}[32] Fc Fi[2] FC6{ m Fi Fc FC7{ m Fp Fi[2] FC8{ m}} FC3 FC9{ m Fp FC10{ Fi[4]}} FC9} FC11{ m FC3 FC9 Fi[5]} Fi[4] Fp} BC12{ vd v20 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3 FC13{ Fs[2]} FC14{ Fi[2]} Fi[3]}


 S10281C1 ::~S10281C1(){ note_dtor("S10281C1", this);}
void  S10281C1 ::v1(){vfunc_called(this, "_ZN8S10281C12v1Ev");}
void  S10281C1 ::v2(){vfunc_called(this, "_ZN8S10281C12v2Ev");}
void  S10281C1 ::v3(){vfunc_called(this, "_ZN8S10281C12v3Ev");}
void  S10281C1 ::v4(){vfunc_called(this, "_ZN8S10281C12v4Ev");}
void  S10281C1 ::v5(){vfunc_called(this, "_ZN8S10281C12v5Ev");}
void  S10281C1 ::v6(){vfunc_called(this, "_ZN8S10281C12v6Ev");}
void  S10281C1 ::v7(){vfunc_called(this, "_ZN8S10281C12v7Ev");}
void  S10281C1 ::v8(){vfunc_called(this, "_ZN8S10281C12v8Ev");}
S10281C1 ::S10281C1(){ note_ctor("S10281C1", this);} // tgen

static void Test_S10281C1()
{
  extern Class_Descriptor cd_S10281C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,97)];
    init_test(&cd_S10281C1, buf);
    S10281C1 *dp, &lv = *(dp=new (buf) S10281C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,384), "sizeof(S10281C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10281C1)");
    check_base_class_offset(lv, (S10281C2*), 0, "S10281C1");
    check_base_class_offset(lv, (S10281C12*), ABISELECT(352,316), "S10281C1");
    check_field_offset(lv, s10281c1f0, ABISELECT(376,328), "S10281C1.s10281c1f0");
    check_field_offset(lv, s10281c1f1, ABISELECT(408,360), "S10281C1.s10281c1f1");
    check_field_offset(lv, s10281c1f2, ABISELECT(412,364), "S10281C1.s10281c1f2");
    check_field_offset(lv, s10281c1f3, ABISELECT(420,372), "S10281C1.s10281c1f3");
    test_class_info(&lv, &cd_S10281C1);
    dp->~S10281C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10281C1(Test_S10281C1, "S10281C1", ABISELECT(432,384));

#else // __cplusplus

extern void _ZN8S10281C1C1Ev();
extern void _ZN8S10281C1D1Ev();
Name_Map name_map_S10281C1[] = {
  NSPAIR(_ZN8S10281C1C1Ev),
  NSPAIR(_ZN8S10281C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10281C2;
extern VTBL_ENTRY _ZTI8S10281C2[];
extern  VTBL_ENTRY _ZTV8S10281C2[];
extern Class_Descriptor cd_S10281C12;
extern VTBL_ENTRY _ZTI9S10281C12[];
extern  VTBL_ENTRY _ZTV9S10281C12[];
static Base_Class bases_S10281C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10281C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S10281C12,    ABISELECT(352,316), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10281C1[];
extern void _ZN8S10281C1D1Ev();
extern void _ZN8S10281C1D0Ev();
extern void _ZN8S10281C22v9Ev();
extern void _ZN8S10281C23v10Ev();
extern void _ZN8S10281C23v11Ev();
extern void _ZN8S10281C23v12Ev();
extern void _ZN8S10281C23v13Ev();
extern void _ZN8S10281C23v14Ev();
extern void _ZN8S10281C23v15Ev();
extern void _ZN8S10281C23v16Ev();
extern void _ZN8S10281C23v17Ev();
extern void _ZN8S10281C23v18Ev();
extern void _ZN8S10281C23v19Ev();
extern void _ZN8S10281C12v1Ev();
extern void _ZN8S10281C12v2Ev();
extern void _ZN8S10281C12v3Ev();
extern void _ZN8S10281C12v4Ev();
extern void _ZN8S10281C12v5Ev();
extern void _ZN8S10281C12v6Ev();
extern void _ZN8S10281C12v7Ev();
extern void _ZN8S10281C12v8Ev();
extern void ABISELECT(_ZThn352_N8S10281C1D1Ev,_ZThn316_N8S10281C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S10281C1D0Ev,_ZThn316_N8S10281C1D0Ev)();
extern void _ZN9S10281C123v20Ev();
static  VTBL_ENTRY vtc_S10281C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10281C1[0]),
  (VTBL_ENTRY)&_ZN8S10281C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10281C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10281C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10281C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10281C12v8Ev,
  ABISELECT(-352,-316),
  (VTBL_ENTRY)&(_ZTI8S10281C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S10281C1D1Ev,_ZThn316_N8S10281C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S10281C1D0Ev,_ZThn316_N8S10281C1D0Ev),
  (VTBL_ENTRY)&_ZN9S10281C123v20Ev,
};
extern VTBL_ENTRY _ZTI8S10281C1[];
extern  VTBL_ENTRY _ZTV8S10281C1[];
Class_Descriptor cd_S10281C1 = {  "S10281C1", // class name
  bases_S10281C1, 2,
  &(vtc_S10281C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,384), // object size
  NSPAIRA(_ZTI8S10281C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10281C1),28, //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  S10280C2  {
  ::S8516C3_nt s10280c2f0;
  int s10280c2f1[4];
  ::S8516C5 s10280c2f2[32];
  char s10280c2f3;
  int s10280c2f4[2];
  ::S8516C6_nt s10280c2f5;
  ::S8516C11 s10280c2f6;
  int s10280c2f7[4];
  void *s10280c2f8;
  virtual  ~S10280C2(); // _ZN8S10280C2D1Ev
  virtual void  v9(); // _ZN8S10280C22v9Ev
  virtual void  v10(); // _ZN8S10280C23v10Ev
  virtual void  v11(); // _ZN8S10280C23v11Ev
  virtual void  v12(); // _ZN8S10280C23v12Ev
  virtual void  v13(); // _ZN8S10280C23v13Ev
  virtual void  v14(); // _ZN8S10280C23v14Ev
  virtual void  v15(); // _ZN8S10280C23v15Ev
  virtual void  v16(); // _ZN8S10280C23v16Ev
  virtual void  v17(); // _ZN8S10280C23v17Ev
  virtual void  v18(); // _ZN8S10280C23v18Ev
  virtual void  v19(); // _ZN8S10280C23v19Ev
  S10280C2(); // tgen
};
//SIG(-1 S10280C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FC3{ Fl[4]}} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC2 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC2 FC8 Fi[5]} Fi[4] Fp}


 S10280C2 ::~S10280C2(){ note_dtor("S10280C2", this);}
void  S10280C2 ::v9(){vfunc_called(this, "_ZN8S10280C22v9Ev");}
void  S10280C2 ::v10(){vfunc_called(this, "_ZN8S10280C23v10Ev");}
void  S10280C2 ::v11(){vfunc_called(this, "_ZN8S10280C23v11Ev");}
void  S10280C2 ::v12(){vfunc_called(this, "_ZN8S10280C23v12Ev");}
void  S10280C2 ::v13(){vfunc_called(this, "_ZN8S10280C23v13Ev");}
void  S10280C2 ::v14(){vfunc_called(this, "_ZN8S10280C23v14Ev");}
void  S10280C2 ::v15(){vfunc_called(this, "_ZN8S10280C23v15Ev");}
void  S10280C2 ::v16(){vfunc_called(this, "_ZN8S10280C23v16Ev");}
void  S10280C2 ::v17(){vfunc_called(this, "_ZN8S10280C23v17Ev");}
void  S10280C2 ::v18(){vfunc_called(this, "_ZN8S10280C23v18Ev");}
void  S10280C2 ::v19(){vfunc_called(this, "_ZN8S10280C23v19Ev");}
S10280C2 ::S10280C2(){ note_ctor("S10280C2", this);} // tgen

static void Test_S10280C2()
{
  extern Class_Descriptor cd_S10280C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,68)];
    init_test(&cd_S10280C2, buf);
    S10280C2 *dp, &lv = *(dp=new (buf) S10280C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,268), "sizeof(S10280C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10280C2)");
    check_field_offset(lv, s10280c2f0, ABISELECT(8,4), "S10280C2.s10280c2f0");
    check_field_offset(lv, s10280c2f1, ABISELECT(40,20), "S10280C2.s10280c2f1");
    check_field_offset(lv, s10280c2f2, ABISELECT(56,36), "S10280C2.s10280c2f2");
    check_field_offset(lv, s10280c2f3, ABISELECT(120,100), "S10280C2.s10280c2f3");
    check_field_offset(lv, s10280c2f4, ABISELECT(124,104), "S10280C2.s10280c2f4");
    check_field_offset(lv, s10280c2f5, ABISELECT(136,112), "S10280C2.s10280c2f5");
    check_field_offset(lv, s10280c2f6, ABISELECT(248,192), "S10280C2.s10280c2f6");
    check_field_offset(lv, s10280c2f7, ABISELECT(328,248), "S10280C2.s10280c2f7");
    check_field_offset(lv, s10280c2f8, ABISELECT(344,264), "S10280C2.s10280c2f8");
    test_class_info(&lv, &cd_S10280C2);
    dp->~S10280C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10280C2(Test_S10280C2, "S10280C2", ABISELECT(352,268));

#else // __cplusplus

extern void _ZN8S10280C2C1Ev();
extern void _ZN8S10280C2D1Ev();
Name_Map name_map_S10280C2[] = {
  NSPAIR(_ZN8S10280C2C1Ev),
  NSPAIR(_ZN8S10280C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10280C2[];
extern void _ZN8S10280C2D1Ev();
extern void _ZN8S10280C2D0Ev();
extern void _ZN8S10280C22v9Ev();
extern void _ZN8S10280C23v10Ev();
extern void _ZN8S10280C23v11Ev();
extern void _ZN8S10280C23v12Ev();
extern void _ZN8S10280C23v13Ev();
extern void _ZN8S10280C23v14Ev();
extern void _ZN8S10280C23v15Ev();
extern void _ZN8S10280C23v16Ev();
extern void _ZN8S10280C23v17Ev();
extern void _ZN8S10280C23v18Ev();
extern void _ZN8S10280C23v19Ev();
static  VTBL_ENTRY vtc_S10280C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10280C2[0]),
  (VTBL_ENTRY)&_ZN8S10280C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10280C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10280C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v19Ev,
};
extern VTBL_ENTRY _ZTI8S10280C2[];
extern  VTBL_ENTRY _ZTV8S10280C2[];
Class_Descriptor cd_S10280C2 = {  "S10280C2", // class name
  0,0,//no base classes
  &(vtc_S10280C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,268), // object size
  NSPAIRA(_ZTI8S10280C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10280C2),15, //virtual function table var
  2, // 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  S10280C12  {
  void *s10280c12f0;
  int s10280c12f1;
  virtual  ~S10280C12(); // _ZN9S10280C12D1Ev
  virtual void  v20(); // _ZN9S10280C123v20Ev
  S10280C12(); // tgen
};
//SIG(-1 S10280C12) C1{ vd v1 Fp Fi}


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

static void Test_S10280C12()
{
  extern Class_Descriptor cd_S10280C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10280C12, buf);
    S10280C12 *dp, &lv = *(dp=new (buf) S10280C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10280C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10280C12)");
    check_field_offset(lv, s10280c12f0, ABISELECT(8,4), "S10280C12.s10280c12f0");
    check_field_offset(lv, s10280c12f1, ABISELECT(16,8), "S10280C12.s10280c12f1");
    test_class_info(&lv, &cd_S10280C12);
    dp->~S10280C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10280C12(Test_S10280C12, "S10280C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S10280C12C1Ev();
extern void _ZN9S10280C12D1Ev();
Name_Map name_map_S10280C12[] = {
  NSPAIR(_ZN9S10280C12C1Ev),
  NSPAIR(_ZN9S10280C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10280C12[];
extern void _ZN9S10280C12D1Ev();
extern void _ZN9S10280C12D0Ev();
extern void _ZN9S10280C123v20Ev();
static  VTBL_ENTRY vtc_S10280C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10280C12[0]),
  (VTBL_ENTRY)&_ZN9S10280C12D1Ev,
  (VTBL_ENTRY)&_ZN9S10280C12D0Ev,
  (VTBL_ENTRY)&_ZN9S10280C123v20Ev,
};
extern VTBL_ENTRY _ZTI9S10280C12[];
extern  VTBL_ENTRY _ZTV9S10280C12[];
Class_Descriptor cd_S10280C12 = {  "S10280C12", // class name
  0,0,//no base classes
  &(vtc_S10280C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S10280C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10280C12),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  S10280C1  : S10280C2 , S10280C12 {
  ::S8516C3_nt s10280c1f0;
  ::S10281C13_nt s10280c1f1;
  ::S8516C16_nt s10280c1f2;
  int s10280c1f3[3];
  virtual  ~S10280C1(); // _ZN8S10280C1D1Ev
  virtual void  v1(); // _ZN8S10280C12v1Ev
  virtual void  v2(); // _ZN8S10280C12v2Ev
  virtual void  v3(); // _ZN8S10280C12v3Ev
  virtual void  v4(); // _ZN8S10280C12v4Ev
  virtual void  v5(); // _ZN8S10280C12v5Ev
  virtual void  v6(); // _ZN8S10280C12v6Ev
  virtual void  v7(); // _ZN8S10280C12v7Ev
  virtual void  v8(); // _ZN8S10280C12v8Ev
  S10280C1(); // tgen
};
//SIG(1 S10280C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC3{ m FC4{ Fl[4]}} Fi[4] FC5{ Fc[2]}[32] Fc Fi[2] FC6{ m Fi Fc FC7{ m Fp Fi[2] FC8{ m}} FC3 FC9{ m Fp FC10{ Fi[4]}} FC9} FC11{ m FC3 FC9 Fi[5]} Fi[4] Fp} BC12{ vd v20 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3 FC13{ Fs[2]} FC14{ Fi[2]} Fi[3]}


 S10280C1 ::~S10280C1(){ note_dtor("S10280C1", this);}
void  S10280C1 ::v1(){vfunc_called(this, "_ZN8S10280C12v1Ev");}
void  S10280C1 ::v2(){vfunc_called(this, "_ZN8S10280C12v2Ev");}
void  S10280C1 ::v3(){vfunc_called(this, "_ZN8S10280C12v3Ev");}
void  S10280C1 ::v4(){vfunc_called(this, "_ZN8S10280C12v4Ev");}
void  S10280C1 ::v5(){vfunc_called(this, "_ZN8S10280C12v5Ev");}
void  S10280C1 ::v6(){vfunc_called(this, "_ZN8S10280C12v6Ev");}
void  S10280C1 ::v7(){vfunc_called(this, "_ZN8S10280C12v7Ev");}
void  S10280C1 ::v8(){vfunc_called(this, "_ZN8S10280C12v8Ev");}
S10280C1 ::S10280C1(){ note_ctor("S10280C1", this);} // tgen

static void Test_S10280C1()
{
  extern Class_Descriptor cd_S10280C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,81)];
    init_test(&cd_S10280C1, buf);
    S10280C1 *dp, &lv = *(dp=new (buf) S10280C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,320), "sizeof(S10280C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10280C1)");
    check_base_class_offset(lv, (S10280C2*), 0, "S10280C1");
    check_base_class_offset(lv, (S10280C12*), ABISELECT(352,268), "S10280C1");
    check_field_offset(lv, s10280c1f0, ABISELECT(376,280), "S10280C1.s10280c1f0");
    check_field_offset(lv, s10280c1f1, ABISELECT(408,296), "S10280C1.s10280c1f1");
    check_field_offset(lv, s10280c1f2, ABISELECT(412,300), "S10280C1.s10280c1f2");
    check_field_offset(lv, s10280c1f3, ABISELECT(420,308), "S10280C1.s10280c1f3");
    test_class_info(&lv, &cd_S10280C1);
    dp->~S10280C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10280C1(Test_S10280C1, "S10280C1", ABISELECT(432,320));

#else // __cplusplus

extern void _ZN8S10280C1C1Ev();
extern void _ZN8S10280C1D1Ev();
Name_Map name_map_S10280C1[] = {
  NSPAIR(_ZN8S10280C1C1Ev),
  NSPAIR(_ZN8S10280C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10280C2;
extern VTBL_ENTRY _ZTI8S10280C2[];
extern  VTBL_ENTRY _ZTV8S10280C2[];
extern Class_Descriptor cd_S10280C12;
extern VTBL_ENTRY _ZTI9S10280C12[];
extern  VTBL_ENTRY _ZTV9S10280C12[];
static Base_Class bases_S10280C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10280C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S10280C12,    ABISELECT(352,268), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10280C1[];
extern void _ZN8S10280C1D1Ev();
extern void _ZN8S10280C1D0Ev();
extern void _ZN8S10280C22v9Ev();
extern void _ZN8S10280C23v10Ev();
extern void _ZN8S10280C23v11Ev();
extern void _ZN8S10280C23v12Ev();
extern void _ZN8S10280C23v13Ev();
extern void _ZN8S10280C23v14Ev();
extern void _ZN8S10280C23v15Ev();
extern void _ZN8S10280C23v16Ev();
extern void _ZN8S10280C23v17Ev();
extern void _ZN8S10280C23v18Ev();
extern void _ZN8S10280C23v19Ev();
extern void _ZN8S10280C12v1Ev();
extern void _ZN8S10280C12v2Ev();
extern void _ZN8S10280C12v3Ev();
extern void _ZN8S10280C12v4Ev();
extern void _ZN8S10280C12v5Ev();
extern void _ZN8S10280C12v6Ev();
extern void _ZN8S10280C12v7Ev();
extern void _ZN8S10280C12v8Ev();
extern void ABISELECT(_ZThn352_N8S10280C1D1Ev,_ZThn268_N8S10280C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S10280C1D0Ev,_ZThn268_N8S10280C1D0Ev)();
extern void _ZN9S10280C123v20Ev();
static  VTBL_ENTRY vtc_S10280C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10280C1[0]),
  (VTBL_ENTRY)&_ZN8S10280C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10280C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10280C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10280C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10280C12v8Ev,
  ABISELECT(-352,-268),
  (VTBL_ENTRY)&(_ZTI8S10280C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S10280C1D1Ev,_ZThn268_N8S10280C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S10280C1D0Ev,_ZThn268_N8S10280C1D0Ev),
  (VTBL_ENTRY)&_ZN9S10280C123v20Ev,
};
extern VTBL_ENTRY _ZTI8S10280C1[];
extern  VTBL_ENTRY _ZTV8S10280C1[];
Class_Descriptor cd_S10280C1 = {  "S10280C1", // class name
  bases_S10280C1, 2,
  &(vtc_S10280C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,320), // object size
  NSPAIRA(_ZTI8S10280C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10280C1),28, //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  S10282C2  {
  ::S8520C3_nt s10282c2f0;
  int s10282c2f1[4];
  ::S8516C5 s10282c2f2[32];
  char s10282c2f3;
  int s10282c2f4[2];
  ::S8520C5_nt s10282c2f5;
  ::S8520C10 s10282c2f6;
  int s10282c2f7[4];
  void *s10282c2f8;
  virtual  ~S10282C2(); // _ZN8S10282C2D1Ev
  virtual void  v9(); // _ZN8S10282C22v9Ev
  virtual void  v10(); // _ZN8S10282C23v10Ev
  virtual void  v11(); // _ZN8S10282C23v11Ev
  virtual void  v12(); // _ZN8S10282C23v12Ev
  virtual void  v13(); // _ZN8S10282C23v13Ev
  virtual void  v14(); // _ZN8S10282C23v14Ev
  virtual void  v15(); // _ZN8S10282C23v15Ev
  virtual void  v16(); // _ZN8S10282C23v16Ev
  virtual void  v17(); // _ZN8S10282C23v17Ev
  virtual void  v18(); // _ZN8S10282C23v18Ev
  virtual void  v19(); // _ZN8S10282C23v19Ev
  S10282C2(); // tgen
};
//SIG(-1 S10282C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC2{ m FL[4]} Fi[4] FC3{ Fc[2]}[32] Fc Fi[2] FC4{ m Fi Fc FC5{ m Fp Fi[2] FC6{ m}} FC2 FC7{ m Fp FC8{ Fi[4]}} FC7} FC9{ m FC2 FC7 Fi[5]} Fi[4] Fp}


 S10282C2 ::~S10282C2(){ note_dtor("S10282C2", this);}
void  S10282C2 ::v9(){vfunc_called(this, "_ZN8S10282C22v9Ev");}
void  S10282C2 ::v10(){vfunc_called(this, "_ZN8S10282C23v10Ev");}
void  S10282C2 ::v11(){vfunc_called(this, "_ZN8S10282C23v11Ev");}
void  S10282C2 ::v12(){vfunc_called(this, "_ZN8S10282C23v12Ev");}
void  S10282C2 ::v13(){vfunc_called(this, "_ZN8S10282C23v13Ev");}
void  S10282C2 ::v14(){vfunc_called(this, "_ZN8S10282C23v14Ev");}
void  S10282C2 ::v15(){vfunc_called(this, "_ZN8S10282C23v15Ev");}
void  S10282C2 ::v16(){vfunc_called(this, "_ZN8S10282C23v16Ev");}
void  S10282C2 ::v17(){vfunc_called(this, "_ZN8S10282C23v17Ev");}
void  S10282C2 ::v18(){vfunc_called(this, "_ZN8S10282C23v18Ev");}
void  S10282C2 ::v19(){vfunc_called(this, "_ZN8S10282C23v19Ev");}
S10282C2 ::S10282C2(){ note_ctor("S10282C2", this);} // tgen

static void Test_S10282C2()
{
  extern Class_Descriptor cd_S10282C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,80)];
    init_test(&cd_S10282C2, buf);
    S10282C2 *dp, &lv = *(dp=new (buf) S10282C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,316), "sizeof(S10282C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10282C2)");
    check_field_offset(lv, s10282c2f0, ABISELECT(8,4), "S10282C2.s10282c2f0");
    check_field_offset(lv, s10282c2f1, ABISELECT(40,36), "S10282C2.s10282c2f1");
    check_field_offset(lv, s10282c2f2, ABISELECT(56,52), "S10282C2.s10282c2f2");
    check_field_offset(lv, s10282c2f3, ABISELECT(120,116), "S10282C2.s10282c2f3");
    check_field_offset(lv, s10282c2f4, ABISELECT(124,120), "S10282C2.s10282c2f4");
    check_field_offset(lv, s10282c2f5, ABISELECT(136,128), "S10282C2.s10282c2f5");
    check_field_offset(lv, s10282c2f6, ABISELECT(248,224), "S10282C2.s10282c2f6");
    check_field_offset(lv, s10282c2f7, ABISELECT(328,296), "S10282C2.s10282c2f7");
    check_field_offset(lv, s10282c2f8, ABISELECT(344,312), "S10282C2.s10282c2f8");
    test_class_info(&lv, &cd_S10282C2);
    dp->~S10282C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10282C2(Test_S10282C2, "S10282C2", ABISELECT(352,316));

#else // __cplusplus

extern void _ZN8S10282C2C1Ev();
extern void _ZN8S10282C2D1Ev();
Name_Map name_map_S10282C2[] = {
  NSPAIR(_ZN8S10282C2C1Ev),
  NSPAIR(_ZN8S10282C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10282C2[];
extern void _ZN8S10282C2D1Ev();
extern void _ZN8S10282C2D0Ev();
extern void _ZN8S10282C22v9Ev();
extern void _ZN8S10282C23v10Ev();
extern void _ZN8S10282C23v11Ev();
extern void _ZN8S10282C23v12Ev();
extern void _ZN8S10282C23v13Ev();
extern void _ZN8S10282C23v14Ev();
extern void _ZN8S10282C23v15Ev();
extern void _ZN8S10282C23v16Ev();
extern void _ZN8S10282C23v17Ev();
extern void _ZN8S10282C23v18Ev();
extern void _ZN8S10282C23v19Ev();
static  VTBL_ENTRY vtc_S10282C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10282C2[0]),
  (VTBL_ENTRY)&_ZN8S10282C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10282C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10282C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v19Ev,
};
extern VTBL_ENTRY _ZTI8S10282C2[];
extern  VTBL_ENTRY _ZTV8S10282C2[];
Class_Descriptor cd_S10282C2 = {  "S10282C2", // class name
  0,0,//no base classes
  &(vtc_S10282C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,316), // object size
  NSPAIRA(_ZTI8S10282C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10282C2),15, //virtual function table var
  2, // 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  S10282C11  {
  void *s10282c11f0;
  int s10282c11f1;
  virtual  ~S10282C11(); // _ZN9S10282C11D1Ev
  virtual void  v20(); // _ZN9S10282C113v20Ev
  S10282C11(); // tgen
};
//SIG(-1 S10282C11) C1{ vd v1 Fp Fi}


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

static void Test_S10282C11()
{
  extern Class_Descriptor cd_S10282C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10282C11, buf);
    S10282C11 *dp, &lv = *(dp=new (buf) S10282C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10282C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10282C11)");
    check_field_offset(lv, s10282c11f0, ABISELECT(8,4), "S10282C11.s10282c11f0");
    check_field_offset(lv, s10282c11f1, ABISELECT(16,8), "S10282C11.s10282c11f1");
    test_class_info(&lv, &cd_S10282C11);
    dp->~S10282C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10282C11(Test_S10282C11, "S10282C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S10282C11C1Ev();
extern void _ZN9S10282C11D1Ev();
Name_Map name_map_S10282C11[] = {
  NSPAIR(_ZN9S10282C11C1Ev),
  NSPAIR(_ZN9S10282C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S10282C11[];
extern void _ZN9S10282C11D1Ev();
extern void _ZN9S10282C11D0Ev();
extern void _ZN9S10282C113v20Ev();
static  VTBL_ENTRY vtc_S10282C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S10282C11[0]),
  (VTBL_ENTRY)&_ZN9S10282C11D1Ev,
  (VTBL_ENTRY)&_ZN9S10282C11D0Ev,
  (VTBL_ENTRY)&_ZN9S10282C113v20Ev,
};
extern VTBL_ENTRY _ZTI9S10282C11[];
extern  VTBL_ENTRY _ZTV9S10282C11[];
Class_Descriptor cd_S10282C11 = {  "S10282C11", // class name
  0,0,//no base classes
  &(vtc_S10282C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S10282C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S10282C11),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  S10282C1  : S10282C2 , S10282C11 {
  ::S8520C3_nt s10282c1f0;
  ::S10281C13_nt s10282c1f1;
  ::S8516C16_nt s10282c1f2;
  int s10282c1f3[3];
  virtual  ~S10282C1(); // _ZN8S10282C1D1Ev
  virtual void  v1(); // _ZN8S10282C12v1Ev
  virtual void  v2(); // _ZN8S10282C12v2Ev
  virtual void  v3(); // _ZN8S10282C12v3Ev
  virtual void  v4(); // _ZN8S10282C12v4Ev
  virtual void  v5(); // _ZN8S10282C12v5Ev
  virtual void  v6(); // _ZN8S10282C12v6Ev
  virtual void  v7(); // _ZN8S10282C12v7Ev
  virtual void  v8(); // _ZN8S10282C12v8Ev
  S10282C1(); // tgen
};
//SIG(1 S10282C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC3{ m FL[4]} Fi[4] FC4{ Fc[2]}[32] Fc Fi[2] FC5{ m Fi Fc FC6{ m Fp Fi[2] FC7{ m}} FC3 FC8{ m Fp FC9{ Fi[4]}} FC8} FC10{ m FC3 FC8 Fi[5]} Fi[4] Fp} BC11{ vd v20 Fp Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 FC3 FC12{ Fs[2]} FC13{ Fi[2]} Fi[3]}


 S10282C1 ::~S10282C1(){ note_dtor("S10282C1", this);}
void  S10282C1 ::v1(){vfunc_called(this, "_ZN8S10282C12v1Ev");}
void  S10282C1 ::v2(){vfunc_called(this, "_ZN8S10282C12v2Ev");}
void  S10282C1 ::v3(){vfunc_called(this, "_ZN8S10282C12v3Ev");}
void  S10282C1 ::v4(){vfunc_called(this, "_ZN8S10282C12v4Ev");}
void  S10282C1 ::v5(){vfunc_called(this, "_ZN8S10282C12v5Ev");}
void  S10282C1 ::v6(){vfunc_called(this, "_ZN8S10282C12v6Ev");}
void  S10282C1 ::v7(){vfunc_called(this, "_ZN8S10282C12v7Ev");}
void  S10282C1 ::v8(){vfunc_called(this, "_ZN8S10282C12v8Ev");}
S10282C1 ::S10282C1(){ note_ctor("S10282C1", this);} // tgen

static void Test_S10282C1()
{
  extern Class_Descriptor cd_S10282C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,97)];
    init_test(&cd_S10282C1, buf);
    S10282C1 *dp, &lv = *(dp=new (buf) S10282C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,384), "sizeof(S10282C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10282C1)");
    check_base_class_offset(lv, (S10282C2*), 0, "S10282C1");
    check_base_class_offset(lv, (S10282C11*), ABISELECT(352,316), "S10282C1");
    check_field_offset(lv, s10282c1f0, ABISELECT(376,328), "S10282C1.s10282c1f0");
    check_field_offset(lv, s10282c1f1, ABISELECT(408,360), "S10282C1.s10282c1f1");
    check_field_offset(lv, s10282c1f2, ABISELECT(412,364), "S10282C1.s10282c1f2");
    check_field_offset(lv, s10282c1f3, ABISELECT(420,372), "S10282C1.s10282c1f3");
    test_class_info(&lv, &cd_S10282C1);
    dp->~S10282C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10282C1(Test_S10282C1, "S10282C1", ABISELECT(432,384));

#else // __cplusplus

extern void _ZN8S10282C1C1Ev();
extern void _ZN8S10282C1D1Ev();
Name_Map name_map_S10282C1[] = {
  NSPAIR(_ZN8S10282C1C1Ev),
  NSPAIR(_ZN8S10282C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10282C2;
extern VTBL_ENTRY _ZTI8S10282C2[];
extern  VTBL_ENTRY _ZTV8S10282C2[];
extern Class_Descriptor cd_S10282C11;
extern VTBL_ENTRY _ZTI9S10282C11[];
extern  VTBL_ENTRY _ZTV9S10282C11[];
static Base_Class bases_S10282C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10282C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S10282C11,    ABISELECT(352,316), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10282C1[];
extern void _ZN8S10282C1D1Ev();
extern void _ZN8S10282C1D0Ev();
extern void _ZN8S10282C22v9Ev();
extern void _ZN8S10282C23v10Ev();
extern void _ZN8S10282C23v11Ev();
extern void _ZN8S10282C23v12Ev();
extern void _ZN8S10282C23v13Ev();
extern void _ZN8S10282C23v14Ev();
extern void _ZN8S10282C23v15Ev();
extern void _ZN8S10282C23v16Ev();
extern void _ZN8S10282C23v17Ev();
extern void _ZN8S10282C23v18Ev();
extern void _ZN8S10282C23v19Ev();
extern void _ZN8S10282C12v1Ev();
extern void _ZN8S10282C12v2Ev();
extern void _ZN8S10282C12v3Ev();
extern void _ZN8S10282C12v4Ev();
extern void _ZN8S10282C12v5Ev();
extern void _ZN8S10282C12v6Ev();
extern void _ZN8S10282C12v7Ev();
extern void _ZN8S10282C12v8Ev();
extern void ABISELECT(_ZThn352_N8S10282C1D1Ev,_ZThn316_N8S10282C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S10282C1D0Ev,_ZThn316_N8S10282C1D0Ev)();
extern void _ZN9S10282C113v20Ev();
static  VTBL_ENTRY vtc_S10282C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10282C1[0]),
  (VTBL_ENTRY)&_ZN8S10282C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10282C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10282C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v17Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v18Ev,
  (VTBL_ENTRY)&_ZN8S10282C23v19Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10282C12v8Ev,
  ABISELECT(-352,-316),
  (VTBL_ENTRY)&(_ZTI8S10282C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S10282C1D1Ev,_ZThn316_N8S10282C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn352_N8S10282C1D0Ev,_ZThn316_N8S10282C1D0Ev),
  (VTBL_ENTRY)&_ZN9S10282C113v20Ev,
};
extern VTBL_ENTRY _ZTI8S10282C1[];
extern  VTBL_ENTRY _ZTV8S10282C1[];
Class_Descriptor cd_S10282C1 = {  "S10282C1", // class name
  bases_S10282C1, 2,
  &(vtc_S10282C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(432,384), // object size
  NSPAIRA(_ZTI8S10282C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S10282C1),28, //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  S4874C4_nt  {
  void *s4874c4f0[2];
};
//SIG(-1 S4874C4_nt) C1{ Fp[2]}



//skip512 S4874C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C3_nt  {
  int s4874c3f0;
  void *s4874c3f1;
  int s4874c3f2;
  ::S4874C4_nt s4874c3f3;
  void *s4874c3f4;
  int s4874c3f5;
  virtual  ~S4874C3_nt(); // _ZN10S4874C3_ntD1Ev
  virtual void  v3(); // _ZN10S4874C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4874C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4874C3_nt2v5Ev
  S4874C3_nt(); // tgen
};
//SIG(-1 S4874C3_nt) C1{ vd v1 v2 v3 Fi Fp Fi FC2{ Fp[2]} Fp Fi}


 S4874C3_nt ::~S4874C3_nt(){ note_dtor("S4874C3_nt", this);}
void  S4874C3_nt ::v3(){vfunc_called(this, "_ZN10S4874C3_nt2v3Ev");}
void  S4874C3_nt ::v4(){vfunc_called(this, "_ZN10S4874C3_nt2v4Ev");}
void  S4874C3_nt ::v5(){vfunc_called(this, "_ZN10S4874C3_nt2v5Ev");}
S4874C3_nt ::S4874C3_nt(){ note_ctor("S4874C3_nt", this);} // tgen

//skip512 S4874C3_nt

#else // __cplusplus

extern void _ZN10S4874C3_ntC1Ev();
extern void _ZN10S4874C3_ntD1Ev();
Name_Map name_map_S4874C3_nt[] = {
  NSPAIR(_ZN10S4874C3_ntC1Ev),
  NSPAIR(_ZN10S4874C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4874C3_nt[];
extern void _ZN10S4874C3_ntD1Ev();
extern void _ZN10S4874C3_ntD0Ev();
extern void _ZN10S4874C3_nt2v3Ev();
extern void _ZN10S4874C3_nt2v4Ev();
extern void _ZN10S4874C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S4874C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4874C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4874C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4874C3_nt[];
VTBL_ENTRY *P__ZTI10S4874C3_nt = _ZTI10S4874C3_nt; 
extern  VTBL_ENTRY _ZTV10S4874C3_nt[];
Class_Descriptor cd_S4874C3_nt = {  "S4874C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4874C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI10S4874C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4874C3_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  S4874C2_nt  : S4874C3_nt {
  void *s4874c2f0;
  int s4874c2f1[2];
  virtual void  v6(); // _ZN10S4874C2_nt2v6Ev
  ~S4874C2_nt(); // tgen
  S4874C2_nt(); // tgen
};
//SIG(-1 S4874C2_nt) C1{ BC2{ vd v2 v3 v4 Fi Fp Fi FC3{ Fp[2]} Fp Fi} v1 Fp Fi[2]}


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

//skip512 S4874C2_nt

#else // __cplusplus

extern void _ZN10S4874C2_ntC1Ev();
extern void _ZN10S4874C2_ntD1Ev();
Name_Map name_map_S4874C2_nt[] = {
  NSPAIR(_ZN10S4874C2_ntC1Ev),
  NSPAIR(_ZN10S4874C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4874C3_nt;
extern VTBL_ENTRY _ZTI10S4874C3_nt[];
extern  VTBL_ENTRY _ZTV10S4874C3_nt[];
static Base_Class bases_S4874C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4874C3_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 _ZTI10S4874C2_nt[];
extern void _ZN10S4874C2_ntD1Ev();
extern void _ZN10S4874C2_ntD0Ev();
extern void _ZN10S4874C3_nt2v3Ev();
extern void _ZN10S4874C3_nt2v4Ev();
extern void _ZN10S4874C3_nt2v5Ev();
extern void _ZN10S4874C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S4874C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4874C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4874C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4874C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4874C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S4874C2_nt[];
VTBL_ENTRY *P__ZTI10S4874C2_nt = _ZTI10S4874C2_nt; 
extern  VTBL_ENTRY _ZTV10S4874C2_nt[];
Class_Descriptor cd_S4874C2_nt = {  "S4874C2_nt", // class name
  bases_S4874C2_nt, 1,
  &(vtc_S4874C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI10S4874C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4874C2_nt),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  S4874C8_nt  {
  char s4874c8f0[20];
};
//SIG(-1 S4874C8_nt) C1{ Fc[20]}



//skip512 S4874C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C7_nt  {
  ::S4874C8_nt s4874c7f0;
  char s4874c7f1[16];
};
//SIG(-1 S4874C7_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S4874C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C10_nt  {
  char s4874c10f0[128];
};
//SIG(-1 S4874C10_nt) C1{ Fc[128]}



//skip512 S4874C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C6_nt  {
  ::S4874C7_nt s4874c6f0;
  ::S8512C15_nt s4874c6f1;
  ::S4874C10_nt s4874c6f2;
};
//SIG(-1 S4874C6_nt) C1{ FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[52]} FC5{ Fc[128]}}



//skip512 S4874C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C11_nt  {
  char s4874c11f0[4];
};
//SIG(-1 S4874C11_nt) C1{ Fc[4]}



//skip512 S4874C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C13_nt  {
  char s4874c13f0[64];
};
//SIG(-1 S4874C13_nt) C1{ Fc[64]}



//skip512 S4874C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C15_nt  {
  int s4874c15f0;
  int s4874c15f1;
};
//SIG(1 S4874C15_nt) C1{ Fi[2]}



//skip512 S4874C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C16_nt  {
  int s4874c16f0;
  int s4874c16f1;
  int s4874c16f2;
  char s4874c16f3[128];
};
//SIG(1 S4874C16_nt) C1{ Fi[3] Fc[128]}



//skip512 S4874C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S4874C14_nt  {
  ::S4874C15_nt s4874c14f0;
  __tsi64 s4874c14f1;
  ::S4874C16_nt s4874c14f2;
};
//SIG(1 S4874C14_nt) U1{ FC2{ Fi Fi} FL FC3{ Fi Fi Fi Fc[128]}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S4874C5_nt  {
  ::S4874C6_nt s4874c5f0;
  ::S4874C11_nt s4874c5f1;
  ::S8512C16_nt s4874c5f2;
  int s4874c5f3;
  ::S4874C13_nt s4874c5f4;
  ::S4874C14_nt s4874c5f5;
  int s4874c5f6;
};
//SIG(-1 S4874C5_nt) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[52]} FC6{ Fc[128]}} FC7{ Fc[4]} FC8{ Fi[3] Fc[4]} Fi FC9{ Fc[64]} FU10{ FC11{ Fi Fi} FL FC12{ Fi Fi Fi Fc[128]}} Fi}



//skip512 S4874C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C17_nt  {
  long s4874c17f0;
};
//SIG(-1 S4874C17_nt) C1{ Fl}



//skip512 S4874C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4874C1  : S4874C2_nt {
  void *s4874c1f0[5];
  int s4874c1f1;
  void *s4874c1f2[2];
  int s4874c1f3;
  void *s4874c1f4;
  int s4874c1f5;
  ::S4874C5_nt s4874c1f6;
  int s4874c1f7;
  int s4874c1f8;
  ::S4874C17_nt s4874c1f9;
  virtual void  v1(); // _ZN7S4874C12v1Ev
  virtual void  v2(); // _ZN7S4874C12v2Ev
  ~S4874C1(); // tgen
  S4874C1(); // tgen
};
//SIG(1 S4874C1) C1{ BC2{ BC3{ vd v3 v4 v5 Fi Fp Fi FC4{ Fp[2]} Fp Fi} v6 Fp Fi[2]} v1 v2 Fp[5] Fi Fp[2] Fi Fp Fi FC5{ FC6{ FC7{ FC8{ Fc[20]} Fc[16]} FC9{ Fc[52]} FC10{ Fc[128]}} FC11{ Fc[4]} FC12{ Fi[3] Fc[4]} Fi FC13{ Fc[64]} FU14{ FC15{ Fi Fi} FL FC16{ Fi Fi Fi Fc[128]}} Fi} Fi Fi FC17{ Fl}}


void  S4874C1 ::v1(){vfunc_called(this, "_ZN7S4874C12v1Ev");}
void  S4874C1 ::v2(){vfunc_called(this, "_ZN7S4874C12v2Ev");}
S4874C1 ::~S4874C1(){ note_dtor("S4874C1", this);} // tgen
S4874C1 ::S4874C1(){ note_ctor("S4874C1", this);} // tgen

static void Test_S4874C1()
{
  extern Class_Descriptor cd_S4874C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,138)];
    init_test(&cd_S4874C1, buf);
    S4874C1 *dp, &lv = *(dp=new (buf) S4874C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,548), "sizeof(S4874C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4874C1)");
    check_base_class_offset(lv, (S4874C3_nt*)(S4874C2_nt*), 0, "S4874C1");
    check_base_class_offset(lv, (S4874C2_nt*), 0, "S4874C1");
    check_field_offset(lv, s4874c1f0, ABISELECT(80,44), "S4874C1.s4874c1f0");
    check_field_offset(lv, s4874c1f1, ABISELECT(120,64), "S4874C1.s4874c1f1");
    check_field_offset(lv, s4874c1f2, ABISELECT(128,68), "S4874C1.s4874c1f2");
    check_field_offset(lv, s4874c1f3, ABISELECT(144,76), "S4874C1.s4874c1f3");
    check_field_offset(lv, s4874c1f4, ABISELECT(152,80), "S4874C1.s4874c1f4");
    check_field_offset(lv, s4874c1f5, ABISELECT(160,84), "S4874C1.s4874c1f5");
    check_field_offset(lv, s4874c1f6, ABISELECT(168,88), "S4874C1.s4874c1f6");
    check_field_offset(lv, s4874c1f7, ABISELECT(624,536), "S4874C1.s4874c1f7");
    check_field_offset(lv, s4874c1f8, ABISELECT(628,540), "S4874C1.s4874c1f8");
    check_field_offset(lv, s4874c1f9, ABISELECT(632,544), "S4874C1.s4874c1f9");
    test_class_info(&lv, &cd_S4874C1);
    dp->~S4874C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4874C1(Test_S4874C1, "S4874C1", ABISELECT(640,548));

#else // __cplusplus

extern void _ZN7S4874C1C1Ev();
extern void _ZN7S4874C1D1Ev();
Name_Map name_map_S4874C1[] = {
  NSPAIR(_ZN7S4874C1C1Ev),
  NSPAIR(_ZN7S4874C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4874C3_nt;
extern VTBL_ENTRY _ZTI10S4874C3_nt[];
extern  VTBL_ENTRY _ZTV10S4874C3_nt[];
extern Class_Descriptor cd_S4874C2_nt;
extern VTBL_ENTRY _ZTI10S4874C2_nt[];
extern  VTBL_ENTRY _ZTV10S4874C2_nt[];
static Base_Class bases_S4874C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4874C3_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_S4874C2_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 _ZTI7S4874C1[];
extern void _ZN7S4874C1D1Ev();
extern void _ZN7S4874C1D0Ev();
extern void _ZN10S4874C3_nt2v3Ev();
extern void _ZN10S4874C3_nt2v4Ev();
extern void _ZN10S4874C3_nt2v5Ev();
extern void _ZN10S4874C2_nt2v6Ev();
extern void _ZN7S4874C12v1Ev();
extern void _ZN7S4874C12v2Ev();
static  VTBL_ENTRY vtc_S4874C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4874C1[0]),
  (VTBL_ENTRY)&_ZN7S4874C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4874C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4874C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4874C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S4874C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4874C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4874C1[];
extern  VTBL_ENTRY _ZTV7S4874C1[];
Class_Descriptor cd_S4874C1 = {  "S4874C1", // class name
  bases_S4874C1, 2,
  &(vtc_S4874C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,548), // object size
  NSPAIRA(_ZTI7S4874C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4874C1),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  S3691C2  : S3715C3_nt {
  virtual  ~S3691C2(); // _ZN7S3691C2D1Ev
  virtual void  v14(); // _ZN7S3691C23v14Ev
  virtual void  v15(); // _ZN7S3691C23v15Ev
  virtual void  v16(); // _ZN7S3691C23v16Ev
  virtual void  v17(); // _ZN7S3691C23v17Ev
  virtual void  v18(); // _ZN7S3691C23v18Ev
  virtual void  v19(); // _ZN7S3691C23v19Ev
  virtual void  v20(); // _ZN7S3691C23v20Ev
  virtual void  v21(); // _ZN7S3691C23v21Ev
  virtual void  v22(); // _ZN7S3691C23v22Ev
  virtual void  v23(); // _ZN7S3691C23v23Ev
  virtual void  v24(); // _ZN7S3691C23v24Ev
  virtual void  v25(); // _ZN7S3691C23v25Ev
  virtual void  v26(); // _ZN7S3691C23v26Ev
  S3691C2(); // tgen
};
//SIG(-1 S3691C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S3691C2 ::~S3691C2(){ note_dtor("S3691C2", this);}
void  S3691C2 ::v14(){vfunc_called(this, "_ZN7S3691C23v14Ev");}
void  S3691C2 ::v15(){vfunc_called(this, "_ZN7S3691C23v15Ev");}
void  S3691C2 ::v16(){vfunc_called(this, "_ZN7S3691C23v16Ev");}
void  S3691C2 ::v17(){vfunc_called(this, "_ZN7S3691C23v17Ev");}
void  S3691C2 ::v18(){vfunc_called(this, "_ZN7S3691C23v18Ev");}
void  S3691C2 ::v19(){vfunc_called(this, "_ZN7S3691C23v19Ev");}
void  S3691C2 ::v20(){vfunc_called(this, "_ZN7S3691C23v20Ev");}
void  S3691C2 ::v21(){vfunc_called(this, "_ZN7S3691C23v21Ev");}
void  S3691C2 ::v22(){vfunc_called(this, "_ZN7S3691C23v22Ev");}
void  S3691C2 ::v23(){vfunc_called(this, "_ZN7S3691C23v23Ev");}
void  S3691C2 ::v24(){vfunc_called(this, "_ZN7S3691C23v24Ev");}
void  S3691C2 ::v25(){vfunc_called(this, "_ZN7S3691C23v25Ev");}
void  S3691C2 ::v26(){vfunc_called(this, "_ZN7S3691C23v26Ev");}
S3691C2 ::S3691C2(){ note_ctor("S3691C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3691C2C1Ev();
extern void _ZN7S3691C2D1Ev();
Name_Map name_map_S3691C2[] = {
  NSPAIR(_ZN7S3691C2C1Ev),
  NSPAIR(_ZN7S3691C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
static Base_Class bases_S3691C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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 _ZTI7S3691C2[];
extern void _ZN7S3691C2D1Ev();
extern void _ZN7S3691C2D0Ev();
extern void _ZN7S3691C23v14Ev();
extern void _ZN7S3691C23v15Ev();
extern void _ZN7S3691C23v16Ev();
extern void _ZN7S3691C23v17Ev();
extern void _ZN7S3691C23v18Ev();
extern void _ZN7S3691C23v19Ev();
extern void _ZN7S3691C23v20Ev();
extern void _ZN7S3691C23v21Ev();
extern void _ZN7S3691C23v22Ev();
extern void _ZN7S3691C23v23Ev();
extern void _ZN7S3691C23v24Ev();
extern void _ZN7S3691C23v25Ev();
extern void _ZN7S3691C23v26Ev();
static  VTBL_ENTRY vtc_S3691C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3691C2[0]),
  (VTBL_ENTRY)&_ZN7S3691C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3691C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S3691C2[];
extern  VTBL_ENTRY _ZTV7S3691C2[];
Class_Descriptor cd_S3691C2 = {  "S3691C2", // class name
  bases_S3691C2, 1,
  &(vtc_S3691C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3691C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3691C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3691C5  {
  int s3691c5f0;
  void *s3691c5f1;
  char s3691c5f2[1179];
  void  mf3691c5(); // _ZN7S3691C58mf3691c5Ev
  virtual  ~S3691C5(); // _ZN7S3691C5D1Ev
  S3691C5(); // tgen
};
//SIG(-1 S3691C5) C1{ vd m Fi Fp Fc[1179]}


void  S3691C5 ::mf3691c5(){}
 S3691C5 ::~S3691C5(){ note_dtor("S3691C5", this);}
S3691C5 ::S3691C5(){ note_ctor("S3691C5", this);} // tgen

static void Test_S3691C5()
{
  extern Class_Descriptor cd_S3691C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(152,299)];
    init_test(&cd_S3691C5, buf);
    S3691C5 *dp, &lv = *(dp=new (buf) S3691C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1208,1192), "sizeof(S3691C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3691C5)");
    check_field_offset(lv, s3691c5f0, ABISELECT(8,4), "S3691C5.s3691c5f0");
    check_field_offset(lv, s3691c5f1, ABISELECT(16,8), "S3691C5.s3691c5f1");
    check_field_offset(lv, s3691c5f2, ABISELECT(24,12), "S3691C5.s3691c5f2");
    test_class_info(&lv, &cd_S3691C5);
    dp->~S3691C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3691C5(Test_S3691C5, "S3691C5", ABISELECT(1208,1192));

#else // __cplusplus

extern void _ZN7S3691C5C1Ev();
extern void _ZN7S3691C5D1Ev();
Name_Map name_map_S3691C5[] = {
  NSPAIR(_ZN7S3691C5C1Ev),
  NSPAIR(_ZN7S3691C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3691C5[];
extern void _ZN7S3691C5D1Ev();
extern void _ZN7S3691C5D0Ev();
static  VTBL_ENTRY vtc_S3691C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3691C5[0]),
  (VTBL_ENTRY)&_ZN7S3691C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3691C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S3691C5[];
extern  VTBL_ENTRY _ZTV7S3691C5[];
Class_Descriptor cd_S3691C5 = {  "S3691C5", // class name
  0,0,//no base classes
  &(vtc_S3691C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1208,1192), // object size
  NSPAIRA(_ZTI7S3691C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3691C5),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  S3691C11  {
  int s3691c11f0;
  void *s3691c11f1;
  char s3691c11f2[2358];
  int s3691c11f3;
  void  mf3691c11(); // _ZN8S3691C119mf3691c11Ev
  virtual  ~S3691C11(); // _ZN8S3691C11D1Ev
  S3691C11(); // tgen
};
//SIG(-1 S3691C11) C1{ vd m Fi Fp Fc[2358] Fi}


void  S3691C11 ::mf3691c11(){}
 S3691C11 ::~S3691C11(){ note_dtor("S3691C11", this);}
S3691C11 ::S3691C11(){ note_ctor("S3691C11", this);} // tgen

static void Test_S3691C11()
{
  extern Class_Descriptor cd_S3691C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(300,595)];
    init_test(&cd_S3691C11, buf);
    S3691C11 *dp, &lv = *(dp=new (buf) S3691C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2392,2376), "sizeof(S3691C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3691C11)");
    check_field_offset(lv, s3691c11f0, ABISELECT(8,4), "S3691C11.s3691c11f0");
    check_field_offset(lv, s3691c11f1, ABISELECT(16,8), "S3691C11.s3691c11f1");
    check_field_offset(lv, s3691c11f2, ABISELECT(24,12), "S3691C11.s3691c11f2");
    check_field_offset(lv, s3691c11f3, ABISELECT(2384,2372), "S3691C11.s3691c11f3");
    test_class_info(&lv, &cd_S3691C11);
    dp->~S3691C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3691C11(Test_S3691C11, "S3691C11", ABISELECT(2392,2376));

#else // __cplusplus

extern void _ZN8S3691C11C1Ev();
extern void _ZN8S3691C11D1Ev();
Name_Map name_map_S3691C11[] = {
  NSPAIR(_ZN8S3691C11C1Ev),
  NSPAIR(_ZN8S3691C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3691C11[];
extern void _ZN8S3691C11D1Ev();
extern void _ZN8S3691C11D0Ev();
static  VTBL_ENTRY vtc_S3691C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3691C11[0]),
  (VTBL_ENTRY)&_ZN8S3691C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3691C11D0Ev,
};
extern VTBL_ENTRY _ZTI8S3691C11[];
extern  VTBL_ENTRY _ZTV8S3691C11[];
Class_Descriptor cd_S3691C11 = {  "S3691C11", // class name
  0,0,//no base classes
  &(vtc_S3691C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2392,2376), // object size
  NSPAIRA(_ZTI8S3691C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3691C11),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  S3691C1  : S3691C2 {
  void *s3691c1f0;
  ::S22028C68_nt s3691c1f1;
  ::S3691C5 s3691c1f2;
  ::S22028C14_nt s3691c1f3;
  void *s3691c1f4;
  ::S8516C3_nt s3691c1f5;
  ::S3691C11 s3691c1f6;
  void *s3691c1f7;
  ::S3715C9_nt s3691c1f8;
  virtual  ~S3691C1(); // _ZN7S3691C1D1Ev
  virtual void  v1(); // _ZN7S3691C12v1Ev
  virtual void  v2(); // _ZN7S3691C12v2Ev
  virtual void  v3(); // _ZN7S3691C12v3Ev
  virtual void  v4(); // _ZN7S3691C12v4Ev
  virtual void  v5(); // _ZN7S3691C12v5Ev
  virtual void  v6(); // _ZN7S3691C12v6Ev
  virtual void  v7(); // _ZN7S3691C12v7Ev
  virtual void  v8(); // _ZN7S3691C12v8Ev
  virtual void  v9(); // _ZN7S3691C12v9Ev
  virtual void  v10(); // _ZN7S3691C13v10Ev
  virtual void  v11(); // _ZN7S3691C13v11Ev
  virtual void  v12(); // _ZN7S3691C13v12Ev
  virtual void  v13(); // _ZN7S3691C13v13Ev
  S3691C1(); // tgen
};
//SIG(1 S3691C1) C1{ BC2{ BC3{ vd m Fi} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC4{ m Fp} FC5{ vd m Fi Fp Fc[1179]} FC6{ m Fp Fi FC7{ m} FC8{ m}} Fp FC9{ m FC10{ Fl[4]}} FC11{ vd m Fi Fp Fc[2358] Fi} Fp FC12{ m Fp}}


 S3691C1 ::~S3691C1(){ note_dtor("S3691C1", this);}
void  S3691C1 ::v1(){vfunc_called(this, "_ZN7S3691C12v1Ev");}
void  S3691C1 ::v2(){vfunc_called(this, "_ZN7S3691C12v2Ev");}
void  S3691C1 ::v3(){vfunc_called(this, "_ZN7S3691C12v3Ev");}
void  S3691C1 ::v4(){vfunc_called(this, "_ZN7S3691C12v4Ev");}
void  S3691C1 ::v5(){vfunc_called(this, "_ZN7S3691C12v5Ev");}
void  S3691C1 ::v6(){vfunc_called(this, "_ZN7S3691C12v6Ev");}
void  S3691C1 ::v7(){vfunc_called(this, "_ZN7S3691C12v7Ev");}
void  S3691C1 ::v8(){vfunc_called(this, "_ZN7S3691C12v8Ev");}
void  S3691C1 ::v9(){vfunc_called(this, "_ZN7S3691C12v9Ev");}
void  S3691C1 ::v10(){vfunc_called(this, "_ZN7S3691C13v10Ev");}
void  S3691C1 ::v11(){vfunc_called(this, "_ZN7S3691C13v11Ev");}
void  S3691C1 ::v12(){vfunc_called(this, "_ZN7S3691C13v12Ev");}
void  S3691C1 ::v13(){vfunc_called(this, "_ZN7S3691C13v13Ev");}
S3691C1 ::S3691C1(){ note_ctor("S3691C1", this);} // tgen

static void Test_S3691C1()
{
  extern Class_Descriptor cd_S3691C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(464,907)];
    init_test(&cd_S3691C1, buf);
    S3691C1 *dp, &lv = *(dp=new (buf) S3691C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3704,3624), "sizeof(S3691C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3691C1)");
    check_base_class_offset(lv, (S3715C3_nt*)(S3691C2*), 0, "S3691C1");
    check_base_class_offset(lv, (S3691C2*), 0, "S3691C1");
    check_field_offset(lv, s3691c1f0, ABISELECT(16,8), "S3691C1.s3691c1f0");
    check_field_offset(lv, s3691c1f1, ABISELECT(24,12), "S3691C1.s3691c1f1");
    check_field_offset(lv, s3691c1f2, ABISELECT(32,16), "S3691C1.s3691c1f2");
    check_field_offset(lv, s3691c1f3, ABISELECT(1240,1208), "S3691C1.s3691c1f3");
    check_field_offset(lv, s3691c1f4, ABISELECT(1256,1220), "S3691C1.s3691c1f4");
    check_field_offset(lv, s3691c1f5, ABISELECT(1264,1224), "S3691C1.s3691c1f5");
    check_field_offset(lv, s3691c1f6, ABISELECT(1296,1240), "S3691C1.s3691c1f6");
    check_field_offset(lv, s3691c1f7, ABISELECT(3688,3616), "S3691C1.s3691c1f7");
    check_field_offset(lv, s3691c1f8, ABISELECT(3696,3620), "S3691C1.s3691c1f8");
    test_class_info(&lv, &cd_S3691C1);
    dp->~S3691C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3691C1(Test_S3691C1, "S3691C1", ABISELECT(3704,3624));

#else // __cplusplus

extern void _ZN7S3691C1C1Ev();
extern void _ZN7S3691C1D1Ev();
Name_Map name_map_S3691C1[] = {
  NSPAIR(_ZN7S3691C1C1Ev),
  NSPAIR(_ZN7S3691C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S3691C2;
extern VTBL_ENTRY _ZTI7S3691C2[];
extern  VTBL_ENTRY _ZTV7S3691C2[];
static Base_Class bases_S3691C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S3691C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3691C1[];
extern void _ZN7S3691C1D1Ev();
extern void _ZN7S3691C1D0Ev();
extern void _ZN7S3691C23v14Ev();
extern void _ZN7S3691C23v15Ev();
extern void _ZN7S3691C23v16Ev();
extern void _ZN7S3691C23v17Ev();
extern void _ZN7S3691C23v18Ev();
extern void _ZN7S3691C23v19Ev();
extern void _ZN7S3691C23v20Ev();
extern void _ZN7S3691C23v21Ev();
extern void _ZN7S3691C23v22Ev();
extern void _ZN7S3691C23v23Ev();
extern void _ZN7S3691C23v24Ev();
extern void _ZN7S3691C23v25Ev();
extern void _ZN7S3691C23v26Ev();
extern void _ZN7S3691C12v1Ev();
extern void _ZN7S3691C12v2Ev();
extern void _ZN7S3691C12v3Ev();
extern void _ZN7S3691C12v4Ev();
extern void _ZN7S3691C12v5Ev();
extern void _ZN7S3691C12v6Ev();
extern void _ZN7S3691C12v7Ev();
extern void _ZN7S3691C12v8Ev();
extern void _ZN7S3691C12v9Ev();
extern void _ZN7S3691C13v10Ev();
extern void _ZN7S3691C13v11Ev();
extern void _ZN7S3691C13v12Ev();
extern void _ZN7S3691C13v13Ev();
static  VTBL_ENTRY vtc_S3691C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3691C1[0]),
  (VTBL_ENTRY)&_ZN7S3691C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3691C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3691C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3691C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3691C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3691C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3691C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3691C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S3691C1[];
extern  VTBL_ENTRY _ZTV7S3691C1[];
Class_Descriptor cd_S3691C1 = {  "S3691C1", // class name
  bases_S3691C1, 2,
  &(vtc_S3691C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3704,3624), // object size
  NSPAIRA(_ZTI7S3691C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3691C1),30, //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  S3692C2  : S3715C3_nt {
  virtual  ~S3692C2(); // _ZN7S3692C2D1Ev
  virtual void  v14(); // _ZN7S3692C23v14Ev
  virtual void  v15(); // _ZN7S3692C23v15Ev
  virtual void  v16(); // _ZN7S3692C23v16Ev
  virtual void  v17(); // _ZN7S3692C23v17Ev
  virtual void  v18(); // _ZN7S3692C23v18Ev
  virtual void  v19(); // _ZN7S3692C23v19Ev
  virtual void  v20(); // _ZN7S3692C23v20Ev
  virtual void  v21(); // _ZN7S3692C23v21Ev
  virtual void  v22(); // _ZN7S3692C23v22Ev
  virtual void  v23(); // _ZN7S3692C23v23Ev
  virtual void  v24(); // _ZN7S3692C23v24Ev
  virtual void  v25(); // _ZN7S3692C23v25Ev
  virtual void  v26(); // _ZN7S3692C23v26Ev
  S3692C2(); // tgen
};
//SIG(-1 S3692C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S3692C2 ::~S3692C2(){ note_dtor("S3692C2", this);}
void  S3692C2 ::v14(){vfunc_called(this, "_ZN7S3692C23v14Ev");}
void  S3692C2 ::v15(){vfunc_called(this, "_ZN7S3692C23v15Ev");}
void  S3692C2 ::v16(){vfunc_called(this, "_ZN7S3692C23v16Ev");}
void  S3692C2 ::v17(){vfunc_called(this, "_ZN7S3692C23v17Ev");}
void  S3692C2 ::v18(){vfunc_called(this, "_ZN7S3692C23v18Ev");}
void  S3692C2 ::v19(){vfunc_called(this, "_ZN7S3692C23v19Ev");}
void  S3692C2 ::v20(){vfunc_called(this, "_ZN7S3692C23v20Ev");}
void  S3692C2 ::v21(){vfunc_called(this, "_ZN7S3692C23v21Ev");}
void  S3692C2 ::v22(){vfunc_called(this, "_ZN7S3692C23v22Ev");}
void  S3692C2 ::v23(){vfunc_called(this, "_ZN7S3692C23v23Ev");}
void  S3692C2 ::v24(){vfunc_called(this, "_ZN7S3692C23v24Ev");}
void  S3692C2 ::v25(){vfunc_called(this, "_ZN7S3692C23v25Ev");}
void  S3692C2 ::v26(){vfunc_called(this, "_ZN7S3692C23v26Ev");}
S3692C2 ::S3692C2(){ note_ctor("S3692C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3692C2C1Ev();
extern void _ZN7S3692C2D1Ev();
Name_Map name_map_S3692C2[] = {
  NSPAIR(_ZN7S3692C2C1Ev),
  NSPAIR(_ZN7S3692C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
static Base_Class bases_S3692C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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 _ZTI7S3692C2[];
extern void _ZN7S3692C2D1Ev();
extern void _ZN7S3692C2D0Ev();
extern void _ZN7S3692C23v14Ev();
extern void _ZN7S3692C23v15Ev();
extern void _ZN7S3692C23v16Ev();
extern void _ZN7S3692C23v17Ev();
extern void _ZN7S3692C23v18Ev();
extern void _ZN7S3692C23v19Ev();
extern void _ZN7S3692C23v20Ev();
extern void _ZN7S3692C23v21Ev();
extern void _ZN7S3692C23v22Ev();
extern void _ZN7S3692C23v23Ev();
extern void _ZN7S3692C23v24Ev();
extern void _ZN7S3692C23v25Ev();
extern void _ZN7S3692C23v26Ev();
static  VTBL_ENTRY vtc_S3692C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3692C2[0]),
  (VTBL_ENTRY)&_ZN7S3692C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3692C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S3692C2[];
extern  VTBL_ENTRY _ZTV7S3692C2[];
Class_Descriptor cd_S3692C2 = {  "S3692C2", // class name
  bases_S3692C2, 1,
  &(vtc_S3692C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3692C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3692C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3692C1  : S3692C2 {
  void *s3692c1f0;
  ::S22028C68_nt s3692c1f1;
  ::S3691C5 s3692c1f2;
  ::S22028C14_nt s3692c1f3;
  void *s3692c1f4;
  ::S8517C3_nt s3692c1f5;
  ::S3691C11 s3692c1f6;
  void *s3692c1f7;
  ::S3715C9_nt s3692c1f8;
  virtual  ~S3692C1(); // _ZN7S3692C1D1Ev
  virtual void  v1(); // _ZN7S3692C12v1Ev
  virtual void  v2(); // _ZN7S3692C12v2Ev
  virtual void  v3(); // _ZN7S3692C12v3Ev
  virtual void  v4(); // _ZN7S3692C12v4Ev
  virtual void  v5(); // _ZN7S3692C12v5Ev
  virtual void  v6(); // _ZN7S3692C12v6Ev
  virtual void  v7(); // _ZN7S3692C12v7Ev
  virtual void  v8(); // _ZN7S3692C12v8Ev
  virtual void  v9(); // _ZN7S3692C12v9Ev
  virtual void  v10(); // _ZN7S3692C13v10Ev
  virtual void  v11(); // _ZN7S3692C13v11Ev
  virtual void  v12(); // _ZN7S3692C13v12Ev
  virtual void  v13(); // _ZN7S3692C13v13Ev
  S3692C1(); // tgen
};
//SIG(1 S3692C1) C1{ BC2{ BC3{ vd m Fi} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC4{ m Fp} FC5{ vd m Fi Fp Fc[1179]} FC6{ m Fp Fi FC7{ m} FC8{ m}} Fp FC9{ m FC10{ FL[4]}} FC11{ vd m Fi Fp Fc[2358] Fi} Fp FC12{ m Fp}}


 S3692C1 ::~S3692C1(){ note_dtor("S3692C1", this);}
void  S3692C1 ::v1(){vfunc_called(this, "_ZN7S3692C12v1Ev");}
void  S3692C1 ::v2(){vfunc_called(this, "_ZN7S3692C12v2Ev");}
void  S3692C1 ::v3(){vfunc_called(this, "_ZN7S3692C12v3Ev");}
void  S3692C1 ::v4(){vfunc_called(this, "_ZN7S3692C12v4Ev");}
void  S3692C1 ::v5(){vfunc_called(this, "_ZN7S3692C12v5Ev");}
void  S3692C1 ::v6(){vfunc_called(this, "_ZN7S3692C12v6Ev");}
void  S3692C1 ::v7(){vfunc_called(this, "_ZN7S3692C12v7Ev");}
void  S3692C1 ::v8(){vfunc_called(this, "_ZN7S3692C12v8Ev");}
void  S3692C1 ::v9(){vfunc_called(this, "_ZN7S3692C12v9Ev");}
void  S3692C1 ::v10(){vfunc_called(this, "_ZN7S3692C13v10Ev");}
void  S3692C1 ::v11(){vfunc_called(this, "_ZN7S3692C13v11Ev");}
void  S3692C1 ::v12(){vfunc_called(this, "_ZN7S3692C13v12Ev");}
void  S3692C1 ::v13(){vfunc_called(this, "_ZN7S3692C13v13Ev");}
S3692C1 ::S3692C1(){ note_ctor("S3692C1", this);} // tgen

static void Test_S3692C1()
{
  extern Class_Descriptor cd_S3692C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(464,911)];
    init_test(&cd_S3692C1, buf);
    S3692C1 *dp, &lv = *(dp=new (buf) S3692C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3704,3640), "sizeof(S3692C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3692C1)");
    check_base_class_offset(lv, (S3715C3_nt*)(S3692C2*), 0, "S3692C1");
    check_base_class_offset(lv, (S3692C2*), 0, "S3692C1");
    check_field_offset(lv, s3692c1f0, ABISELECT(16,8), "S3692C1.s3692c1f0");
    check_field_offset(lv, s3692c1f1, ABISELECT(24,12), "S3692C1.s3692c1f1");
    check_field_offset(lv, s3692c1f2, ABISELECT(32,16), "S3692C1.s3692c1f2");
    check_field_offset(lv, s3692c1f3, ABISELECT(1240,1208), "S3692C1.s3692c1f3");
    check_field_offset(lv, s3692c1f4, ABISELECT(1256,1220), "S3692C1.s3692c1f4");
    check_field_offset(lv, s3692c1f5, ABISELECT(1264,1224), "S3692C1.s3692c1f5");
    check_field_offset(lv, s3692c1f6, ABISELECT(1296,1256), "S3692C1.s3692c1f6");
    check_field_offset(lv, s3692c1f7, ABISELECT(3688,3632), "S3692C1.s3692c1f7");
    check_field_offset(lv, s3692c1f8, ABISELECT(3696,3636), "S3692C1.s3692c1f8");
    test_class_info(&lv, &cd_S3692C1);
    dp->~S3692C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3692C1(Test_S3692C1, "S3692C1", ABISELECT(3704,3640));

#else // __cplusplus

extern void _ZN7S3692C1C1Ev();
extern void _ZN7S3692C1D1Ev();
Name_Map name_map_S3692C1[] = {
  NSPAIR(_ZN7S3692C1C1Ev),
  NSPAIR(_ZN7S3692C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S3692C2;
extern VTBL_ENTRY _ZTI7S3692C2[];
extern  VTBL_ENTRY _ZTV7S3692C2[];
static Base_Class bases_S3692C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S3692C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3692C1[];
extern void _ZN7S3692C1D1Ev();
extern void _ZN7S3692C1D0Ev();
extern void _ZN7S3692C23v14Ev();
extern void _ZN7S3692C23v15Ev();
extern void _ZN7S3692C23v16Ev();
extern void _ZN7S3692C23v17Ev();
extern void _ZN7S3692C23v18Ev();
extern void _ZN7S3692C23v19Ev();
extern void _ZN7S3692C23v20Ev();
extern void _ZN7S3692C23v21Ev();
extern void _ZN7S3692C23v22Ev();
extern void _ZN7S3692C23v23Ev();
extern void _ZN7S3692C23v24Ev();
extern void _ZN7S3692C23v25Ev();
extern void _ZN7S3692C23v26Ev();
extern void _ZN7S3692C12v1Ev();
extern void _ZN7S3692C12v2Ev();
extern void _ZN7S3692C12v3Ev();
extern void _ZN7S3692C12v4Ev();
extern void _ZN7S3692C12v5Ev();
extern void _ZN7S3692C12v6Ev();
extern void _ZN7S3692C12v7Ev();
extern void _ZN7S3692C12v8Ev();
extern void _ZN7S3692C12v9Ev();
extern void _ZN7S3692C13v10Ev();
extern void _ZN7S3692C13v11Ev();
extern void _ZN7S3692C13v12Ev();
extern void _ZN7S3692C13v13Ev();
static  VTBL_ENTRY vtc_S3692C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3692C1[0]),
  (VTBL_ENTRY)&_ZN7S3692C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3692C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3692C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3692C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3692C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3692C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3692C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3692C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S3692C1[];
extern  VTBL_ENTRY _ZTV7S3692C1[];
Class_Descriptor cd_S3692C1 = {  "S3692C1", // class name
  bases_S3692C1, 2,
  &(vtc_S3692C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3704,3640), // object size
  NSPAIRA(_ZTI7S3692C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3692C1),30, //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  S20737C2  : virtual S22028C16 , virtual S19968C3 {
  void *s20737c2f0[9];
  ~S20737C2(); // tgen
  S20737C2(); // tgen
};
//SIG(-1 S20737C2) C1{ VBC2{ m} VBC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]}


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

static void Test_S20737C2()
{
  extern Class_Descriptor cd_S20737C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,46)];
    init_test(&cd_S20737C2, buf);
    S20737C2 *dp, &lv = *(dp=new (buf) S20737C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,180), "sizeof(S20737C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20737C2)");
    check_base_class_offset(lv, (S22028C16*), 0, "S20737C2");
    check_base_class_offset(lv, (S19968C3*), ABISELECT(80,40), "S20737C2");
    check_field_offset(lv, s20737c2f0, ABISELECT(8,4), "S20737C2.s20737c2f0");
    test_class_info(&lv, &cd_S20737C2);
    dp->~S20737C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20737C2(Test_S20737C2, "S20737C2", ABISELECT(320,180));

#else // __cplusplus

extern void _ZN8S20737C2C1Ev();
extern void _ZN8S20737C2D1Ev();
Name_Map name_map_S20737C2[] = {
  NSPAIR(_ZN8S20737C2C1Ev),
  NSPAIR(_ZN8S20737C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S20737C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20737C2[];
static  VTBL_ENTRY vtc_S20737C2[] = {
  ABISELECT(80,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C2[0]),
};
extern VTBL_ENTRY _ZTV8S20737C2[];
static  VTT_ENTRY vtt_S20737C2[] = {
  {&(_ZTV8S20737C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20737C2[];
extern  VTBL_ENTRY _ZTV8S20737C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C2[];
Class_Descriptor cd_S20737C2 = {  "S20737C2", // class name
  bases_S20737C2, 2,
  &(vtc_S20737C2[0]), // expected_vtbl_contents
  &(vtt_S20737C2[0]), // expected_vtt_contents
  ABISELECT(320,180), // object size
  NSPAIRA(_ZTI8S20737C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20737C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20737C2),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  S20737C7  {
  void *s20737c7f0;
  ::S19968C3 s20737c7f1;
  ::S19968C3 s20737c7f2;
  int s20737c7f3[3];
  void *s20737c7f4[6];
  short s20737c7f5;
  ::S19968C4 s20737c7f6;
  virtual  ~S20737C7(); // _ZN8S20737C7D1Ev
  virtual void  v1(); // _ZN8S20737C72v1Ev
  virtual void  v2(); // _ZN8S20737C72v2Ev
  S20737C7(); // tgen
};
//SIG(-1 S20737C7) C1{ vd v1 v2 Fp FC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC2 Fi[3] Fp[6] Fs FU3{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}}


 S20737C7 ::~S20737C7(){ note_dtor("S20737C7", this);}
void  S20737C7 ::v1(){vfunc_called(this, "_ZN8S20737C72v1Ev");}
void  S20737C7 ::v2(){vfunc_called(this, "_ZN8S20737C72v2Ev");}
S20737C7 ::S20737C7(){ note_ctor("S20737C7", this);} // tgen

static void Test_S20737C7()
{
  extern Class_Descriptor cd_S20737C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(47,113)];
    init_test(&cd_S20737C7, buf);
    S20737C7 *dp, &lv = *(dp=new (buf) S20737C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(736,448), "sizeof(S20737C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20737C7)");
    check_field_offset(lv, s20737c7f0, ABISELECT(8,4), "S20737C7.s20737c7f0");
    check_field_offset(lv, s20737c7f1, ABISELECT(16,8), "S20737C7.s20737c7f1");
    check_field_offset(lv, s20737c7f2, ABISELECT(256,148), "S20737C7.s20737c7f2");
    check_field_offset(lv, s20737c7f3, ABISELECT(496,288), "S20737C7.s20737c7f3");
    check_field_offset(lv, s20737c7f4, ABISELECT(512,300), "S20737C7.s20737c7f4");
    check_field_offset(lv, s20737c7f5, ABISELECT(560,324), "S20737C7.s20737c7f5");
    check_field_offset(lv, s20737c7f6, ABISELECT(576,328), "S20737C7.s20737c7f6");
    test_class_info(&lv, &cd_S20737C7);
    dp->~S20737C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20737C7(Test_S20737C7, "S20737C7", ABISELECT(736,448));

#else // __cplusplus

extern void _ZN8S20737C7C1Ev();
extern void _ZN8S20737C7D1Ev();
Name_Map name_map_S20737C7[] = {
  NSPAIR(_ZN8S20737C7C1Ev),
  NSPAIR(_ZN8S20737C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20737C7[];
extern void _ZN8S20737C7D1Ev();
extern void _ZN8S20737C7D0Ev();
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
static  VTBL_ENTRY vtc_S20737C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C7[0]),
  (VTBL_ENTRY)&_ZN8S20737C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
};
extern VTBL_ENTRY _ZTI8S20737C7[];
extern  VTBL_ENTRY _ZTV8S20737C7[];
Class_Descriptor cd_S20737C7 = {  "S20737C7", // class name
  0,0,//no base classes
  &(vtc_S20737C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(736,448), // object size
  NSPAIRA(_ZTI8S20737C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20737C7),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20737C9  : virtual S20737C2 {
  int s20737c9f0:21;
  int s20737c9f1;
  virtual  ~S20737C9(); // _ZN8S20737C9D2Ev
  S20737C9(); // tgen
};
//SIG(-1 S20737C9) C1{ VBC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} vd Fi:21 Fi}


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

static void Test_S20737C9()
{
  extern Class_Descriptor cd_S20737C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(22,49)];
    init_test(&cd_S20737C9, buf);
    S20737C9 *dp, &lv = *(dp=new (buf) S20737C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,192), "sizeof(S20737C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20737C9)");
    check_base_class_offset(lv, (S22028C16*)(S20737C2*), 0, "S20737C9");
    check_base_class_offset(lv, (S19968C3*)(S20737C2*), ABISELECT(96,52), "S20737C9");
    check_base_class_offset(lv, (S20737C2*), ABISELECT(16,12), "S20737C9");
    set_bf_and_test(lv, s20737c9f0, ABISELECT(8,4), 0, 21, 1, "S20737C9");
    set_bf_and_test(lv, s20737c9f0, ABISELECT(8,4), 0, 21, hide_sll(1LL<<20), "S20737C9");
    check_field_offset(lv, s20737c9f1, ABISELECT(12,8), "S20737C9.s20737c9f1");
    test_class_info(&lv, &cd_S20737C9);
    dp->~S20737C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20737C9(Test_S20737C9, "S20737C9", ABISELECT(336,192));

#else // __cplusplus

extern void _ZN8S20737C9C1Ev();
extern void _ZN8S20737C9D2Ev();
Name_Map name_map_S20737C9[] = {
  NSPAIR(_ZN8S20737C9C1Ev),
  NSPAIR(_ZN8S20737C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S20737C2;
extern VTBL_ENTRY _ZTI8S20737C2[];
extern  VTBL_ENTRY _ZTV8S20737C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C2[];
static Base_Class bases_S20737C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(96,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
    2, //immediately_derived
  0, 1},
  {&cd_S20737C2,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20737C9[];
extern void _ZN8S20737C9D1Ev();
extern void _ZN8S20737C9D0Ev();
static  VTBL_ENTRY vtc_S20737C9[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
  (VTBL_ENTRY)&_ZN8S20737C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C9D0Ev,
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
};
extern VTBL_ENTRY _ZTV8S20737C9[];
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C9[] = {
  ABISELECT(80,40),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C2[0]),
};
static  VTT_ENTRY vtt_S20737C9[] = {
  {&(_ZTV8S20737C9[5]),  5,11},
  {&(_ZTV8S20737C9[11]),  11,11},
  {&(_tg__ZTV8S20737C2__8S20737C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20737C9[];
extern  VTBL_ENTRY _ZTV8S20737C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C9[];
Class_Descriptor cd_S20737C9 = {  "S20737C9", // class name
  bases_S20737C9, 3,
  &(vtc_S20737C9[0]), // expected_vtbl_contents
  &(vtt_S20737C9[0]), // expected_vtt_contents
  ABISELECT(336,192), // object size
  NSPAIRA(_ZTI8S20737C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20737C9),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20737C9),3, //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  S20737C6  : virtual S20737C7 , virtual S20737C2 , virtual S20737C9 , S19968C3 {
  virtual void  v3(); // _ZN8S20737C62v3Ev
  ~S20737C6(); // tgen
  S20737C6(); // tgen
};
//SIG(-1 S20737C6) C1{ VBC2{ vd v2 v3 Fp FC3{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} FC3 Fi[3] Fp[6] Fs FU4{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC5{ VBC6{ m} VBC3 Fp[9]} VBC7{ VBC5 vd Fi:21 Fi} BC3 v1}


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

static void Test_S20737C6()
{
  extern Class_Descriptor cd_S20737C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(84,197)];
    init_test(&cd_S20737C6, buf);
    S20737C6 *dp, &lv = *(dp=new (buf) S20737C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1328,784), "sizeof(S20737C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20737C6)");
    check_base_class_offset(lv, (S20737C7*), ABISELECT(256,144), "S20737C6");
    check_base_class_offset(lv, (S22028C16*)(S20737C2*), 0, "S20737C6");
    check_base_class_offset(lv, (S19968C3*)(S20737C2*), ABISELECT(1072,632), "S20737C6");
    check_base_class_offset(lv, (S20737C2*), ABISELECT(992,592), "S20737C6");
    check_base_class_offset(lv, (S20737C2*)(S20737C9*), ABISELECT(992,592), "S20737C6");
    check_base_class_offset(lv, (S20737C9*), ABISELECT(1312,772), "S20737C6");
    /*is_ambiguous_... S20737C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(16,4), "S20737C6");
    test_class_info(&lv, &cd_S20737C6);
    dp->~S20737C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20737C6(Test_S20737C6, "S20737C6", ABISELECT(1328,784));

#else // __cplusplus

extern void _ZN8S20737C6C1Ev();
extern void _ZN8S20737C6D1Ev();
Name_Map name_map_S20737C6[] = {
  NSPAIR(_ZN8S20737C6C1Ev),
  NSPAIR(_ZN8S20737C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20737C7;
extern VTBL_ENTRY _ZTI8S20737C7[];
extern  VTBL_ENTRY _ZTV8S20737C7[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S20737C2;
extern VTBL_ENTRY _ZTI8S20737C2[];
extern  VTBL_ENTRY _ZTV8S20737C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C2[];
extern Class_Descriptor cd_S20737C9;
extern VTBL_ENTRY _ZTI8S20737C9[];
extern  VTBL_ENTRY _ZTV8S20737C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
static Base_Class bases_S20737C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20737C7,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(1072,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20737C2,    ABISELECT(992,592), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20737C9,    ABISELECT(1312,772), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20737C6[];
extern void _ZN8S20737C62v3Ev();
extern void _ZN8S20737C6D1Ev();
extern void _ZN8S20737C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev)();
extern void ABISELECT(_ZThn256_N8S20737C6D1Ev,_ZThn144_N8S20737C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev)();
extern void ABISELECT(_ZThn256_N8S20737C6D0Ev,_ZThn144_N8S20737C6D0Ev)() __attribute__((weak));
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev)();
extern void ABISELECT(_ZThn1312_N8S20737C6D1Ev,_ZThn772_N8S20737C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev)();
extern void ABISELECT(_ZThn1312_N8S20737C6D0Ev,_ZThn772_N8S20737C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20737C6[] = {
  ABISELECT(1312,772),
  ABISELECT(1072,632),
  0,
  ABISELECT(992,592),
  ABISELECT(256,144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&_ZN8S20737C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20737C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C6D0Ev,
  0,
  0,
  ABISELECT(-256,-144),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(-992,-592),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  ABISELECT(-1312,-772),
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  ABISELECT(-1312,-772),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S20737C6[];
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C6[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C2[0]),
};
extern void _ZN8S20737C9D1Ev();
extern void _ZN8S20737C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C9__8S20737C6[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1312,-772),
  ABISELECT(-320,-180),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
  (VTBL_ENTRY)&_ZN8S20737C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C9__8S20737C6[] = {
  ABISELECT(80,40),
  ABISELECT(-992,-592),
  ABISELECT(320,180),
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
};
static  VTT_ENTRY vtt_S20737C6[] = {
  {&(_ZTV8S20737C6[7]),  7,31},
  {&(_ZTV8S20737C6[15]),  15,31},
  {&(_ZTV8S20737C6[23]),  23,31},
  {&(_ZTV8S20737C6[29]),  29,31},
  {&(_tg__ZTV8S20737C2__8S20737C6[4]),  4,4},
  {&(_tg__ZTV8S20737C9__8S20737C6[5]),  5,7},
  {&(_tg__ZTV8S20737C2__8S20737C9__8S20737C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20737C6[];
extern  VTBL_ENTRY _ZTV8S20737C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C6[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20737C6D0Ev,_ZThn772_N8S20737C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20737C6D1Ev,_ZThn772_N8S20737C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20737C6D0Ev,_ZThn144_N8S20737C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20737C6D1Ev,_ZThn144_N8S20737C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20737C6 = {  "S20737C6", // class name
  bases_S20737C6, 6,
  &(vtc_S20737C6[0]), // expected_vtbl_contents
  &(vtt_S20737C6[0]), // expected_vtt_contents
  ABISELECT(1328,784), // object size
  NSPAIRA(_ZTI8S20737C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20737C6),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20737C6),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20737C5  : virtual S19968C3 , virtual S20737C2 , S20737C6 , S20737C9 , S20737C7 {
  int s20737c5f0;
  virtual  ~S20737C5(); // _ZN8S20737C5D2Ev
  S20737C5(); // tgen
};
//SIG(-1 S20737C5) C1{ VBC2{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} VBC3{ VBC4{ m} VBC2 Fp[9]} BC5{ VBC6{ vd v1 v2 Fp FC2 FC2 Fi[3] Fp[6] Fs FU7{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC3 VBC8{ VBC3 vd Fi:21 Fi} BC2 v3} BC8 BC6 vd Fi}


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

static void Test_S20737C5()
{
  extern Class_Descriptor cd_S20737C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,313)];
    init_test(&cd_S20737C5, buf);
    S20737C5 *dp, &lv = *(dp=new (buf) S20737C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1248), "sizeof(S20737C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20737C5)");
    /*is_ambiguous_... S20737C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*), ABISELECT(1024,608), "S20737C5");
    check_base_class_offset(lv, (S19968C3*)(S20737C2*), ABISELECT(1024,608), "S20737C5");
    check_base_class_offset(lv, (S22028C16*)(S20737C2*), 0, "S20737C5");
    check_base_class_offset(lv, (S20737C2*), ABISELECT(1264,748), "S20737C5");
    check_base_class_offset(lv, (S20737C2*)(S20737C6*), ABISELECT(1264,748), "S20737C5");
    /*is_ambiguous_... S20737C5::S20737C9 */ AMB_check_base_class_offset(lv, (S20737C2*)(S20737C9*), ABISELECT(1264,748), "S20737C5");
    /*is_ambiguous_... S20737C5::S20737C9 */ AMB_check_base_class_offset(lv, (S20737C2*)(S20737C9*), ABISELECT(1264,748), "S20737C5");
    check_base_class_offset(lv, (S20737C7*)(S20737C6*), ABISELECT(1344,788), "S20737C5");
    check_base_class_offset(lv, (S20737C9*)(S20737C6*), ABISELECT(2080,1236), "S20737C5");
    /*is_ambiguous_... S20737C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S20737C6*), ABISELECT(16,4), "S20737C5");
    check_base_class_offset(lv, (S20737C6*), 0, "S20737C5");
    /*is_ambiguous_... S20737C5::S20737C9 */ AMB_check_base_class_offset(lv, (S20737C9*), ABISELECT(256,144), "S20737C5");
    /*is_ambiguous_... S20737C5::S20737C7 */ AMB_check_base_class_offset(lv, (S20737C7*), ABISELECT(272,156), "S20737C5");
    check_field_offset(lv, s20737c5f0, ABISELECT(1008,604), "S20737C5.s20737c5f0");
    test_class_info(&lv, &cd_S20737C5);
    dp->~S20737C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20737C5(Test_S20737C5, "S20737C5", ABISELECT(2096,1248));

#else // __cplusplus

extern void _ZN8S20737C5C1Ev();
extern void _ZN8S20737C5D2Ev();
Name_Map name_map_S20737C5[] = {
  NSPAIR(_ZN8S20737C5C1Ev),
  NSPAIR(_ZN8S20737C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20737C2;
extern VTBL_ENTRY _ZTI8S20737C2[];
extern  VTBL_ENTRY _ZTV8S20737C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C2[];
extern Class_Descriptor cd_S20737C7;
extern VTBL_ENTRY _ZTI8S20737C7[];
extern  VTBL_ENTRY _ZTV8S20737C7[];
extern Class_Descriptor cd_S20737C9;
extern VTBL_ENTRY _ZTI8S20737C9[];
extern  VTBL_ENTRY _ZTV8S20737C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S20737C6;
extern VTBL_ENTRY _ZTI8S20737C6[];
extern  VTBL_ENTRY _ZTV8S20737C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C6[];
extern Class_Descriptor cd_S20737C9;
extern VTBL_ENTRY _ZTI8S20737C9[];
extern  VTBL_ENTRY _ZTV8S20737C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C9[];
extern Class_Descriptor cd_S20737C7;
extern VTBL_ENTRY _ZTI8S20737C7[];
extern  VTBL_ENTRY _ZTV8S20737C7[];
static Base_Class bases_S20737C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19968C3,    ABISELECT(1024,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20737C2,    ABISELECT(1264,748), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20737C7,    ABISELECT(1344,788), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20737C9,    ABISELECT(2080,1236), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20737C6,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20737C9,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20737C7,    ABISELECT(272,156), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20737C5[];
extern void _ZN8S20737C62v3Ev();
extern void _ZN8S20737C5D1Ev();
extern void _ZN8S20737C5D0Ev();
extern void ABISELECT(_ZThn256_N8S20737C5D1Ev,_ZThn144_N8S20737C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S20737C5D0Ev,_ZThn144_N8S20737C5D0Ev)();
extern void ABISELECT(_ZThn272_N8S20737C5D1Ev,_ZThn156_N8S20737C5D1Ev)();
extern void ABISELECT(_ZThn272_N8S20737C5D0Ev,_ZThn156_N8S20737C5D0Ev)();
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S20737C5D1Ev,_ZTv0_n12_N8S20737C5D1Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C5D1Ev,_ZThn788_N8S20737C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20737C5D0Ev,_ZTv0_n12_N8S20737C5D0Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C5D0Ev,_ZThn788_N8S20737C5D0Ev)() __attribute__((weak));
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S20737C5D1Ev,_ZTv0_n24_N8S20737C5D1Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C5D1Ev,_ZThn1236_N8S20737C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20737C5D0Ev,_ZTv0_n24_N8S20737C5D0Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C5D0Ev,_ZThn1236_N8S20737C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20737C5[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&_ZN8S20737C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20737C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C5D0Ev,
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S20737C5D1Ev,_ZThn144_N8S20737C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S20737C5D0Ev,_ZThn144_N8S20737C5D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S20737C5D1Ev,_ZThn156_N8S20737C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S20737C5D0Ev,_ZThn156_N8S20737C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C5D1Ev,_ZTv0_n12_N8S20737C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C5D0Ev,_ZTv0_n12_N8S20737C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C5D1Ev,_ZTv0_n24_N8S20737C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C5D0Ev,_ZTv0_n24_N8S20737C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20737C5[];
extern void _ZN8S20737C62v3Ev();
extern void _ZN8S20737C6D1Ev();
extern void _ZN8S20737C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C6__8S20737C5[] = {
  ABISELECT(2080,1236),
  ABISELECT(1024,608),
  0,
  ABISELECT(1264,748),
  ABISELECT(1344,788),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&_ZN8S20737C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20737C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C6D1Ev,_ZThn788_N8S20737C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C6D0Ev,_ZThn788_N8S20737C6D0Ev)() __attribute__((weak));
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C7__8S20737C6__8S20737C5[] = {
  0,
  0,
  ABISELECT(-1344,-788),
  ABISELECT(-1344,-788),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C6__8S20737C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1264,-748),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C6D1Ev,_ZThn1236_N8S20737C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C6D0Ev,_ZThn1236_N8S20737C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20737C9__8S20737C6__8S20737C5[] = {
  ABISELECT(-2080,-1236),
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  ABISELECT(-2080,-1236),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev),
};
extern void _ZN8S20737C9D1Ev();
extern void _ZN8S20737C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C9__A__8S20737C5[] = {
  ABISELECT(768,464),
  ABISELECT(-256,-144),
  ABISELECT(1008,604),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
  (VTBL_ENTRY)&_ZN8S20737C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C9__A__8S20737C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(-1008,-604),
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C2[0]),
};
extern void _ZN8S20737C9D1Ev();
extern void _ZN8S20737C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C9__8S20737C5[] = {
  ABISELECT(-1056,-628),
  ABISELECT(-2080,-1236),
  ABISELECT(-816,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
  (VTBL_ENTRY)&_ZN8S20737C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C9__8S20737C5[] = {
  ABISELECT(-240,-140),
  ABISELECT(-1264,-748),
  ABISELECT(816,488),
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
};
static  VTT_ENTRY vtt_S20737C5[] = {
  {&(_ZTV8S20737C5[7]),  7,44},
  {&(_tg__ZTV8S20737C6__8S20737C5[7]),  7,10},
  {&(_tg__ZTV8S20737C7__8S20737C6__8S20737C5[5]),  5,9},
  {&(_tg__ZTV8S20737C2__8S20737C6__8S20737C5[4]),  4,4},
  {&(_tg__ZTV8S20737C9__8S20737C6__8S20737C5[6]),  6,8},
  {&(_tg__ZTV8S20737C9__A__8S20737C5[5]),  5,7},
  {&(_tg__ZTV8S20737C2__8S20737C9__A__8S20737C5[4]),  4,4},
  {&(_ZTV8S20737C5[27]),  27,44},
  {&(_ZTV8S20737C5[32]),  32,44},
  {&(_ZTV8S20737C5[42]),  42,44},
  {&(_ZTV8S20737C5[15]),  15,44},
  {&(_tg__ZTV8S20737C2__8S20737C5[4]),  4,4},
  {&(_tg__ZTV8S20737C9__8S20737C5[5]),  5,7},
  {&(_tg__ZTV8S20737C2__8S20737C9__8S20737C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20737C5[];
extern  VTBL_ENTRY _ZTV8S20737C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C5[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C6D0Ev,_ZThn1236_N8S20737C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C6D1Ev,_ZThn1236_N8S20737C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C6D0Ev,_ZThn788_N8S20737C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C6D1Ev,_ZThn788_N8S20737C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C5D0Ev,_ZTv0_n24_N8S20737C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C5D0Ev,_ZThn1236_N8S20737C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C5D1Ev,_ZTv0_n24_N8S20737C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C5D1Ev,_ZThn1236_N8S20737C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C5D0Ev,_ZTv0_n12_N8S20737C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C5D0Ev,_ZThn788_N8S20737C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C5D1Ev,_ZTv0_n12_N8S20737C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C5D1Ev,_ZThn788_N8S20737C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20737C5 = {  "S20737C5", // class name
  bases_S20737C5, 9,
  &(vtc_S20737C5[0]), // expected_vtbl_contents
  &(vtt_S20737C5[0]), // expected_vtt_contents
  ABISELECT(2096,1248), // object size
  NSPAIRA(_ZTI8S20737C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20737C5),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20737C5),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20737C1  : virtual S20737C2 , S20737C5 {
  int s20737c1f0;
  ~S20737C1(); // tgen
  S20737C1(); // tgen
};
//SIG(1 S20737C1) C1{ VBC2{ VBC3{ m} VBC4{ m Fp Fc Fp FD Fc FD[3] Fp[4] Fc Fi FD[3] Fp[4]} Fp[9]} BC5{ VBC4 VBC2 BC6{ VBC7{ vd v1 v2 Fp FC4 FC4 Fi[3] Fp[6] Fs FU8{ m Fp[8] Fi Fp[5] Fp Fc:0 FD FL:3 Fp FL Fs[3] Fp FD[10]}} VBC2 VBC9{ VBC2 vd Fi:21 Fi} BC4 v3} BC9 BC7 vd Fi} Fi}


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

static void Test_S20737C1()
{
  extern Class_Descriptor cd_S20737C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(132,314)];
    init_test(&cd_S20737C1, buf);
    S20737C1 *dp, &lv = *(dp=new (buf) S20737C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2096,1252), "sizeof(S20737C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20737C1)");
    check_base_class_offset(lv, (S22028C16*)(S20737C2*), 0, "S20737C1");
    check_base_class_offset(lv, (S19968C3*)(S20737C2*), ABISELECT(1104,652), "S20737C1");
    /*is_ambiguous_... S20737C5::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S20737C5*), ABISELECT(1104,652), "S20737C1");
    check_base_class_offset(lv, (S20737C2*), ABISELECT(1016,612), "S20737C1");
    check_base_class_offset(lv, (S20737C2*)(S20737C5*), ABISELECT(1016,612), "S20737C1");
    check_base_class_offset(lv, (S20737C2*)(S20737C6*)(S20737C5*), ABISELECT(1016,612), "S20737C1");
    /*is_ambiguous_... S20737C1::S20737C9 */ AMB_check_base_class_offset(lv, (S20737C2*)(S20737C9*), ABISELECT(1016,612), "S20737C1");
    /*is_ambiguous_... S20737C5::S20737C9 */ AMB_check_base_class_offset(lv, (S20737C2*)(S20737C9*)(S20737C5*), ABISELECT(1016,612), "S20737C1");
    check_base_class_offset(lv, (S20737C7*)(S20737C6*)(S20737C5*), ABISELECT(1344,792), "S20737C1");
    check_base_class_offset(lv, (S20737C9*)(S20737C6*)(S20737C5*), ABISELECT(2080,1240), "S20737C1");
    /*is_ambiguous_... S20737C6::S19968C3 */ AMB_check_base_class_offset(lv, (S19968C3*)(S20737C6*)(S20737C5*), ABISELECT(16,4), "S20737C1");
    check_base_class_offset(lv, (S20737C6*)(S20737C5*), 0, "S20737C1");
    /*is_ambiguous_... S20737C5::S20737C9 */ AMB_check_base_class_offset(lv, (S20737C9*)(S20737C5*), ABISELECT(256,144), "S20737C1");
    /*is_ambiguous_... S20737C5::S20737C7 */ AMB_check_base_class_offset(lv, (S20737C7*)(S20737C5*), ABISELECT(272,156), "S20737C1");
    check_base_class_offset(lv, (S20737C5*), 0, "S20737C1");
    check_field_offset(lv, s20737c1f0, ABISELECT(1012,608), "S20737C1.s20737c1f0");
    test_class_info(&lv, &cd_S20737C1);
    dp->~S20737C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20737C1(Test_S20737C1, "S20737C1", ABISELECT(2096,1252));

#else // __cplusplus

extern void _ZN8S20737C1C1Ev();
extern void _ZN8S20737C1D1Ev();
Name_Map name_map_S20737C1[] = {
  NSPAIR(_ZN8S20737C1C1Ev),
  NSPAIR(_ZN8S20737C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S20737C2;
extern VTBL_ENTRY _ZTI8S20737C2[];
extern  VTBL_ENTRY _ZTV8S20737C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C2[];
extern Class_Descriptor cd_S20737C7;
extern VTBL_ENTRY _ZTI8S20737C7[];
extern  VTBL_ENTRY _ZTV8S20737C7[];
extern Class_Descriptor cd_S20737C9;
extern VTBL_ENTRY _ZTI8S20737C9[];
extern  VTBL_ENTRY _ZTV8S20737C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C9[];
extern Class_Descriptor cd_S19968C3;
extern VTBL_ENTRY _ZTI8S19968C3[];
extern Class_Descriptor cd_S20737C6;
extern VTBL_ENTRY _ZTI8S20737C6[];
extern  VTBL_ENTRY _ZTV8S20737C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C6[];
extern Class_Descriptor cd_S20737C9;
extern VTBL_ENTRY _ZTI8S20737C9[];
extern  VTBL_ENTRY _ZTV8S20737C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C9[];
extern Class_Descriptor cd_S20737C7;
extern VTBL_ENTRY _ZTI8S20737C7[];
extern  VTBL_ENTRY _ZTV8S20737C7[];
extern Class_Descriptor cd_S20737C5;
extern VTBL_ENTRY _ZTI8S20737C5[];
extern  VTBL_ENTRY _ZTV8S20737C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C5[];
static Base_Class bases_S20737C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19968C3,    ABISELECT(1104,652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20737C2,    ABISELECT(1016,612), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20737C7,    ABISELECT(1344,792), //bcp->offset
    27, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20737C9,    ABISELECT(2080,1240), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19968C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20737C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20737C9,    ABISELECT(256,144), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20737C7,    ABISELECT(272,156), //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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20737C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20737C1[];
extern void _ZN8S20737C62v3Ev();
extern void _ZN8S20737C1D1Ev();
extern void _ZN8S20737C1D0Ev();
extern void ABISELECT(_ZThn256_N8S20737C1D1Ev,_ZThn144_N8S20737C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S20737C1D0Ev,_ZThn144_N8S20737C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20737C1D1Ev,_ZThn156_N8S20737C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20737C1D0Ev,_ZThn156_N8S20737C1D0Ev)();
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S20737C1D1Ev,_ZTv0_n12_N8S20737C1D1Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C1D1Ev,_ZThn792_N8S20737C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20737C1D0Ev,_ZTv0_n12_N8S20737C1D0Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C1D0Ev,_ZThn792_N8S20737C1D0Ev)() __attribute__((weak));
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
extern void ABISELECT(_ZTv0_n48_N8S20737C1D1Ev,_ZTv0_n24_N8S20737C1D1Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C1D1Ev,_ZThn1240_N8S20737C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20737C1D0Ev,_ZTv0_n24_N8S20737C1D0Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C1D0Ev,_ZThn1240_N8S20737C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20737C1[] = {
  ABISELECT(2080,1240),
  ABISELECT(1104,652),
  0,
  ABISELECT(1016,612),
  ABISELECT(1344,792),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C1[0]),
  (VTBL_ENTRY)&_ZN8S20737C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20737C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C1D0Ev,
  ABISELECT(848,508),
  ABISELECT(-256,-144),
  ABISELECT(760,468),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S20737C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S20737C1D1Ev,_ZThn144_N8S20737C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S20737C1D0Ev,_ZThn144_N8S20737C1D0Ev),
  ABISELECT(-272,-156),
  (VTBL_ENTRY)&(_ZTI8S20737C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S20737C1D1Ev,_ZThn156_N8S20737C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn272_N8S20737C1D0Ev,_ZThn156_N8S20737C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
  ABISELECT(88,40),
  ABISELECT(-1016,-612),
  ABISELECT(-1016,-612),
  (VTBL_ENTRY)&(_ZTI8S20737C1[0]),
  0,
  0,
  ABISELECT(-1344,-792),
  ABISELECT(-1344,-792),
  (VTBL_ENTRY)&(_ZTI8S20737C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C1D1Ev,_ZTv0_n12_N8S20737C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C1D0Ev,_ZTv0_n12_N8S20737C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
  ABISELECT(-2080,-1240),
  ABISELECT(-976,-588),
  ABISELECT(-2080,-1240),
  ABISELECT(-1064,-628),
  ABISELECT(-2080,-1240),
  (VTBL_ENTRY)&(_ZTI8S20737C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C1D1Ev,_ZTv0_n24_N8S20737C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C1D0Ev,_ZTv0_n24_N8S20737C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20737C1[];
extern void _ZN8S20737C62v3Ev();
extern void _ZN8S20737C5D1Ev();
extern void _ZN8S20737C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C5__8S20737C1[] = {
  ABISELECT(2080,1240),
  ABISELECT(1104,652),
  0,
  ABISELECT(1016,612),
  ABISELECT(1344,792),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&_ZN8S20737C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20737C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C5D0Ev,
};
extern void _ZN8S20737C62v3Ev();
extern void _ZN8S20737C6D1Ev();
extern void _ZN8S20737C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C68S20737C5__8S20737C1[] = {
  ABISELECT(2080,1240),
  ABISELECT(1104,652),
  0,
  ABISELECT(1016,612),
  ABISELECT(1344,792),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&_ZN8S20737C62v3Ev,
  (VTBL_ENTRY)&_ZN8S20737C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C6D1Ev,_ZThn792_N8S20737C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C6D0Ev,_ZThn792_N8S20737C6D0Ev)() __attribute__((weak));
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C7__8S20737C68S20737C5__8S20737C1[] = {
  0,
  0,
  ABISELECT(-1344,-792),
  ABISELECT(-1344,-792),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C68S20737C5__8S20737C1[] = {
  ABISELECT(88,40),
  ABISELECT(-1016,-612),
  ABISELECT(-1016,-612),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C6D1Ev,_ZThn1240_N8S20737C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C6D0Ev,_ZThn1240_N8S20737C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20737C9__8S20737C68S20737C5__8S20737C1[] = {
  ABISELECT(-2080,-1240),
  ABISELECT(-976,-588),
  ABISELECT(-2080,-1240),
  ABISELECT(-1064,-628),
  ABISELECT(-2080,-1240),
  (VTBL_ENTRY)&(_ZTI8S20737C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev),
};
extern void _ZN8S20737C9D1Ev();
extern void _ZN8S20737C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C98S20737C5__A1__8S20737C1[] = {
  ABISELECT(848,508),
  ABISELECT(-256,-144),
  ABISELECT(760,468),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
  (VTBL_ENTRY)&_ZN8S20737C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C98S20737C5__A1__8S20737C1[] = {
  ABISELECT(88,40),
  ABISELECT(-1016,-612),
  ABISELECT(-760,-468),
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C5__8S20737C1[] = {
  ABISELECT(88,40),
  ABISELECT(-1016,-612),
  ABISELECT(-1016,-612),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S20737C5D1Ev,_ZTv0_n12_N8S20737C5D1Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C5D1Ev,_ZThn792_N8S20737C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20737C5D0Ev,_ZTv0_n12_N8S20737C5D0Ev)();
extern void ABISELECT(_ZThn1344_N8S20737C5D0Ev,_ZThn792_N8S20737C5D0Ev)() __attribute__((weak));
extern void _ZN8S20737C72v1Ev();
extern void _ZN8S20737C72v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C7__8S20737C5__8S20737C1[] = {
  0,
  0,
  ABISELECT(-1344,-792),
  ABISELECT(-1344,-792),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C5D1Ev,_ZTv0_n12_N8S20737C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20737C5D0Ev,_ZTv0_n12_N8S20737C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20737C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20737C72v2Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20737C5D1Ev,_ZTv0_n24_N8S20737C5D1Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C5D1Ev,_ZThn1240_N8S20737C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20737C5D0Ev,_ZTv0_n24_N8S20737C5D0Ev)();
extern void ABISELECT(_ZThn2080_N8S20737C5D0Ev,_ZThn1240_N8S20737C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20737C9__8S20737C5__8S20737C1[] = {
  ABISELECT(-2080,-1240),
  ABISELECT(-976,-588),
  ABISELECT(-2080,-1240),
  ABISELECT(-1064,-628),
  ABISELECT(-2080,-1240),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C5D1Ev,_ZTv0_n24_N8S20737C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20737C5D0Ev,_ZTv0_n24_N8S20737C5D0Ev),
};
extern void ABISELECT(_ZThn256_N8S20737C5D1Ev,_ZThn144_N8S20737C5D1Ev)();
extern void ABISELECT(_ZThn256_N8S20737C5D0Ev,_ZThn144_N8S20737C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20737C9__A__8S20737C5__8S20737C1[] = {
  ABISELECT(848,508),
  ABISELECT(-256,-144),
  ABISELECT(760,468),
  ABISELECT(-256,-144),
  (VTBL_ENTRY)&(_ZTI8S20737C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S20737C5D1Ev,_ZThn144_N8S20737C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn256_N8S20737C5D0Ev,_ZThn144_N8S20737C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C1[] = {
  ABISELECT(88,40),
  ABISELECT(-1016,-612),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C2[0]),
};
extern void _ZN8S20737C9D1Ev();
extern void _ZN8S20737C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20737C9__8S20737C1[] = {
  ABISELECT(-976,-588),
  ABISELECT(-2080,-1240),
  ABISELECT(-1064,-628),
  0,
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
  (VTBL_ENTRY)&_ZN8S20737C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20737C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20737C2__8S20737C9__8S20737C1[] = {
  ABISELECT(88,40),
  ABISELECT(-1016,-612),
  ABISELECT(1064,628),
  (VTBL_ENTRY)&(_ZTI8S20737C9[0]),
};
static  VTT_ENTRY vtt_S20737C1[] = {
  {&(_ZTV8S20737C1[7]),  7,44},
  {&(_tg__ZTV8S20737C5__8S20737C1[7]),  7,10},
  {&(_tg__ZTV8S20737C68S20737C5__8S20737C1[7]),  7,10},
  {&(_tg__ZTV8S20737C7__8S20737C68S20737C5__8S20737C1[5]),  5,9},
  {&(_tg__ZTV8S20737C2__8S20737C68S20737C5__8S20737C1[4]),  4,4},
  {&(_tg__ZTV8S20737C9__8S20737C68S20737C5__8S20737C1[6]),  6,8},
  {&(_tg__ZTV8S20737C98S20737C5__A1__8S20737C1[5]),  5,7},
  {&(_tg__ZTV8S20737C2__8S20737C98S20737C5__A1__8S20737C1[4]),  4,4},
  {&(_tg__ZTV8S20737C2__8S20737C5__8S20737C1[4]),  4,4},
  {&(_tg__ZTV8S20737C7__8S20737C5__8S20737C1[5]),  5,9},
  {&(_tg__ZTV8S20737C9__8S20737C5__8S20737C1[6]),  6,8},
  {&(_tg__ZTV8S20737C9__A__8S20737C5__8S20737C1[5]),  5,7},
  {&(_ZTV8S20737C1[27]),  27,44},
  {&(_ZTV8S20737C1[32]),  32,44},
  {&(_ZTV8S20737C1[42]),  42,44},
  {&(_ZTV8S20737C1[15]),  15,44},
  {&(_tg__ZTV8S20737C2__8S20737C1[4]),  4,4},
  {&(_tg__ZTV8S20737C9__8S20737C1[5]),  5,7},
  {&(_tg__ZTV8S20737C2__8S20737C9__8S20737C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20737C1[];
extern  VTBL_ENTRY _ZTV8S20737C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20737C1[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C5D0Ev,_ZTv0_n24_N8S20737C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C5D0Ev,_ZThn1240_N8S20737C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C5D1Ev,_ZTv0_n24_N8S20737C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C5D1Ev,_ZThn1240_N8S20737C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C5D0Ev,_ZTv0_n12_N8S20737C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C5D0Ev,_ZThn792_N8S20737C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C5D1Ev,_ZTv0_n12_N8S20737C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C5D1Ev,_ZThn792_N8S20737C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C6D0Ev,_ZTv0_n24_N8S20737C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C6D0Ev,_ZThn1240_N8S20737C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C6D1Ev,_ZTv0_n24_N8S20737C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C6D1Ev,_ZThn1240_N8S20737C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C6D0Ev,_ZTv0_n12_N8S20737C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C6D0Ev,_ZThn792_N8S20737C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C6D1Ev,_ZTv0_n12_N8S20737C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C6D1Ev,_ZThn792_N8S20737C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C1D0Ev,_ZTv0_n24_N8S20737C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C1D0Ev,_ZThn1240_N8S20737C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20737C1D1Ev,_ZTv0_n24_N8S20737C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2080_N8S20737C1D1Ev,_ZThn1240_N8S20737C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C1D0Ev,_ZTv0_n12_N8S20737C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C1D0Ev,_ZThn792_N8S20737C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20737C1D1Ev,_ZTv0_n12_N8S20737C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1344_N8S20737C1D1Ev,_ZThn792_N8S20737C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20737C1 = {  "S20737C1", // class name
  bases_S20737C1, 10,
  &(vtc_S20737C1[0]), // expected_vtbl_contents
  &(vtt_S20737C1[0]), // expected_vtt_contents
  ABISELECT(2096,1252), // object size
  NSPAIRA(_ZTI8S20737C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20737C1),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20737C1),19, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1401C4  {
  void *s1401c4f0;
  char s1401c4f1[2];
  virtual void  v4(); // _ZN7S1401C42v4Ev
  virtual void  v5(); // _ZN7S1401C42v5Ev
  virtual void  v6(); // _ZN7S1401C42v6Ev
  virtual void  v7(); // _ZN7S1401C42v7Ev
  ~S1401C4(); // tgen
  S1401C4(); // tgen
};
//SIG(-1 S1401C4) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S1401C4 ::v4(){vfunc_called(this, "_ZN7S1401C42v4Ev");}
void  S1401C4 ::v5(){vfunc_called(this, "_ZN7S1401C42v5Ev");}
void  S1401C4 ::v6(){vfunc_called(this, "_ZN7S1401C42v6Ev");}
void  S1401C4 ::v7(){vfunc_called(this, "_ZN7S1401C42v7Ev");}
S1401C4 ::~S1401C4(){ note_dtor("S1401C4", this);} // tgen
S1401C4 ::S1401C4(){ note_ctor("S1401C4", this);} // tgen

static void Test_S1401C4()
{
  extern Class_Descriptor cd_S1401C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1401C4, buf);
    S1401C4 *dp, &lv = *(dp=new (buf) S1401C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1401C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1401C4)");
    check_field_offset(lv, s1401c4f0, ABISELECT(8,4), "S1401C4.s1401c4f0");
    check_field_offset(lv, s1401c4f1, ABISELECT(16,8), "S1401C4.s1401c4f1");
    test_class_info(&lv, &cd_S1401C4);
    dp->~S1401C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C4(Test_S1401C4, "S1401C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1401C4C1Ev();
extern void _ZN7S1401C4D1Ev();
Name_Map name_map_S1401C4[] = {
  NSPAIR(_ZN7S1401C4C1Ev),
  NSPAIR(_ZN7S1401C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1401C4[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
static  VTBL_ENTRY vtc_S1401C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C4[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
Class_Descriptor cd_S1401C4 = {  "S1401C4", // class name
  0,0,//no base classes
  &(vtc_S1401C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1401C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1401C4),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  S1401C3  : S1401C4 {
  void *s1401c3f0[4];
  ~S1401C3(); // tgen
  S1401C3(); // tgen
};
//SIG(-1 S1401C3) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S1401C3()
{
  extern Class_Descriptor cd_S1401C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S1401C3, buf);
    S1401C3 *dp, &lv = *(dp=new (buf) S1401C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S1401C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1401C3)");
    check_base_class_offset(lv, (S1401C4*), 0, "S1401C3");
    check_field_offset(lv, s1401c3f0, ABISELECT(24,12), "S1401C3.s1401c3f0");
    test_class_info(&lv, &cd_S1401C3);
    dp->~S1401C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C3(Test_S1401C3, "S1401C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S1401C3C1Ev();
extern void _ZN7S1401C3D1Ev();
Name_Map name_map_S1401C3[] = {
  NSPAIR(_ZN7S1401C3C1Ev),
  NSPAIR(_ZN7S1401C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
static Base_Class bases_S1401C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1401C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1401C3[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
static  VTBL_ENTRY vtc_S1401C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C3[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
Class_Descriptor cd_S1401C3 = {  "S1401C3", // class name
  bases_S1401C3, 1,
  &(vtc_S1401C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S1401C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1401C3),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  S1401C5  : S1401C3 , virtual S1401C4 {
  int s1401c5f0;
  virtual  ~S1401C5(); // _ZN7S1401C5D2Ev
  virtual void  v8(); // _ZN7S1401C52v8Ev
  virtual void  v9(); // _ZN7S1401C52v9Ev
  virtual void  v10(); // _ZN7S1401C53v10Ev
  virtual void  v11(); // _ZN7S1401C53v11Ev
  virtual void  v12(); // _ZN7S1401C53v12Ev
  virtual void  v13(); // _ZN7S1401C53v13Ev
  virtual void  v14(); // _ZN7S1401C53v14Ev
  S1401C5(); // tgen
};
//SIG(-1 S1401C5) C1{ BC2{ BC3{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S1401C5 ::~S1401C5(){ note_dtor("S1401C5", this);}
void  S1401C5 ::v8(){vfunc_called(this, "_ZN7S1401C52v8Ev");}
void  S1401C5 ::v9(){vfunc_called(this, "_ZN7S1401C52v9Ev");}
void  S1401C5 ::v10(){vfunc_called(this, "_ZN7S1401C53v10Ev");}
void  S1401C5 ::v11(){vfunc_called(this, "_ZN7S1401C53v11Ev");}
void  S1401C5 ::v12(){vfunc_called(this, "_ZN7S1401C53v12Ev");}
void  S1401C5 ::v13(){vfunc_called(this, "_ZN7S1401C53v13Ev");}
void  S1401C5 ::v14(){vfunc_called(this, "_ZN7S1401C53v14Ev");}
S1401C5 ::S1401C5(){ note_ctor("S1401C5", this);} // tgen

static void Test_S1401C5()
{
  extern Class_Descriptor cd_S1401C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S1401C5, buf);
    S1401C5 *dp, &lv = *(dp=new (buf) S1401C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S1401C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1401C5)");
    check_base_class_offset(lv, (S1401C4*)(S1401C3*), 0, "S1401C5");
    check_base_class_offset(lv, (S1401C3*), 0, "S1401C5");
    /*is_ambiguous_... S1401C5::S1401C4 */ AMB_check_base_class_offset(lv, (S1401C4*), ABISELECT(64,32), "S1401C5");
    check_field_offset(lv, s1401c5f0, ABISELECT(56,28), "S1401C5.s1401c5f0");
    test_class_info(&lv, &cd_S1401C5);
    dp->~S1401C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C5(Test_S1401C5, "S1401C5", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S1401C5C1Ev();
extern void _ZN7S1401C5D2Ev();
Name_Map name_map_S1401C5[] = {
  NSPAIR(_ZN7S1401C5C1Ev),
  NSPAIR(_ZN7S1401C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
static Base_Class bases_S1401C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1401C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1401C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1401C4,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1401C5[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C5D1Ev();
extern void _ZN7S1401C5D0Ev();
extern void _ZN7S1401C52v8Ev();
extern void _ZN7S1401C52v9Ev();
extern void _ZN7S1401C53v10Ev();
extern void _ZN7S1401C53v11Ev();
extern void _ZN7S1401C53v12Ev();
extern void _ZN7S1401C53v13Ev();
extern void _ZN7S1401C53v14Ev();
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
static  VTBL_ENTRY vtc_S1401C5[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C5[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1401C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1401C5[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
};
extern VTBL_ENTRY _ZTV7S1401C5[];
static  VTT_ENTRY vtt_S1401C5[] = {
  {&(_ZTV7S1401C5[3]),  3,26},
  {&(_ZTV7S1401C5[22]),  22,26},
};
extern VTBL_ENTRY _ZTI7S1401C5[];
extern  VTBL_ENTRY _ZTV7S1401C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C5[];
Class_Descriptor cd_S1401C5 = {  "S1401C5", // class name
  bases_S1401C5, 3,
  &(vtc_S1401C5[0]), // expected_vtbl_contents
  &(vtt_S1401C5[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S1401C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1401C5),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1401C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1401C2  : S1401C3 , S1401C5 {
  virtual  ~S1401C2(); // _ZN7S1401C2D2Ev
  virtual void  v15(); // _ZN7S1401C23v15Ev
  virtual void  v16(); // _ZN7S1401C23v16Ev
  virtual void  v17(); // _ZN7S1401C23v17Ev
  virtual void  v18(); // _ZN7S1401C23v18Ev
  virtual void  v19(); // _ZN7S1401C23v19Ev
  virtual void  v20(); // _ZN7S1401C23v20Ev
  virtual void  v21(); // _ZN7S1401C23v21Ev
  virtual void  v22(); // _ZN7S1401C23v22Ev
  S1401C2(); // tgen
};
//SIG(-1 S1401C2) C1{ BC2{ BC3{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} BC4{ BC2 VBC3 vd v13 v14 v15 v16 v17 v18 v19 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S1401C2 ::~S1401C2(){ note_dtor("S1401C2", this);}
void  S1401C2 ::v15(){vfunc_called(this, "_ZN7S1401C23v15Ev");}
void  S1401C2 ::v16(){vfunc_called(this, "_ZN7S1401C23v16Ev");}
void  S1401C2 ::v17(){vfunc_called(this, "_ZN7S1401C23v17Ev");}
void  S1401C2 ::v18(){vfunc_called(this, "_ZN7S1401C23v18Ev");}
void  S1401C2 ::v19(){vfunc_called(this, "_ZN7S1401C23v19Ev");}
void  S1401C2 ::v20(){vfunc_called(this, "_ZN7S1401C23v20Ev");}
void  S1401C2 ::v21(){vfunc_called(this, "_ZN7S1401C23v21Ev");}
void  S1401C2 ::v22(){vfunc_called(this, "_ZN7S1401C23v22Ev");}
S1401C2 ::S1401C2(){ note_ctor("S1401C2", this);} // tgen

static void Test_S1401C2()
{
  extern Class_Descriptor cd_S1401C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[19];
    init_test(&cd_S1401C2, buf);
    S1401C2 *dp, &lv = *(dp=new (buf) S1401C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S1401C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1401C2)");
    /*is_ambiguous_... S1401C2::S1401C3 */ AMB_check_base_class_offset(lv, (S1401C4*)(S1401C3*), 0, "S1401C2");
    /*is_ambiguous_... S1401C2::S1401C3 */ AMB_check_base_class_offset(lv, (S1401C3*), 0, "S1401C2");
    check_base_class_offset(lv, (S1401C4*)(S1401C3*)(S1401C5*), ABISELECT(56,28), "S1401C2");
    check_base_class_offset(lv, (S1401C3*)(S1401C5*), ABISELECT(56,28), "S1401C2");
    /*is_ambiguous_... S1401C5::S1401C4 */ AMB_check_base_class_offset(lv, (S1401C4*)(S1401C5*), ABISELECT(120,60), "S1401C2");
    check_base_class_offset(lv, (S1401C5*), ABISELECT(56,28), "S1401C2");
    test_class_info(&lv, &cd_S1401C2);
    dp->~S1401C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C2(Test_S1401C2, "S1401C2", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN7S1401C2C1Ev();
extern void _ZN7S1401C2D2Ev();
Name_Map name_map_S1401C2[] = {
  NSPAIR(_ZN7S1401C2C1Ev),
  NSPAIR(_ZN7S1401C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C5;
extern VTBL_ENTRY _ZTI7S1401C5[];
extern  VTBL_ENTRY _ZTV7S1401C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C5[];
static Base_Class bases_S1401C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1401C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1401C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1401C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1401C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1401C4,    ABISELECT(120,60), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1401C5,    ABISELECT(56,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1401C2[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C2D1Ev();
extern void _ZN7S1401C2D0Ev();
extern void _ZN7S1401C23v15Ev();
extern void _ZN7S1401C23v16Ev();
extern void _ZN7S1401C23v17Ev();
extern void _ZN7S1401C23v18Ev();
extern void _ZN7S1401C23v19Ev();
extern void _ZN7S1401C23v20Ev();
extern void _ZN7S1401C23v21Ev();
extern void _ZN7S1401C23v22Ev();
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void ABISELECT(_ZThn56_N7S1401C2D1Ev,_ZThn28_N7S1401C2D1Ev)();
extern void ABISELECT(_ZThn56_N7S1401C2D0Ev,_ZThn28_N7S1401C2D0Ev)();
extern void _ZN7S1401C52v8Ev();
extern void _ZN7S1401C52v9Ev();
extern void _ZN7S1401C53v10Ev();
extern void _ZN7S1401C53v11Ev();
extern void _ZN7S1401C53v12Ev();
extern void _ZN7S1401C53v13Ev();
extern void _ZN7S1401C53v14Ev();
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
static  VTBL_ENTRY vtc_S1401C2[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C2[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1401C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v22Ev,
  ABISELECT(64,32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1401C2[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S1401C2D1Ev,_ZThn28_N7S1401C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S1401C2D0Ev,_ZThn28_N7S1401C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1401C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S1401C2[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
};
extern VTBL_ENTRY _ZTV7S1401C2[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C5D1Ev();
extern void _ZN7S1401C5D0Ev();
extern void _ZN7S1401C52v8Ev();
extern void _ZN7S1401C52v9Ev();
extern void _ZN7S1401C53v10Ev();
extern void _ZN7S1401C53v11Ev();
extern void _ZN7S1401C53v12Ev();
extern void _ZN7S1401C53v13Ev();
extern void _ZN7S1401C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C5__7S1401C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C5[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1401C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v14Ev,
};
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C4__A1__7S1401C5__7S1401C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1401C5[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
};
static  VTT_ENTRY vtt_S1401C2[] = {
  {&(_ZTV7S1401C2[3]),  3,43},
  {&(_tg__ZTV7S1401C5__7S1401C2[3]),  3,16},
  {&(_tg__ZTV7S1401C4__A1__7S1401C5__7S1401C2[6]),  6,10},
  {&(_ZTV7S1401C2[20]),  20,43},
  {&(_ZTV7S1401C2[39]),  39,43},
};
extern VTBL_ENTRY _ZTI7S1401C2[];
extern  VTBL_ENTRY _ZTV7S1401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C2[];
Class_Descriptor cd_S1401C2 = {  "S1401C2", // class name
  bases_S1401C2, 6,
  &(vtc_S1401C2[0]), // expected_vtbl_contents
  &(vtt_S1401C2[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI7S1401C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1401C2),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1401C2),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1401C6  : S1401C3 {
  virtual void  v23(); // _ZN7S1401C63v23Ev
  virtual void  v24(); // _ZN7S1401C63v24Ev
  virtual void  v25(); // _ZN7S1401C63v25Ev
  ~S1401C6(); // tgen
  S1401C6(); // tgen
};
//SIG(-1 S1401C6) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fc[2]} Fp[4]} v1 v2 v3}


void  S1401C6 ::v23(){vfunc_called(this, "_ZN7S1401C63v23Ev");}
void  S1401C6 ::v24(){vfunc_called(this, "_ZN7S1401C63v24Ev");}
void  S1401C6 ::v25(){vfunc_called(this, "_ZN7S1401C63v25Ev");}
S1401C6 ::~S1401C6(){ note_dtor("S1401C6", this);} // tgen
S1401C6 ::S1401C6(){ note_ctor("S1401C6", this);} // tgen

static void Test_S1401C6()
{
  extern Class_Descriptor cd_S1401C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S1401C6, buf);
    S1401C6 *dp, &lv = *(dp=new (buf) S1401C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S1401C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1401C6)");
    check_base_class_offset(lv, (S1401C4*)(S1401C3*), 0, "S1401C6");
    check_base_class_offset(lv, (S1401C3*), 0, "S1401C6");
    test_class_info(&lv, &cd_S1401C6);
    dp->~S1401C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C6(Test_S1401C6, "S1401C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S1401C6C1Ev();
extern void _ZN7S1401C6D1Ev();
Name_Map name_map_S1401C6[] = {
  NSPAIR(_ZN7S1401C6C1Ev),
  NSPAIR(_ZN7S1401C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
static Base_Class bases_S1401C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1401C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1401C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1401C6[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C63v23Ev();
extern void _ZN7S1401C63v24Ev();
extern void _ZN7S1401C63v25Ev();
static  VTBL_ENTRY vtc_S1401C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C6[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v24Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v25Ev,
};
extern VTBL_ENTRY _ZTI7S1401C6[];
extern  VTBL_ENTRY _ZTV7S1401C6[];
Class_Descriptor cd_S1401C6 = {  "S1401C6", // class name
  bases_S1401C6, 2,
  &(vtc_S1401C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S1401C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1401C6),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  S1401C8  {
  long double s1401c8f0;
  virtual void  v26(); // _ZN7S1401C83v26Ev
  ~S1401C8(); // tgen
  S1401C8(); // tgen
};
//SIG(-1 S1401C8) C1{ v1 FD}


void  S1401C8 ::v26(){vfunc_called(this, "_ZN7S1401C83v26Ev");}
S1401C8 ::~S1401C8(){ note_dtor("S1401C8", this);} // tgen
S1401C8 ::S1401C8(){ note_ctor("S1401C8", this);} // tgen

static void Test_S1401C8()
{
  extern Class_Descriptor cd_S1401C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S1401C8, buf);
    S1401C8 *dp, &lv = *(dp=new (buf) S1401C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1401C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1401C8)");
    check_field_offset(lv, s1401c8f0, ABISELECT(16,4), "S1401C8.s1401c8f0");
    test_class_info(&lv, &cd_S1401C8);
    dp->~S1401C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C8(Test_S1401C8, "S1401C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1401C8C1Ev();
extern void _ZN7S1401C8D1Ev();
Name_Map name_map_S1401C8[] = {
  NSPAIR(_ZN7S1401C8C1Ev),
  NSPAIR(_ZN7S1401C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1401C8[];
extern void _ZN7S1401C83v26Ev();
static  VTBL_ENTRY vtc_S1401C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C8[0]),
  (VTBL_ENTRY)&_ZN7S1401C83v26Ev,
};
extern VTBL_ENTRY _ZTI7S1401C8[];
extern  VTBL_ENTRY _ZTV7S1401C8[];
Class_Descriptor cd_S1401C8 = {  "S1401C8", // class name
  0,0,//no base classes
  &(vtc_S1401C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1401C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1401C8),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  S1401C7  : virtual S1401C8 , S1401C6 {
  void *s1401c7f0;
  virtual void  v27(); // _ZN7S1401C73v27Ev
  virtual void  v28(); // _ZN7S1401C73v28Ev
  virtual void  v29(); // _ZN7S1401C73v29Ev
  virtual void  v30(); // _ZN7S1401C73v30Ev
  virtual void  v31(); // _ZN7S1401C73v31Ev
  virtual void  v32(); // _ZN7S1401C73v32Ev
  virtual void  v33(); // _ZN7S1401C73v33Ev
  ~S1401C7(); // tgen
  S1401C7(); // tgen
};
//SIG(-1 S1401C7) C1{ VBC2{ v8 FD} BC3{ BC4{ BC5{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} v13 v14 v15} v1 v2 v3 v4 v5 v6 v7 Fp}


void  S1401C7 ::v27(){vfunc_called(this, "_ZN7S1401C73v27Ev");}
void  S1401C7 ::v28(){vfunc_called(this, "_ZN7S1401C73v28Ev");}
void  S1401C7 ::v29(){vfunc_called(this, "_ZN7S1401C73v29Ev");}
void  S1401C7 ::v30(){vfunc_called(this, "_ZN7S1401C73v30Ev");}
void  S1401C7 ::v31(){vfunc_called(this, "_ZN7S1401C73v31Ev");}
void  S1401C7 ::v32(){vfunc_called(this, "_ZN7S1401C73v32Ev");}
void  S1401C7 ::v33(){vfunc_called(this, "_ZN7S1401C73v33Ev");}
S1401C7 ::~S1401C7(){ note_dtor("S1401C7", this);} // tgen
S1401C7 ::S1401C7(){ note_ctor("S1401C7", this);} // tgen

static void Test_S1401C7()
{
  extern Class_Descriptor cd_S1401C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S1401C7, buf);
    S1401C7 *dp, &lv = *(dp=new (buf) S1401C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S1401C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1401C7)");
    check_base_class_offset(lv, (S1401C8*), ABISELECT(64,32), "S1401C7");
    check_base_class_offset(lv, (S1401C4*)(S1401C3*)(S1401C6*), 0, "S1401C7");
    check_base_class_offset(lv, (S1401C3*)(S1401C6*), 0, "S1401C7");
    check_base_class_offset(lv, (S1401C6*), 0, "S1401C7");
    check_field_offset(lv, s1401c7f0, ABISELECT(56,28), "S1401C7.s1401c7f0");
    test_class_info(&lv, &cd_S1401C7);
    dp->~S1401C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C7(Test_S1401C7, "S1401C7", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S1401C7C1Ev();
extern void _ZN7S1401C7D1Ev();
Name_Map name_map_S1401C7[] = {
  NSPAIR(_ZN7S1401C7C1Ev),
  NSPAIR(_ZN7S1401C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1401C8;
extern VTBL_ENTRY _ZTI7S1401C8[];
extern  VTBL_ENTRY _ZTV7S1401C8[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C6;
extern VTBL_ENTRY _ZTI7S1401C6[];
extern  VTBL_ENTRY _ZTV7S1401C6[];
static Base_Class bases_S1401C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1401C8,    ABISELECT(64,32), //bcp->offset
    17, //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_S1401C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1401C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1401C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1401C7[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C63v23Ev();
extern void _ZN7S1401C63v24Ev();
extern void _ZN7S1401C63v25Ev();
extern void _ZN7S1401C73v27Ev();
extern void _ZN7S1401C73v28Ev();
extern void _ZN7S1401C73v29Ev();
extern void _ZN7S1401C73v30Ev();
extern void _ZN7S1401C73v31Ev();
extern void _ZN7S1401C73v32Ev();
extern void _ZN7S1401C73v33Ev();
extern void _ZN7S1401C83v26Ev();
static  VTBL_ENTRY vtc_S1401C7[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C7[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v24Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v29Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v30Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v31Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v32Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v33Ev,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1401C7[0]),
  (VTBL_ENTRY)&_ZN7S1401C83v26Ev,
};
extern VTBL_ENTRY _ZTV7S1401C7[];
static  VTT_ENTRY vtt_S1401C7[] = {
  {&(_ZTV7S1401C7[3]),  3,21},
  {&(_ZTV7S1401C7[20]),  20,21},
};
extern VTBL_ENTRY _ZTI7S1401C7[];
extern  VTBL_ENTRY _ZTV7S1401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C7[];
Class_Descriptor cd_S1401C7 = {  "S1401C7", // class name
  bases_S1401C7, 4,
  &(vtc_S1401C7[0]), // expected_vtbl_contents
  &(vtt_S1401C7[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S1401C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1401C7),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1401C7),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1401C1  : S1401C2 , virtual S1401C6 , virtual S1401C7 {
  ::S20347C12 s1401c1f0;
  char s1401c1f1[2];
  virtual  ~S1401C1(); // _ZN7S1401C1D2Ev
  virtual void  v1(); // _ZN7S1401C12v1Ev
  virtual void  v2(); // _ZN7S1401C12v2Ev
  virtual void  v3(); // _ZN7S1401C12v3Ev
  S1401C1(); // tgen
};
//SIG(1 S1401C1) C1{ BC2{ BC3{ BC4{ v4 v5 v6 v7 Fp Fc[2]} Fp[4]} BC5{ BC3 VBC4 vd v8 v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22} VBC6{ BC3 v23 v24 v25} VBC7{ VBC8{ v26 FD} BC6 v27 v28 v29 v30 v31 v32 v33 Fp} vd v1 v2 v3 FC9{ v34 v35 v36 v37 v38 FC10{ BC11{ v39 v40 v41 v42 Fp Fc[2]} Fp[4]}} Fc[2]}


 S1401C1 ::~S1401C1(){ note_dtor("S1401C1", this);}
void  S1401C1 ::v1(){vfunc_called(this, "_ZN7S1401C12v1Ev");}
void  S1401C1 ::v2(){vfunc_called(this, "_ZN7S1401C12v2Ev");}
void  S1401C1 ::v3(){vfunc_called(this, "_ZN7S1401C12v3Ev");}
S1401C1 ::S1401C1(){ note_ctor("S1401C1", this);} // tgen

static void Test_S1401C1()
{
  extern Class_Descriptor cd_S1401C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,47)];
    init_test(&cd_S1401C1, buf);
    S1401C1 *dp, &lv = *(dp=new (buf) S1401C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,184), "sizeof(S1401C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S1401C1)");
    /*is_ambiguous_... S1401C2::S1401C3 */ AMB_check_base_class_offset(lv, (S1401C4*)(S1401C3*)(S1401C2*), 0, "S1401C1");
    /*is_ambiguous_... S1401C2::S1401C3 */ AMB_check_base_class_offset(lv, (S1401C3*)(S1401C2*), 0, "S1401C1");
    check_base_class_offset(lv, (S1401C4*)(S1401C3*)(S1401C5*)(S1401C2*), ABISELECT(56,28), "S1401C1");
    check_base_class_offset(lv, (S1401C3*)(S1401C5*)(S1401C2*), ABISELECT(56,28), "S1401C1");
    /*is_ambiguous_... S1401C5::S1401C4 */ AMB_check_base_class_offset(lv, (S1401C4*)(S1401C5*)(S1401C2*), ABISELECT(192,96), "S1401C1");
    check_base_class_offset(lv, (S1401C5*)(S1401C2*), ABISELECT(56,28), "S1401C1");
    check_base_class_offset(lv, (S1401C2*), 0, "S1401C1");
    /*is_ambiguous_... S1401C1::S1401C6 */ AMB_check_base_class_offset(lv, (S1401C4*)(S1401C3*)(S1401C6*), ABISELECT(216,108), "S1401C1");
    /*is_ambiguous_... S1401C1::S1401C6 */ AMB_check_base_class_offset(lv, (S1401C3*)(S1401C6*), ABISELECT(216,108), "S1401C1");
    /*is_ambiguous_... S1401C1::S1401C6 */ AMB_check_base_class_offset(lv, (S1401C6*), ABISELECT(216,108), "S1401C1");
    check_base_class_offset(lv, (S1401C8*)(S1401C7*), ABISELECT(336,168), "S1401C1");
    check_base_class_offset(lv, (S1401C4*)(S1401C3*)(S1401C6*)(S1401C7*), ABISELECT(272,136), "S1401C1");
    check_base_class_offset(lv, (S1401C3*)(S1401C6*)(S1401C7*), ABISELECT(272,136), "S1401C1");
    check_base_class_offset(lv, (S1401C6*)(S1401C7*), ABISELECT(272,136), "S1401C1");
    check_base_class_offset(lv, (S1401C7*), ABISELECT(272,136), "S1401C1");
    check_field_offset(lv, s1401c1f0, ABISELECT(120,60), "S1401C1.s1401c1f0");
    check_field_offset(lv, s1401c1f1, ABISELECT(184,92), "S1401C1.s1401c1f1");
    test_class_info(&lv, &cd_S1401C1);
    dp->~S1401C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1401C1(Test_S1401C1, "S1401C1", ABISELECT(368,184));

#else // __cplusplus

extern void _ZN7S1401C1C1Ev();
extern void _ZN7S1401C1D2Ev();
Name_Map name_map_S1401C1[] = {
  NSPAIR(_ZN7S1401C1C1Ev),
  NSPAIR(_ZN7S1401C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C5;
extern VTBL_ENTRY _ZTI7S1401C5[];
extern  VTBL_ENTRY _ZTV7S1401C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C5[];
extern Class_Descriptor cd_S1401C2;
extern VTBL_ENTRY _ZTI7S1401C2[];
extern  VTBL_ENTRY _ZTV7S1401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C2[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C6;
extern VTBL_ENTRY _ZTI7S1401C6[];
extern  VTBL_ENTRY _ZTV7S1401C6[];
extern Class_Descriptor cd_S1401C8;
extern VTBL_ENTRY _ZTI7S1401C8[];
extern  VTBL_ENTRY _ZTV7S1401C8[];
extern Class_Descriptor cd_S1401C4;
extern VTBL_ENTRY _ZTI7S1401C4[];
extern  VTBL_ENTRY _ZTV7S1401C4[];
extern Class_Descriptor cd_S1401C3;
extern VTBL_ENTRY _ZTI7S1401C3[];
extern  VTBL_ENTRY _ZTV7S1401C3[];
extern Class_Descriptor cd_S1401C6;
extern VTBL_ENTRY _ZTI7S1401C6[];
extern  VTBL_ENTRY _ZTV7S1401C6[];
extern Class_Descriptor cd_S1401C7;
extern VTBL_ENTRY _ZTI7S1401C7[];
extern  VTBL_ENTRY _ZTV7S1401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C7[];
static Base_Class bases_S1401C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1401C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1401C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1401C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1401C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1401C4,    ABISELECT(192,96), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1401C5,    ABISELECT(56,28), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1401C2,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1401C4,    ABISELECT(216,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
    2, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S1401C3,    ABISELECT(216,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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S1401C6,    ABISELECT(216,108), //bcp->offset
    49, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1401C8,    ABISELECT(336,168), //bcp->offset
    96, //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
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1401C4,    ABISELECT(272,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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1401C3,    ABISELECT(272,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
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S1401C6,    ABISELECT(272,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
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1401C7,    ABISELECT(272,136), //bcp->offset
    65, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1401C1[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C1D1Ev();
extern void _ZN7S1401C1D0Ev();
extern void _ZN7S1401C23v15Ev();
extern void _ZN7S1401C23v16Ev();
extern void _ZN7S1401C23v17Ev();
extern void _ZN7S1401C23v18Ev();
extern void _ZN7S1401C23v19Ev();
extern void _ZN7S1401C23v20Ev();
extern void _ZN7S1401C23v21Ev();
extern void _ZN7S1401C23v22Ev();
extern void _ZN7S1401C12v1Ev();
extern void _ZN7S1401C12v2Ev();
extern void _ZN7S1401C12v3Ev();
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void ABISELECT(_ZThn56_N7S1401C1D1Ev,_ZThn28_N7S1401C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S1401C1D0Ev,_ZThn28_N7S1401C1D0Ev)();
extern void _ZN7S1401C52v8Ev();
extern void _ZN7S1401C52v9Ev();
extern void _ZN7S1401C53v10Ev();
extern void _ZN7S1401C53v11Ev();
extern void _ZN7S1401C53v12Ev();
extern void _ZN7S1401C53v13Ev();
extern void _ZN7S1401C53v14Ev();
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C63v23Ev();
extern void _ZN7S1401C63v24Ev();
extern void _ZN7S1401C63v25Ev();
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C63v23Ev();
extern void _ZN7S1401C63v24Ev();
extern void _ZN7S1401C63v25Ev();
extern void _ZN7S1401C73v27Ev();
extern void _ZN7S1401C73v28Ev();
extern void _ZN7S1401C73v29Ev();
extern void _ZN7S1401C73v30Ev();
extern void _ZN7S1401C73v31Ev();
extern void _ZN7S1401C73v32Ev();
extern void _ZN7S1401C73v33Ev();
extern void _ZN7S1401C83v26Ev();
static  VTBL_ENTRY vtc_S1401C1[] = {
  ABISELECT(336,168),
  ABISELECT(272,136),
  ABISELECT(216,108),
  ABISELECT(192,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C1[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1401C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1401C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1401C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1401C12v3Ev,
  ABISELECT(136,68),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1401C1[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S1401C1D1Ev,_ZThn28_N7S1401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S1401C1D0Ev,_ZThn28_N7S1401C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1401C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-96),
  (VTBL_ENTRY)&(_ZTI7S1401C1[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI7S1401C1[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v24Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI7S1401C1[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v24Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v29Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v30Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v31Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v32Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v33Ev,
  0,
  ABISELECT(-336,-168),
  (VTBL_ENTRY)&(_ZTI7S1401C1[0]),
  (VTBL_ENTRY)&_ZN7S1401C83v26Ev,
};
extern VTBL_ENTRY _ZTV7S1401C1[];
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C2D1Ev();
extern void _ZN7S1401C2D0Ev();
extern void _ZN7S1401C23v15Ev();
extern void _ZN7S1401C23v16Ev();
extern void _ZN7S1401C23v17Ev();
extern void _ZN7S1401C23v18Ev();
extern void _ZN7S1401C23v19Ev();
extern void _ZN7S1401C23v20Ev();
extern void _ZN7S1401C23v21Ev();
extern void _ZN7S1401C23v22Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C2__7S1401C1[] = {
  ABISELECT(192,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C2[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1401C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1401C23v22Ev,
};
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C5D1Ev();
extern void _ZN7S1401C5D0Ev();
extern void _ZN7S1401C52v8Ev();
extern void _ZN7S1401C52v9Ev();
extern void _ZN7S1401C53v10Ev();
extern void _ZN7S1401C53v11Ev();
extern void _ZN7S1401C53v12Ev();
extern void _ZN7S1401C53v13Ev();
extern void _ZN7S1401C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C57S1401C2__7S1401C1[] = {
  ABISELECT(136,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C5[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1401C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v14Ev,
};
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C4__A1__7S1401C57S1401C2__7S1401C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S1401C5[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
};
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void ABISELECT(_ZThn56_N7S1401C2D1Ev,_ZThn28_N7S1401C2D1Ev)();
extern void ABISELECT(_ZThn56_N7S1401C2D0Ev,_ZThn28_N7S1401C2D0Ev)();
extern void _ZN7S1401C52v8Ev();
extern void _ZN7S1401C52v9Ev();
extern void _ZN7S1401C53v10Ev();
extern void _ZN7S1401C53v11Ev();
extern void _ZN7S1401C53v12Ev();
extern void _ZN7S1401C53v13Ev();
extern void _ZN7S1401C53v14Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C5__7S1401C2__7S1401C1[] = {
  ABISELECT(136,68),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S1401C2[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S1401C2D1Ev,_ZThn28_N7S1401C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S1401C2D0Ev,_ZThn28_N7S1401C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1401C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1401C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v10Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v11Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v12Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v13Ev,
  (VTBL_ENTRY)&_ZN7S1401C53v14Ev,
};
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C4__A2__7S1401C2__7S1401C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-192,-96),
  (VTBL_ENTRY)&(_ZTI7S1401C2[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
};
extern void _ZN7S1401C42v4Ev();
extern void _ZN7S1401C42v5Ev();
extern void _ZN7S1401C42v6Ev();
extern void _ZN7S1401C42v7Ev();
extern void _ZN7S1401C63v23Ev();
extern void _ZN7S1401C63v24Ev();
extern void _ZN7S1401C63v25Ev();
extern void _ZN7S1401C73v27Ev();
extern void _ZN7S1401C73v28Ev();
extern void _ZN7S1401C73v29Ev();
extern void _ZN7S1401C73v30Ev();
extern void _ZN7S1401C73v31Ev();
extern void _ZN7S1401C73v32Ev();
extern void _ZN7S1401C73v33Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C7__7S1401C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S1401C7[0]),
  (VTBL_ENTRY)&_ZN7S1401C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1401C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v23Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v24Ev,
  (VTBL_ENTRY)&_ZN7S1401C63v25Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v27Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v28Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v29Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v30Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v31Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v32Ev,
  (VTBL_ENTRY)&_ZN7S1401C73v33Ev,
};
extern void _ZN7S1401C83v26Ev();
static  VTBL_ENTRY _tg__ZTV7S1401C8__7S1401C7__7S1401C1[] = {
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S1401C7[0]),
  (VTBL_ENTRY)&_ZN7S1401C83v26Ev,
};
static  VTT_ENTRY vtt_S1401C1[] = {
  {&(_ZTV7S1401C1[6]),  6,100},
  {&(_tg__ZTV7S1401C2__7S1401C1[3]),  3,17},
  {&(_tg__ZTV7S1401C57S1401C2__7S1401C1[3]),  3,16},
  {&(_tg__ZTV7S1401C4__A1__7S1401C57S1401C2__7S1401C1[6]),  6,10},
  {&(_tg__ZTV7S1401C5__7S1401C2__7S1401C1[3]),  3,16},
  {&(_tg__ZTV7S1401C4__A2__7S1401C2__7S1401C1[6]),  6,10},
  {&(_ZTV7S1401C1[26]),  26,100},
  {&(_ZTV7S1401C1[45]),  45,100},
  {&(_ZTV7S1401C1[58]),  58,100},
  {&(_ZTV7S1401C1[82]),  82,100},
  {&(_ZTV7S1401C1[99]),  99,100},
  {&(_tg__ZTV7S1401C7__7S1401C1[3]),  3,17},
  {&(_tg__ZTV7S1401C8__7S1401C7__7S1401C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S1401C1[];
extern  VTBL_ENTRY _ZTV7S1401C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1401C1[];
Class_Descriptor cd_S1401C1 = {  "S1401C1", // class name
  bases_S1401C1, 15,
  &(vtc_S1401C1[0]), // expected_vtbl_contents
  &(vtt_S1401C1[0]), // expected_vtt_contents
  ABISELECT(368,184), // object size
  NSPAIRA(_ZTI7S1401C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1401C1),100, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1401C1),13, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3693C2  : S3715C3_nt {
  virtual  ~S3693C2(); // _ZN7S3693C2D1Ev
  virtual void  v14(); // _ZN7S3693C23v14Ev
  virtual void  v15(); // _ZN7S3693C23v15Ev
  virtual void  v16(); // _ZN7S3693C23v16Ev
  virtual void  v17(); // _ZN7S3693C23v17Ev
  virtual void  v18(); // _ZN7S3693C23v18Ev
  virtual void  v19(); // _ZN7S3693C23v19Ev
  virtual void  v20(); // _ZN7S3693C23v20Ev
  virtual void  v21(); // _ZN7S3693C23v21Ev
  virtual void  v22(); // _ZN7S3693C23v22Ev
  virtual void  v23(); // _ZN7S3693C23v23Ev
  virtual void  v24(); // _ZN7S3693C23v24Ev
  virtual void  v25(); // _ZN7S3693C23v25Ev
  virtual void  v26(); // _ZN7S3693C23v26Ev
  S3693C2(); // tgen
};
//SIG(-1 S3693C2) C1{ BC2{ vd m Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S3693C2 ::~S3693C2(){ note_dtor("S3693C2", this);}
void  S3693C2 ::v14(){vfunc_called(this, "_ZN7S3693C23v14Ev");}
void  S3693C2 ::v15(){vfunc_called(this, "_ZN7S3693C23v15Ev");}
void  S3693C2 ::v16(){vfunc_called(this, "_ZN7S3693C23v16Ev");}
void  S3693C2 ::v17(){vfunc_called(this, "_ZN7S3693C23v17Ev");}
void  S3693C2 ::v18(){vfunc_called(this, "_ZN7S3693C23v18Ev");}
void  S3693C2 ::v19(){vfunc_called(this, "_ZN7S3693C23v19Ev");}
void  S3693C2 ::v20(){vfunc_called(this, "_ZN7S3693C23v20Ev");}
void  S3693C2 ::v21(){vfunc_called(this, "_ZN7S3693C23v21Ev");}
void  S3693C2 ::v22(){vfunc_called(this, "_ZN7S3693C23v22Ev");}
void  S3693C2 ::v23(){vfunc_called(this, "_ZN7S3693C23v23Ev");}
void  S3693C2 ::v24(){vfunc_called(this, "_ZN7S3693C23v24Ev");}
void  S3693C2 ::v25(){vfunc_called(this, "_ZN7S3693C23v25Ev");}
void  S3693C2 ::v26(){vfunc_called(this, "_ZN7S3693C23v26Ev");}
S3693C2 ::S3693C2(){ note_ctor("S3693C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3693C2C1Ev();
extern void _ZN7S3693C2D1Ev();
Name_Map name_map_S3693C2[] = {
  NSPAIR(_ZN7S3693C2C1Ev),
  NSPAIR(_ZN7S3693C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
static Base_Class bases_S3693C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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 _ZTI7S3693C2[];
extern void _ZN7S3693C2D1Ev();
extern void _ZN7S3693C2D0Ev();
extern void _ZN7S3693C23v14Ev();
extern void _ZN7S3693C23v15Ev();
extern void _ZN7S3693C23v16Ev();
extern void _ZN7S3693C23v17Ev();
extern void _ZN7S3693C23v18Ev();
extern void _ZN7S3693C23v19Ev();
extern void _ZN7S3693C23v20Ev();
extern void _ZN7S3693C23v21Ev();
extern void _ZN7S3693C23v22Ev();
extern void _ZN7S3693C23v23Ev();
extern void _ZN7S3693C23v24Ev();
extern void _ZN7S3693C23v25Ev();
extern void _ZN7S3693C23v26Ev();
static  VTBL_ENTRY vtc_S3693C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3693C2[0]),
  (VTBL_ENTRY)&_ZN7S3693C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3693C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S3693C2[];
extern  VTBL_ENTRY _ZTV7S3693C2[];
Class_Descriptor cd_S3693C2 = {  "S3693C2", // class name
  bases_S3693C2, 1,
  &(vtc_S3693C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3693C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3693C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3693C1  : S3693C2 {
  void *s3693c1f0;
  ::S22028C68_nt s3693c1f1;
  ::S3691C5 s3693c1f2;
  ::S22028C14_nt s3693c1f3;
  void *s3693c1f4;
  ::S8520C3_nt s3693c1f5;
  ::S3691C11 s3693c1f6;
  void *s3693c1f7;
  ::S3715C9_nt s3693c1f8;
  virtual  ~S3693C1(); // _ZN7S3693C1D1Ev
  virtual void  v1(); // _ZN7S3693C12v1Ev
  virtual void  v2(); // _ZN7S3693C12v2Ev
  virtual void  v3(); // _ZN7S3693C12v3Ev
  virtual void  v4(); // _ZN7S3693C12v4Ev
  virtual void  v5(); // _ZN7S3693C12v5Ev
  virtual void  v6(); // _ZN7S3693C12v6Ev
  virtual void  v7(); // _ZN7S3693C12v7Ev
  virtual void  v8(); // _ZN7S3693C12v8Ev
  virtual void  v9(); // _ZN7S3693C12v9Ev
  virtual void  v10(); // _ZN7S3693C13v10Ev
  virtual void  v11(); // _ZN7S3693C13v11Ev
  virtual void  v12(); // _ZN7S3693C13v12Ev
  virtual void  v13(); // _ZN7S3693C13v13Ev
  S3693C1(); // tgen
};
//SIG(1 S3693C1) C1{ BC2{ BC3{ vd m Fi} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC4{ m Fp} FC5{ vd m Fi Fp Fc[1179]} FC6{ m Fp Fi FC7{ m} FC8{ m}} Fp FC9{ m FL[4]} FC10{ vd m Fi Fp Fc[2358] Fi} Fp FC11{ m Fp}}


 S3693C1 ::~S3693C1(){ note_dtor("S3693C1", this);}
void  S3693C1 ::v1(){vfunc_called(this, "_ZN7S3693C12v1Ev");}
void  S3693C1 ::v2(){vfunc_called(this, "_ZN7S3693C12v2Ev");}
void  S3693C1 ::v3(){vfunc_called(this, "_ZN7S3693C12v3Ev");}
void  S3693C1 ::v4(){vfunc_called(this, "_ZN7S3693C12v4Ev");}
void  S3693C1 ::v5(){vfunc_called(this, "_ZN7S3693C12v5Ev");}
void  S3693C1 ::v6(){vfunc_called(this, "_ZN7S3693C12v6Ev");}
void  S3693C1 ::v7(){vfunc_called(this, "_ZN7S3693C12v7Ev");}
void  S3693C1 ::v8(){vfunc_called(this, "_ZN7S3693C12v8Ev");}
void  S3693C1 ::v9(){vfunc_called(this, "_ZN7S3693C12v9Ev");}
void  S3693C1 ::v10(){vfunc_called(this, "_ZN7S3693C13v10Ev");}
void  S3693C1 ::v11(){vfunc_called(this, "_ZN7S3693C13v11Ev");}
void  S3693C1 ::v12(){vfunc_called(this, "_ZN7S3693C13v12Ev");}
void  S3693C1 ::v13(){vfunc_called(this, "_ZN7S3693C13v13Ev");}
S3693C1 ::S3693C1(){ note_ctor("S3693C1", this);} // tgen

static void Test_S3693C1()
{
  extern Class_Descriptor cd_S3693C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(464,911)];
    init_test(&cd_S3693C1, buf);
    S3693C1 *dp, &lv = *(dp=new (buf) S3693C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3704,3640), "sizeof(S3693C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3693C1)");
    check_base_class_offset(lv, (S3715C3_nt*)(S3693C2*), 0, "S3693C1");
    check_base_class_offset(lv, (S3693C2*), 0, "S3693C1");
    check_field_offset(lv, s3693c1f0, ABISELECT(16,8), "S3693C1.s3693c1f0");
    check_field_offset(lv, s3693c1f1, ABISELECT(24,12), "S3693C1.s3693c1f1");
    check_field_offset(lv, s3693c1f2, ABISELECT(32,16), "S3693C1.s3693c1f2");
    check_field_offset(lv, s3693c1f3, ABISELECT(1240,1208), "S3693C1.s3693c1f3");
    check_field_offset(lv, s3693c1f4, ABISELECT(1256,1220), "S3693C1.s3693c1f4");
    check_field_offset(lv, s3693c1f5, ABISELECT(1264,1224), "S3693C1.s3693c1f5");
    check_field_offset(lv, s3693c1f6, ABISELECT(1296,1256), "S3693C1.s3693c1f6");
    check_field_offset(lv, s3693c1f7, ABISELECT(3688,3632), "S3693C1.s3693c1f7");
    check_field_offset(lv, s3693c1f8, ABISELECT(3696,3636), "S3693C1.s3693c1f8");
    test_class_info(&lv, &cd_S3693C1);
    dp->~S3693C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3693C1(Test_S3693C1, "S3693C1", ABISELECT(3704,3640));

#else // __cplusplus

extern void _ZN7S3693C1C1Ev();
extern void _ZN7S3693C1D1Ev();
Name_Map name_map_S3693C1[] = {
  NSPAIR(_ZN7S3693C1C1Ev),
  NSPAIR(_ZN7S3693C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S3693C2;
extern VTBL_ENTRY _ZTI7S3693C2[];
extern  VTBL_ENTRY _ZTV7S3693C2[];
static Base_Class bases_S3693C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S3693C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3693C1[];
extern void _ZN7S3693C1D1Ev();
extern void _ZN7S3693C1D0Ev();
extern void _ZN7S3693C23v14Ev();
extern void _ZN7S3693C23v15Ev();
extern void _ZN7S3693C23v16Ev();
extern void _ZN7S3693C23v17Ev();
extern void _ZN7S3693C23v18Ev();
extern void _ZN7S3693C23v19Ev();
extern void _ZN7S3693C23v20Ev();
extern void _ZN7S3693C23v21Ev();
extern void _ZN7S3693C23v22Ev();
extern void _ZN7S3693C23v23Ev();
extern void _ZN7S3693C23v24Ev();
extern void _ZN7S3693C23v25Ev();
extern void _ZN7S3693C23v26Ev();
extern void _ZN7S3693C12v1Ev();
extern void _ZN7S3693C12v2Ev();
extern void _ZN7S3693C12v3Ev();
extern void _ZN7S3693C12v4Ev();
extern void _ZN7S3693C12v5Ev();
extern void _ZN7S3693C12v6Ev();
extern void _ZN7S3693C12v7Ev();
extern void _ZN7S3693C12v8Ev();
extern void _ZN7S3693C12v9Ev();
extern void _ZN7S3693C13v10Ev();
extern void _ZN7S3693C13v11Ev();
extern void _ZN7S3693C13v12Ev();
extern void _ZN7S3693C13v13Ev();
static  VTBL_ENTRY vtc_S3693C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3693C1[0]),
  (VTBL_ENTRY)&_ZN7S3693C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3693C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3693C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3693C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3693C13v10Ev,
  (VTBL_ENTRY)&_ZN7S3693C13v11Ev,
  (VTBL_ENTRY)&_ZN7S3693C13v12Ev,
  (VTBL_ENTRY)&_ZN7S3693C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S3693C1[];
extern  VTBL_ENTRY _ZTV7S3693C1[];
Class_Descriptor cd_S3693C1 = {  "S3693C1", // class name
  bases_S3693C1, 2,
  &(vtc_S3693C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(3704,3640), // object size
  NSPAIRA(_ZTI7S3693C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3693C1),30, //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  S7809C4  {
  __tsi64 s7809c4f0;
  char s7809c4f1;
  virtual void  v6(); // _ZN7S7809C42v6Ev
  virtual void  v7(); // _ZN7S7809C42v7Ev
  virtual void  v8(); // _ZN7S7809C42v8Ev
  virtual void  v9(); // _ZN7S7809C42v9Ev
  virtual void  v10(); // _ZN7S7809C43v10Ev
  ~S7809C4(); // tgen
  S7809C4(); // tgen
};
//SIG(-1 S7809C4) C1{ v1 v2 v3 v4 v5 FL Fc}


void  S7809C4 ::v6(){vfunc_called(this, "_ZN7S7809C42v6Ev");}
void  S7809C4 ::v7(){vfunc_called(this, "_ZN7S7809C42v7Ev");}
void  S7809C4 ::v8(){vfunc_called(this, "_ZN7S7809C42v8Ev");}
void  S7809C4 ::v9(){vfunc_called(this, "_ZN7S7809C42v9Ev");}
void  S7809C4 ::v10(){vfunc_called(this, "_ZN7S7809C43v10Ev");}
S7809C4 ::~S7809C4(){ note_dtor("S7809C4", this);} // tgen
S7809C4 ::S7809C4(){ note_ctor("S7809C4", this);} // tgen

static void Test_S7809C4()
{
  extern Class_Descriptor cd_S7809C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7809C4, buf);
    S7809C4 *dp, &lv = *(dp=new (buf) S7809C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7809C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C4)");
    check_field_offset(lv, s7809c4f0, ABISELECT(8,4), "S7809C4.s7809c4f0");
    check_field_offset(lv, s7809c4f1, ABISELECT(16,12), "S7809C4.s7809c4f1");
    test_class_info(&lv, &cd_S7809C4);
    dp->~S7809C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C4(Test_S7809C4, "S7809C4", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7809C4C1Ev();
extern void _ZN7S7809C4D1Ev();
Name_Map name_map_S7809C4[] = {
  NSPAIR(_ZN7S7809C4C1Ev),
  NSPAIR(_ZN7S7809C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7809C4[];
extern void _ZN7S7809C42v6Ev();
extern void _ZN7S7809C42v7Ev();
extern void _ZN7S7809C42v8Ev();
extern void _ZN7S7809C42v9Ev();
extern void _ZN7S7809C43v10Ev();
static  VTBL_ENTRY vtc_S7809C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C4[0]),
  (VTBL_ENTRY)&_ZN7S7809C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7809C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S7809C4[];
extern  VTBL_ENTRY _ZTV7S7809C4[];
Class_Descriptor cd_S7809C4 = {  "S7809C4", // class name
  0,0,//no base classes
  &(vtc_S7809C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7809C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7809C4),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  S7809C3  : virtual S7809C4 {
  virtual  ~S7809C3(); // _ZN7S7809C3D2Ev
  virtual void  v11(); // _ZN7S7809C33v11Ev
  S7809C3(); // tgen
};
//SIG(-1 S7809C3) C1{ VBC2{ v2 v3 v4 v5 v6 FL Fc} vd v1}


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

static void Test_S7809C3()
{
  extern Class_Descriptor cd_S7809C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7809C3, buf);
    S7809C3 *dp, &lv = *(dp=new (buf) S7809C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7809C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C3)");
    check_base_class_offset(lv, (S7809C4*), ABISELECT(8,4), "S7809C3");
    test_class_info(&lv, &cd_S7809C3);
    dp->~S7809C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C3(Test_S7809C3, "S7809C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7809C3C1Ev();
extern void _ZN7S7809C3D2Ev();
Name_Map name_map_S7809C3[] = {
  NSPAIR(_ZN7S7809C3C1Ev),
  NSPAIR(_ZN7S7809C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7809C4;
extern VTBL_ENTRY _ZTI7S7809C4[];
extern  VTBL_ENTRY _ZTV7S7809C4[];
static Base_Class bases_S7809C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7809C4,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    7, //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 _ZTI7S7809C3[];
extern void _ZN7S7809C3D1Ev();
extern void _ZN7S7809C3D0Ev();
extern void _ZN7S7809C33v11Ev();
extern void _ZN7S7809C42v6Ev();
extern void _ZN7S7809C42v7Ev();
extern void _ZN7S7809C42v8Ev();
extern void _ZN7S7809C42v9Ev();
extern void _ZN7S7809C43v10Ev();
static  VTBL_ENTRY vtc_S7809C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C3[0]),
  (VTBL_ENTRY)&_ZN7S7809C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7809C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7809C3[0]),
  (VTBL_ENTRY)&_ZN7S7809C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7809C43v10Ev,
};
extern VTBL_ENTRY _ZTV7S7809C3[];
static  VTT_ENTRY vtt_S7809C3[] = {
  {&(_ZTV7S7809C3[3]),  3,18},
  {&(_ZTV7S7809C3[13]),  13,18},
};
extern VTBL_ENTRY _ZTI7S7809C3[];
extern  VTBL_ENTRY _ZTV7S7809C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C3[];
Class_Descriptor cd_S7809C3 = {  "S7809C3", // class name
  bases_S7809C3, 1,
  &(vtc_S7809C3[0]), // expected_vtbl_contents
  &(vtt_S7809C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7809C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7809C3),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7809C3),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  S7809C6_nt  {
  virtual void  v12(); // _ZN10S7809C6_nt3v12Ev
  ~S7809C6_nt(); // tgen
  S7809C6_nt(); // tgen
};
//SIG(-1 S7809C6_nt) C1{ v1}


void  S7809C6_nt ::v12(){vfunc_called(this, "_ZN10S7809C6_nt3v12Ev");}
S7809C6_nt ::~S7809C6_nt(){ note_dtor("S7809C6_nt", this);} // tgen
S7809C6_nt ::S7809C6_nt(){ note_ctor("S7809C6_nt", this);} // tgen

//skip512 S7809C6_nt

#else // __cplusplus

extern void _ZN10S7809C6_ntC1Ev();
extern void _ZN10S7809C6_ntD1Ev();
Name_Map name_map_S7809C6_nt[] = {
  NSPAIR(_ZN10S7809C6_ntC1Ev),
  NSPAIR(_ZN10S7809C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7809C6_nt[];
extern void _ZN10S7809C6_nt3v12Ev();
static  VTBL_ENTRY vtc_S7809C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7809C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7809C6_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S7809C6_nt[];
VTBL_ENTRY *P__ZTI10S7809C6_nt = _ZTI10S7809C6_nt; 
extern  VTBL_ENTRY _ZTV10S7809C6_nt[];
Class_Descriptor cd_S7809C6_nt = {  "S7809C6_nt", // class name
  0,0,//no base classes
  &(vtc_S7809C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7809C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7809C6_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  S7809C8  {
  int s7809c8f0[10];
  virtual void  v13(); // _ZN7S7809C83v13Ev
  virtual void  v14(); // _ZN7S7809C83v14Ev
  virtual void  v15(); // _ZN7S7809C83v15Ev
  virtual void  v16(); // _ZN7S7809C83v16Ev
  ~S7809C8(); // tgen
  S7809C8(); // tgen
};
//SIG(-1 S7809C8) C1{ v1 v2 v3 v4 Fi[10]}


void  S7809C8 ::v13(){vfunc_called(this, "_ZN7S7809C83v13Ev");}
void  S7809C8 ::v14(){vfunc_called(this, "_ZN7S7809C83v14Ev");}
void  S7809C8 ::v15(){vfunc_called(this, "_ZN7S7809C83v15Ev");}
void  S7809C8 ::v16(){vfunc_called(this, "_ZN7S7809C83v16Ev");}
S7809C8 ::~S7809C8(){ note_dtor("S7809C8", this);} // tgen
S7809C8 ::S7809C8(){ note_ctor("S7809C8", this);} // tgen

static void Test_S7809C8()
{
  extern Class_Descriptor cd_S7809C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S7809C8, buf);
    S7809C8 *dp, &lv = *(dp=new (buf) S7809C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S7809C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C8)");
    check_field_offset(lv, s7809c8f0, ABISELECT(8,4), "S7809C8.s7809c8f0");
    test_class_info(&lv, &cd_S7809C8);
    dp->~S7809C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C8(Test_S7809C8, "S7809C8", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S7809C8C1Ev();
extern void _ZN7S7809C8D1Ev();
Name_Map name_map_S7809C8[] = {
  NSPAIR(_ZN7S7809C8C1Ev),
  NSPAIR(_ZN7S7809C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7809C8[];
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
static  VTBL_ENTRY vtc_S7809C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C8[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
};
extern VTBL_ENTRY _ZTI7S7809C8[];
extern  VTBL_ENTRY _ZTV7S7809C8[];
Class_Descriptor cd_S7809C8 = {  "S7809C8", // class name
  0,0,//no base classes
  &(vtc_S7809C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S7809C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7809C8),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  S7809C9_nt  {
  void *s7809c9f0;
  virtual  ~S7809C9_nt(); // _ZN10S7809C9_ntD1Ev
  virtual void  v17(); // _ZN10S7809C9_nt3v17Ev
  virtual void  v18(); // _ZN10S7809C9_nt3v18Ev
  S7809C9_nt(); // tgen
};
//SIG(-1 S7809C9_nt) C1{ vd v1 v2 Fp}


 S7809C9_nt ::~S7809C9_nt(){ note_dtor("S7809C9_nt", this);}
void  S7809C9_nt ::v17(){vfunc_called(this, "_ZN10S7809C9_nt3v17Ev");}
void  S7809C9_nt ::v18(){vfunc_called(this, "_ZN10S7809C9_nt3v18Ev");}
S7809C9_nt ::S7809C9_nt(){ note_ctor("S7809C9_nt", this);} // tgen

//skip512 S7809C9_nt

#else // __cplusplus

extern void _ZN10S7809C9_ntC1Ev();
extern void _ZN10S7809C9_ntD1Ev();
Name_Map name_map_S7809C9_nt[] = {
  NSPAIR(_ZN10S7809C9_ntC1Ev),
  NSPAIR(_ZN10S7809C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7809C9_nt[];
extern void _ZN10S7809C9_ntD1Ev();
extern void _ZN10S7809C9_ntD0Ev();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
static  VTBL_ENTRY vtc_S7809C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7809C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S7809C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S7809C9_nt[];
VTBL_ENTRY *P__ZTI10S7809C9_nt = _ZTI10S7809C9_nt; 
extern  VTBL_ENTRY _ZTV10S7809C9_nt[];
Class_Descriptor cd_S7809C9_nt = {  "S7809C9_nt", // class name
  0,0,//no base classes
  &(vtc_S7809C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7809C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7809C9_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  S7809C7  : S7809C8 , S7809C9_nt {
  int s7809c7f0:4;
  char s7809c7f1;
  virtual void  v19(); // _ZN7S7809C73v19Ev
  virtual void  v20(); // _ZN7S7809C73v20Ev
  virtual void  v21(); // _ZN7S7809C73v21Ev
  virtual void  v22(); // _ZN7S7809C73v22Ev
  virtual void  v23(); // _ZN7S7809C73v23Ev
  virtual void  v24(); // _ZN7S7809C73v24Ev
  ~S7809C7(); // tgen
  S7809C7(); // tgen
};
//SIG(-1 S7809C7) C1{ BC2{ v7 v8 v9 v10 Fi[10]} BC3{ vd v11 v12 Fp} v1 v2 v3 v4 v5 v6 Fi:4 Fc}


void  S7809C7 ::v19(){vfunc_called(this, "_ZN7S7809C73v19Ev");}
void  S7809C7 ::v20(){vfunc_called(this, "_ZN7S7809C73v20Ev");}
void  S7809C7 ::v21(){vfunc_called(this, "_ZN7S7809C73v21Ev");}
void  S7809C7 ::v22(){vfunc_called(this, "_ZN7S7809C73v22Ev");}
void  S7809C7 ::v23(){vfunc_called(this, "_ZN7S7809C73v23Ev");}
void  S7809C7 ::v24(){vfunc_called(this, "_ZN7S7809C73v24Ev");}
S7809C7 ::~S7809C7(){ note_dtor("S7809C7", this);} // tgen
S7809C7 ::S7809C7(){ note_ctor("S7809C7", this);} // tgen

static void Test_S7809C7()
{
  extern Class_Descriptor cd_S7809C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S7809C7, buf);
    S7809C7 *dp, &lv = *(dp=new (buf) S7809C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S7809C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C7)");
    check_base_class_offset(lv, (S7809C8*), 0, "S7809C7");
    check_base_class_offset(lv, (S7809C9_nt*), ABISELECT(48,44), "S7809C7");
    set_bf_and_test(lv, s7809c7f0, ABISELECT(64,52), 0, 4, 1, "S7809C7");
    set_bf_and_test(lv, s7809c7f0, ABISELECT(64,52), 0, 4, hide_sll(1LL<<3), "S7809C7");
    check_field_offset(lv, s7809c7f1, ABISELECT(65,53), "S7809C7.s7809c7f1");
    test_class_info(&lv, &cd_S7809C7);
    dp->~S7809C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C7(Test_S7809C7, "S7809C7", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S7809C7C1Ev();
extern void _ZN7S7809C7D1Ev();
Name_Map name_map_S7809C7[] = {
  NSPAIR(_ZN7S7809C7C1Ev),
  NSPAIR(_ZN7S7809C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7809C8;
extern VTBL_ENTRY _ZTI7S7809C8[];
extern  VTBL_ENTRY _ZTV7S7809C8[];
extern Class_Descriptor cd_S7809C9_nt;
extern VTBL_ENTRY _ZTI10S7809C9_nt[];
extern  VTBL_ENTRY _ZTV10S7809C9_nt[];
static Base_Class bases_S7809C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7809C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7809C9_nt,    ABISELECT(48,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S7809C7[];
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN7S7809C73v19Ev();
extern void _ZN7S7809C73v20Ev();
extern void _ZN7S7809C73v21Ev();
extern void _ZN7S7809C73v22Ev();
extern void _ZN7S7809C73v23Ev();
extern void _ZN7S7809C73v24Ev();
extern void _ZN7S7809C7D1Ev();
extern void _ZN7S7809C7D0Ev();
extern void ABISELECT(_ZThn48_N7S7809C7D1Ev,_ZThn44_N7S7809C7D1Ev)();
extern void ABISELECT(_ZThn48_N7S7809C7D0Ev,_ZThn44_N7S7809C7D0Ev)();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
static  VTBL_ENTRY vtc_S7809C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C7[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7809C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C7D0Ev,
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI7S7809C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7809C7D1Ev,_ZThn44_N7S7809C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7809C7D0Ev,_ZThn44_N7S7809C7D0Ev),
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI7S7809C7[];
extern  VTBL_ENTRY _ZTV7S7809C7[];
Class_Descriptor cd_S7809C7 = {  "S7809C7", // class name
  bases_S7809C7, 2,
  &(vtc_S7809C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S7809C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7809C7),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7809C5  : virtual S7809C6_nt , virtual S7809C7 {
  virtual void  v25(); // _ZN7S7809C53v25Ev
  virtual void  v26(); // _ZN7S7809C53v26Ev
  virtual void  v27(); // _ZN7S7809C53v27Ev
  ~S7809C5(); // tgen
  S7809C5(); // tgen
};
//SIG(-1 S7809C5) C1{ VBC2{ v4} VBC3{ BC4{ v5 v6 v7 v8 Fi[10]} BC5{ vd v9 v10 Fp} v11 v12 v13 v14 v15 v16 Fi:4 Fc} v1 v2 v3}


void  S7809C5 ::v25(){vfunc_called(this, "_ZN7S7809C53v25Ev");}
void  S7809C5 ::v26(){vfunc_called(this, "_ZN7S7809C53v26Ev");}
void  S7809C5 ::v27(){vfunc_called(this, "_ZN7S7809C53v27Ev");}
S7809C5 ::~S7809C5(){ note_dtor("S7809C5", this);} // tgen
S7809C5 ::S7809C5(){ note_ctor("S7809C5", this);} // tgen

static void Test_S7809C5()
{
  extern Class_Descriptor cd_S7809C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S7809C5, buf);
    S7809C5 *dp, &lv = *(dp=new (buf) S7809C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S7809C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C5)");
    check_base_class_offset(lv, (S7809C6_nt*), 0, "S7809C5");
    check_base_class_offset(lv, (S7809C8*)(S7809C7*), ABISELECT(8,4), "S7809C5");
    check_base_class_offset(lv, (S7809C9_nt*)(S7809C7*), ABISELECT(56,48), "S7809C5");
    check_base_class_offset(lv, (S7809C7*), ABISELECT(8,4), "S7809C5");
    test_class_info(&lv, &cd_S7809C5);
    dp->~S7809C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C5(Test_S7809C5, "S7809C5", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S7809C5C1Ev();
extern void _ZN7S7809C5D1Ev();
Name_Map name_map_S7809C5[] = {
  NSPAIR(_ZN7S7809C5C1Ev),
  NSPAIR(_ZN7S7809C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7809C6_nt;
extern VTBL_ENTRY _ZTI10S7809C6_nt[];
extern  VTBL_ENTRY _ZTV10S7809C6_nt[];
extern Class_Descriptor cd_S7809C8;
extern VTBL_ENTRY _ZTI7S7809C8[];
extern  VTBL_ENTRY _ZTV7S7809C8[];
extern Class_Descriptor cd_S7809C9_nt;
extern VTBL_ENTRY _ZTI10S7809C9_nt[];
extern  VTBL_ENTRY _ZTV10S7809C9_nt[];
extern Class_Descriptor cd_S7809C7;
extern VTBL_ENTRY _ZTI7S7809C7[];
extern  VTBL_ENTRY _ZTV7S7809C7[];
static Base_Class bases_S7809C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7809C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7809C8,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7809C9_nt,    ABISELECT(56,48), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7809C7,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //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 _ZTI7S7809C5[];
extern void _ZN10S7809C6_nt3v12Ev();
extern void _ZN7S7809C53v25Ev();
extern void _ZN7S7809C53v26Ev();
extern void _ZN7S7809C53v27Ev();
extern void _ZN7S7809C5D1Ev();
extern void _ZN7S7809C5D0Ev();
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN7S7809C73v19Ev();
extern void _ZN7S7809C73v20Ev();
extern void _ZN7S7809C73v21Ev();
extern void _ZN7S7809C73v22Ev();
extern void _ZN7S7809C73v23Ev();
extern void _ZN7S7809C73v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7809C5D1Ev,_ZThn4_N7S7809C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7809C5D0Ev,_ZThn4_N7S7809C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S7809C5D1Ev,_ZTvn44_n52_N7S7809C5D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7809C5D0Ev,_ZTvn44_n52_N7S7809C5D0Ev)();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
static  VTBL_ENTRY vtc_S7809C5[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&_ZN10S7809C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7809C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C5D0Ev,
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C5D1Ev,_ZTvn44_n52_N7S7809C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C5D0Ev,_ZTvn44_n52_N7S7809C5D0Ev),
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV7S7809C5[];
static  VTT_ENTRY vtt_S7809C5[] = {
  {&(_ZTV7S7809C5[5]),  5,44},
  {&(_ZTV7S7809C5[5]),  5,44},
  {&(_ZTV7S7809C5[26]),  26,44},
  {&(_ZTV7S7809C5[40]),  40,44},
};
extern VTBL_ENTRY _ZTI7S7809C5[];
extern  VTBL_ENTRY _ZTV7S7809C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C5[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7809C5D0Ev,_ZThn4_N7S7809C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7809C5D1Ev,_ZThn4_N7S7809C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7809C5 = {  "S7809C5", // class name
  bases_S7809C5, 4,
  &(vtc_S7809C5[0]), // expected_vtbl_contents
  &(vtt_S7809C5[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S7809C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7809C5),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7809C5),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7809C2  : virtual S7809C3 , virtual S7809C5 {
  void *s7809c2f0;
  virtual  ~S7809C2(); // _ZN7S7809C2D2Ev
  virtual void  v28(); // _ZN7S7809C23v28Ev
  virtual void  v29(); // _ZN7S7809C23v29Ev
  virtual void  v30(); // _ZN7S7809C23v30Ev
  virtual void  v31(); // _ZN7S7809C23v31Ev
  virtual void  v32(); // _ZN7S7809C23v32Ev
  S7809C2(); // tgen
};
//SIG(-1 S7809C2) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 FL Fc} vd v11} VBC4{ VBC5{ v12} VBC6{ BC7{ v13 v14 v15 v16 Fi[10]} BC8{ vd v17 v18 Fp} v19 v20 v21 v22 v23 v24 Fi:4 Fc} v25 v26 v27} vd v1 v2 v3 v4 v5 Fp}


 S7809C2 ::~S7809C2(){ note_dtor("S7809C2", this);}
void  S7809C2 ::v28(){vfunc_called(this, "_ZN7S7809C23v28Ev");}
void  S7809C2 ::v29(){vfunc_called(this, "_ZN7S7809C23v29Ev");}
void  S7809C2 ::v30(){vfunc_called(this, "_ZN7S7809C23v30Ev");}
void  S7809C2 ::v31(){vfunc_called(this, "_ZN7S7809C23v31Ev");}
void  S7809C2 ::v32(){vfunc_called(this, "_ZN7S7809C23v32Ev");}
S7809C2 ::S7809C2(){ note_ctor("S7809C2", this);} // tgen

static void Test_S7809C2()
{
  extern Class_Descriptor cd_S7809C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S7809C2, buf);
    S7809C2 *dp, &lv = *(dp=new (buf) S7809C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S7809C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C2)");
    check_base_class_offset(lv, (S7809C4*)(S7809C3*), ABISELECT(16,8), "S7809C2");
    check_base_class_offset(lv, (S7809C3*), 0, "S7809C2");
    check_base_class_offset(lv, (S7809C6_nt*)(S7809C5*), ABISELECT(40,24), "S7809C2");
    check_base_class_offset(lv, (S7809C8*)(S7809C7*), ABISELECT(48,28), "S7809C2");
    check_base_class_offset(lv, (S7809C9_nt*)(S7809C7*), ABISELECT(96,72), "S7809C2");
    check_base_class_offset(lv, (S7809C7*)(S7809C5*), ABISELECT(48,28), "S7809C2");
    check_base_class_offset(lv, (S7809C5*), ABISELECT(40,24), "S7809C2");
    check_field_offset(lv, s7809c2f0, ABISELECT(8,4), "S7809C2.s7809c2f0");
    test_class_info(&lv, &cd_S7809C2);
    dp->~S7809C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C2(Test_S7809C2, "S7809C2", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S7809C2C1Ev();
extern void _ZN7S7809C2D2Ev();
Name_Map name_map_S7809C2[] = {
  NSPAIR(_ZN7S7809C2C1Ev),
  NSPAIR(_ZN7S7809C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7809C4;
extern VTBL_ENTRY _ZTI7S7809C4[];
extern  VTBL_ENTRY _ZTV7S7809C4[];
extern Class_Descriptor cd_S7809C3;
extern VTBL_ENTRY _ZTI7S7809C3[];
extern  VTBL_ENTRY _ZTV7S7809C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C3[];
extern Class_Descriptor cd_S7809C6_nt;
extern VTBL_ENTRY _ZTI10S7809C6_nt[];
extern  VTBL_ENTRY _ZTV10S7809C6_nt[];
extern Class_Descriptor cd_S7809C8;
extern VTBL_ENTRY _ZTI7S7809C8[];
extern  VTBL_ENTRY _ZTV7S7809C8[];
extern Class_Descriptor cd_S7809C9_nt;
extern VTBL_ENTRY _ZTI10S7809C9_nt[];
extern  VTBL_ENTRY _ZTV10S7809C9_nt[];
extern Class_Descriptor cd_S7809C7;
extern VTBL_ENTRY _ZTI7S7809C7[];
extern  VTBL_ENTRY _ZTV7S7809C7[];
extern Class_Descriptor cd_S7809C5;
extern VTBL_ENTRY _ZTI7S7809C5[];
extern  VTBL_ENTRY _ZTV7S7809C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C5[];
static Base_Class bases_S7809C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7809C4,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //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_S7809C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7809C6_nt,    ABISELECT(40,24), //bcp->offset
    -1, //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
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7809C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7809C9_nt,    ABISELECT(96,72), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7809C7,    ABISELECT(48,28), //bcp->offset
    44, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7809C5,    ABISELECT(40,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7809C2[];
extern void _ZN7S7809C2D1Ev();
extern void _ZN7S7809C2D0Ev();
extern void _ZN7S7809C33v11Ev();
extern void _ZN7S7809C23v28Ev();
extern void _ZN7S7809C23v29Ev();
extern void _ZN7S7809C23v30Ev();
extern void _ZN7S7809C23v31Ev();
extern void _ZN7S7809C23v32Ev();
extern void _ZN7S7809C42v6Ev();
extern void _ZN7S7809C42v7Ev();
extern void _ZN7S7809C42v8Ev();
extern void _ZN7S7809C42v9Ev();
extern void _ZN7S7809C43v10Ev();
extern void _ZN10S7809C6_nt3v12Ev();
extern void _ZN7S7809C53v25Ev();
extern void _ZN7S7809C53v26Ev();
extern void _ZN7S7809C53v27Ev();
extern void ABISELECT(_ZTv0_n72_N7S7809C2D1Ev,_ZTv0_n36_N7S7809C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7809C2D1Ev,_ZThn24_N7S7809C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7809C2D0Ev,_ZTv0_n36_N7S7809C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7809C2D0Ev,_ZThn24_N7S7809C2D0Ev)() __attribute__((weak));
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN7S7809C73v19Ev();
extern void _ZN7S7809C73v20Ev();
extern void _ZN7S7809C73v21Ev();
extern void _ZN7S7809C73v22Ev();
extern void _ZN7S7809C73v23Ev();
extern void _ZN7S7809C73v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7809C2D1Ev,_ZTv0_n52_N7S7809C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7809C2D1Ev,_ZThn28_N7S7809C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7809C2D0Ev,_ZTv0_n52_N7S7809C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7809C2D0Ev,_ZThn28_N7S7809C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S7809C2D1Ev,_ZTvn44_n52_N7S7809C2D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7809C2D0Ev,_ZTvn44_n52_N7S7809C2D0Ev)();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
static  VTBL_ENTRY vtc_S7809C2[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN7S7809C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7809C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v32Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN7S7809C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7809C43v10Ev,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN10S7809C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7809C2D1Ev,_ZTv0_n36_N7S7809C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7809C2D0Ev,_ZTv0_n36_N7S7809C2D0Ev),
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-48,-28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C2D1Ev,_ZTv0_n52_N7S7809C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C2D0Ev,_ZTv0_n52_N7S7809C2D0Ev),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C2D1Ev,_ZTvn44_n52_N7S7809C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C2D0Ev,_ZTvn44_n52_N7S7809C2D0Ev),
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV7S7809C2[];
extern void _ZN7S7809C3D1Ev();
extern void _ZN7S7809C3D0Ev();
extern void _ZN7S7809C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C3__7S7809C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C3[0]),
  (VTBL_ENTRY)&_ZN7S7809C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7809C33v11Ev,
};
extern void _ZN7S7809C42v6Ev();
extern void _ZN7S7809C42v7Ev();
extern void _ZN7S7809C42v8Ev();
extern void _ZN7S7809C42v9Ev();
extern void _ZN7S7809C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C4__7S7809C3__7S7809C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7809C3[0]),
  (VTBL_ENTRY)&_ZN7S7809C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7809C43v10Ev,
};
extern void _ZN10S7809C6_nt3v12Ev();
extern void _ZN7S7809C53v25Ev();
extern void _ZN7S7809C53v26Ev();
extern void _ZN7S7809C53v27Ev();
extern void _ZN7S7809C5D1Ev();
extern void _ZN7S7809C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C5__7S7809C2[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&_ZN10S7809C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7809C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C5D0Ev,
};
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN7S7809C73v19Ev();
extern void _ZN7S7809C73v20Ev();
extern void _ZN7S7809C73v21Ev();
extern void _ZN7S7809C73v22Ev();
extern void _ZN7S7809C73v23Ev();
extern void _ZN7S7809C73v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7809C5D1Ev,_ZThn4_N7S7809C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7809C5D0Ev,_ZThn4_N7S7809C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7809C7__7S7809C5__7S7809C2[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N7S7809C5D1Ev,_ZTvn44_n52_N7S7809C5D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7809C5D0Ev,_ZTvn44_n52_N7S7809C5D0Ev)();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV10S7809C9_nt7S7809C7__7S7809C5__7S7809C2[] = {
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C5D1Ev,_ZTvn44_n52_N7S7809C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C5D0Ev,_ZTvn44_n52_N7S7809C5D0Ev),
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
};
static  VTT_ENTRY vtt_S7809C2[] = {
  {&(_ZTV7S7809C2[9]),  9,77},
  {&(_ZTV7S7809C2[9]),  9,77},
  {&(_ZTV7S7809C2[24]),  24,77},
  {&(_ZTV7S7809C2[38]),  38,77},
  {&(_ZTV7S7809C2[38]),  38,77},
  {&(_ZTV7S7809C2[59]),  59,77},
  {&(_ZTV7S7809C2[73]),  73,77},
  {&(_tg__ZTV7S7809C3__7S7809C2[3]),  3,6},
  {&(_tg__ZTV7S7809C4__7S7809C3__7S7809C2[7]),  7,12},
  {&(_tg__ZTV7S7809C5__7S7809C2[5]),  5,11},
  {&(_tg__ZTV7S7809C5__7S7809C2[5]),  5,11},
  {&(_tg__ZTV7S7809C7__7S7809C5__7S7809C2[15]),  15,27},
  {&(_tg__ZTV10S7809C9_nt7S7809C7__7S7809C5__7S7809C2[2]),  2,6},
};
extern VTBL_ENTRY _ZTI7S7809C2[];
extern  VTBL_ENTRY _ZTV7S7809C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C2[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7809C5D0Ev,_ZThn4_N7S7809C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7809C5D1Ev,_ZThn4_N7S7809C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C2D0Ev,_ZTv0_n52_N7S7809C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7809C2D0Ev,_ZThn28_N7S7809C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C2D1Ev,_ZTv0_n52_N7S7809C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7809C2D1Ev,_ZThn28_N7S7809C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7809C2D0Ev,_ZTv0_n36_N7S7809C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7809C2D0Ev,_ZThn24_N7S7809C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7809C2D1Ev,_ZTv0_n36_N7S7809C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7809C2D1Ev,_ZThn24_N7S7809C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7809C2 = {  "S7809C2", // class name
  bases_S7809C2, 7,
  &(vtc_S7809C2[0]), // expected_vtbl_contents
  &(vtt_S7809C2[0]), // expected_vtt_contents
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S7809C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7809C2),77, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7809C2),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7809C10  : S7809C8 {
  void *s7809c10f0;
  virtual void  v33(); // _ZN8S7809C103v33Ev
  virtual void  v34(); // _ZN8S7809C103v34Ev
  ~S7809C10(); // tgen
  S7809C10(); // tgen
};
//SIG(-1 S7809C10) C1{ BC2{ v3 v4 v5 v6 Fi[10]} v1 v2 Fp}


void  S7809C10 ::v33(){vfunc_called(this, "_ZN8S7809C103v33Ev");}
void  S7809C10 ::v34(){vfunc_called(this, "_ZN8S7809C103v34Ev");}
S7809C10 ::~S7809C10(){ note_dtor("S7809C10", this);} // tgen
S7809C10 ::S7809C10(){ note_ctor("S7809C10", this);} // tgen

static void Test_S7809C10()
{
  extern Class_Descriptor cd_S7809C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S7809C10, buf);
    S7809C10 *dp, &lv = *(dp=new (buf) S7809C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S7809C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C10)");
    check_base_class_offset(lv, (S7809C8*), 0, "S7809C10");
    check_field_offset(lv, s7809c10f0, ABISELECT(48,44), "S7809C10.s7809c10f0");
    test_class_info(&lv, &cd_S7809C10);
    dp->~S7809C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C10(Test_S7809C10, "S7809C10", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN8S7809C10C1Ev();
extern void _ZN8S7809C10D1Ev();
Name_Map name_map_S7809C10[] = {
  NSPAIR(_ZN8S7809C10C1Ev),
  NSPAIR(_ZN8S7809C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7809C8;
extern VTBL_ENTRY _ZTI7S7809C8[];
extern  VTBL_ENTRY _ZTV7S7809C8[];
static Base_Class bases_S7809C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7809C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7809C10[];
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN8S7809C103v33Ev();
extern void _ZN8S7809C103v34Ev();
static  VTBL_ENTRY vtc_S7809C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7809C10[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN8S7809C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7809C103v34Ev,
};
extern VTBL_ENTRY _ZTI8S7809C10[];
extern  VTBL_ENTRY _ZTV8S7809C10[];
Class_Descriptor cd_S7809C10 = {  "S7809C10", // class name
  bases_S7809C10, 1,
  &(vtc_S7809C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI8S7809C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7809C10),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  S7809C1  : S7809C2 , virtual S7809C10 {
  virtual  ~S7809C1(); // _ZN7S7809C1D2Ev
  virtual void  v1(); // _ZN7S7809C12v1Ev
  virtual void  v2(); // _ZN7S7809C12v2Ev
  virtual void  v3(); // _ZN7S7809C12v3Ev
  virtual void  v4(); // _ZN7S7809C12v4Ev
  virtual void  v5(); // _ZN7S7809C12v5Ev
  S7809C1(); // tgen
};
//SIG(1 S7809C1) C1{ BC2{ VBC3{ VBC4{ v6 v7 v8 v9 v10 FL Fc} vd v11} VBC5{ VBC6{ v12} VBC7{ BC8{ v13 v14 v15 v16 Fi[10]} BC9{ vd v17 v18 Fp} v19 v20 v21 v22 v23 v24 Fi:4 Fc} v25 v26 v27} vd v28 v29 v30 v31 v32 Fp} VBC10{ BC8 v33 v34 Fp} vd v1 v2 v3 v4 v5}


 S7809C1 ::~S7809C1(){ note_dtor("S7809C1", this);}
void  S7809C1 ::v1(){vfunc_called(this, "_ZN7S7809C12v1Ev");}
void  S7809C1 ::v2(){vfunc_called(this, "_ZN7S7809C12v2Ev");}
void  S7809C1 ::v3(){vfunc_called(this, "_ZN7S7809C12v3Ev");}
void  S7809C1 ::v4(){vfunc_called(this, "_ZN7S7809C12v4Ev");}
void  S7809C1 ::v5(){vfunc_called(this, "_ZN7S7809C12v5Ev");}
S7809C1 ::S7809C1(){ note_ctor("S7809C1", this);} // tgen

static void Test_S7809C1()
{
  extern Class_Descriptor cd_S7809C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,34)];
    init_test(&cd_S7809C1, buf);
    S7809C1 *dp, &lv = *(dp=new (buf) S7809C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,132), "sizeof(S7809C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7809C1)");
    check_base_class_offset(lv, (S7809C4*)(S7809C3*), ABISELECT(16,8), "S7809C1");
    check_base_class_offset(lv, (S7809C3*)(S7809C2*), 0, "S7809C1");
    check_base_class_offset(lv, (S7809C6_nt*)(S7809C5*), ABISELECT(40,24), "S7809C1");
    check_base_class_offset(lv, (S7809C8*)(S7809C7*), ABISELECT(48,28), "S7809C1");
    check_base_class_offset(lv, (S7809C9_nt*)(S7809C7*), ABISELECT(96,72), "S7809C1");
    check_base_class_offset(lv, (S7809C7*)(S7809C5*), ABISELECT(48,28), "S7809C1");
    check_base_class_offset(lv, (S7809C5*)(S7809C2*), ABISELECT(40,24), "S7809C1");
    check_base_class_offset(lv, (S7809C2*), 0, "S7809C1");
    check_base_class_offset(lv, (S7809C8*)(S7809C10*), ABISELECT(120,84), "S7809C1");
    check_base_class_offset(lv, (S7809C10*), ABISELECT(120,84), "S7809C1");
    test_class_info(&lv, &cd_S7809C1);
    dp->~S7809C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7809C1(Test_S7809C1, "S7809C1", ABISELECT(176,132));

#else // __cplusplus

extern void _ZN7S7809C1C1Ev();
extern void _ZN7S7809C1D2Ev();
Name_Map name_map_S7809C1[] = {
  NSPAIR(_ZN7S7809C1C1Ev),
  NSPAIR(_ZN7S7809C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7809C4;
extern VTBL_ENTRY _ZTI7S7809C4[];
extern  VTBL_ENTRY _ZTV7S7809C4[];
extern Class_Descriptor cd_S7809C3;
extern VTBL_ENTRY _ZTI7S7809C3[];
extern  VTBL_ENTRY _ZTV7S7809C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C3[];
extern Class_Descriptor cd_S7809C6_nt;
extern VTBL_ENTRY _ZTI10S7809C6_nt[];
extern  VTBL_ENTRY _ZTV10S7809C6_nt[];
extern Class_Descriptor cd_S7809C8;
extern VTBL_ENTRY _ZTI7S7809C8[];
extern  VTBL_ENTRY _ZTV7S7809C8[];
extern Class_Descriptor cd_S7809C9_nt;
extern VTBL_ENTRY _ZTI10S7809C9_nt[];
extern  VTBL_ENTRY _ZTV10S7809C9_nt[];
extern Class_Descriptor cd_S7809C7;
extern VTBL_ENTRY _ZTI7S7809C7[];
extern  VTBL_ENTRY _ZTV7S7809C7[];
extern Class_Descriptor cd_S7809C5;
extern VTBL_ENTRY _ZTI7S7809C5[];
extern  VTBL_ENTRY _ZTV7S7809C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C5[];
extern Class_Descriptor cd_S7809C2;
extern VTBL_ENTRY _ZTI7S7809C2[];
extern  VTBL_ENTRY _ZTV7S7809C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C2[];
extern Class_Descriptor cd_S7809C8;
extern VTBL_ENTRY _ZTI7S7809C8[];
extern  VTBL_ENTRY _ZTV7S7809C8[];
extern Class_Descriptor cd_S7809C10;
extern VTBL_ENTRY _ZTI8S7809C10[];
extern  VTBL_ENTRY _ZTV8S7809C10[];
static Base_Class bases_S7809C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7809C4,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7809C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7809C6_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7809C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7809C9_nt,    ABISELECT(96,72), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7809C7,    ABISELECT(48,28), //bcp->offset
    50, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7809C5,    ABISELECT(40,24), //bcp->offset
    35, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7809C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7809C8,    ABISELECT(120,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7809C10,    ABISELECT(120,84), //bcp->offset
    83, //bcp->virtual_function_table_offset
    8, //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 _ZTI7S7809C1[];
extern void _ZN7S7809C1D1Ev();
extern void _ZN7S7809C1D0Ev();
extern void _ZN7S7809C33v11Ev();
extern void _ZN7S7809C23v28Ev();
extern void _ZN7S7809C23v29Ev();
extern void _ZN7S7809C23v30Ev();
extern void _ZN7S7809C23v31Ev();
extern void _ZN7S7809C23v32Ev();
extern void _ZN7S7809C12v1Ev();
extern void _ZN7S7809C12v2Ev();
extern void _ZN7S7809C12v3Ev();
extern void _ZN7S7809C12v4Ev();
extern void _ZN7S7809C12v5Ev();
extern void _ZN7S7809C42v6Ev();
extern void _ZN7S7809C42v7Ev();
extern void _ZN7S7809C42v8Ev();
extern void _ZN7S7809C42v9Ev();
extern void _ZN7S7809C43v10Ev();
extern void _ZN10S7809C6_nt3v12Ev();
extern void _ZN7S7809C53v25Ev();
extern void _ZN7S7809C53v26Ev();
extern void _ZN7S7809C53v27Ev();
extern void ABISELECT(_ZTv0_n72_N7S7809C1D1Ev,_ZTv0_n36_N7S7809C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S7809C1D1Ev,_ZThn24_N7S7809C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7809C1D0Ev,_ZTv0_n36_N7S7809C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S7809C1D0Ev,_ZThn24_N7S7809C1D0Ev)() __attribute__((weak));
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN7S7809C73v19Ev();
extern void _ZN7S7809C73v20Ev();
extern void _ZN7S7809C73v21Ev();
extern void _ZN7S7809C73v22Ev();
extern void _ZN7S7809C73v23Ev();
extern void _ZN7S7809C73v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7809C1D1Ev,_ZTv0_n52_N7S7809C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7809C1D1Ev,_ZThn28_N7S7809C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7809C1D0Ev,_ZTv0_n52_N7S7809C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7809C1D0Ev,_ZThn28_N7S7809C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S7809C1D1Ev,_ZTvn44_n52_N7S7809C1D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7809C1D0Ev,_ZTvn44_n52_N7S7809C1D0Ev)();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN8S7809C103v33Ev();
extern void _ZN8S7809C103v34Ev();
static  VTBL_ENTRY vtc_S7809C1[] = {
  ABISELECT(120,84),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C1[0]),
  (VTBL_ENTRY)&_ZN7S7809C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7809C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7809C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7809C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7809C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7809C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7809C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7809C1[0]),
  (VTBL_ENTRY)&_ZN7S7809C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7809C43v10Ev,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7809C1[0]),
  (VTBL_ENTRY)&_ZN10S7809C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7809C1D1Ev,_ZTv0_n36_N7S7809C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7809C1D0Ev,_ZTv0_n36_N7S7809C1D0Ev),
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-48,-28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7809C1[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C1D1Ev,_ZTv0_n52_N7S7809C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C1D0Ev,_ZTv0_n52_N7S7809C1D0Ev),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7809C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C1D1Ev,_ZTvn44_n52_N7S7809C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C1D0Ev,_ZTvn44_n52_N7S7809C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-84),
  (VTBL_ENTRY)&(_ZTI7S7809C1[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN8S7809C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7809C103v34Ev,
};
extern VTBL_ENTRY _ZTV7S7809C1[];
extern void _ZN7S7809C2D1Ev();
extern void _ZN7S7809C2D0Ev();
extern void _ZN7S7809C33v11Ev();
extern void _ZN7S7809C23v28Ev();
extern void _ZN7S7809C23v29Ev();
extern void _ZN7S7809C23v30Ev();
extern void _ZN7S7809C23v31Ev();
extern void _ZN7S7809C23v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C2__7S7809C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN7S7809C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7809C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7809C23v32Ev,
};
extern void _ZN7S7809C42v6Ev();
extern void _ZN7S7809C42v7Ev();
extern void _ZN7S7809C42v8Ev();
extern void _ZN7S7809C42v9Ev();
extern void _ZN7S7809C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C4__7S7809C2__7S7809C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN7S7809C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7809C43v10Ev,
};
extern void _ZN10S7809C6_nt3v12Ev();
extern void _ZN7S7809C53v25Ev();
extern void _ZN7S7809C53v26Ev();
extern void _ZN7S7809C53v27Ev();
extern void ABISELECT(_ZTv0_n72_N7S7809C2D1Ev,_ZTv0_n36_N7S7809C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7809C2D1Ev,_ZThn24_N7S7809C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7809C2D0Ev,_ZTv0_n36_N7S7809C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7809C2D0Ev,_ZThn24_N7S7809C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7809C5__7S7809C2__7S7809C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN10S7809C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7809C2D1Ev,_ZTv0_n36_N7S7809C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7809C2D0Ev,_ZTv0_n36_N7S7809C2D0Ev),
};
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN7S7809C73v19Ev();
extern void _ZN7S7809C73v20Ev();
extern void _ZN7S7809C73v21Ev();
extern void _ZN7S7809C73v22Ev();
extern void _ZN7S7809C73v23Ev();
extern void _ZN7S7809C73v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7809C2D1Ev,_ZTv0_n52_N7S7809C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7809C2D1Ev,_ZThn28_N7S7809C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7809C2D0Ev,_ZTv0_n52_N7S7809C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7809C2D0Ev,_ZThn28_N7S7809C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7809C7__7S7809C2__7S7809C1[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-48,-28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C2D1Ev,_ZTv0_n52_N7S7809C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C2D0Ev,_ZTv0_n52_N7S7809C2D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N7S7809C2D1Ev,_ZTvn44_n52_N7S7809C2D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7809C2D0Ev,_ZTvn44_n52_N7S7809C2D0Ev)();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV10S7809C9_nt7S7809C7__7S7809C2__7S7809C1[] = {
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7809C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C2D1Ev,_ZTvn44_n52_N7S7809C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C2D0Ev,_ZTvn44_n52_N7S7809C2D0Ev),
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
};
extern void _ZN7S7809C3D1Ev();
extern void _ZN7S7809C3D0Ev();
extern void _ZN7S7809C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C3__7S7809C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C3[0]),
  (VTBL_ENTRY)&_ZN7S7809C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7809C33v11Ev,
};
extern void _ZN7S7809C42v6Ev();
extern void _ZN7S7809C42v7Ev();
extern void _ZN7S7809C42v8Ev();
extern void _ZN7S7809C42v9Ev();
extern void _ZN7S7809C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C4__7S7809C3__7S7809C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7809C3[0]),
  (VTBL_ENTRY)&_ZN7S7809C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7809C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7809C43v10Ev,
};
extern void _ZN10S7809C6_nt3v12Ev();
extern void _ZN7S7809C53v25Ev();
extern void _ZN7S7809C53v26Ev();
extern void _ZN7S7809C53v27Ev();
extern void _ZN7S7809C5D1Ev();
extern void _ZN7S7809C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7809C5__7S7809C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&_ZN10S7809C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7809C53v27Ev,
  (VTBL_ENTRY)&_ZN7S7809C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7809C5D0Ev,
};
extern void _ZN7S7809C83v13Ev();
extern void _ZN7S7809C83v14Ev();
extern void _ZN7S7809C83v15Ev();
extern void _ZN7S7809C83v16Ev();
extern void _ZN7S7809C73v19Ev();
extern void _ZN7S7809C73v20Ev();
extern void _ZN7S7809C73v21Ev();
extern void _ZN7S7809C73v22Ev();
extern void _ZN7S7809C73v23Ev();
extern void _ZN7S7809C73v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7809C5D1Ev,_ZThn4_N7S7809C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7809C5D0Ev,_ZThn4_N7S7809C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7809C7__7S7809C5__7S7809C1[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&_ZN7S7809C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7809C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7809C73v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N7S7809C5D1Ev,_ZTvn44_n52_N7S7809C5D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7809C5D0Ev,_ZTvn44_n52_N7S7809C5D0Ev)();
extern void _ZN10S7809C9_nt3v17Ev();
extern void _ZN10S7809C9_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV10S7809C9_nt7S7809C7__7S7809C5__7S7809C1[] = {
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S7809C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C5D1Ev,_ZTvn44_n52_N7S7809C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7809C5D0Ev,_ZTvn44_n52_N7S7809C5D0Ev),
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7809C9_nt3v18Ev,
};
static  VTT_ENTRY vtt_S7809C1[] = {
  {&(_ZTV7S7809C1[10]),  10,97},
  {&(_tg__ZTV7S7809C2__7S7809C1[9]),  9,17},
  {&(_tg__ZTV7S7809C2__7S7809C1[9]),  9,17},
  {&(_tg__ZTV7S7809C4__7S7809C2__7S7809C1[7]),  7,12},
  {&(_tg__ZTV7S7809C5__7S7809C2__7S7809C1[9]),  9,15},
  {&(_tg__ZTV7S7809C5__7S7809C2__7S7809C1[9]),  9,15},
  {&(_tg__ZTV7S7809C7__7S7809C2__7S7809C1[15]),  15,27},
  {&(_tg__ZTV10S7809C9_nt7S7809C7__7S7809C2__7S7809C1[2]),  2,6},
  {&(_ZTV7S7809C1[10]),  10,97},
  {&(_ZTV7S7809C1[30]),  30,97},
  {&(_ZTV7S7809C1[44]),  44,97},
  {&(_ZTV7S7809C1[44]),  44,97},
  {&(_ZTV7S7809C1[65]),  65,97},
  {&(_ZTV7S7809C1[79]),  79,97},
  {&(_ZTV7S7809C1[91]),  91,97},
  {&(_tg__ZTV7S7809C3__7S7809C1[3]),  3,6},
  {&(_tg__ZTV7S7809C4__7S7809C3__7S7809C1[7]),  7,12},
  {&(_tg__ZTV7S7809C5__7S7809C1[5]),  5,11},
  {&(_tg__ZTV7S7809C5__7S7809C1[5]),  5,11},
  {&(_tg__ZTV7S7809C7__7S7809C5__7S7809C1[15]),  15,27},
  {&(_tg__ZTV10S7809C9_nt7S7809C7__7S7809C5__7S7809C1[2]),  2,6},
};
extern VTBL_ENTRY _ZTI7S7809C1[];
extern  VTBL_ENTRY _ZTV7S7809C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7809C1[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C5D0Ev,_ZTv0_n52_N7S7809C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7809C5D0Ev,_ZThn4_N7S7809C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C5D1Ev,_ZTv0_n52_N7S7809C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7809C5D1Ev,_ZThn4_N7S7809C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C2D0Ev,_ZTv0_n52_N7S7809C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7809C2D0Ev,_ZThn28_N7S7809C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C2D1Ev,_ZTv0_n52_N7S7809C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7809C2D1Ev,_ZThn28_N7S7809C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7809C2D0Ev,_ZTv0_n36_N7S7809C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7809C2D0Ev,_ZThn24_N7S7809C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7809C2D1Ev,_ZTv0_n36_N7S7809C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7809C2D1Ev,_ZThn24_N7S7809C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C1D0Ev,_ZTv0_n52_N7S7809C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7809C1D0Ev,_ZThn28_N7S7809C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7809C1D1Ev,_ZTv0_n52_N7S7809C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7809C1D1Ev,_ZThn28_N7S7809C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7809C1D0Ev,_ZTv0_n36_N7S7809C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7809C1D0Ev,_ZThn24_N7S7809C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7809C1D1Ev,_ZTv0_n36_N7S7809C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7809C1D1Ev,_ZThn24_N7S7809C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7809C1 = {  "S7809C1", // class name
  bases_S7809C1, 10,
  &(vtc_S7809C1[0]), // expected_vtbl_contents
  &(vtt_S7809C1[0]), // expected_vtt_contents
  ABISELECT(176,132), // object size
  NSPAIRA(_ZTI7S7809C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7809C1),97, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7809C1),21, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C4_nt  : virtual S22028C16 {
  virtual  ~S20578C4_nt(); // _ZN11S20578C4_ntD2Ev
  S20578C4_nt(); // tgen
};
//SIG(-1 S20578C4_nt) C1{ VBC2{ m} vd}


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

//skip512 S20578C4_nt

#else // __cplusplus

extern void _ZN11S20578C4_ntC1Ev();
extern void _ZN11S20578C4_ntD2Ev();
Name_Map name_map_S20578C4_nt[] = {
  NSPAIR(_ZN11S20578C4_ntC1Ev),
  NSPAIR(_ZN11S20578C4_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S20578C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI11S20578C4_nt[];
extern void _ZN11S20578C4_ntD1Ev();
extern void _ZN11S20578C4_ntD0Ev();
static  VTBL_ENTRY vtc_S20578C4_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTV11S20578C4_nt[];
static  VTT_ENTRY vtt_S20578C4_nt[] = {
  {&(_ZTV11S20578C4_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI11S20578C4_nt[];
VTBL_ENTRY *P__ZTI11S20578C4_nt = _ZTI11S20578C4_nt; 
extern  VTBL_ENTRY _ZTV11S20578C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C4_nt[];
Class_Descriptor cd_S20578C4_nt = {  "S20578C4_nt", // class name
  bases_S20578C4_nt, 1,
  &(vtc_S20578C4_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C4_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20578C4_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S20578C4_nt),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20578C4_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C7_nt  : virtual S22028C16 {
  ~S20578C7_nt(); // tgen
  S20578C7_nt(); // tgen
};
//SIG(-1 S20578C7_nt) C1{ VBC2{ m}}


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

//skip512 S20578C7_nt

#else // __cplusplus

extern void _ZN11S20578C7_ntC1Ev();
extern void _ZN11S20578C7_ntD1Ev();
Name_Map name_map_S20578C7_nt[] = {
  NSPAIR(_ZN11S20578C7_ntC1Ev),
  NSPAIR(_ZN11S20578C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S20578C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI11S20578C7_nt[];
static  VTBL_ENTRY vtc_S20578C7_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
extern VTBL_ENTRY _ZTV11S20578C7_nt[];
static  VTT_ENTRY vtt_S20578C7_nt[] = {
  {&(_ZTV11S20578C7_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
VTBL_ENTRY *P__ZTI11S20578C7_nt = _ZTI11S20578C7_nt; 
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
Class_Descriptor cd_S20578C7_nt = {  "S20578C7_nt", // class name
  bases_S20578C7_nt, 1,
  &(vtc_S20578C7_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C7_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20578C7_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S20578C7_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20578C7_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C6_nt  : S20578C7_nt {
  __tsi64 s20578c6f0;
  virtual  ~S20578C6_nt(); // _ZN11S20578C6_ntD2Ev
  S20578C6_nt(); // tgen
};
//SIG(-1 S20578C6_nt) C1{ BC2{ VBC3{ m}} vd FL}


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

//skip512 S20578C6_nt

#else // __cplusplus

extern void _ZN11S20578C6_ntC1Ev();
extern void _ZN11S20578C6_ntD2Ev();
Name_Map name_map_S20578C6_nt[] = {
  NSPAIR(_ZN11S20578C6_ntC1Ev),
  NSPAIR(_ZN11S20578C6_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
static Base_Class bases_S20578C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20578C7_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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S20578C6_nt[];
extern void _ZN11S20578C6_ntD1Ev();
extern void _ZN11S20578C6_ntD0Ev();
static  VTBL_ENTRY vtc_S20578C6_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C6_ntD0Ev,
};
extern VTBL_ENTRY _ZTV11S20578C6_nt[];
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__11S20578C6_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
static  VTT_ENTRY vtt_S20578C6_nt[] = {
  {&(_ZTV11S20578C6_nt[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt__11S20578C6_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20578C6_nt[];
VTBL_ENTRY *P__ZTI11S20578C6_nt = _ZTI11S20578C6_nt; 
extern  VTBL_ENTRY _ZTV11S20578C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C6_nt[];
Class_Descriptor cd_S20578C6_nt = {  "S20578C6_nt", // class name
  bases_S20578C6_nt, 2,
  &(vtc_S20578C6_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C6_nt[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S20578C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S20578C6_nt),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20578C6_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  S20578C8  : virtual S22028C16 {
  virtual  ~S20578C8(); // _ZN8S20578C8D2Ev
  S20578C8(); // tgen
};
//SIG(-1 S20578C8) C1{ VBC2{ m} vd}


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

static void Test_S20578C8()
{
  extern Class_Descriptor cd_S20578C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20578C8, buf);
    S20578C8 *dp, &lv = *(dp=new (buf) S20578C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20578C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20578C8)");
    check_base_class_offset(lv, (S22028C16*), 0, "S20578C8");
    test_class_info(&lv, &cd_S20578C8);
    dp->~S20578C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20578C8(Test_S20578C8, "S20578C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20578C8C1Ev();
extern void _ZN8S20578C8D2Ev();
Name_Map name_map_S20578C8[] = {
  NSPAIR(_ZN8S20578C8C1Ev),
  NSPAIR(_ZN8S20578C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S20578C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20578C8[];
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY vtc_S20578C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
extern VTBL_ENTRY _ZTV8S20578C8[];
static  VTT_ENTRY vtt_S20578C8[] = {
  {&(_ZTV8S20578C8[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
Class_Descriptor cd_S20578C8 = {  "S20578C8", // class name
  bases_S20578C8, 1,
  &(vtc_S20578C8[0]), // expected_vtbl_contents
  &(vtt_S20578C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20578C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20578C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20578C8),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  S20578C3_nt  : S20578C4_nt , virtual S20578C6_nt , virtual S20578C8 {
  ~S20578C3_nt(); // tgen
  S20578C3_nt(); // tgen
};
//SIG(-1 S20578C3_nt) C1{ BC2{ VBC3{ m} vd} VBC4{ BC5{ VBC3} vd FL} VBC6{ VBC3 vd}}


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

//skip512 S20578C3_nt

#else // __cplusplus

extern void _ZN11S20578C3_ntC1Ev();
extern void _ZN11S20578C3_ntD1Ev();
Name_Map name_map_S20578C3_nt[] = {
  NSPAIR(_ZN11S20578C3_ntC1Ev),
  NSPAIR(_ZN11S20578C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C4_nt;
extern VTBL_ENTRY _ZTI11S20578C4_nt[];
extern  VTBL_ENTRY _ZTV11S20578C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C4_nt[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C6_nt;
extern VTBL_ENTRY _ZTI11S20578C6_nt[];
extern  VTBL_ENTRY _ZTV11S20578C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C6_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
static Base_Class bases_S20578C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20578C4_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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20578C7_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20578C6_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20578C8,    ABISELECT(24,16), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S20578C3_nt[];
extern void _ZN11S20578C3_ntD1Ev();
extern void _ZN11S20578C3_ntD0Ev();
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S20578C3_ntD1Ev,_ZThn4_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn8_N11S20578C3_ntD0Ev,_ZThn4_N11S20578C3_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn24_N11S20578C3_ntD1Ev,_ZThn16_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn24_N11S20578C3_ntD0Ev,_ZThn16_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20578C3_nt[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C3_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern VTBL_ENTRY _ZTV11S20578C3_nt[];
extern void _ZN11S20578C4_ntD1Ev();
extern void _ZN11S20578C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C4_nt__11S20578C3_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C4_ntD0Ev,
};
extern void _ZN11S20578C6_ntD1Ev();
extern void _ZN11S20578C6_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C3_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C6_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt11S20578C6_nt__11S20578C3_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C8__11S20578C3_nt[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
static  VTT_ENTRY vtt_S20578C3_nt[] = {
  {&(_ZTV11S20578C3_nt[5]),  5,19},
  {&(_tg__ZTV11S20578C4_nt__11S20578C3_nt[3]),  3,5},
  {&(_ZTV11S20578C3_nt[11]),  11,19},
  {&(_ZTV11S20578C3_nt[17]),  17,19},
  {&(_tg__ZTV11S20578C6_nt__11S20578C3_nt[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt11S20578C6_nt__11S20578C3_nt[3]),  3,3},
  {&(_tg__ZTV8S20578C8__11S20578C3_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI11S20578C3_nt[];
VTBL_ENTRY *P__ZTI11S20578C3_nt = _ZTI11S20578C3_nt; 
extern  VTBL_ENTRY _ZTV11S20578C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C3_nt[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20578C3_ntD0Ev,_ZThn16_N11S20578C3_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C3_ntD0Ev,_ZThn4_N11S20578C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20578C3_ntD1Ev,_ZThn16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C3_ntD1Ev,_ZThn4_N11S20578C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20578C3_nt = {  "S20578C3_nt", // class name
  bases_S20578C3_nt, 5,
  &(vtc_S20578C3_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C3_nt[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI11S20578C3_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S20578C3_nt),19, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20578C3_nt),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C11_nt  {
  ::S22028C16 s20578c11f0;
  int s20578c11f1;
  void  mf20578c11(); // _ZN12S20578C11_nt10mf20578c11Ev
  virtual  ~S20578C11_nt(); // _ZN12S20578C11_ntD1Ev
  S20578C11_nt(); // tgen
};
//SIG(-1 S20578C11_nt) C1{ vd m FC2{ m} Fi}


void  S20578C11_nt ::mf20578c11(){}
 S20578C11_nt ::~S20578C11_nt(){ note_dtor("S20578C11_nt", this);}
S20578C11_nt ::S20578C11_nt(){ note_ctor("S20578C11_nt", this);} // tgen

//skip512 S20578C11_nt

#else // __cplusplus

extern void _ZN12S20578C11_ntC1Ev();
extern void _ZN12S20578C11_ntD1Ev();
Name_Map name_map_S20578C11_nt[] = {
  NSPAIR(_ZN12S20578C11_ntC1Ev),
  NSPAIR(_ZN12S20578C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern void _ZN12S20578C11_ntD1Ev();
extern void _ZN12S20578C11_ntD0Ev();
static  VTBL_ENTRY vtc_S20578C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
VTBL_ENTRY *P__ZTI12S20578C11_nt = _ZTI12S20578C11_nt; 
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
Class_Descriptor cd_S20578C11_nt = {  "S20578C11_nt", // class name
  0,0,//no base classes
  &(vtc_S20578C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI12S20578C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV12S20578C11_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  S20578C10_nt  : S20578C11_nt , S22028C16 {
  int s20578c10f0;
  virtual  ~S20578C10_nt(); // _ZN12S20578C10_ntD1Ev
  S20578C10_nt(); // tgen
};
//SIG(-1 S20578C10_nt) C1{ BC2{ vd m FC3{ m} Fi} BC3 vd Fi}


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

//skip512 S20578C10_nt

#else // __cplusplus

extern void _ZN12S20578C10_ntC1Ev();
extern void _ZN12S20578C10_ntD1Ev();
Name_Map name_map_S20578C10_nt[] = {
  NSPAIR(_ZN12S20578C10_ntC1Ev),
  NSPAIR(_ZN12S20578C10_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S20578C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20578C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S20578C10_nt[];
extern void _ZN12S20578C10_ntD1Ev();
extern void _ZN12S20578C10_ntD0Ev();
static  VTBL_ENTRY vtc_S20578C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C10_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C10_ntD0Ev,
};
extern VTBL_ENTRY _ZTI12S20578C10_nt[];
VTBL_ENTRY *P__ZTI12S20578C10_nt = _ZTI12S20578C10_nt; 
extern  VTBL_ENTRY _ZTV12S20578C10_nt[];
Class_Descriptor cd_S20578C10_nt = {  "S20578C10_nt", // class name
  bases_S20578C10_nt, 2,
  &(vtc_S20578C10_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI12S20578C10_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S20578C10_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C9_nt  : virtual S20578C6_nt , virtual S20578C10_nt {
  virtual  ~S20578C9_nt(); // _ZN11S20578C9_ntD2Ev
  S20578C9_nt(); // tgen
};
//SIG(-1 S20578C9_nt) C1{ VBC2{ BC3{ VBC4{ m}} vd FL} VBC5{ BC6{ vd m FC4 Fi} BC4 vd Fi} vd}


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

//skip512 S20578C9_nt

#else // __cplusplus

extern void _ZN11S20578C9_ntC1Ev();
extern void _ZN11S20578C9_ntD2Ev();
Name_Map name_map_S20578C9_nt[] = {
  NSPAIR(_ZN11S20578C9_ntC1Ev),
  NSPAIR(_ZN11S20578C9_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C6_nt;
extern VTBL_ENTRY _ZTI11S20578C6_nt[];
extern  VTBL_ENTRY _ZTV11S20578C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C6_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C10_nt;
extern VTBL_ENTRY _ZTI12S20578C10_nt[];
extern  VTBL_ENTRY _ZTV12S20578C10_nt[];
static Base_Class bases_S20578C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20578C7_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20578C6_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20578C11_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20578C10_nt,    ABISELECT(24,16), //bcp->offset
    13, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S20578C9_nt[];
extern void _ZN11S20578C9_ntD1Ev();
extern void _ZN11S20578C9_ntD0Ev();
extern void ABISELECT(_ZTv0_n32_N11S20578C9_ntD1Ev,_ZTv0_n16_N11S20578C9_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S20578C9_ntD1Ev,_ZThn4_N11S20578C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C9_ntD0Ev,_ZTv0_n16_N11S20578C9_ntD0Ev)();
extern void ABISELECT(_ZThn8_N11S20578C9_ntD0Ev,_ZThn4_N11S20578C9_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev)();
extern void ABISELECT(_ZThn24_N11S20578C9_ntD1Ev,_ZThn16_N11S20578C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev)();
extern void ABISELECT(_ZThn24_N11S20578C9_ntD0Ev,_ZThn16_N11S20578C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20578C9_nt[] = {
  ABISELECT(24,16),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C9_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C9_ntD1Ev,_ZTv0_n16_N11S20578C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C9_ntD0Ev,_ZTv0_n16_N11S20578C9_ntD0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev),
};
extern VTBL_ENTRY _ZTV11S20578C9_nt[];
extern void _ZN11S20578C6_ntD1Ev();
extern void _ZN11S20578C6_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C9_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C6_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt11S20578C6_nt__11S20578C9_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
static  VTT_ENTRY vtt_S20578C9_nt[] = {
  {&(_ZTV11S20578C9_nt[5]),  5,18},
  {&(_ZTV11S20578C9_nt[11]),  11,18},
  {&(_ZTV11S20578C9_nt[16]),  16,18},
  {&(_tg__ZTV11S20578C6_nt__11S20578C9_nt[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt11S20578C6_nt__11S20578C9_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20578C9_nt[];
VTBL_ENTRY *P__ZTI11S20578C9_nt = _ZTI11S20578C9_nt; 
extern  VTBL_ENTRY _ZTV11S20578C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C9_nt[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20578C9_ntD0Ev,_ZThn16_N11S20578C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20578C9_ntD1Ev,_ZThn16_N11S20578C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C9_ntD0Ev,_ZTv0_n16_N11S20578C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C9_ntD0Ev,_ZThn4_N11S20578C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C9_ntD1Ev,_ZTv0_n16_N11S20578C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C9_ntD1Ev,_ZThn4_N11S20578C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20578C9_nt = {  "S20578C9_nt", // class name
  bases_S20578C9_nt, 6,
  &(vtc_S20578C9_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C9_nt[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI11S20578C9_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S20578C9_nt),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20578C9_nt),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C2  : virtual S20578C3_nt , virtual S20578C9_nt {
  long double s20578c2f0;
  ~S20578C2(); // tgen
  S20578C2(); // tgen
};
//SIG(-1 S20578C2) C1{ VBC2{ BC3{ VBC4{ m} vd} VBC5{ BC6{ VBC4} vd FL} VBC7{ VBC4 vd}} VBC8{ VBC5 VBC9{ BC10{ vd m FC4 Fi} BC4 vd Fi} vd} FD}


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

static void Test_S20578C2()
{
  extern Class_Descriptor cd_S20578C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20578C2, buf);
    S20578C2 *dp, &lv = *(dp=new (buf) S20578C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20578C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20578C2)");
    check_base_class_offset(lv, (S22028C16*)(S20578C4_nt*)(S20578C3_nt*), 0, "S20578C2");
    check_base_class_offset(lv, (S22028C16*)(S20578C7_nt*)(S20578C6_nt*), 0, "S20578C2");
    check_base_class_offset(lv, (S22028C16*)(S20578C8*), 0, "S20578C2");
    check_base_class_offset(lv, (S20578C4_nt*)(S20578C3_nt*), 0, "S20578C2");
    check_base_class_offset(lv, (S20578C7_nt*)(S20578C6_nt*), ABISELECT(32,16), "S20578C2");
    check_base_class_offset(lv, (S20578C6_nt*)(S20578C3_nt*), ABISELECT(32,16), "S20578C2");
    check_base_class_offset(lv, (S20578C6_nt*)(S20578C9_nt*), ABISELECT(32,16), "S20578C2");
    check_base_class_offset(lv, (S20578C8*)(S20578C3_nt*), ABISELECT(48,28), "S20578C2");
    check_base_class_offset(lv, (S20578C3_nt*), 0, "S20578C2");
    check_base_class_offset(lv, (S20578C11_nt*)(S20578C10_nt*), ABISELECT(64,36), "S20578C2");
    check_base_class_offset(lv, (S22028C16*)(S20578C10_nt*), ABISELECT(64,36), "S20578C2");
    check_base_class_offset(lv, (S20578C10_nt*)(S20578C9_nt*), ABISELECT(64,36), "S20578C2");
    check_base_class_offset(lv, (S20578C9_nt*), ABISELECT(56,32), "S20578C2");
    check_field_offset(lv, s20578c2f0, ABISELECT(16,4), "S20578C2.s20578c2f0");
    test_class_info(&lv, &cd_S20578C2);
    dp->~S20578C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20578C2(Test_S20578C2, "S20578C2", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20578C2C1Ev();
extern void _ZN8S20578C2D1Ev();
Name_Map name_map_S20578C2[] = {
  NSPAIR(_ZN8S20578C2C1Ev),
  NSPAIR(_ZN8S20578C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C4_nt;
extern VTBL_ENTRY _ZTI11S20578C4_nt[];
extern  VTBL_ENTRY _ZTV11S20578C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C4_nt[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C6_nt;
extern VTBL_ENTRY _ZTI11S20578C6_nt[];
extern  VTBL_ENTRY _ZTV11S20578C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C6_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
extern Class_Descriptor cd_S20578C3_nt;
extern VTBL_ENTRY _ZTI11S20578C3_nt[];
extern  VTBL_ENTRY _ZTV11S20578C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C3_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C10_nt;
extern VTBL_ENTRY _ZTI12S20578C10_nt[];
extern  VTBL_ENTRY _ZTV12S20578C10_nt[];
extern Class_Descriptor cd_S20578C9_nt;
extern VTBL_ENTRY _ZTI11S20578C9_nt[];
extern  VTBL_ENTRY _ZTV11S20578C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C9_nt[];
static Base_Class bases_S20578C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20578C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20578C7_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20578C6_nt,    ABISELECT(32,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20578C8,    ABISELECT(48,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20578C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20578C11_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_S22028C16,    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
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20578C10_nt,    ABISELECT(64,36), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20578C9_nt,    ABISELECT(56,32), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20578C2[];
extern void _ZN8S20578C2D1Ev();
extern void _ZN8S20578C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20578C2D1Ev,_ZThn16_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20578C2D0Ev,_ZThn16_N8S20578C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20578C2D1Ev,_ZThn28_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20578C2D0Ev,_ZThn28_N8S20578C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S20578C2D1Ev,_ZThn32_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S20578C2D0Ev,_ZThn32_N8S20578C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20578C2D1Ev,_ZTv0_n12_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20578C2D1Ev,_ZThn36_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20578C2D0Ev,_ZTv0_n12_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20578C2D0Ev,_ZThn36_N8S20578C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20578C2[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&_ZN8S20578C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C2D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(-24,-16),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C2D1Ev,_ZTv0_n12_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C2D0Ev,_ZTv0_n12_N8S20578C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20578C2[];
extern void _ZN11S20578C3_ntD1Ev();
extern void _ZN11S20578C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C3_nt__8S20578C2[] = {
  ABISELECT(48,28),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C3_ntD0Ev,
};
extern void _ZN11S20578C4_ntD1Ev();
extern void _ZN11S20578C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C4_nt11S20578C3_nt__8S20578C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C4_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20578C3_ntD1Ev,_ZThn16_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn32_N11S20578C3_ntD0Ev,_ZThn16_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C3_nt__8S20578C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn48_N11S20578C3_ntD1Ev,_ZThn28_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn48_N11S20578C3_ntD0Ev,_ZThn28_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C8__11S20578C3_nt__8S20578C2[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void _ZN11S20578C6_ntD1Ev();
extern void _ZN11S20578C6_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__8S20578C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C6_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt11S20578C6_nt__8S20578C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C8__8S20578C2[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
extern void _ZN11S20578C9_ntD1Ev();
extern void _ZN11S20578C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C9_nt__8S20578C2[] = {
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C9_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N11S20578C9_ntD1Ev,_ZTv0_n16_N11S20578C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20578C9_ntD0Ev,_ZTv0_n16_N11S20578C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C9_nt__8S20578C2[] = {
  ABISELECT(24,16),
  ABISELECT(-32,-16),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C9_ntD1Ev,_ZTv0_n16_N11S20578C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C9_ntD0Ev,_ZTv0_n16_N11S20578C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S20578C9_ntD1Ev,_ZThn4_N11S20578C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev)();
extern void ABISELECT(_ZThn8_N11S20578C9_ntD0Ev,_ZThn4_N11S20578C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20578C10_nt__11S20578C9_nt__8S20578C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev),
};
static  VTT_ENTRY vtt_S20578C2[] = {
  {&(_ZTV8S20578C2[9]),  9,36},
  {&(_ZTV8S20578C2[9]),  9,36},
  {&(_ZTV8S20578C2[15]),  15,36},
  {&(_ZTV8S20578C2[21]),  21,36},
  {&(_ZTV8S20578C2[29]),  29,36},
  {&(_ZTV8S20578C2[34]),  34,36},
  {&(_tg__ZTV11S20578C3_nt__8S20578C2[5]),  5,7},
  {&(_tg__ZTV11S20578C4_nt11S20578C3_nt__8S20578C2[3]),  3,5},
  {&(_tg__ZTV11S20578C6_nt__11S20578C3_nt__8S20578C2[4]),  4,6},
  {&(_tg__ZTV8S20578C8__11S20578C3_nt__8S20578C2[4]),  4,6},
  {&(_tg__ZTV11S20578C6_nt__8S20578C2[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt11S20578C6_nt__8S20578C2[3]),  3,3},
  {&(_tg__ZTV8S20578C8__8S20578C2[3]),  3,5},
  {&(_tg__ZTV11S20578C9_nt__8S20578C2[5]),  5,7},
  {&(_tg__ZTV11S20578C6_nt__11S20578C9_nt__8S20578C2[4]),  4,6},
  {&(_tg__ZTV12S20578C10_nt__11S20578C9_nt__8S20578C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20578C2[];
extern  VTBL_ENTRY _ZTV8S20578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C2[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C9_ntD0Ev,_ZThn4_N11S20578C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C9_ntD1Ev,_ZThn4_N11S20578C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20578C3_ntD0Ev,_ZThn28_N11S20578C3_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20578C3_ntD0Ev,_ZThn16_N11S20578C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20578C3_ntD1Ev,_ZThn28_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20578C3_ntD1Ev,_ZThn16_N11S20578C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20578C2D0Ev,_ZTv0_n12_N8S20578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20578C2D0Ev,_ZThn36_N8S20578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20578C2D1Ev,_ZTv0_n12_N8S20578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20578C2D1Ev,_ZThn36_N8S20578C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20578C2D0Ev,_ZThn32_N8S20578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20578C2D1Ev,_ZThn32_N8S20578C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20578C2D0Ev,_ZThn28_N8S20578C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20578C2D0Ev,_ZThn16_N8S20578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20578C2D1Ev,_ZThn28_N8S20578C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20578C2D1Ev,_ZThn16_N8S20578C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20578C2 = {  "S20578C2", // class name
  bases_S20578C2, 10,
  &(vtc_S20578C2[0]), // expected_vtbl_contents
  &(vtt_S20578C2[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20578C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20578C2),36, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20578C2),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C14_nt  : virtual S20578C7_nt , S22028C16 {
  short s20578c14f0;
  ~S20578C14_nt(); // tgen
  S20578C14_nt(); // tgen
};
//SIG(-1 S20578C14_nt) C1{ VBC2{ VBC3{ m}} BC3 Fs}


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

//skip512 S20578C14_nt

#else // __cplusplus

extern void _ZN12S20578C14_ntC1Ev();
extern void _ZN12S20578C14_ntD1Ev();
Name_Map name_map_S20578C14_nt[] = {
  NSPAIR(_ZN12S20578C14_ntC1Ev),
  NSPAIR(_ZN12S20578C14_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S20578C14_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20578C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S20578C14_nt[];
static  VTBL_ENTRY vtc_S20578C14_nt[] = {
  0,
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C14_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20578C14_nt[];
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__12S20578C14_nt[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
static  VTT_ENTRY vtt_S20578C14_nt[] = {
  {&(_ZTV12S20578C14_nt[4]),  4,4},
  {&(_ZTV12S20578C14_nt[4]),  4,4},
  {&(_tg__ZTV11S20578C7_nt__12S20578C14_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20578C14_nt[];
VTBL_ENTRY *P__ZTI12S20578C14_nt = _ZTI12S20578C14_nt; 
extern  VTBL_ENTRY _ZTV12S20578C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C14_nt[];
Class_Descriptor cd_S20578C14_nt = {  "S20578C14_nt", // class name
  bases_S20578C14_nt, 3,
  &(vtc_S20578C14_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C14_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI12S20578C14_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S20578C14_nt),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20578C14_nt),3, //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  S20578C13_nt  : S20578C11_nt , S20578C7_nt , S20578C14_nt , S20578C8 {
  ~S20578C13_nt(); // tgen
  S20578C13_nt(); // tgen
};
//SIG(-1 S20578C13_nt) C1{ BC2{ vd m FC3{ m} Fi} BC4{ VBC3} BC5{ VBC4 BC3 Fs} BC6{ VBC3 vd}}


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

//skip512 S20578C13_nt

#else // __cplusplus

extern void _ZN12S20578C13_ntC1Ev();
extern void _ZN12S20578C13_ntD1Ev();
Name_Map name_map_S20578C13_nt[] = {
  NSPAIR(_ZN12S20578C13_ntC1Ev),
  NSPAIR(_ZN12S20578C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C14_nt;
extern VTBL_ENTRY _ZTI12S20578C14_nt[];
extern  VTBL_ENTRY _ZTV12S20578C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C14_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
static Base_Class bases_S20578C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20578C11_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},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20578C7_nt,    ABISELECT(16,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20578C7_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S22028C16,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20578C14_nt,    ABISELECT(24,16), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20578C8,    ABISELECT(40,24), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S20578C13_nt[];
extern void _ZN12S20578C13_ntD1Ev();
extern void _ZN12S20578C13_ntD0Ev();
extern void ABISELECT(_ZThn40_N12S20578C13_ntD1Ev,_ZThn24_N12S20578C13_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20578C13_ntD0Ev,_ZThn24_N12S20578C13_ntD0Ev)();
static  VTBL_ENTRY vtc_S20578C13_nt[] = {
  ABISELECT(24,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C13_ntD0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C13_ntD1Ev,_ZThn24_N12S20578C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C13_ntD0Ev,_ZThn24_N12S20578C13_ntD0Ev),
};
extern VTBL_ENTRY _ZTV12S20578C13_nt[];
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__A__12S20578C13_nt[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20578C14_nt__12S20578C13_nt[] = {
  0,
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C14_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C8__12S20578C13_nt[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__A1__12S20578C13_nt[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
static  VTT_ENTRY vtt_S20578C13_nt[] = {
  {&(_ZTV12S20578C13_nt[4]),  4,18},
  {&(_tg__ZTV11S20578C7_nt__A__12S20578C13_nt[3]),  3,3},
  {&(_tg__ZTV12S20578C14_nt__12S20578C13_nt[4]),  4,4},
  {&(_tg__ZTV12S20578C14_nt__12S20578C13_nt[4]),  4,4},
  {&(_tg__ZTV8S20578C8__12S20578C13_nt[3]),  3,5},
  {&(_ZTV12S20578C13_nt[9]),  9,18},
  {&(_ZTV12S20578C13_nt[13]),  13,18},
  {&(_ZTV12S20578C13_nt[13]),  13,18},
  {&(_ZTV12S20578C13_nt[16]),  16,18},
  {&(_tg__ZTV11S20578C7_nt__A1__12S20578C13_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20578C13_nt[];
VTBL_ENTRY *P__ZTI12S20578C13_nt = _ZTI12S20578C13_nt; 
extern  VTBL_ENTRY _ZTV12S20578C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C13_nt[];
Class_Descriptor cd_S20578C13_nt = {  "S20578C13_nt", // class name
  bases_S20578C13_nt, 7,
  &(vtc_S20578C13_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C13_nt[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI12S20578C13_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV12S20578C13_nt),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20578C13_nt),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C12_nt  : virtual S20578C7_nt , S20578C13_nt , virtual S20578C11_nt , S22028C16 , virtual S20578C8 {
  int s20578c12f0;
  virtual  ~S20578C12_nt(); // _ZN12S20578C12_ntD2Ev
  S20578C12_nt(); // tgen
};
//SIG(-1 S20578C12_nt) C1{ VBC2{ VBC3{ m}} BC4{ BC5{ vd m FC3 Fi} BC2 BC6{ VBC2 BC3 Fs} BC7{ VBC3 vd}} VBC5 BC3 VBC7 vd Fi}


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

//skip512 S20578C12_nt

#else // __cplusplus

extern void _ZN12S20578C12_ntC1Ev();
extern void _ZN12S20578C12_ntD2Ev();
Name_Map name_map_S20578C12_nt[] = {
  NSPAIR(_ZN12S20578C12_ntC1Ev),
  NSPAIR(_ZN12S20578C12_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C14_nt;
extern VTBL_ENTRY _ZTI12S20578C14_nt[];
extern  VTBL_ENTRY _ZTV12S20578C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C14_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
extern Class_Descriptor cd_S20578C13_nt;
extern VTBL_ENTRY _ZTI12S20578C13_nt[];
extern  VTBL_ENTRY _ZTV12S20578C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C13_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
static Base_Class bases_S20578C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    ABISELECT(52,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20578C7_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20578C11_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
    7, //immediately_derived
  0, 0},
  {&cd_S20578C7_nt,    ABISELECT(16,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20578C14_nt,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20578C8,    ABISELECT(40,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20578C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20578C11_nt,    ABISELECT(56,32), //bcp->offset
    20, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20578C8,    ABISELECT(72,44), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S20578C12_nt[];
extern void _ZN12S20578C12_ntD1Ev();
extern void _ZN12S20578C12_ntD0Ev();
extern void ABISELECT(_ZThn40_N12S20578C12_ntD1Ev,_ZThn24_N12S20578C12_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20578C12_ntD0Ev,_ZThn24_N12S20578C12_ntD0Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20578C12_ntD1Ev,_ZTv0_n12_N12S20578C12_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20578C12_ntD1Ev,_ZThn32_N12S20578C12_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20578C12_ntD0Ev,_ZTv0_n12_N12S20578C12_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20578C12_ntD0Ev,_ZThn32_N12S20578C12_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C12_ntD1Ev,_ZTv0_n16_N12S20578C12_ntD1Ev)();
extern void ABISELECT(_ZThn72_N12S20578C12_ntD1Ev,_ZThn44_N12S20578C12_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C12_ntD0Ev,_ZTv0_n16_N12S20578C12_ntD0Ev)();
extern void ABISELECT(_ZThn72_N12S20578C12_ntD0Ev,_ZThn44_N12S20578C12_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20578C12_nt[] = {
  ABISELECT(72,44),
  ABISELECT(56,32),
  ABISELECT(24,16),
  ABISELECT(52,32),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C12_ntD0Ev,
  ABISELECT(36,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  0,
  ABISELECT(28,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  ABISELECT(12,8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C12_ntD1Ev,_ZThn24_N12S20578C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C12_ntD0Ev,_ZThn24_N12S20578C12_ntD0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20578C12_ntD1Ev,_ZTv0_n12_N12S20578C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20578C12_ntD0Ev,_ZTv0_n12_N12S20578C12_ntD0Ev),
  ABISELECT(-72,-44),
  ABISELECT(-20,-12),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C12_ntD1Ev,_ZTv0_n16_N12S20578C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C12_ntD0Ev,_ZTv0_n16_N12S20578C12_ntD0Ev),
};
extern VTBL_ENTRY _ZTV12S20578C12_nt[];
extern void _ZN12S20578C13_ntD1Ev();
extern void _ZN12S20578C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20578C13_nt__12S20578C12_nt[] = {
  ABISELECT(24,16),
  ABISELECT(52,32),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt12S20578C13_nt__A1__12S20578C12_nt[] = {
  ABISELECT(36,20),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20578C14_nt12S20578C13_nt__12S20578C12_nt[] = {
  0,
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C14_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C812S20578C13_nt__12S20578C12_nt[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__A__12S20578C13_nt__12S20578C12_nt[] = {
  ABISELECT(36,20),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20578C14_nt__12S20578C13_nt__12S20578C12_nt[] = {
  0,
  ABISELECT(28,16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
};
extern void ABISELECT(_ZThn40_N12S20578C13_ntD1Ev,_ZThn24_N12S20578C13_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20578C13_ntD0Ev,_ZThn24_N12S20578C13_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20578C8__12S20578C13_nt__12S20578C12_nt[] = {
  ABISELECT(12,8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C13_ntD1Ev,_ZThn24_N12S20578C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C13_ntD0Ev,_ZThn24_N12S20578C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__12S20578C12_nt[] = {
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C8__A1__12S20578C12_nt[] = {
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
static  VTT_ENTRY vtt_S20578C12_nt[] = {
  {&(_ZTV12S20578C12_nt[6]),  6,31},
  {&(_tg__ZTV12S20578C13_nt__12S20578C12_nt[4]),  4,6},
  {&(_tg__ZTV11S20578C7_nt12S20578C13_nt__A1__12S20578C12_nt[3]),  3,3},
  {&(_tg__ZTV12S20578C14_nt12S20578C13_nt__12S20578C12_nt[4]),  4,4},
  {&(_tg__ZTV12S20578C14_nt12S20578C13_nt__12S20578C12_nt[4]),  4,4},
  {&(_tg__ZTV8S20578C812S20578C13_nt__12S20578C12_nt[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt__A__12S20578C13_nt__12S20578C12_nt[3]),  3,3},
  {&(_tg__ZTV12S20578C14_nt__12S20578C13_nt__12S20578C12_nt[4]),  4,4},
  {&(_tg__ZTV12S20578C14_nt__12S20578C13_nt__12S20578C12_nt[4]),  4,4},
  {&(_tg__ZTV8S20578C8__12S20578C13_nt__12S20578C12_nt[3]),  3,5},
  {&(_ZTV12S20578C12_nt[15]),  15,31},
  {&(_ZTV12S20578C12_nt[11]),  11,31},
  {&(_ZTV12S20578C12_nt[15]),  15,31},
  {&(_ZTV12S20578C12_nt[18]),  18,31},
  {&(_ZTV12S20578C12_nt[23]),  23,31},
  {&(_ZTV12S20578C12_nt[29]),  29,31},
  {&(_tg__ZTV11S20578C7_nt__12S20578C12_nt[3]),  3,3},
  {&(_tg__ZTV8S20578C8__A1__12S20578C12_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI12S20578C12_nt[];
VTBL_ENTRY *P__ZTI12S20578C12_nt = _ZTI12S20578C12_nt; 
extern  VTBL_ENTRY _ZTV12S20578C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C12_nt[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C12_ntD0Ev,_ZTv0_n16_N12S20578C12_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20578C12_ntD0Ev,_ZThn44_N12S20578C12_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C12_ntD1Ev,_ZTv0_n16_N12S20578C12_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20578C12_ntD1Ev,_ZThn44_N12S20578C12_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20578C12_ntD0Ev,_ZTv0_n12_N12S20578C12_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20578C12_ntD0Ev,_ZThn32_N12S20578C12_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20578C12_ntD1Ev,_ZTv0_n12_N12S20578C12_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20578C12_ntD1Ev,_ZThn32_N12S20578C12_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20578C12_nt = {  "S20578C12_nt", // class name
  bases_S20578C12_nt, 11,
  &(vtc_S20578C12_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C12_nt[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI12S20578C12_nt),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV12S20578C12_nt),31, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20578C12_nt),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C16_nt  : S20578C11_nt , S20578C8 {
  void *s20578c16f0;
  ~S20578C16_nt(); // tgen
  S20578C16_nt(); // tgen
};
//SIG(-1 S20578C16_nt) C1{ BC2{ vd m FC3{ m} Fi} BC4{ VBC3 vd} Fp}


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

//skip512 S20578C16_nt

#else // __cplusplus

extern void _ZN12S20578C16_ntC1Ev();
extern void _ZN12S20578C16_ntD1Ev();
Name_Map name_map_S20578C16_nt[] = {
  NSPAIR(_ZN12S20578C16_ntC1Ev),
  NSPAIR(_ZN12S20578C16_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
static Base_Class bases_S20578C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20578C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20578C8,    ABISELECT(16,12), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S20578C16_nt[];
extern void _ZN12S20578C16_ntD1Ev();
extern void _ZN12S20578C16_ntD0Ev();
extern void ABISELECT(_ZThn16_N12S20578C16_ntD1Ev,_ZThn12_N12S20578C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20578C16_ntD0Ev,_ZThn12_N12S20578C16_ntD0Ev)();
static  VTBL_ENTRY vtc_S20578C16_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C16_ntD0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S20578C16_ntD1Ev,_ZThn12_N12S20578C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S20578C16_ntD0Ev,_ZThn12_N12S20578C16_ntD0Ev),
};
extern VTBL_ENTRY _ZTV12S20578C16_nt[];
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C8__12S20578C16_nt[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
static  VTT_ENTRY vtt_S20578C16_nt[] = {
  {&(_ZTV12S20578C16_nt[3]),  3,10},
  {&(_tg__ZTV8S20578C8__12S20578C16_nt[3]),  3,5},
  {&(_ZTV12S20578C16_nt[8]),  8,10},
};
extern VTBL_ENTRY _ZTI12S20578C16_nt[];
VTBL_ENTRY *P__ZTI12S20578C16_nt = _ZTI12S20578C16_nt; 
extern  VTBL_ENTRY _ZTV12S20578C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C16_nt[];
Class_Descriptor cd_S20578C16_nt = {  "S20578C16_nt", // class name
  bases_S20578C16_nt, 3,
  &(vtc_S20578C16_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C16_nt[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI12S20578C16_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S20578C16_nt),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20578C16_nt),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  S20578C15_nt  : virtual S20578C16_nt , S20578C3_nt , S20578C10_nt {
  virtual  ~S20578C15_nt(); // _ZN12S20578C15_ntD2Ev
  S20578C15_nt(); // tgen
};
//SIG(-1 S20578C15_nt) C1{ VBC2{ BC3{ vd m FC4{ m} Fi} BC5{ VBC4 vd} Fp} BC6{ BC7{ VBC4 vd} VBC8{ BC9{ VBC4} vd FL} VBC5} BC10{ BC3 BC4 vd Fi} vd}


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

//skip512 S20578C15_nt

#else // __cplusplus

extern void _ZN12S20578C15_ntC1Ev();
extern void _ZN12S20578C15_ntD2Ev();
Name_Map name_map_S20578C15_nt[] = {
  NSPAIR(_ZN12S20578C15_ntC1Ev),
  NSPAIR(_ZN12S20578C15_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
extern Class_Descriptor cd_S20578C16_nt;
extern VTBL_ENTRY _ZTI12S20578C16_nt[];
extern  VTBL_ENTRY _ZTV12S20578C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C16_nt[];
extern Class_Descriptor cd_S20578C4_nt;
extern VTBL_ENTRY _ZTI11S20578C4_nt[];
extern  VTBL_ENTRY _ZTV11S20578C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C4_nt[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C6_nt;
extern VTBL_ENTRY _ZTI11S20578C6_nt[];
extern  VTBL_ENTRY _ZTV11S20578C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C6_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
extern Class_Descriptor cd_S20578C3_nt;
extern VTBL_ENTRY _ZTI11S20578C3_nt[];
extern  VTBL_ENTRY _ZTV11S20578C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C3_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C10_nt;
extern VTBL_ENTRY _ZTI12S20578C10_nt[];
extern  VTBL_ENTRY _ZTV12S20578C10_nt[];
static Base_Class bases_S20578C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20578C11_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
    3, //immediately_derived
  0, 0},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20578C8,    ABISELECT(48,32), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20578C16_nt,    ABISELECT(32,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20578C4_nt,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20578C7_nt,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20578C6_nt,    ABISELECT(64,40), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20578C8,    ABISELECT(80,52), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20578C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20578C11_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
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S22028C16,    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
    11, //immediately_derived
  0, 0},
  {&cd_S20578C10_nt,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S20578C15_nt[];
extern void _ZN12S20578C15_ntD1Ev();
extern void _ZN12S20578C15_ntD0Ev();
extern void ABISELECT(_ZThn8_N12S20578C15_ntD1Ev,_ZThn4_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20578C15_ntD0Ev,_ZThn4_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZThn32_N12S20578C15_ntD1Ev,_ZThn20_N12S20578C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZThn32_N12S20578C15_ntD0Ev,_ZThn20_N12S20578C15_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n32_N12S20578C15_ntD1Ev,_ZTvn12_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZTvn16_n32_N12S20578C15_ntD0Ev,_ZTvn12_n16_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZThn64_N12S20578C15_ntD1Ev,_ZThn40_N12S20578C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZThn64_N12S20578C15_ntD0Ev,_ZThn40_N12S20578C15_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZThn80_N12S20578C15_ntD1Ev,_ZThn52_N12S20578C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZThn80_N12S20578C15_ntD0Ev,_ZThn52_N12S20578C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20578C15_nt[] = {
  ABISELECT(32,20),
  ABISELECT(80,52),
  ABISELECT(64,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C15_ntD0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20578C15_ntD1Ev,_ZThn4_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20578C15_ntD0Ev,_ZThn4_N12S20578C15_ntD0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N12S20578C15_ntD1Ev,_ZTvn12_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N12S20578C15_ntD0Ev,_ZTvn12_n16_N12S20578C15_ntD0Ev),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev),
};
extern VTBL_ENTRY _ZTV12S20578C15_nt[];
extern void _ZN11S20578C3_ntD1Ev();
extern void _ZN11S20578C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C3_nt__12S20578C15_nt[] = {
  ABISELECT(80,52),
  ABISELECT(64,40),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C3_ntD0Ev,
};
extern void _ZN11S20578C4_ntD1Ev();
extern void _ZN11S20578C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C4_nt11S20578C3_nt__12S20578C15_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C4_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn64_N11S20578C3_ntD1Ev,_ZThn40_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn64_N11S20578C3_ntD0Ev,_ZThn40_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C3_nt__12S20578C15_nt[] = {
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn80_N11S20578C3_ntD1Ev,_ZThn52_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn80_N11S20578C3_ntD0Ev,_ZThn52_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C8__11S20578C3_nt__12S20578C15_nt[] = {
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void _ZN12S20578C16_ntD1Ev();
extern void _ZN12S20578C16_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20578C16_nt__12S20578C15_nt[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C16_ntD0Ev,
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C812S20578C16_nt__12S20578C15_nt[] = {
  ABISELECT(-48,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
extern void ABISELECT(_ZThn16_N12S20578C16_ntD1Ev,_ZThn12_N12S20578C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20578C16_ntD0Ev,_ZThn12_N12S20578C16_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20578C8__12S20578C16_nt__12S20578C15_nt[] = {
  ABISELECT(-48,-32),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S20578C16_ntD1Ev,_ZThn12_N12S20578C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S20578C16_ntD0Ev,_ZThn12_N12S20578C16_ntD0Ev),
};
extern void _ZN11S20578C6_ntD1Ev();
extern void _ZN11S20578C6_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__12S20578C15_nt[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C6_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt11S20578C6_nt__12S20578C15_nt[] = {
  ABISELECT(-64,-40),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C8__A1__12S20578C15_nt[] = {
  ABISELECT(-80,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
static  VTT_ENTRY vtt_S20578C15_nt[] = {
  {&(_ZTV12S20578C15_nt[6]),  6,35},
  {&(_tg__ZTV11S20578C3_nt__12S20578C15_nt[5]),  5,7},
  {&(_tg__ZTV11S20578C4_nt11S20578C3_nt__12S20578C15_nt[3]),  3,5},
  {&(_tg__ZTV11S20578C6_nt__11S20578C3_nt__12S20578C15_nt[4]),  4,6},
  {&(_tg__ZTV8S20578C8__11S20578C3_nt__12S20578C15_nt[4]),  4,6},
  {&(_ZTV12S20578C15_nt[16]),  16,35},
  {&(_ZTV12S20578C15_nt[21]),  21,35},
  {&(_ZTV12S20578C15_nt[27]),  27,35},
  {&(_ZTV12S20578C15_nt[33]),  33,35},
  {&(_tg__ZTV12S20578C16_nt__12S20578C15_nt[3]),  3,5},
  {&(_tg__ZTV8S20578C812S20578C16_nt__12S20578C15_nt[3]),  3,5},
  {&(_tg__ZTV8S20578C8__12S20578C16_nt__12S20578C15_nt[3]),  3,5},
  {&(_tg__ZTV11S20578C6_nt__12S20578C15_nt[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt11S20578C6_nt__12S20578C15_nt[3]),  3,3},
  {&(_tg__ZTV8S20578C8__A1__12S20578C15_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI12S20578C15_nt[];
VTBL_ENTRY *P__ZTI12S20578C15_nt = _ZTI12S20578C15_nt; 
extern  VTBL_ENTRY _ZTV12S20578C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C15_nt[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N11S20578C3_ntD0Ev,_ZThn52_N11S20578C3_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N11S20578C3_ntD0Ev,_ZThn40_N11S20578C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N11S20578C3_ntD1Ev,_ZThn52_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N11S20578C3_ntD1Ev,_ZThn40_N11S20578C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N12S20578C15_ntD0Ev,_ZThn52_N12S20578C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N12S20578C15_ntD0Ev,_ZThn40_N12S20578C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N12S20578C15_ntD0Ev,_ZThn20_N12S20578C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N12S20578C15_ntD1Ev,_ZThn52_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N12S20578C15_ntD1Ev,_ZThn40_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N12S20578C15_ntD1Ev,_ZThn20_N12S20578C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20578C15_nt = {  "S20578C15_nt", // class name
  bases_S20578C15_nt, 12,
  &(vtc_S20578C15_nt[0]), // expected_vtbl_contents
  &(vtt_S20578C15_nt[0]), // expected_vtt_contents
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI12S20578C15_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV12S20578C15_nt),35, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20578C15_nt),15, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20578C1  : virtual S20578C2 , S20578C12_nt , S20578C15_nt {
  int s20578c1f0;
  ~S20578C1(); // tgen
  S20578C1(); // tgen
};
//SIG(1 S20578C1) C1{ VBC2{ VBC3{ BC4{ VBC5{ m} vd} VBC6{ BC7{ VBC5} vd FL} VBC8{ VBC5 vd}} VBC9{ VBC6 VBC10{ BC11{ vd m FC5 Fi} BC5 vd Fi} vd} FD} BC12{ VBC7 BC13{ BC11 BC7 BC14{ VBC7 BC5 Fs} BC8} VBC11 BC5 VBC8 vd Fi} BC15{ VBC16{ BC11 BC8 Fp} BC3 BC10 vd} Fi}


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

static void Test_S20578C1()
{
  extern Class_Descriptor cd_S20578C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,36)];
    init_test(&cd_S20578C1, buf);
    S20578C1 *dp, &lv = *(dp=new (buf) S20578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,140), "sizeof(S20578C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20578C1)");
    /*is_ambiguous_... S20578C1::S20578C3_nt */ AMB_check_base_class_offset(lv, (S22028C16*)(S20578C4_nt*)(S20578C3_nt*), ABISELECT(128,72), "S20578C1");
    check_base_class_offset(lv, (S22028C16*)(S20578C7_nt*)(S20578C6_nt*), ABISELECT(128,72), "S20578C1");
    /*is_ambiguous_... S20578C1::S20578C8 */ AMB_check_base_class_offset(lv, (S22028C16*)(S20578C8*), ABISELECT(128,72), "S20578C1");
    /*is_ambiguous_... S20578C1::S20578C7_nt */ AMB_check_base_class_offset(lv, (S22028C16*)(S20578C7_nt*), ABISELECT(128,72), "S20578C1");
    /*is_ambiguous_... S20578C13_nt::S20578C7_nt */ AMB_check_base_class_offset(lv, (S22028C16*)(S20578C7_nt*)(S20578C13_nt*)(S20578C12_nt*), ABISELECT(128,72), "S20578C1");
    check_base_class_offset(lv, (S22028C16*)(S20578C8*)(S20578C13_nt*)(S20578C12_nt*), ABISELECT(128,72), "S20578C1");
    check_base_class_offset(lv, (S22028C16*)(S20578C8*)(S20578C16_nt*), ABISELECT(128,72), "S20578C1");
    check_base_class_offset(lv, (S22028C16*)(S20578C4_nt*)(S20578C3_nt*)(S20578C15_nt*), ABISELECT(128,72), "S20578C1");
    /*is_ambiguous_... S20578C1::S20578C3_nt */ AMB_check_base_class_offset(lv, (S20578C4_nt*)(S20578C3_nt*), ABISELECT(96,56), "S20578C1");
    check_base_class_offset(lv, (S20578C7_nt*)(S20578C6_nt*), ABISELECT(128,72), "S20578C1");
    /*is_ambiguous_... S20578C1::S20578C3_nt */ AMB_check_base_class_offset(lv, (S20578C6_nt*)(S20578C3_nt*), ABISELECT(128,72), "S20578C1");
    check_base_class_offset(lv, (S20578C6_nt*)(S20578C9_nt*), ABISELECT(128,72), "S20578C1");
    check_base_class_offset(lv, (S20578C6_nt*)(S20578C3_nt*)(S20578C15_nt*), ABISELECT(128,72), "S20578C1");
    /*is_ambiguous_... S20578C1::S20578C3_nt */ AMB_check_base_class_offset(lv, (S20578C8*)(S20578C3_nt*), ABISELECT(144,84), "S20578C1");
    /*is_ambiguous_... S20578C12_nt::S20578C8 */ AMB_check_base_class_offset(lv, (S20578C8*)(S20578C12_nt*), ABISELECT(144,84), "S20578C1");
    check_base_class_offset(lv, (S20578C8*)(S20578C3_nt*)(S20578C15_nt*), ABISELECT(144,84), "S20578C1");
    check_base_class_offset(lv, (S20578C3_nt*)(S20578C2*), ABISELECT(96,56), "S20578C1");
    /*is_ambiguous_... S20578C1::S20578C10_nt */ AMB_check_base_class_offset(lv, (S20578C11_nt*)(S20578C10_nt*), ABISELECT(160,92), "S20578C1");
    /*is_ambiguous_... S20578C1::S20578C10_nt */ AMB_check_base_class_offset(lv, (S22028C16*)(S20578C10_nt*), ABISELECT(160,92), "S20578C1");
    check_base_class_offset(lv, (S20578C10_nt*)(S20578C9_nt*), ABISELECT(160,92), "S20578C1");
    check_base_class_offset(lv, (S20578C9_nt*)(S20578C2*), ABISELECT(152,88), "S20578C1");
    check_base_class_offset(lv, (S20578C2*), ABISELECT(96,56), "S20578C1");
    /*is_ambiguous_... S20578C12_nt::S20578C7_nt */ AMB_check_base_class_offset(lv, (S20578C7_nt*)(S20578C12_nt*), ABISELECT(24,16), "S20578C1");
    check_base_class_offset(lv, (S20578C7_nt*)(S20578C14_nt*)(S20578C13_nt*)(S20578C12_nt*), ABISELECT(24,16), "S20578C1");
    check_base_class_offset(lv, (S20578C11_nt*)(S20578C13_nt*)(S20578C12_nt*), 0, "S20578C1");
    /*is_ambiguous_... S20578C13_nt::S20578C7_nt */ AMB_check_base_class_offset(lv, (S20578C7_nt*)(S20578C13_nt*)(S20578C12_nt*), ABISELECT(16,12), "S20578C1");
    /*is_ambiguous_... S20578C14_nt::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S20578C14_nt*)(S20578C13_nt*)(S20578C12_nt*), ABISELECT(24,16), "S20578C1");
    check_base_class_offset(lv, (S20578C14_nt*)(S20578C13_nt*)(S20578C12_nt*), ABISELECT(24,16), "S20578C1");
    check_base_class_offset(lv, (S20578C8*)(S20578C13_nt*)(S20578C12_nt*), ABISELECT(40,24), "S20578C1");
    check_base_class_offset(lv, (S20578C13_nt*)(S20578C12_nt*), 0, "S20578C1");
    /*is_ambiguous_... S20578C12_nt::S20578C11_nt */ AMB_check_base_class_offset(lv, (S20578C11_nt*)(S20578C12_nt*), ABISELECT(184,108), "S20578C1");
    /*is_ambiguous_... S20578C12_nt::S22028C16 */ AMB_check_base_class_offset(lv, (S22028C16*)(S20578C12_nt*), 0, "S20578C1");
    check_base_class_offset(lv, (S20578C12_nt*), 0, "S20578C1");
    check_base_class_offset(lv, (S20578C11_nt*)(S20578C16_nt*), ABISELECT(200,120), "S20578C1");
    check_base_class_offset(lv, (S20578C8*)(S20578C16_nt*), ABISELECT(216,132), "S20578C1");
    check_base_class_offset(lv, (S20578C16_nt*)(S20578C15_nt*), ABISELECT(200,120), "S20578C1");
    check_base_class_offset(lv, (S20578C4_nt*)(S20578C3_nt*)(S20578C15_nt*), ABISELECT(56,32), "S20578C1");
    check_base_class_offset(lv, (S20578C3_nt*)(S20578C15_nt*), ABISELECT(56,32), "S20578C1");
    check_base_class_offset(lv, (S20578C11_nt*)(S20578C10_nt*)(S20578C15_nt*), ABISELECT(64,36), "S20578C1");
    check_base_class_offset(lv, (S22028C16*)(S20578C10_nt*)(S20578C15_nt*), ABISELECT(64,36), "S20578C1");
    check_base_class_offset(lv, (S20578C10_nt*)(S20578C15_nt*), ABISELECT(64,36), "S20578C1");
    check_base_class_offset(lv, (S20578C15_nt*), ABISELECT(56,32), "S20578C1");
    check_field_offset(lv, s20578c1f0, ABISELECT(84,52), "S20578C1.s20578c1f0");
    test_class_info(&lv, &cd_S20578C1);
    dp->~S20578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20578C1(Test_S20578C1, "S20578C1", ABISELECT(240,140));

#else // __cplusplus

extern void _ZN8S20578C1C1Ev();
extern void _ZN8S20578C1D1Ev();
Name_Map name_map_S20578C1[] = {
  NSPAIR(_ZN8S20578C1C1Ev),
  NSPAIR(_ZN8S20578C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C4_nt;
extern VTBL_ENTRY _ZTI11S20578C4_nt[];
extern  VTBL_ENTRY _ZTV11S20578C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C4_nt[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C6_nt;
extern VTBL_ENTRY _ZTI11S20578C6_nt[];
extern  VTBL_ENTRY _ZTV11S20578C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C6_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
extern Class_Descriptor cd_S20578C3_nt;
extern VTBL_ENTRY _ZTI11S20578C3_nt[];
extern  VTBL_ENTRY _ZTV11S20578C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C3_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C10_nt;
extern VTBL_ENTRY _ZTI12S20578C10_nt[];
extern  VTBL_ENTRY _ZTV12S20578C10_nt[];
extern Class_Descriptor cd_S20578C9_nt;
extern VTBL_ENTRY _ZTI11S20578C9_nt[];
extern  VTBL_ENTRY _ZTV11S20578C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C9_nt[];
extern Class_Descriptor cd_S20578C2;
extern VTBL_ENTRY _ZTI8S20578C2[];
extern  VTBL_ENTRY _ZTV8S20578C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C2[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S20578C7_nt;
extern VTBL_ENTRY _ZTI11S20578C7_nt[];
extern  VTBL_ENTRY _ZTV11S20578C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C7_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C14_nt;
extern VTBL_ENTRY _ZTI12S20578C14_nt[];
extern  VTBL_ENTRY _ZTV12S20578C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C14_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
extern Class_Descriptor cd_S20578C13_nt;
extern VTBL_ENTRY _ZTI12S20578C13_nt[];
extern  VTBL_ENTRY _ZTV12S20578C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C13_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C12_nt;
extern VTBL_ENTRY _ZTI12S20578C12_nt[];
extern  VTBL_ENTRY _ZTV12S20578C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C12_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S20578C8;
extern VTBL_ENTRY _ZTI8S20578C8[];
extern  VTBL_ENTRY _ZTV8S20578C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C8[];
extern Class_Descriptor cd_S20578C16_nt;
extern VTBL_ENTRY _ZTI12S20578C16_nt[];
extern  VTBL_ENTRY _ZTV12S20578C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C16_nt[];
extern Class_Descriptor cd_S20578C4_nt;
extern VTBL_ENTRY _ZTI11S20578C4_nt[];
extern  VTBL_ENTRY _ZTV11S20578C4_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C4_nt[];
extern Class_Descriptor cd_S20578C3_nt;
extern VTBL_ENTRY _ZTI11S20578C3_nt[];
extern  VTBL_ENTRY _ZTV11S20578C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20578C3_nt[];
extern Class_Descriptor cd_S20578C11_nt;
extern VTBL_ENTRY _ZTI12S20578C11_nt[];
extern  VTBL_ENTRY _ZTV12S20578C11_nt[];
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S20578C10_nt;
extern VTBL_ENTRY _ZTI12S20578C10_nt[];
extern  VTBL_ENTRY _ZTV12S20578C10_nt[];
extern Class_Descriptor cd_S20578C15_nt;
extern VTBL_ENTRY _ZTI12S20578C15_nt[];
extern  VTBL_ENTRY _ZTV12S20578C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20578C15_nt[];
static Base_Class bases_S20578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    ABISELECT(128,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
  0, 1},
  {&cd_S20578C4_nt,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20578C7_nt,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20578C6_nt,    ABISELECT(128,72), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20578C8,    ABISELECT(144,84), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20578C3_nt,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20578C11_nt,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_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_S22028C16,    ABISELECT(160,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20578C10_nt,    ABISELECT(160,92), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20578C9_nt,    ABISELECT(152,88), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20578C2,    ABISELECT(96,56), //bcp->offset
    38, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20578C7_nt,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20578C11_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
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20578C7_nt,    ABISELECT(16,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S22028C16,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20578C14_nt,    ABISELECT(24,16), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20578C8,    ABISELECT(40,24), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20578C13_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20578C11_nt,    ABISELECT(184,108), //bcp->offset
    74, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20578C12_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20578C11_nt,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20578C8,    ABISELECT(216,132), //bcp->offset
    85, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20578C16_nt,    ABISELECT(200,120), //bcp->offset
    79, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20578C4_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20578C3_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20578C11_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
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S22028C16,    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
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20578C10_nt,    ABISELECT(64,36), //bcp->offset
    34, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20578C15_nt,    ABISELECT(56,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20578C1[];
extern void _ZN8S20578C1D1Ev();
extern void _ZN8S20578C1D0Ev();
extern void ABISELECT(_ZThn40_N8S20578C1D1Ev,_ZThn24_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20578C1D0Ev,_ZThn24_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S20578C1D1Ev,_ZThn32_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S20578C1D0Ev,_ZThn32_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20578C1D1Ev,_ZThn36_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20578C1D0Ev,_ZThn36_N8S20578C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20578C1D1Ev,_ZTv0_n24_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20578C1D1Ev,_ZThn56_N8S20578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20578C1D0Ev,_ZTv0_n24_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S20578C1D0Ev,_ZThn56_N8S20578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C1D1Ev,_ZTv0_n16_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20578C1D1Ev,_ZThn72_N8S20578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C1D0Ev,_ZTv0_n16_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20578C1D0Ev,_ZThn72_N8S20578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C1D1Ev,_ZTv0_n16_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20578C1D1Ev,_ZThn84_N8S20578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C1D0Ev,_ZTv0_n16_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20578C1D0Ev,_ZThn84_N8S20578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20578C1D1Ev,_ZTv0_n24_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S20578C1D1Ev,_ZThn88_N8S20578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20578C1D0Ev,_ZTv0_n24_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S20578C1D0Ev,_ZThn88_N8S20578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20578C1D1Ev,_ZTv0_n12_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S20578C1D1Ev,_ZThn92_N8S20578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20578C1D0Ev,_ZTv0_n12_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S20578C1D0Ev,_ZThn92_N8S20578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20578C1D1Ev,_ZTv0_n12_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S20578C1D1Ev,_ZThn108_N8S20578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20578C1D0Ev,_ZTv0_n12_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn184_N8S20578C1D0Ev,_ZThn108_N8S20578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C1D1Ev,_ZTv0_n16_N8S20578C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20578C1D1Ev,_ZThn120_N8S20578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C1D0Ev,_ZTv0_n16_N8S20578C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20578C1D0Ev,_ZThn120_N8S20578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n32_N8S20578C1D1Ev,_ZTvn12_n16_N8S20578C1D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N8S20578C1D0Ev,_ZTvn12_n16_N8S20578C1D0Ev)();
static  VTBL_ENTRY vtc_S20578C1[] = {
  ABISELECT(200,120),
  ABISELECT(160,92),
  ABISELECT(152,88),
  ABISELECT(128,72),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(144,84),
  ABISELECT(184,108),
  ABISELECT(24,16),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&_ZN8S20578C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C1D0Ev,
  ABISELECT(112,60),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  0,
  ABISELECT(104,56),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  ABISELECT(88,48),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20578C1D1Ev,_ZThn24_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20578C1D0Ev,_ZThn24_N8S20578C1D0Ev),
  ABISELECT(144,88),
  ABISELECT(88,52),
  ABISELECT(72,40),
  ABISELECT(72,40),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20578C1D1Ev,_ZThn32_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20578C1D0Ev,_ZThn32_N8S20578C1D0Ev),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S20578C1D1Ev,_ZThn36_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S20578C1D0Ev,_ZThn36_N8S20578C1D0Ev),
  ABISELECT(64,36),
  ABISELECT(56,32),
  0,
  ABISELECT(-96,-56),
  ABISELECT(48,28),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C1D1Ev,_ZTv0_n24_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C1D0Ev,_ZTv0_n24_N8S20578C1D0Ev),
  ABISELECT(-128,-72),
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C1D1Ev,_ZTv0_n16_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C1D0Ev,_ZTv0_n16_N8S20578C1D0Ev),
  ABISELECT(-144,-84),
  ABISELECT(-16,-12),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C1D1Ev,_ZTv0_n16_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C1D0Ev,_ZTv0_n16_N8S20578C1D0Ev),
  ABISELECT(-152,-88),
  ABISELECT(8,4),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C1D1Ev,_ZTv0_n24_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C1D0Ev,_ZTv0_n24_N8S20578C1D0Ev),
  ABISELECT(-160,-92),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C1D1Ev,_ZTv0_n12_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C1D0Ev,_ZTv0_n12_N8S20578C1D0Ev),
  ABISELECT(-184,-108),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C1D1Ev,_ZTv0_n12_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C1D0Ev,_ZTv0_n12_N8S20578C1D0Ev),
  ABISELECT(-200,-120),
  ABISELECT(-72,-48),
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C1D1Ev,_ZTv0_n16_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C1D0Ev,_ZTv0_n16_N8S20578C1D0Ev),
  ABISELECT(-88,-60),
  ABISELECT(-216,-132),
  (VTBL_ENTRY)&(_ZTI8S20578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20578C1D1Ev,_ZTvn12_n16_N8S20578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20578C1D0Ev,_ZTvn12_n16_N8S20578C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20578C1[];
extern void _ZN12S20578C12_ntD1Ev();
extern void _ZN12S20578C12_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20578C12_nt__8S20578C1[] = {
  ABISELECT(144,84),
  ABISELECT(184,108),
  ABISELECT(24,16),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C12_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C12_ntD0Ev,
};
extern void _ZN12S20578C13_ntD1Ev();
extern void _ZN12S20578C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20578C13_nt12S20578C12_nt__8S20578C1[] = {
  ABISELECT(24,16),
  ABISELECT(128,72),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt12S20578C13_nt12S20578C12_nt__A2__8S20578C1[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20578C14_nt12S20578C13_nt12S20578C12_nt__8S20578C1[] = {
  0,
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C14_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C812S20578C13_nt12S20578C12_nt__A1__8S20578C1[] = {
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__A__12S20578C13_nt12S20578C12_nt__8S20578C1[] = {
  ABISELECT(112,60),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20578C14_nt__12S20578C13_nt12S20578C12_nt__8S20578C1[] = {
  0,
  ABISELECT(104,56),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
};
extern void ABISELECT(_ZThn40_N12S20578C13_ntD1Ev,_ZThn24_N12S20578C13_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20578C13_ntD0Ev,_ZThn24_N12S20578C13_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20578C8__12S20578C13_nt12S20578C12_nt__8S20578C1[] = {
  ABISELECT(88,48),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20578C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C13_ntD1Ev,_ZThn24_N12S20578C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C13_ntD0Ev,_ZThn24_N12S20578C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20578C14_nt12S20578C13_nt__12S20578C12_nt__8S20578C1[] = {
  0,
  ABISELECT(104,56),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt12S20578C13_nt__A1__12S20578C12_nt__8S20578C1[] = {
  ABISELECT(112,60),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
};
extern void ABISELECT(_ZThn40_N12S20578C12_ntD1Ev,_ZThn24_N12S20578C12_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20578C12_ntD0Ev,_ZThn24_N12S20578C12_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20578C812S20578C13_nt__12S20578C12_nt__8S20578C1[] = {
  ABISELECT(88,48),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C12_ntD1Ev,_ZThn24_N12S20578C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20578C12_ntD0Ev,_ZThn24_N12S20578C12_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20578C12_ntD1Ev,_ZTv0_n12_N12S20578C12_ntD1Ev)();
extern void ABISELECT(_ZThn184_N12S20578C12_ntD1Ev,_ZThn108_N12S20578C12_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20578C12_ntD0Ev,_ZTv0_n12_N12S20578C12_ntD0Ev)();
extern void ABISELECT(_ZThn184_N12S20578C12_ntD0Ev,_ZThn108_N12S20578C12_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20578C11_nt__A1__12S20578C12_nt__8S20578C1[] = {
  ABISELECT(-184,-108),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20578C12_ntD1Ev,_ZTv0_n12_N12S20578C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20578C12_ntD0Ev,_ZTv0_n12_N12S20578C12_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N12S20578C12_ntD1Ev,_ZTv0_n16_N12S20578C12_ntD1Ev)();
extern void ABISELECT(_ZThn144_N12S20578C12_ntD1Ev,_ZThn84_N12S20578C12_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C12_ntD0Ev,_ZTv0_n16_N12S20578C12_ntD0Ev)();
extern void ABISELECT(_ZThn144_N12S20578C12_ntD0Ev,_ZThn84_N12S20578C12_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C8__A1__12S20578C12_nt__8S20578C1[] = {
  ABISELECT(-144,-84),
  ABISELECT(-16,-12),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI12S20578C12_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C12_ntD1Ev,_ZTv0_n16_N12S20578C12_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C12_ntD0Ev,_ZTv0_n16_N12S20578C12_ntD0Ev),
};
extern void _ZN12S20578C15_ntD1Ev();
extern void _ZN12S20578C15_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20578C15_nt__8S20578C1[] = {
  ABISELECT(144,88),
  ABISELECT(88,52),
  ABISELECT(72,40),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C15_ntD0Ev,
};
extern void _ZN11S20578C3_ntD1Ev();
extern void _ZN11S20578C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C3_nt12S20578C15_nt__A1__8S20578C1[] = {
  ABISELECT(88,52),
  ABISELECT(72,40),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C3_ntD0Ev,
};
extern void _ZN11S20578C4_ntD1Ev();
extern void _ZN11S20578C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C4_nt11S20578C3_nt12S20578C15_nt__A1__8S20578C1[] = {
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C4_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn72_N11S20578C3_ntD1Ev,_ZThn40_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn72_N11S20578C3_ntD0Ev,_ZThn40_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C3_nt12S20578C15_nt__A1__8S20578C1[] = {
  ABISELECT(-72,-40),
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20578C3_ntD1Ev,_ZThn52_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn88_N11S20578C3_ntD0Ev,_ZThn52_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C8__11S20578C3_nt12S20578C15_nt__A1__8S20578C1[] = {
  ABISELECT(-88,-52),
  ABISELECT(-16,-12),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZThn144_N12S20578C15_ntD1Ev,_ZThn88_N12S20578C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZThn144_N12S20578C15_ntD0Ev,_ZThn88_N12S20578C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20578C16_nt__12S20578C15_nt__8S20578C1[] = {
  ABISELECT(-144,-88),
  ABISELECT(-72,-48),
  ABISELECT(-144,-88),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev),
};
extern void ABISELECT(_ZTvn16_n32_N12S20578C15_ntD1Ev,_ZTvn12_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZTvn16_n32_N12S20578C15_ntD0Ev,_ZTvn12_n16_N12S20578C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20578C812S20578C16_nt__12S20578C15_nt__8S20578C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N12S20578C15_ntD1Ev,_ZTvn12_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N12S20578C15_ntD0Ev,_ZTvn12_n16_N12S20578C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZThn72_N12S20578C15_ntD1Ev,_ZThn40_N12S20578C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZThn72_N12S20578C15_ntD0Ev,_ZThn40_N12S20578C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__12S20578C15_nt__8S20578C1[] = {
  ABISELECT(-72,-40),
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev)();
extern void ABISELECT(_ZThn88_N12S20578C15_ntD1Ev,_ZThn52_N12S20578C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev)();
extern void ABISELECT(_ZThn88_N12S20578C15_ntD0Ev,_ZThn52_N12S20578C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C8__A1__12S20578C15_nt__8S20578C1[] = {
  ABISELECT(-88,-52),
  ABISELECT(-16,-12),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI12S20578C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev)();
extern void _ZN8S20578C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev)();
extern void _ZN8S20578C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C2__8S20578C1[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn32_N8S20578C2D1Ev,_ZThn16_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn32_N8S20578C2D0Ev,_ZThn16_N8S20578C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__8S20578C2__8S20578C1[] = {
  ABISELECT(-32,-16),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20578C2D1Ev,_ZThn28_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20578C2D0Ev,_ZThn28_N8S20578C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C8__8S20578C2__8S20578C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-12),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S20578C2D1Ev,_ZThn32_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S20578C2D0Ev,_ZThn32_N8S20578C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20578C9_nt__8S20578C2__8S20578C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(8,4),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20578C2D1Ev,_ZTv0_n12_N8S20578C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20578C2D1Ev,_ZThn36_N8S20578C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20578C2D0Ev,_ZTv0_n12_N8S20578C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20578C2D0Ev,_ZThn36_N8S20578C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20578C10_nt__8S20578C2__8S20578C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20578C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C2D1Ev,_ZTv0_n12_N8S20578C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20578C2D0Ev,_ZTv0_n12_N8S20578C2D0Ev),
};
extern void _ZN11S20578C3_ntD1Ev();
extern void _ZN11S20578C3_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C3_nt__8S20578C1[] = {
  ABISELECT(48,28),
  ABISELECT(32,16),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C3_ntD0Ev,
};
extern void _ZN11S20578C4_ntD1Ev();
extern void _ZN11S20578C4_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C4_nt11S20578C3_nt__8S20578C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C4_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20578C3_ntD1Ev,_ZThn16_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn32_N11S20578C3_ntD0Ev,_ZThn16_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C3_nt__8S20578C1[] = {
  ABISELECT(-32,-16),
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev)();
extern void ABISELECT(_ZThn48_N11S20578C3_ntD1Ev,_ZThn28_N11S20578C3_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev)();
extern void ABISELECT(_ZThn48_N11S20578C3_ntD0Ev,_ZThn28_N11S20578C3_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20578C8__11S20578C3_nt__8S20578C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-12),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20578C3_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev),
};
extern void _ZN11S20578C6_ntD1Ev();
extern void _ZN11S20578C6_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__8S20578C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C6_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt11S20578C6_nt__8S20578C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C8__8S20578C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
extern void _ZN11S20578C9_ntD1Ev();
extern void _ZN11S20578C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20578C9_nt__8S20578C1[] = {
  ABISELECT(8,4),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20578C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20578C9_ntD0Ev,
};
extern void ABISELECT(_ZTv0_n32_N11S20578C9_ntD1Ev,_ZTv0_n16_N11S20578C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20578C9_ntD0Ev,_ZTv0_n16_N11S20578C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20578C6_nt__11S20578C9_nt__8S20578C1[] = {
  ABISELECT(24,16),
  0,
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C9_ntD1Ev,_ZTv0_n16_N11S20578C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20578C9_ntD0Ev,_ZTv0_n16_N11S20578C9_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev)();
extern void ABISELECT(_ZThn8_N11S20578C9_ntD1Ev,_ZThn4_N11S20578C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev)();
extern void ABISELECT(_ZThn8_N11S20578C9_ntD0Ev,_ZThn4_N11S20578C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20578C10_nt__11S20578C9_nt__8S20578C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20578C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV11S20578C7_nt__A1__8S20578C1[] = {
  ABISELECT(104,56),
  0,
  (VTBL_ENTRY)&(_ZTI11S20578C7_nt[0]),
};
extern void _ZN12S20578C16_ntD1Ev();
extern void _ZN12S20578C16_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20578C16_nt__8S20578C1[] = {
  ABISELECT(-72,-48),
  0,
  (VTBL_ENTRY)&(_ZTI12S20578C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20578C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20578C16_ntD0Ev,
};
extern void _ZN8S20578C8D1Ev();
extern void _ZN8S20578C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20578C812S20578C16_nt__A2__8S20578C1[] = {
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20578C8[0]),
  (VTBL_ENTRY)&_ZN8S20578C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20578C8D0Ev,
};
extern void ABISELECT(_ZThn16_N12S20578C16_ntD1Ev,_ZThn12_N12S20578C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20578C16_ntD0Ev,_ZThn12_N12S20578C16_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20578C8__12S20578C16_nt__8S20578C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI12S20578C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S20578C16_ntD1Ev,_ZThn12_N12S20578C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N12S20578C16_ntD0Ev,_ZThn12_N12S20578C16_ntD0Ev),
};
static  VTT_ENTRY vtt_S20578C1[] = {
  {&(_ZTV8S20578C1[12]),  12,90},
  {&(_tg__ZTV12S20578C12_nt__8S20578C1[6]),  6,8},
  {&(_tg__ZTV12S20578C13_nt12S20578C12_nt__8S20578C1[4]),  4,6},
  {&(_tg__ZTV11S20578C7_nt12S20578C13_nt12S20578C12_nt__A2__8S20578C1[3]),  3,3},
  {&(_tg__ZTV12S20578C14_nt12S20578C13_nt12S20578C12_nt__8S20578C1[4]),  4,4},
  {&(_tg__ZTV12S20578C14_nt12S20578C13_nt12S20578C12_nt__8S20578C1[4]),  4,4},
  {&(_tg__ZTV8S20578C812S20578C13_nt12S20578C12_nt__A1__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt__A__12S20578C13_nt12S20578C12_nt__8S20578C1[3]),  3,3},
  {&(_tg__ZTV12S20578C14_nt__12S20578C13_nt12S20578C12_nt__8S20578C1[4]),  4,4},
  {&(_tg__ZTV12S20578C14_nt__12S20578C13_nt12S20578C12_nt__8S20578C1[4]),  4,4},
  {&(_tg__ZTV8S20578C8__12S20578C13_nt12S20578C12_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV12S20578C14_nt12S20578C13_nt__12S20578C12_nt__8S20578C1[4]),  4,4},
  {&(_tg__ZTV11S20578C7_nt12S20578C13_nt__A1__12S20578C12_nt__8S20578C1[3]),  3,3},
  {&(_tg__ZTV12S20578C14_nt12S20578C13_nt__12S20578C12_nt__8S20578C1[4]),  4,4},
  {&(_tg__ZTV8S20578C812S20578C13_nt__12S20578C12_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV12S20578C11_nt__A1__12S20578C12_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV8S20578C8__A1__12S20578C12_nt__8S20578C1[4]),  4,6},
  {&(_tg__ZTV12S20578C15_nt__8S20578C1[6]),  6,8},
  {&(_tg__ZTV11S20578C3_nt12S20578C15_nt__A1__8S20578C1[5]),  5,7},
  {&(_tg__ZTV11S20578C4_nt11S20578C3_nt12S20578C15_nt__A1__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C6_nt__11S20578C3_nt12S20578C15_nt__A1__8S20578C1[4]),  4,6},
  {&(_tg__ZTV8S20578C8__11S20578C3_nt12S20578C15_nt__A1__8S20578C1[4]),  4,6},
  {&(_tg__ZTV12S20578C16_nt__12S20578C15_nt__8S20578C1[4]),  4,6},
  {&(_tg__ZTV8S20578C812S20578C16_nt__12S20578C15_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C6_nt__12S20578C15_nt__8S20578C1[4]),  4,6},
  {&(_tg__ZTV8S20578C8__A1__12S20578C15_nt__8S20578C1[4]),  4,6},
  {&(_ZTV8S20578C1[47]),  47,90},
  {&(_ZTV8S20578C1[47]),  47,90},
  {&(_ZTV8S20578C1[53]),  53,90},
  {&(_ZTV8S20578C1[59]),  59,90},
  {&(_ZTV8S20578C1[67]),  67,90},
  {&(_ZTV8S20578C1[72]),  72,90},
  {&(_ZTV8S20578C1[21]),  21,90},
  {&(_ZTV8S20578C1[17]),  17,90},
  {&(_ZTV8S20578C1[21]),  21,90},
  {&(_ZTV8S20578C1[24]),  24,90},
  {&(_ZTV8S20578C1[77]),  77,90},
  {&(_ZTV8S20578C1[32]),  32,90},
  {&(_ZTV8S20578C1[83]),  83,90},
  {&(_ZTV8S20578C1[88]),  88,90},
  {&(_tg__ZTV8S20578C2__8S20578C1[9]),  9,11},
  {&(_tg__ZTV8S20578C2__8S20578C1[9]),  9,11},
  {&(_tg__ZTV11S20578C6_nt__8S20578C2__8S20578C1[4]),  4,6},
  {&(_tg__ZTV8S20578C8__8S20578C2__8S20578C1[4]),  4,6},
  {&(_tg__ZTV11S20578C9_nt__8S20578C2__8S20578C1[6]),  6,8},
  {&(_tg__ZTV12S20578C10_nt__8S20578C2__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C3_nt__8S20578C1[5]),  5,7},
  {&(_tg__ZTV11S20578C4_nt11S20578C3_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C6_nt__11S20578C3_nt__8S20578C1[4]),  4,6},
  {&(_tg__ZTV8S20578C8__11S20578C3_nt__8S20578C1[4]),  4,6},
  {&(_tg__ZTV11S20578C6_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt11S20578C6_nt__8S20578C1[3]),  3,3},
  {&(_tg__ZTV8S20578C8__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C9_nt__8S20578C1[5]),  5,7},
  {&(_tg__ZTV11S20578C6_nt__11S20578C9_nt__8S20578C1[4]),  4,6},
  {&(_tg__ZTV12S20578C10_nt__11S20578C9_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV11S20578C7_nt__A1__8S20578C1[3]),  3,3},
  {&(_tg__ZTV12S20578C16_nt__8S20578C1[3]),  3,5},
  {&(_tg__ZTV8S20578C812S20578C16_nt__A2__8S20578C1[3]),  3,5},
  {&(_tg__ZTV8S20578C8__12S20578C16_nt__8S20578C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20578C1[];
extern  VTBL_ENTRY _ZTV8S20578C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20578C1[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20578C9_ntD0Ev,_ZTv0_n12_N11S20578C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C9_ntD0Ev,_ZThn4_N11S20578C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20578C9_ntD1Ev,_ZTv0_n12_N11S20578C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N11S20578C9_ntD1Ev,_ZThn4_N11S20578C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20578C2D0Ev,_ZTv0_n12_N8S20578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20578C2D0Ev,_ZThn36_N8S20578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20578C2D1Ev,_ZTv0_n12_N8S20578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20578C2D1Ev,_ZThn36_N8S20578C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20578C2D0Ev,_ZTv0_n16_N8S20578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20578C2D0Ev,_ZThn28_N8S20578C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20578C2D0Ev,_ZThn16_N8S20578C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20578C2D1Ev,_ZTv0_n16_N8S20578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20578C2D1Ev,_ZThn28_N8S20578C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20578C2D1Ev,_ZThn16_N8S20578C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20578C2D0Ev,_ZTv0_n24_N8S20578C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20578C2D0Ev,_ZThn32_N8S20578C2D0Ev),
  (VTBL_ENTRY)_ZN8S20578C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20578C2D1Ev,_ZTv0_n24_N8S20578C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20578C2D1Ev,_ZThn32_N8S20578C2D1Ev),
  (VTBL_ENTRY)_ZN8S20578C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C15_ntD0Ev,_ZTv0_n16_N12S20578C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N12S20578C15_ntD0Ev,_ZThn52_N12S20578C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20578C15_ntD0Ev,_ZThn40_N12S20578C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N12S20578C15_ntD0Ev,_ZThn88_N12S20578C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C15_ntD1Ev,_ZTv0_n16_N12S20578C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N12S20578C15_ntD1Ev,_ZThn52_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20578C15_ntD1Ev,_ZThn40_N12S20578C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N12S20578C15_ntD1Ev,_ZThn88_N12S20578C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD0Ev,_ZTv0_n16_N11S20578C3_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20578C3_ntD0Ev,_ZThn28_N11S20578C3_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20578C3_ntD0Ev,_ZThn16_N11S20578C3_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N11S20578C3_ntD0Ev,_ZThn52_N11S20578C3_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N11S20578C3_ntD0Ev,_ZThn40_N11S20578C3_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20578C3_ntD1Ev,_ZTv0_n16_N11S20578C3_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20578C3_ntD1Ev,_ZThn28_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20578C3_ntD1Ev,_ZThn16_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N11S20578C3_ntD1Ev,_ZThn52_N11S20578C3_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N11S20578C3_ntD1Ev,_ZThn40_N11S20578C3_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C12_ntD0Ev,_ZTv0_n16_N12S20578C12_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N12S20578C12_ntD0Ev,_ZThn84_N12S20578C12_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20578C12_ntD1Ev,_ZTv0_n16_N12S20578C12_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N12S20578C12_ntD1Ev,_ZThn84_N12S20578C12_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20578C12_ntD0Ev,_ZTv0_n12_N12S20578C12_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N12S20578C12_ntD0Ev,_ZThn108_N12S20578C12_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20578C12_ntD1Ev,_ZTv0_n12_N12S20578C12_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N12S20578C12_ntD1Ev,_ZThn108_N12S20578C12_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20578C1D0Ev,_ZTv0_n12_N8S20578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20578C1D0Ev,_ZThn108_N8S20578C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20578C1D0Ev,_ZThn92_N8S20578C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20578C1D1Ev,_ZTv0_n12_N8S20578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20578C1D1Ev,_ZThn108_N8S20578C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20578C1D1Ev,_ZThn92_N8S20578C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20578C1D0Ev,_ZTv0_n16_N8S20578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20578C1D0Ev,_ZThn120_N8S20578C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20578C1D0Ev,_ZThn84_N8S20578C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20578C1D0Ev,_ZThn72_N8S20578C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20578C1D1Ev,_ZTv0_n16_N8S20578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20578C1D1Ev,_ZThn120_N8S20578C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20578C1D1Ev,_ZThn84_N8S20578C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20578C1D1Ev,_ZThn72_N8S20578C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20578C1D0Ev,_ZTv0_n24_N8S20578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20578C1D0Ev,_ZThn88_N8S20578C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20578C1D0Ev,_ZThn56_N8S20578C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20578C1D1Ev,_ZTv0_n24_N8S20578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20578C1D1Ev,_ZThn88_N8S20578C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20578C1D1Ev,_ZThn56_N8S20578C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20578C1 = {  "S20578C1", // class name
  bases_S20578C1, 30,
  &(vtc_S20578C1[0]), // expected_vtbl_contents
  &(vtt_S20578C1[0]), // expected_vtt_contents
  ABISELECT(240,140), // object size
  NSPAIRA(_ZTI8S20578C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20578C1),90, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20578C1),60, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21712C4  {
  int s21712c4f0[2];
  ::S4874C17_nt s21712c4f1;
  int s21712c4f2;
};
//SIG(-1 S21712C4) C1{ Fi[2] FC2{ Fl} Fi}



static void Test_S21712C4()
{
  {
    init_simple_test("S21712C4");
    S21712C4 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21712C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21712C4)");
    check_field_offset(lv, s21712c4f0, 0, "S21712C4.s21712c4f0");
    check_field_offset(lv, s21712c4f1, 8, "S21712C4.s21712c4f1");
    check_field_offset(lv, s21712c4f2, ABISELECT(16,12), "S21712C4.s21712c4f2");
  }
}
static Arrange_To_Call_Me vS21712C4(Test_S21712C4, "S21712C4", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21712C8_nt  {
  int s21712c8f0;
  void  mf21712c8(); // _ZN11S21712C8_nt9mf21712c8Ev
};
//SIG(-1 S21712C8_nt) C1{ m Fi}


void  S21712C8_nt ::mf21712c8(){}

//skip512 S21712C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S21712C8_nt[];
VTBL_ENTRY *P__ZTI11S21712C8_nt = _ZTI11S21712C8_nt; 
Class_Descriptor cd_S21712C8_nt = {  "S21712C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI11S21712C8_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  S21712C7_nt  : S21712C8_nt {
};
//SIG(-1 S21712C7_nt) C1{ BC2{ m Fi}}



//skip512 S21712C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
static Base_Class bases_S21712C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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  S21712C9_nt  {
  __tsi64 s21712c9f0[3];
  int s21712c9f1[4];
  ::S4874C17_nt s21712c9f2;
};
//SIG(-1 S21712C9_nt) C1{ FL[3] Fi[4] FC2{ Fl}}



//skip512 S21712C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21712C6  {
  ::S21712C7_nt s21712c6f0;
  int s21712c6f1[2];
  long s21712c6f2;
  int s21712c6f3[2];
  ::S21712C9_nt s21712c6f4;
  long s21712c6f5;
  int s21712c6f6[2];
  ::S4874C17_nt s21712c6f7;
  long s21712c6f8;
  int s21712c6f9;
  ::S21712C9_nt s21712c6f10;
  int s21712c6f11;
};
//SIG(-1 S21712C6) C1{ FC2{ BC3{ m Fi}} Fi[2] Fl Fi[2] FC4{ FL[3] Fi[4] FC5{ Fl}} Fl Fi[2] FC5 Fl Fi FC4 Fi}



static void Test_S21712C6()
{
  {
    init_simple_test("S21712C6");
    S21712C6 lv;
    check2(sizeof(lv), ABISELECT(176,140), "sizeof(S21712C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21712C6)");
    check_field_offset(lv, s21712c6f0, 0, "S21712C6.s21712c6f0");
    check_field_offset(lv, s21712c6f1, 4, "S21712C6.s21712c6f1");
    check_field_offset(lv, s21712c6f2, ABISELECT(16,12), "S21712C6.s21712c6f2");
    check_field_offset(lv, s21712c6f3, ABISELECT(24,16), "S21712C6.s21712c6f3");
    check_field_offset(lv, s21712c6f4, ABISELECT(32,24), "S21712C6.s21712c6f4");
    check_field_offset(lv, s21712c6f5, ABISELECT(80,68), "S21712C6.s21712c6f5");
    check_field_offset(lv, s21712c6f6, ABISELECT(88,72), "S21712C6.s21712c6f6");
    check_field_offset(lv, s21712c6f7, ABISELECT(96,80), "S21712C6.s21712c6f7");
    check_field_offset(lv, s21712c6f8, ABISELECT(104,84), "S21712C6.s21712c6f8");
    check_field_offset(lv, s21712c6f9, ABISELECT(112,88), "S21712C6.s21712c6f9");
    check_field_offset(lv, s21712c6f10, ABISELECT(120,92), "S21712C6.s21712c6f10");
    check_field_offset(lv, s21712c6f11, ABISELECT(168,136), "S21712C6.s21712c6f11");
  }
}
static Arrange_To_Call_Me vS21712C6(Test_S21712C6, "S21712C6", ABISELECT(176,140));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21712C12  {
  int s21712c12f0;
  ::S8516C26 s21712c12f1;
  int s21712c12f2;
  ::S4874C17_nt s21712c12f3;
};
//SIG(-1 S21712C12) C1{ Fi FC2{ Fi[4]} Fi FC3{ Fl}}



static void Test_S21712C12()
{
  {
    init_simple_test("S21712C12");
    S21712C12 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S21712C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21712C12)");
    check_field_offset(lv, s21712c12f0, 0, "S21712C12.s21712c12f0");
    check_field_offset(lv, s21712c12f1, 4, "S21712C12.s21712c12f1");
    check_field_offset(lv, s21712c12f2, 20, "S21712C12.s21712c12f2");
    check_field_offset(lv, s21712c12f3, 24, "S21712C12.s21712c12f3");
  }
}
static Arrange_To_Call_Me vS21712C12(Test_S21712C12, "S21712C12", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21712C10  {
  ::S21712C7_nt s21712c10f0;
  int s21712c10f1[6];
  ::S21712C12 s21712c10f2;
};
//SIG(-1 S21712C10) C1{ FC2{ BC3{ m Fi}} Fi[6] FC4{ Fi FC5{ Fi[4]} Fi FC6{ Fl}}}



static void Test_S21712C10()
{
  {
    init_simple_test("S21712C10");
    S21712C10 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S21712C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21712C10)");
    check_field_offset(lv, s21712c10f0, 0, "S21712C10.s21712c10f0");
    check_field_offset(lv, s21712c10f1, 4, "S21712C10.s21712c10f1");
    check_field_offset(lv, s21712c10f2, ABISELECT(32,28), "S21712C10.s21712c10f2");
  }
}
static Arrange_To_Call_Me vS21712C10(Test_S21712C10, "S21712C10", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21712C2  {
  int s21712c2f0;
  ::S3280C8_nt s21712c2f1;
  int s21712c2f2[2];
  char s21712c2f3[2];
  ::S21712C4 s21712c2f4;
  ::S21712C6 s21712c2f5;
  ::S21712C10 s21712c2f6;
};
//SIG(1 S21712C2) C1{ Fi FC2{ m Fi} Fi[2] Fc[2] FC3{ Fi[2] FC4{ Fl} Fi} FC5{ FC6{ BC7{ m Fi}} Fi[2] Fl Fi[2] FC8{ FL[3] Fi[4] FC4} Fl Fi[2] FC4 Fl Fi FC8 Fi} FC9{ FC6 Fi[6] FC10{ Fi FC11{ Fi[4]} Fi FC4}}}



static void Test_S21712C2()
{
  {
    init_simple_test("S21712C2");
    S21712C2 lv;
    check2(sizeof(lv), ABISELECT(288,232), "sizeof(S21712C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21712C2)");
    check_field_offset(lv, s21712c2f0, 0, "S21712C2.s21712c2f0");
    check_field_offset(lv, s21712c2f1, 4, "S21712C2.s21712c2f1");
    check_field_offset(lv, s21712c2f2, 8, "S21712C2.s21712c2f2");
    check_field_offset(lv, s21712c2f3, 16, "S21712C2.s21712c2f3");
    check_field_offset(lv, s21712c2f4, ABISELECT(24,20), "S21712C2.s21712c2f4");
    check_field_offset(lv, s21712c2f5, ABISELECT(48,36), "S21712C2.s21712c2f5");
    check_field_offset(lv, s21712c2f6, ABISELECT(224,176), "S21712C2.s21712c2f6");
  }
}
static Arrange_To_Call_Me vS21712C2(Test_S21712C2, "S21712C2", ABISELECT(288,232));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21712C1  {
  void *s21712c1f0;
  ::S21712C2 s21712c1f1[8];
  char s21712c1f2;
  int s21712c1f3;
  ::S8516C4_nt s21712c1f4;
  int s21712c1f5;
  void  mf21712c1(); // _ZN8S21712C19mf21712c1Ev
  virtual  ~S21712C1(); // _ZN8S21712C1D1Ev
  S21712C1(); // tgen
};
//SIG(1 S21712C1) C1{ vd m Fp FC2{ Fi FC3{ m Fi} Fi[2] Fc[2] FC4{ Fi[2] FC5{ Fl} Fi} FC6{ FC7{ BC8{ m Fi}} Fi[2] Fl Fi[2] FC9{ FL[3] Fi[4] FC5} Fl Fi[2] FC5 Fl Fi FC9 Fi} FC10{ FC7 Fi[6] FC11{ Fi FC12{ Fi[4]} Fi FC5}}}[8] Fc Fi FC13{ Fl[4]} Fi}


void  S21712C1 ::mf21712c1(){}
 S21712C1 ::~S21712C1(){ note_dtor("S21712C1", this);}
S21712C1 ::S21712C1(){ note_ctor("S21712C1", this);} // tgen

static void Test_S21712C1()
{
  extern Class_Descriptor cd_S21712C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(297,474)];
    init_test(&cd_S21712C1, buf);
    S21712C1 *dp, &lv = *(dp=new (buf) S21712C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2368,1892), "sizeof(S21712C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21712C1)");
    check_field_offset(lv, s21712c1f0, ABISELECT(8,4), "S21712C1.s21712c1f0");
    check_field_offset(lv, s21712c1f1, ABISELECT(16,8), "S21712C1.s21712c1f1");
    check_field_offset(lv, s21712c1f2, ABISELECT(2320,1864), "S21712C1.s21712c1f2");
    check_field_offset(lv, s21712c1f3, ABISELECT(2324,1868), "S21712C1.s21712c1f3");
    check_field_offset(lv, s21712c1f4, ABISELECT(2328,1872), "S21712C1.s21712c1f4");
    check_field_offset(lv, s21712c1f5, ABISELECT(2360,1888), "S21712C1.s21712c1f5");
    test_class_info(&lv, &cd_S21712C1);
    dp->~S21712C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21712C1(Test_S21712C1, "S21712C1", ABISELECT(2368,1892));

#else // __cplusplus

extern void _ZN8S21712C1C1Ev();
extern void _ZN8S21712C1D1Ev();
Name_Map name_map_S21712C1[] = {
  NSPAIR(_ZN8S21712C1C1Ev),
  NSPAIR(_ZN8S21712C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21712C1[];
extern void _ZN8S21712C1D1Ev();
extern void _ZN8S21712C1D0Ev();
static  VTBL_ENTRY vtc_S21712C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21712C1[0]),
  (VTBL_ENTRY)&_ZN8S21712C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21712C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21712C1[];
extern  VTBL_ENTRY _ZTV8S21712C1[];
Class_Descriptor cd_S21712C1 = {  "S21712C1", // class name
  0,0,//no base classes
  &(vtc_S21712C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2368,1892), // object size
  NSPAIRA(_ZTI8S21712C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21712C1),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  S20125C2  {
  void *s20125c2f0;
  char s20125c2f1[2];
  virtual void  v3(); // _ZN8S20125C22v3Ev
  virtual void  v4(); // _ZN8S20125C22v4Ev
  virtual void  v5(); // _ZN8S20125C22v5Ev
  virtual void  v6(); // _ZN8S20125C22v6Ev
  ~S20125C2(); // tgen
  S20125C2(); // tgen
};
//SIG(-1 S20125C2) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S20125C2 ::v3(){vfunc_called(this, "_ZN8S20125C22v3Ev");}
void  S20125C2 ::v4(){vfunc_called(this, "_ZN8S20125C22v4Ev");}
void  S20125C2 ::v5(){vfunc_called(this, "_ZN8S20125C22v5Ev");}
void  S20125C2 ::v6(){vfunc_called(this, "_ZN8S20125C22v6Ev");}
S20125C2 ::~S20125C2(){ note_dtor("S20125C2", this);} // tgen
S20125C2 ::S20125C2(){ note_ctor("S20125C2", this);} // tgen

static void Test_S20125C2()
{
  extern Class_Descriptor cd_S20125C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20125C2, buf);
    S20125C2 *dp, &lv = *(dp=new (buf) S20125C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20125C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20125C2)");
    check_field_offset(lv, s20125c2f0, ABISELECT(8,4), "S20125C2.s20125c2f0");
    check_field_offset(lv, s20125c2f1, ABISELECT(16,8), "S20125C2.s20125c2f1");
    test_class_info(&lv, &cd_S20125C2);
    dp->~S20125C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C2(Test_S20125C2, "S20125C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20125C2C1Ev();
extern void _ZN8S20125C2D1Ev();
Name_Map name_map_S20125C2[] = {
  NSPAIR(_ZN8S20125C2C1Ev),
  NSPAIR(_ZN8S20125C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20125C2[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY vtc_S20125C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C2[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
Class_Descriptor cd_S20125C2 = {  "S20125C2", // class name
  0,0,//no base classes
  &(vtc_S20125C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20125C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20125C2),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  S20125C5  : S20125C2 {
  void *s20125c5f0[4];
  ~S20125C5(); // tgen
  S20125C5(); // tgen
};
//SIG(-1 S20125C5) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S20125C5()
{
  extern Class_Descriptor cd_S20125C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20125C5, buf);
    S20125C5 *dp, &lv = *(dp=new (buf) S20125C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20125C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20125C5)");
    check_base_class_offset(lv, (S20125C2*), 0, "S20125C5");
    check_field_offset(lv, s20125c5f0, ABISELECT(24,12), "S20125C5.s20125c5f0");
    test_class_info(&lv, &cd_S20125C5);
    dp->~S20125C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C5(Test_S20125C5, "S20125C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20125C5C1Ev();
extern void _ZN8S20125C5D1Ev();
Name_Map name_map_S20125C5[] = {
  NSPAIR(_ZN8S20125C5C1Ev),
  NSPAIR(_ZN8S20125C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
static Base_Class bases_S20125C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20125C2,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20125C5[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY vtc_S20125C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C5[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
Class_Descriptor cd_S20125C5 = {  "S20125C5", // class name
  bases_S20125C5, 1,
  &(vtc_S20125C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20125C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20125C5),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  S20125C4  : S20125C5 {
  virtual void  v7(); // _ZN8S20125C42v7Ev
  virtual void  v8(); // _ZN8S20125C42v8Ev
  virtual void  v9(); // _ZN8S20125C42v9Ev
  ~S20125C4(); // tgen
  S20125C4(); // tgen
};
//SIG(-1 S20125C4) C1{ BC2{ BC3{ v4 v5 v6 v7 Fp Fc[2]} Fp[4]} v1 v2 v3}


void  S20125C4 ::v7(){vfunc_called(this, "_ZN8S20125C42v7Ev");}
void  S20125C4 ::v8(){vfunc_called(this, "_ZN8S20125C42v8Ev");}
void  S20125C4 ::v9(){vfunc_called(this, "_ZN8S20125C42v9Ev");}
S20125C4 ::~S20125C4(){ note_dtor("S20125C4", this);} // tgen
S20125C4 ::S20125C4(){ note_ctor("S20125C4", this);} // tgen

static void Test_S20125C4()
{
  extern Class_Descriptor cd_S20125C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20125C4, buf);
    S20125C4 *dp, &lv = *(dp=new (buf) S20125C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20125C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20125C4)");
    check_base_class_offset(lv, (S20125C2*)(S20125C5*), 0, "S20125C4");
    check_base_class_offset(lv, (S20125C5*), 0, "S20125C4");
    test_class_info(&lv, &cd_S20125C4);
    dp->~S20125C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C4(Test_S20125C4, "S20125C4", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20125C4C1Ev();
extern void _ZN8S20125C4D1Ev();
Name_Map name_map_S20125C4[] = {
  NSPAIR(_ZN8S20125C4C1Ev),
  NSPAIR(_ZN8S20125C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
static Base_Class bases_S20125C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20125C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20125C4[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C42v7Ev();
extern void _ZN8S20125C42v8Ev();
extern void _ZN8S20125C42v9Ev();
static  VTBL_ENTRY vtc_S20125C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C4[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v9Ev,
};
extern VTBL_ENTRY _ZTI8S20125C4[];
extern  VTBL_ENTRY _ZTV8S20125C4[];
Class_Descriptor cd_S20125C4 = {  "S20125C4", // class name
  bases_S20125C4, 2,
  &(vtc_S20125C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20125C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20125C4),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  S20125C6  : S20125C5 , virtual S20125C2 {
  int s20125c6f0;
  virtual  ~S20125C6(); // _ZN8S20125C6D2Ev
  virtual void  v10(); // _ZN8S20125C63v10Ev
  virtual void  v11(); // _ZN8S20125C63v11Ev
  virtual void  v12(); // _ZN8S20125C63v12Ev
  virtual void  v13(); // _ZN8S20125C63v13Ev
  virtual void  v14(); // _ZN8S20125C63v14Ev
  virtual void  v15(); // _ZN8S20125C63v15Ev
  virtual void  v16(); // _ZN8S20125C63v16Ev
  S20125C6(); // tgen
};
//SIG(-1 S20125C6) C1{ BC2{ BC3{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S20125C6 ::~S20125C6(){ note_dtor("S20125C6", this);}
void  S20125C6 ::v10(){vfunc_called(this, "_ZN8S20125C63v10Ev");}
void  S20125C6 ::v11(){vfunc_called(this, "_ZN8S20125C63v11Ev");}
void  S20125C6 ::v12(){vfunc_called(this, "_ZN8S20125C63v12Ev");}
void  S20125C6 ::v13(){vfunc_called(this, "_ZN8S20125C63v13Ev");}
void  S20125C6 ::v14(){vfunc_called(this, "_ZN8S20125C63v14Ev");}
void  S20125C6 ::v15(){vfunc_called(this, "_ZN8S20125C63v15Ev");}
void  S20125C6 ::v16(){vfunc_called(this, "_ZN8S20125C63v16Ev");}
S20125C6 ::S20125C6(){ note_ctor("S20125C6", this);} // tgen

static void Test_S20125C6()
{
  extern Class_Descriptor cd_S20125C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S20125C6, buf);
    S20125C6 *dp, &lv = *(dp=new (buf) S20125C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S20125C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20125C6)");
    check_base_class_offset(lv, (S20125C2*)(S20125C5*), 0, "S20125C6");
    check_base_class_offset(lv, (S20125C5*), 0, "S20125C6");
    /*is_ambiguous_... S20125C6::S20125C2 */ AMB_check_base_class_offset(lv, (S20125C2*), ABISELECT(64,32), "S20125C6");
    check_field_offset(lv, s20125c6f0, ABISELECT(56,28), "S20125C6.s20125c6f0");
    test_class_info(&lv, &cd_S20125C6);
    dp->~S20125C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C6(Test_S20125C6, "S20125C6", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN8S20125C6C1Ev();
extern void _ZN8S20125C6D2Ev();
Name_Map name_map_S20125C6[] = {
  NSPAIR(_ZN8S20125C6C1Ev),
  NSPAIR(_ZN8S20125C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
static Base_Class bases_S20125C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20125C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20125C2,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20125C6[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C6D1Ev();
extern void _ZN8S20125C6D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY vtc_S20125C6[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20125C6[];
static  VTT_ENTRY vtt_S20125C6[] = {
  {&(_ZTV8S20125C6[3]),  3,26},
  {&(_ZTV8S20125C6[22]),  22,26},
};
extern VTBL_ENTRY _ZTI8S20125C6[];
extern  VTBL_ENTRY _ZTV8S20125C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C6[];
Class_Descriptor cd_S20125C6 = {  "S20125C6", // class name
  bases_S20125C6, 3,
  &(vtc_S20125C6[0]), // expected_vtbl_contents
  &(vtt_S20125C6[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI8S20125C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20125C6),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20125C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20125C7  : S20125C5 , S20125C6 {
  virtual  ~S20125C7(); // _ZN8S20125C7D2Ev
  virtual void  v17(); // _ZN8S20125C73v17Ev
  virtual void  v18(); // _ZN8S20125C73v18Ev
  virtual void  v19(); // _ZN8S20125C73v19Ev
  virtual void  v20(); // _ZN8S20125C73v20Ev
  virtual void  v21(); // _ZN8S20125C73v21Ev
  virtual void  v22(); // _ZN8S20125C73v22Ev
  virtual void  v23(); // _ZN8S20125C73v23Ev
  virtual void  v24(); // _ZN8S20125C73v24Ev
  S20125C7(); // tgen
};
//SIG(-1 S20125C7) C1{ BC2{ BC3{ v9 v10 v11 v12 Fp Fc[2]} Fp[4]} BC4{ BC2 VBC3 vd v13 v14 v15 v16 v17 v18 v19 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S20125C7 ::~S20125C7(){ note_dtor("S20125C7", this);}
void  S20125C7 ::v17(){vfunc_called(this, "_ZN8S20125C73v17Ev");}
void  S20125C7 ::v18(){vfunc_called(this, "_ZN8S20125C73v18Ev");}
void  S20125C7 ::v19(){vfunc_called(this, "_ZN8S20125C73v19Ev");}
void  S20125C7 ::v20(){vfunc_called(this, "_ZN8S20125C73v20Ev");}
void  S20125C7 ::v21(){vfunc_called(this, "_ZN8S20125C73v21Ev");}
void  S20125C7 ::v22(){vfunc_called(this, "_ZN8S20125C73v22Ev");}
void  S20125C7 ::v23(){vfunc_called(this, "_ZN8S20125C73v23Ev");}
void  S20125C7 ::v24(){vfunc_called(this, "_ZN8S20125C73v24Ev");}
S20125C7 ::S20125C7(){ note_ctor("S20125C7", this);} // tgen

static void Test_S20125C7()
{
  extern Class_Descriptor cd_S20125C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[19];
    init_test(&cd_S20125C7, buf);
    S20125C7 *dp, &lv = *(dp=new (buf) S20125C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S20125C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20125C7)");
    /*is_ambiguous_... S20125C7::S20125C5 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C5*), 0, "S20125C7");
    /*is_ambiguous_... S20125C7::S20125C5 */ AMB_check_base_class_offset(lv, (S20125C5*), 0, "S20125C7");
    check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C6*), ABISELECT(56,28), "S20125C7");
    check_base_class_offset(lv, (S20125C5*)(S20125C6*), ABISELECT(56,28), "S20125C7");
    /*is_ambiguous_... S20125C6::S20125C2 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C6*), ABISELECT(120,60), "S20125C7");
    check_base_class_offset(lv, (S20125C6*), ABISELECT(56,28), "S20125C7");
    test_class_info(&lv, &cd_S20125C7);
    dp->~S20125C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C7(Test_S20125C7, "S20125C7", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S20125C7C1Ev();
extern void _ZN8S20125C7D2Ev();
Name_Map name_map_S20125C7[] = {
  NSPAIR(_ZN8S20125C7C1Ev),
  NSPAIR(_ZN8S20125C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C6;
extern VTBL_ENTRY _ZTI8S20125C6[];
extern  VTBL_ENTRY _ZTV8S20125C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C6[];
static Base_Class bases_S20125C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20125C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20125C2,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20125C5,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20125C2,    ABISELECT(120,60), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20125C6,    ABISELECT(56,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20125C7[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C7D1Ev();
extern void _ZN8S20125C7D0Ev();
extern void _ZN8S20125C73v17Ev();
extern void _ZN8S20125C73v18Ev();
extern void _ZN8S20125C73v19Ev();
extern void _ZN8S20125C73v20Ev();
extern void _ZN8S20125C73v21Ev();
extern void _ZN8S20125C73v22Ev();
extern void _ZN8S20125C73v23Ev();
extern void _ZN8S20125C73v24Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZThn56_N8S20125C7D1Ev,_ZThn28_N8S20125C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20125C7D0Ev,_ZThn28_N8S20125C7D0Ev)();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY vtc_S20125C7[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v24Ev,
  ABISELECT(64,32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20125C7D1Ev,_ZThn28_N8S20125C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20125C7D0Ev,_ZThn28_N8S20125C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S20125C7[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C6D1Ev();
extern void _ZN8S20125C6D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C6__8S20125C7[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A1__8S20125C6__8S20125C7[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
static  VTT_ENTRY vtt_S20125C7[] = {
  {&(_ZTV8S20125C7[3]),  3,43},
  {&(_tg__ZTV8S20125C6__8S20125C7[3]),  3,16},
  {&(_tg__ZTV8S20125C2__A1__8S20125C6__8S20125C7[6]),  6,10},
  {&(_ZTV8S20125C7[20]),  20,43},
  {&(_ZTV8S20125C7[39]),  39,43},
};
extern VTBL_ENTRY _ZTI8S20125C7[];
extern  VTBL_ENTRY _ZTV8S20125C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C7[];
Class_Descriptor cd_S20125C7 = {  "S20125C7", // class name
  bases_S20125C7, 6,
  &(vtc_S20125C7[0]), // expected_vtbl_contents
  &(vtt_S20125C7[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S20125C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20125C7),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20125C7),5, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20125C3  : virtual S20125C4 , S20125C6 , virtual S20125C7 {
  virtual  ~S20125C3(); // _ZN8S20125C3D2Ev
  virtual void  v25(); // _ZN8S20125C33v25Ev
  virtual void  v26(); // _ZN8S20125C33v26Ev
  virtual void  v27(); // _ZN8S20125C33v27Ev
  virtual void  v28(); // _ZN8S20125C33v28Ev
  virtual void  v29(); // _ZN8S20125C33v29Ev
  virtual void  v30(); // _ZN8S20125C33v30Ev
  virtual void  v31(); // _ZN8S20125C33v31Ev
  S20125C3(); // tgen
};
//SIG(-1 S20125C3) C1{ VBC2{ BC3{ BC4{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} v12 v13 v14} BC5{ BC3 VBC4 vd v15 v16 v17 v18 v19 v20 v21 Fi} VBC6{ BC3 BC5 vd v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 v4 v5 v6 v7}


 S20125C3 ::~S20125C3(){ note_dtor("S20125C3", this);}
void  S20125C3 ::v25(){vfunc_called(this, "_ZN8S20125C33v25Ev");}
void  S20125C3 ::v26(){vfunc_called(this, "_ZN8S20125C33v26Ev");}
void  S20125C3 ::v27(){vfunc_called(this, "_ZN8S20125C33v27Ev");}
void  S20125C3 ::v28(){vfunc_called(this, "_ZN8S20125C33v28Ev");}
void  S20125C3 ::v29(){vfunc_called(this, "_ZN8S20125C33v29Ev");}
void  S20125C3 ::v30(){vfunc_called(this, "_ZN8S20125C33v30Ev");}
void  S20125C3 ::v31(){vfunc_called(this, "_ZN8S20125C33v31Ev");}
S20125C3 ::S20125C3(){ note_ctor("S20125C3", this);} // tgen

static void Test_S20125C3()
{
  extern Class_Descriptor cd_S20125C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[34];
    init_test(&cd_S20125C3, buf);
    S20125C3 *dp, &lv = *(dp=new (buf) S20125C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,132), "sizeof(S20125C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20125C3)");
    check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C4*), ABISELECT(64,32), "S20125C3");
    check_base_class_offset(lv, (S20125C5*)(S20125C4*), ABISELECT(64,32), "S20125C3");
    check_base_class_offset(lv, (S20125C4*), ABISELECT(64,32), "S20125C3");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C6*), 0, "S20125C3");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C5*)(S20125C6*), 0, "S20125C3");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C6*), ABISELECT(120,60), "S20125C3");
    /*is_ambiguous_... S20125C6::S20125C2 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C6*)(S20125C7*), ABISELECT(120,60), "S20125C3");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C6*), 0, "S20125C3");
    /*is_ambiguous_... S20125C7::S20125C5 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C7*), ABISELECT(144,72), "S20125C3");
    /*is_ambiguous_... S20125C7::S20125C5 */ AMB_check_base_class_offset(lv, (S20125C5*)(S20125C7*), ABISELECT(144,72), "S20125C3");
    check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C6*)(S20125C7*), ABISELECT(200,100), "S20125C3");
    check_base_class_offset(lv, (S20125C5*)(S20125C6*)(S20125C7*), ABISELECT(200,100), "S20125C3");
    check_base_class_offset(lv, (S20125C6*)(S20125C7*), ABISELECT(200,100), "S20125C3");
    check_base_class_offset(lv, (S20125C7*), ABISELECT(144,72), "S20125C3");
    test_class_info(&lv, &cd_S20125C3);
    dp->~S20125C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C3(Test_S20125C3, "S20125C3", ABISELECT(264,132));

#else // __cplusplus

extern void _ZN8S20125C3C1Ev();
extern void _ZN8S20125C3D2Ev();
Name_Map name_map_S20125C3[] = {
  NSPAIR(_ZN8S20125C3C1Ev),
  NSPAIR(_ZN8S20125C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C4;
extern VTBL_ENTRY _ZTI8S20125C4[];
extern  VTBL_ENTRY _ZTV8S20125C4[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C6;
extern VTBL_ENTRY _ZTI8S20125C6[];
extern  VTBL_ENTRY _ZTV8S20125C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C6[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C6;
extern VTBL_ENTRY _ZTI8S20125C6[];
extern  VTBL_ENTRY _ZTV8S20125C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C6[];
extern Class_Descriptor cd_S20125C7;
extern VTBL_ENTRY _ZTI8S20125C7[];
extern  VTBL_ENTRY _ZTV8S20125C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C7[];
static Base_Class bases_S20125C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20125C2,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20125C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20125C4,    ABISELECT(64,32), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20125C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20125C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20125C2,    ABISELECT(120,60), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20125C6,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20125C2,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20125C5,    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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20125C2,    ABISELECT(200,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20125C5,    ABISELECT(200,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20125C6,    ABISELECT(200,100), //bcp->offset
    88, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20125C7,    ABISELECT(144,72), //bcp->offset
    51, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20125C3[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C3D1Ev();
extern void _ZN8S20125C3D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
extern void _ZN8S20125C33v25Ev();
extern void _ZN8S20125C33v26Ev();
extern void _ZN8S20125C33v27Ev();
extern void _ZN8S20125C33v28Ev();
extern void _ZN8S20125C33v29Ev();
extern void _ZN8S20125C33v30Ev();
extern void _ZN8S20125C33v31Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C42v7Ev();
extern void _ZN8S20125C42v8Ev();
extern void _ZN8S20125C42v9Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S20125C3D1Ev,_ZTv0_n32_N8S20125C3D1Ev)();
extern void ABISELECT(_ZThn144_N8S20125C3D1Ev,_ZThn72_N8S20125C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20125C3D0Ev,_ZTv0_n32_N8S20125C3D0Ev)();
extern void ABISELECT(_ZThn144_N8S20125C3D0Ev,_ZThn72_N8S20125C3D0Ev)() __attribute__((weak));
extern void _ZN8S20125C73v17Ev();
extern void _ZN8S20125C73v18Ev();
extern void _ZN8S20125C73v19Ev();
extern void _ZN8S20125C73v20Ev();
extern void _ZN8S20125C73v21Ev();
extern void _ZN8S20125C73v22Ev();
extern void _ZN8S20125C73v23Ev();
extern void _ZN8S20125C73v24Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZTvn56_n64_N8S20125C3D1Ev,_ZTvn28_n32_N8S20125C3D1Ev)();
extern void ABISELECT(_ZTvn56_n64_N8S20125C3D0Ev,_ZTvn28_n32_N8S20125C3D0Ev)();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY vtc_S20125C3[] = {
  ABISELECT(144,72),
  ABISELECT(64,32),
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v25Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v27Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20125C3D1Ev,_ZTv0_n32_N8S20125C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20125C3D0Ev,_ZTv0_n32_N8S20125C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v24Ev,
  ABISELECT(-80,-40),
  ABISELECT(-200,-100),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20125C3D1Ev,_ZTvn28_n32_N8S20125C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20125C3D0Ev,_ZTvn28_n32_N8S20125C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern VTBL_ENTRY _ZTV8S20125C3[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C6D1Ev();
extern void _ZN8S20125C6D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C6__8S20125C3[] = {
  ABISELECT(120,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A1__8S20125C6__8S20125C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C7D1Ev();
extern void _ZN8S20125C7D0Ev();
extern void _ZN8S20125C73v17Ev();
extern void _ZN8S20125C73v18Ev();
extern void _ZN8S20125C73v19Ev();
extern void _ZN8S20125C73v20Ev();
extern void _ZN8S20125C73v21Ev();
extern void _ZN8S20125C73v22Ev();
extern void _ZN8S20125C73v23Ev();
extern void _ZN8S20125C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C7__8S20125C3[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v24Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C6D1Ev();
extern void _ZN8S20125C6D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C68S20125C7__A1__8S20125C3[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A1__8S20125C68S20125C7__A1__8S20125C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZThn56_N8S20125C7D1Ev,_ZThn28_N8S20125C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20125C7D0Ev,_ZThn28_N8S20125C7D0Ev)();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C6__8S20125C7__8S20125C3[] = {
  ABISELECT(-80,-40),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20125C7D1Ev,_ZThn28_N8S20125C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20125C7D0Ev,_ZThn28_N8S20125C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A2__8S20125C7__8S20125C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
static  VTT_ENTRY vtt_S20125C3[] = {
  {&(_ZTV8S20125C3[5]),  5,104},
  {&(_tg__ZTV8S20125C6__8S20125C3[3]),  3,16},
  {&(_tg__ZTV8S20125C2__A1__8S20125C6__8S20125C3[6]),  6,10},
  {&(_ZTV8S20125C3[34]),  34,104},
  {&(_ZTV8S20125C3[47]),  47,104},
  {&(_ZTV8S20125C3[74]),  74,104},
  {&(_ZTV8S20125C3[91]),  91,104},
  {&(_tg__ZTV8S20125C7__8S20125C3[3]),  3,17},
  {&(_tg__ZTV8S20125C68S20125C7__A1__8S20125C3[3]),  3,16},
  {&(_tg__ZTV8S20125C2__A1__8S20125C68S20125C7__A1__8S20125C3[6]),  6,10},
  {&(_tg__ZTV8S20125C6__8S20125C7__8S20125C3[3]),  3,16},
  {&(_tg__ZTV8S20125C2__A2__8S20125C7__8S20125C3[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20125C3[];
extern  VTBL_ENTRY _ZTV8S20125C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C3[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20125C3D0Ev,_ZTv0_n32_N8S20125C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20125C3D0Ev,_ZThn72_N8S20125C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20125C3D1Ev,_ZTv0_n32_N8S20125C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20125C3D1Ev,_ZThn72_N8S20125C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20125C3 = {  "S20125C3", // class name
  bases_S20125C3, 13,
  &(vtc_S20125C3[0]), // expected_vtbl_contents
  &(vtt_S20125C3[0]), // expected_vtt_contents
  ABISELECT(264,132), // object size
  NSPAIRA(_ZTI8S20125C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20125C3),104, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20125C3),12, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20125C8  {
  long double s20125c8f0;
  virtual void  v32(); // _ZN8S20125C83v32Ev
  ~S20125C8(); // tgen
  S20125C8(); // tgen
};
//SIG(-1 S20125C8) C1{ v1 FD}


void  S20125C8 ::v32(){vfunc_called(this, "_ZN8S20125C83v32Ev");}
S20125C8 ::~S20125C8(){ note_dtor("S20125C8", this);} // tgen
S20125C8 ::S20125C8(){ note_ctor("S20125C8", this);} // tgen

static void Test_S20125C8()
{
  extern Class_Descriptor cd_S20125C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S20125C8, buf);
    S20125C8 *dp, &lv = *(dp=new (buf) S20125C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20125C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20125C8)");
    check_field_offset(lv, s20125c8f0, ABISELECT(16,4), "S20125C8.s20125c8f0");
    test_class_info(&lv, &cd_S20125C8);
    dp->~S20125C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C8(Test_S20125C8, "S20125C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20125C8C1Ev();
extern void _ZN8S20125C8D1Ev();
Name_Map name_map_S20125C8[] = {
  NSPAIR(_ZN8S20125C8C1Ev),
  NSPAIR(_ZN8S20125C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20125C8[];
extern void _ZN8S20125C83v32Ev();
static  VTBL_ENTRY vtc_S20125C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C8[0]),
  (VTBL_ENTRY)&_ZN8S20125C83v32Ev,
};
extern VTBL_ENTRY _ZTI8S20125C8[];
extern  VTBL_ENTRY _ZTV8S20125C8[];
Class_Descriptor cd_S20125C8 = {  "S20125C8", // class name
  0,0,//no base classes
  &(vtc_S20125C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20125C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20125C8),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  S20125C1  : virtual S20125C2 , virtual S20125C3 , virtual S20125C8 {
  virtual  ~S20125C1(); // _ZN8S20125C1D2Ev
  virtual void  v1(); // _ZN8S20125C12v1Ev
  virtual void  v2(); // _ZN8S20125C12v2Ev
  S20125C1(); // tgen
};
//SIG(1 S20125C1) C1{ VBC2{ v3 v4 v5 v6 Fp Fc[2]} VBC3{ VBC4{ BC5{ BC2 Fp[4]} v7 v8 v9} BC6{ BC5 VBC2 vd v10 v11 v12 v13 v14 v15 v16 Fi} VBC7{ BC5 BC6 vd v17 v18 v19 v20 v21 v22 v23 v24} vd v25 v26 v27 v28 v29 v30 v31} VBC8{ v32 FD} vd v1 v2}


 S20125C1 ::~S20125C1(){ note_dtor("S20125C1", this);}
void  S20125C1 ::v1(){vfunc_called(this, "_ZN8S20125C12v1Ev");}
void  S20125C1 ::v2(){vfunc_called(this, "_ZN8S20125C12v2Ev");}
S20125C1 ::S20125C1(){ note_ctor("S20125C1", this);} // tgen

static void Test_S20125C1()
{
  extern Class_Descriptor cd_S20125C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,39)];
    init_test(&cd_S20125C1, buf);
    S20125C1 *dp, &lv = *(dp=new (buf) S20125C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,152), "sizeof(S20125C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20125C1)");
    /*is_ambiguous_... S20125C1::S20125C2 */ AMB_check_base_class_offset(lv, (S20125C2*), ABISELECT(8,4), "S20125C1");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C6*)(S20125C3*), ABISELECT(8,4), "S20125C1");
    /*is_ambiguous_... S20125C6::S20125C2 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C6*)(S20125C7*), ABISELECT(8,4), "S20125C1");
    check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C4*), ABISELECT(96,48), "S20125C1");
    check_base_class_offset(lv, (S20125C5*)(S20125C4*), ABISELECT(96,48), "S20125C1");
    check_base_class_offset(lv, (S20125C4*)(S20125C3*), ABISELECT(96,48), "S20125C1");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C6*)(S20125C3*), ABISELECT(32,16), "S20125C1");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C5*)(S20125C6*)(S20125C3*), ABISELECT(32,16), "S20125C1");
    /*is_ambiguous_... S20125C3::S20125C6 */ AMB_check_base_class_offset(lv, (S20125C6*)(S20125C3*), ABISELECT(32,16), "S20125C1");
    /*is_ambiguous_... S20125C7::S20125C5 */ AMB_check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C7*), ABISELECT(152,76), "S20125C1");
    /*is_ambiguous_... S20125C7::S20125C5 */ AMB_check_base_class_offset(lv, (S20125C5*)(S20125C7*), ABISELECT(152,76), "S20125C1");
    check_base_class_offset(lv, (S20125C2*)(S20125C5*)(S20125C6*)(S20125C7*), ABISELECT(208,104), "S20125C1");
    check_base_class_offset(lv, (S20125C5*)(S20125C6*)(S20125C7*), ABISELECT(208,104), "S20125C1");
    check_base_class_offset(lv, (S20125C6*)(S20125C7*), ABISELECT(208,104), "S20125C1");
    check_base_class_offset(lv, (S20125C7*)(S20125C3*), ABISELECT(152,76), "S20125C1");
    check_base_class_offset(lv, (S20125C3*), ABISELECT(32,16), "S20125C1");
    check_base_class_offset(lv, (S20125C8*), ABISELECT(272,136), "S20125C1");
    test_class_info(&lv, &cd_S20125C1);
    dp->~S20125C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20125C1(Test_S20125C1, "S20125C1", ABISELECT(304,152));

#else // __cplusplus

extern void _ZN8S20125C1C1Ev();
extern void _ZN8S20125C1D2Ev();
Name_Map name_map_S20125C1[] = {
  NSPAIR(_ZN8S20125C1C1Ev),
  NSPAIR(_ZN8S20125C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C4;
extern VTBL_ENTRY _ZTI8S20125C4[];
extern  VTBL_ENTRY _ZTV8S20125C4[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C6;
extern VTBL_ENTRY _ZTI8S20125C6[];
extern  VTBL_ENTRY _ZTV8S20125C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C6[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C2;
extern VTBL_ENTRY _ZTI8S20125C2[];
extern  VTBL_ENTRY _ZTV8S20125C2[];
extern Class_Descriptor cd_S20125C5;
extern VTBL_ENTRY _ZTI8S20125C5[];
extern  VTBL_ENTRY _ZTV8S20125C5[];
extern Class_Descriptor cd_S20125C6;
extern VTBL_ENTRY _ZTI8S20125C6[];
extern  VTBL_ENTRY _ZTV8S20125C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C6[];
extern Class_Descriptor cd_S20125C7;
extern VTBL_ENTRY _ZTI8S20125C7[];
extern  VTBL_ENTRY _ZTV8S20125C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C7[];
extern Class_Descriptor cd_S20125C3;
extern VTBL_ENTRY _ZTI8S20125C3[];
extern  VTBL_ENTRY _ZTV8S20125C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C3[];
extern Class_Descriptor cd_S20125C8;
extern VTBL_ENTRY _ZTI8S20125C8[];
extern  VTBL_ENTRY _ZTV8S20125C8[];
static Base_Class bases_S20125C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20125C2,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20125C2,    ABISELECT(96,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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20125C5,    ABISELECT(96,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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20125C4,    ABISELECT(96,48), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20125C2,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20125C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20125C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20125C2,    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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20125C5,    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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20125C2,    ABISELECT(208,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20125C5,    ABISELECT(208,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20125C6,    ABISELECT(208,104), //bcp->offset
    118, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20125C7,    ABISELECT(152,76), //bcp->offset
    81, //bcp->virtual_function_table_offset
    23, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20125C3,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20125C8,    ABISELECT(272,136), //bcp->offset
    134, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20125C1[];
extern void _ZN8S20125C1D1Ev();
extern void _ZN8S20125C1D0Ev();
extern void _ZN8S20125C12v1Ev();
extern void _ZN8S20125C12v2Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZTv0_n80_N8S20125C1D1Ev,_ZTv0_n40_N8S20125C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20125C1D1Ev,_ZThn16_N8S20125C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20125C1D0Ev,_ZTv0_n40_N8S20125C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20125C1D0Ev,_ZThn16_N8S20125C1D0Ev)() __attribute__((weak));
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
extern void _ZN8S20125C33v25Ev();
extern void _ZN8S20125C33v26Ev();
extern void _ZN8S20125C33v27Ev();
extern void _ZN8S20125C33v28Ev();
extern void _ZN8S20125C33v29Ev();
extern void _ZN8S20125C33v30Ev();
extern void _ZN8S20125C33v31Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C42v7Ev();
extern void _ZN8S20125C42v8Ev();
extern void _ZN8S20125C42v9Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S20125C1D1Ev,_ZTv0_n32_N8S20125C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S20125C1D1Ev,_ZThn76_N8S20125C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20125C1D0Ev,_ZTv0_n32_N8S20125C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S20125C1D0Ev,_ZThn76_N8S20125C1D0Ev)() __attribute__((weak));
extern void _ZN8S20125C73v17Ev();
extern void _ZN8S20125C73v18Ev();
extern void _ZN8S20125C73v19Ev();
extern void _ZN8S20125C73v20Ev();
extern void _ZN8S20125C73v21Ev();
extern void _ZN8S20125C73v22Ev();
extern void _ZN8S20125C73v23Ev();
extern void _ZN8S20125C73v24Ev();
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZTvn56_n64_N8S20125C1D1Ev,_ZTvn28_n32_N8S20125C1D1Ev)();
extern void ABISELECT(_ZTvn56_n64_N8S20125C1D0Ev,_ZTvn28_n32_N8S20125C1D0Ev)();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
extern void _ZN8S20125C83v32Ev();
static  VTBL_ENTRY vtc_S20125C1[] = {
  ABISELECT(272,136),
  ABISELECT(152,76),
  ABISELECT(96,48),
  ABISELECT(32,16),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C1[0]),
  (VTBL_ENTRY)&_ZN8S20125C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20125C12v2Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20125C1[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20125C1[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20125C1D1Ev,_ZTv0_n40_N8S20125C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20125C1D0Ev,_ZTv0_n40_N8S20125C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v25Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v27Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20125C1[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v9Ev,
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-76),
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S20125C1[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20125C1D1Ev,_ZTv0_n32_N8S20125C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20125C1D0Ev,_ZTv0_n32_N8S20125C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v24Ev,
  ABISELECT(-200,-100),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI8S20125C1[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20125C1D1Ev,_ZTvn28_n32_N8S20125C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20125C1D0Ev,_ZTvn28_n32_N8S20125C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S20125C1[0]),
  (VTBL_ENTRY)&_ZN8S20125C83v32Ev,
};
extern VTBL_ENTRY _ZTV8S20125C1[];
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C3D1Ev();
extern void _ZN8S20125C3D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
extern void _ZN8S20125C33v25Ev();
extern void _ZN8S20125C33v26Ev();
extern void _ZN8S20125C33v27Ev();
extern void _ZN8S20125C33v28Ev();
extern void _ZN8S20125C33v29Ev();
extern void _ZN8S20125C33v30Ev();
extern void _ZN8S20125C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C3__8S20125C1[] = {
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v25Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v26Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v27Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v28Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v29Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v30Ev,
  (VTBL_ENTRY)&_ZN8S20125C33v31Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C6D1Ev();
extern void _ZN8S20125C6D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C68S20125C3__8S20125C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A1__8S20125C68S20125C3__8S20125C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C42v7Ev();
extern void _ZN8S20125C42v8Ev();
extern void _ZN8S20125C42v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C4__8S20125C3__8S20125C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20125C42v9Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A2__8S20125C3__8S20125C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S20125C3D1Ev,_ZTv0_n32_N8S20125C3D1Ev)();
extern void ABISELECT(_ZThn120_N8S20125C3D1Ev,_ZThn60_N8S20125C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20125C3D0Ev,_ZTv0_n32_N8S20125C3D0Ev)();
extern void ABISELECT(_ZThn120_N8S20125C3D0Ev,_ZThn60_N8S20125C3D0Ev)() __attribute__((weak));
extern void _ZN8S20125C73v17Ev();
extern void _ZN8S20125C73v18Ev();
extern void _ZN8S20125C73v19Ev();
extern void _ZN8S20125C73v20Ev();
extern void _ZN8S20125C73v21Ev();
extern void _ZN8S20125C73v22Ev();
extern void _ZN8S20125C73v23Ev();
extern void _ZN8S20125C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C7__8S20125C3__8S20125C1[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(56,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20125C3D1Ev,_ZTv0_n32_N8S20125C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20125C3D0Ev,_ZTv0_n32_N8S20125C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v24Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZTvn56_n64_N8S20125C3D1Ev,_ZTvn28_n32_N8S20125C3D1Ev)();
extern void ABISELECT(_ZTvn56_n64_N8S20125C3D0Ev,_ZTvn28_n32_N8S20125C3D0Ev)();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C68S20125C7__A1__8S20125C3__8S20125C1[] = {
  ABISELECT(-200,-100),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20125C3[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20125C3D1Ev,_ZTvn28_n32_N8S20125C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n64_N8S20125C3D0Ev,_ZTvn28_n32_N8S20125C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C7D1Ev();
extern void _ZN8S20125C7D0Ev();
extern void _ZN8S20125C73v17Ev();
extern void _ZN8S20125C73v18Ev();
extern void _ZN8S20125C73v19Ev();
extern void _ZN8S20125C73v20Ev();
extern void _ZN8S20125C73v21Ev();
extern void _ZN8S20125C73v22Ev();
extern void _ZN8S20125C73v23Ev();
extern void _ZN8S20125C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C7__8S20125C1[] = {
  ABISELECT(-144,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20125C73v24Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void _ZN8S20125C6D1Ev();
extern void _ZN8S20125C6D0Ev();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C68S20125C7__A1__8S20125C1[] = {
  ABISELECT(-200,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20125C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A1__8S20125C68S20125C7__A1__8S20125C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(200,100),
  (VTBL_ENTRY)&(_ZTI8S20125C6[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
extern void ABISELECT(_ZThn56_N8S20125C7D1Ev,_ZThn28_N8S20125C7D1Ev)();
extern void ABISELECT(_ZThn56_N8S20125C7D0Ev,_ZThn28_N8S20125C7D0Ev)();
extern void _ZN8S20125C63v10Ev();
extern void _ZN8S20125C63v11Ev();
extern void _ZN8S20125C63v12Ev();
extern void _ZN8S20125C63v13Ev();
extern void _ZN8S20125C63v14Ev();
extern void _ZN8S20125C63v15Ev();
extern void _ZN8S20125C63v16Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C6__8S20125C7__8S20125C1[] = {
  ABISELECT(-200,-100),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20125C7D1Ev,_ZThn28_N8S20125C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20125C7D0Ev,_ZThn28_N8S20125C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20125C63v10Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v11Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20125C63v16Ev,
};
extern void _ZN8S20125C22v3Ev();
extern void _ZN8S20125C22v4Ev();
extern void _ZN8S20125C22v5Ev();
extern void _ZN8S20125C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20125C2__A2__8S20125C7__8S20125C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI8S20125C7[0]),
  (VTBL_ENTRY)&_ZN8S20125C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20125C22v6Ev,
};
static  VTT_ENTRY vtt_S20125C1[] = {
  {&(_ZTV8S20125C1[7]),  7,138},
  {&(_ZTV8S20125C1[17]),  17,138},
  {&(_ZTV8S20125C1[45]),  45,138},
  {&(_ZTV8S20125C1[74]),  74,138},
  {&(_ZTV8S20125C1[104]),  104,138},
  {&(_ZTV8S20125C1[121]),  121,138},
  {&(_ZTV8S20125C1[137]),  137,138},
  {&(_tg__ZTV8S20125C3__8S20125C1[5]),  5,25},
  {&(_tg__ZTV8S20125C68S20125C3__8S20125C1[3]),  3,16},
  {&(_tg__ZTV8S20125C2__A1__8S20125C68S20125C3__8S20125C1[6]),  6,10},
  {&(_tg__ZTV8S20125C4__8S20125C3__8S20125C1[9]),  9,16},
  {&(_tg__ZTV8S20125C2__A2__8S20125C3__8S20125C1[6]),  6,10},
  {&(_tg__ZTV8S20125C7__8S20125C3__8S20125C1[23]),  23,37},
  {&(_tg__ZTV8S20125C68S20125C7__A1__8S20125C3__8S20125C1[3]),  3,16},
  {&(_tg__ZTV8S20125C7__8S20125C1[3]),  3,17},
  {&(_tg__ZTV8S20125C68S20125C7__A1__8S20125C1[3]),  3,16},
  {&(_tg__ZTV8S20125C2__A1__8S20125C68S20125C7__A1__8S20125C1[6]),  6,10},
  {&(_tg__ZTV8S20125C6__8S20125C7__8S20125C1[3]),  3,16},
  {&(_tg__ZTV8S20125C2__A2__8S20125C7__8S20125C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20125C1[];
extern  VTBL_ENTRY _ZTV8S20125C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20125C1[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20125C3D0Ev,_ZTv0_n32_N8S20125C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20125C3D0Ev,_ZThn60_N8S20125C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20125C3D1Ev,_ZTv0_n32_N8S20125C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20125C3D1Ev,_ZThn60_N8S20125C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20125C1D0Ev,_ZTv0_n32_N8S20125C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20125C1D0Ev,_ZThn76_N8S20125C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20125C1D1Ev,_ZTv0_n32_N8S20125C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20125C1D1Ev,_ZThn76_N8S20125C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20125C1D0Ev,_ZTv0_n40_N8S20125C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20125C1D0Ev,_ZThn16_N8S20125C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20125C1D1Ev,_ZTv0_n40_N8S20125C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20125C1D1Ev,_ZThn16_N8S20125C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20125C1 = {  "S20125C1", // class name
  bases_S20125C1, 15,
  &(vtc_S20125C1[0]), // expected_vtbl_contents
  &(vtt_S20125C1[0]), // expected_vtt_contents
  ABISELECT(304,152), // object size
  NSPAIRA(_ZTI8S20125C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20125C1),138, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20125C1),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17189C2  {
  unsigned int s17189c2f0:1;
  int s17189c2f1:7;
  int s17189c2f2:2;
  int s17189c2f3:2;
  int s17189c2f4:2;
  int s17189c2f5:2;
  int s17189c2f6;
  void  mf17189c2(); // _ZN8S17189C29mf17189c2Ev
};
//SIG(-1 S17189C2) C1{ m Fi:1 Fi:7 Fi:2 Fi:2 Fi:2 Fi:2 Fi}


void  S17189C2 ::mf17189c2(){}

static void Test_S17189C2()
{
  {
    init_simple_test("S17189C2");
    static S17189C2 lv;
    check2(sizeof(lv), 8, "sizeof(S17189C2)");
    check2(__alignof__(lv), 4, "__alignof__(S17189C2)");
    set_bf_and_test(lv, s17189c2f0, 0, 0, 1, 1, "S17189C2");
    set_bf_and_test(lv, s17189c2f1, 0, 1, 7, 1, "S17189C2");
    set_bf_and_test(lv, s17189c2f1, 0, 1, 7, hide_sll(1LL<<6), "S17189C2");
    set_bf_and_test(lv, s17189c2f2, 1, 0, 2, 1, "S17189C2");
    set_bf_and_test(lv, s17189c2f2, 1, 0, 2, hide_sll(1LL<<1), "S17189C2");
    set_bf_and_test(lv, s17189c2f3, 1, 2, 2, 1, "S17189C2");
    set_bf_and_test(lv, s17189c2f3, 1, 2, 2, hide_sll(1LL<<1), "S17189C2");
    set_bf_and_test(lv, s17189c2f4, 1, 4, 2, 1, "S17189C2");
    set_bf_and_test(lv, s17189c2f4, 1, 4, 2, hide_sll(1LL<<1), "S17189C2");
    set_bf_and_test(lv, s17189c2f5, 1, 6, 2, 1, "S17189C2");
    set_bf_and_test(lv, s17189c2f5, 1, 6, 2, hide_sll(1LL<<1), "S17189C2");
    check_field_offset(lv, s17189c2f6, 4, "S17189C2.s17189c2f6");
  }
}
static Arrange_To_Call_Me vS17189C2(Test_S17189C2, "S17189C2", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17189C5_nt  {
  char s17189c5f0;
  char s17189c5f1[15];
  void  mf17189c5(); // _ZN11S17189C5_nt9mf17189c5Ev
};
//SIG(-1 S17189C5_nt) C1{ m Fc[16]}


void  S17189C5_nt ::mf17189c5(){}

//skip512 S17189C5_nt

#else // __cplusplus

Class_Descriptor cd_S17189C5_nt = {  "S17189C5_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  S17189C4_nt  : S17189C5_nt {
};
//SIG(-1 S17189C4_nt) C1{ BC2{ m Fc[16]}}



//skip512 S17189C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S17189C5_nt;
static Base_Class bases_S17189C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17189C5_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  S17189C7  {
  char s17189c7f0;
  char s17189c7f1[15];
  void  mf17189c7(); // _ZN8S17189C79mf17189c7Ev
};
//SIG(-1 S17189C7) C1{ m Fc[16]}


void  S17189C7 ::mf17189c7(){}

static void Test_S17189C7()
{
  {
    init_simple_test("S17189C7");
    S17189C7 lv;
    check2(sizeof(lv), 16, "sizeof(S17189C7)");
    check2(__alignof__(lv), 1, "__alignof__(S17189C7)");
    check_field_offset(lv, s17189c7f0, 0, "S17189C7.s17189c7f0");
    check_field_offset(lv, s17189c7f1, 1, "S17189C7.s17189c7f1");
  }
}
static Arrange_To_Call_Me vS17189C7(Test_S17189C7, "S17189C7", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17189C9_nt  {
  ::S17189C7 s17189c9f0;
  ::S17189C7 s17189c9f1;
  ::S17189C7 s17189c9f2;
  ::S17189C7 s17189c9f3;
  void  mf17189c9(); // _ZN11S17189C9_nt9mf17189c9Ev
};
//SIG(-1 S17189C9_nt) C1{ m FC2{ m Fc[16]} FC2 FC2 FC2}


void  S17189C9_nt ::mf17189c9(){}

//skip512 S17189C9_nt

#else // __cplusplus

Class_Descriptor cd_S17189C9_nt = {  "S17189C9_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  S17189C8_nt  : S17189C9_nt {
};
//SIG(-1 S17189C8_nt) C1{ BC2{ m FC3{ m Fc[16]} FC3 FC3 FC3}}



//skip512 S17189C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S17189C9_nt;
static Base_Class bases_S17189C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17189C9_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  S17189C3  {
  int s17189c3f0;
  ::S17189C4_nt s17189c3f1;
  ::S17189C4_nt s17189c3f2;
  ::S17189C4_nt s17189c3f3;
  ::S17189C4_nt s17189c3f4;
  ::S17189C4_nt s17189c3f5;
  int s17189c3f6[10];
  char s17189c3f7[3];
  ::S17189C4_nt s17189c3f8;
  int s17189c3f9[2];
  ::S17189C4_nt s17189c3f10;
  ::S17189C4_nt s17189c3f11;
  int s17189c3f12[4];
  ::S17189C4_nt s17189c3f13;
  int s17189c3f14[2];
  ::S17189C8_nt s17189c3f15;
  char s17189c3f16[2];
  void  mf17189c3(); // _ZN8S17189C39mf17189c3Ev
};
//SIG(-1 S17189C3) C1{ m Fi FC2{ BC3{ m Fc[16]}} FC2 FC2 FC2 FC2 Fi[10] Fc[3] FC2 Fi[2] FC2 FC2 Fi[4] FC2 Fi[2] FC4{ BC5{ m FC6{ m Fc[16]} FC6 FC6 FC6}} Fc[2]}


void  S17189C3 ::mf17189c3(){}

static void Test_S17189C3()
{
  {
    init_simple_test("S17189C3");
    S17189C3 lv;
    check2(sizeof(lv), 292, "sizeof(S17189C3)");
    check2(__alignof__(lv), 4, "__alignof__(S17189C3)");
    check_field_offset(lv, s17189c3f0, 0, "S17189C3.s17189c3f0");
    check_field_offset(lv, s17189c3f1, 4, "S17189C3.s17189c3f1");
    check_field_offset(lv, s17189c3f2, 20, "S17189C3.s17189c3f2");
    check_field_offset(lv, s17189c3f3, 36, "S17189C3.s17189c3f3");
    check_field_offset(lv, s17189c3f4, 52, "S17189C3.s17189c3f4");
    check_field_offset(lv, s17189c3f5, 68, "S17189C3.s17189c3f5");
    check_field_offset(lv, s17189c3f6, 84, "S17189C3.s17189c3f6");
    check_field_offset(lv, s17189c3f7, 124, "S17189C3.s17189c3f7");
    check_field_offset(lv, s17189c3f8, 127, "S17189C3.s17189c3f8");
    check_field_offset(lv, s17189c3f9, 144, "S17189C3.s17189c3f9");
    check_field_offset(lv, s17189c3f10, 152, "S17189C3.s17189c3f10");
    check_field_offset(lv, s17189c3f11, 168, "S17189C3.s17189c3f11");
    check_field_offset(lv, s17189c3f12, 184, "S17189C3.s17189c3f12");
    check_field_offset(lv, s17189c3f13, 200, "S17189C3.s17189c3f13");
    check_field_offset(lv, s17189c3f14, 216, "S17189C3.s17189c3f14");
    check_field_offset(lv, s17189c3f15, 224, "S17189C3.s17189c3f15");
    check_field_offset(lv, s17189c3f16, 288, "S17189C3.s17189c3f16");
  }
}
static Arrange_To_Call_Me vS17189C3(Test_S17189C3, "S17189C3", 292);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17189C1  {
  int s17189c1f0[3];
  ::S17189C2 s17189c1f1;
  ::S17189C3 s17189c1f2;
  char s17189c1f3;
  void  mf17189c1(); // _ZN8S17189C19mf17189c1Ev
};
//SIG(1 S17189C1) C1{ m Fi[3] FC2{ m Fi:1 Fi:7 Fi:2 Fi:2 Fi:2 Fi:2 Fi} FC3{ m Fi FC4{ BC5{ m Fc[16]}} FC4 FC4 FC4 FC4 Fi[10] Fc[3] FC4 Fi[2] FC4 FC4 Fi[4] FC4 Fi[2] FC6{ BC7{ m FC8{ m Fc[16]} FC8 FC8 FC8}} Fc[2]} Fc}


void  S17189C1 ::mf17189c1(){}

static void Test_S17189C1()
{
  {
    init_simple_test("S17189C1");
    static S17189C1 lv;
    check2(sizeof(lv), 316, "sizeof(S17189C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17189C1)");
    check_field_offset(lv, s17189c1f0, 0, "S17189C1.s17189c1f0");
    check_field_offset(lv, s17189c1f1, 12, "S17189C1.s17189c1f1");
    check_field_offset(lv, s17189c1f2, 20, "S17189C1.s17189c1f2");
    check_field_offset(lv, s17189c1f3, 312, "S17189C1.s17189c1f3");
  }
}
static Arrange_To_Call_Me vS17189C1(Test_S17189C1, "S17189C1", 316);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20605C5  {
  short s20605c5f0[2];
  void  mf20605c5(); // _ZN8S20605C59mf20605c5Ev
};
//SIG(-1 S20605C5) C1{ m Fs[2]}


void  S20605C5 ::mf20605c5(){}

static void Test_S20605C5()
{
  {
    init_simple_test("S20605C5");
    S20605C5 lv;
    check2(sizeof(lv), 4, "sizeof(S20605C5)");
    check2(__alignof__(lv), 2, "__alignof__(S20605C5)");
    check_field_offset(lv, s20605c5f0, 0, "S20605C5.s20605c5f0");
  }
}
static Arrange_To_Call_Me vS20605C5(Test_S20605C5, "S20605C5", 4);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20605C5[];
VTBL_ENTRY *P__ZTI8S20605C5 = _ZTI8S20605C5; 
Class_Descriptor cd_S20605C5 = {  "S20605C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI8S20605C5),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  S20605C4  : virtual S20605C5 {
  ::S20605C5 s20605c4f0;
  short s20605c4f1;
  int s20605c4f2;
  char s20605c4f3;
  ~S20605C4(); // tgen
  S20605C4(); // tgen
};
//SIG(-1 S20605C4) C1{ VBC2{ m Fs[2]} FC2 Fs Fi Fc}


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

static void Test_S20605C4()
{
  extern Class_Descriptor cd_S20605C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20605C4, buf);
    S20605C4 *dp, &lv = *(dp=new (buf) S20605C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20605C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20605C4)");
    check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20605C4");
    check_field_offset(lv, s20605c4f0, ABISELECT(8,4), "S20605C4.s20605c4f0");
    check_field_offset(lv, s20605c4f1, ABISELECT(12,8), "S20605C4.s20605c4f1");
    check_field_offset(lv, s20605c4f2, ABISELECT(16,12), "S20605C4.s20605c4f2");
    check_field_offset(lv, s20605c4f3, ABISELECT(20,16), "S20605C4.s20605c4f3");
    test_class_info(&lv, &cd_S20605C4);
    dp->~S20605C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C4(Test_S20605C4, "S20605C4", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20605C4C1Ev();
extern void _ZN8S20605C4D1Ev();
Name_Map name_map_S20605C4[] = {
  NSPAIR(_ZN8S20605C4C1Ev),
  NSPAIR(_ZN8S20605C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20605C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20605C4[];
static  VTBL_ENTRY vtc_S20605C4[] = {
  ABISELECT(22,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
extern VTBL_ENTRY _ZTV8S20605C4[];
static  VTT_ENTRY vtt_S20605C4[] = {
  {&(_ZTV8S20605C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
Class_Descriptor cd_S20605C4 = {  "S20605C4", // class name
  bases_S20605C4, 1,
  &(vtc_S20605C4[0]), // expected_vtbl_contents
  &(vtt_S20605C4[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20605C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20605C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20605C4),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  S20605C3  {
  char s20605c3f0;
  ::S20605C4 s20605c3f1[10];
  void  mf20605c3(); // _ZN8S20605C39mf20605c3Ev
};
//SIG(-1 S20605C3) C1{ m Fc FC2{ VBC3{ m Fs[2]} FC3 Fs Fi Fc}[10]}


void  S20605C3 ::mf20605c3(){}

static void Test_S20605C3()
{
  {
    init_simple_test("S20605C3");
    S20605C3 lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S20605C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20605C3)");
    check_field_offset(lv, s20605c3f0, 0, "S20605C3.s20605c3f0");
    check_field_offset(lv, s20605c3f1, ABISELECT(8,4), "S20605C3.s20605c3f1");
  }
}
static Arrange_To_Call_Me vS20605C3(Test_S20605C3, "S20605C3", ABISELECT(328,244));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S20605C7  {
  long double s20605c7f0;
  long s20605c7f1;
  virtual void  v2(); // _ZN8S20605C72v2Ev
  virtual void  v3(); // _ZN8S20605C72v3Ev
  virtual void  v4(); // _ZN8S20605C72v4Ev
  ~S20605C7(); // tgen
  S20605C7(); // tgen
};
//SIG(-1 S20605C7) C1{ v1 v2 v3 FD Fl}


void  S20605C7 ::v2(){vfunc_called(this, "_ZN8S20605C72v2Ev");}
void  S20605C7 ::v3(){vfunc_called(this, "_ZN8S20605C72v3Ev");}
void  S20605C7 ::v4(){vfunc_called(this, "_ZN8S20605C72v4Ev");}
S20605C7 ::~S20605C7(){ note_dtor("S20605C7", this);} // tgen
S20605C7 ::S20605C7(){ note_ctor("S20605C7", this);} // tgen

static void Test_S20605C7()
{
  extern Class_Descriptor cd_S20605C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20605C7, buf);
    S20605C7 *dp, &lv = *(dp=new (buf) S20605C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S20605C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C7)");
    check_field_offset(lv, s20605c7f0, ABISELECT(16,4), "S20605C7.s20605c7f0");
    check_field_offset(lv, s20605c7f1, ABISELECT(32,16), "S20605C7.s20605c7f1");
    test_class_info(&lv, &cd_S20605C7);
    dp->~S20605C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C7(Test_S20605C7, "S20605C7", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN8S20605C7C1Ev();
extern void _ZN8S20605C7D1Ev();
Name_Map name_map_S20605C7[] = {
  NSPAIR(_ZN8S20605C7C1Ev),
  NSPAIR(_ZN8S20605C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20605C7[];
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY vtc_S20605C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C7[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
extern VTBL_ENTRY _ZTI8S20605C7[];
extern  VTBL_ENTRY _ZTV8S20605C7[];
Class_Descriptor cd_S20605C7 = {  "S20605C7", // class name
  0,0,//no base classes
  &(vtc_S20605C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI8S20605C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20605C7),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  S20605C8  : S20605C4 , S20605C5 {
  long double s20605c8f0;
  void *s20605c8f1;
  ::S20605C3 s20605c8f2;
  virtual void  v5(); // _ZN8S20605C82v5Ev
  virtual void  v6(); // _ZN8S20605C82v6Ev
  ~S20605C8(); // tgen
  S20605C8(); // tgen
};
//SIG(-1 S20605C8) C1{ BC2{ VBC3{ m Fs[2]} FC3 Fs Fi Fc} BC3 v1 v2 FD Fp FC4{ m Fc FC2[10]}}


void  S20605C8 ::v5(){vfunc_called(this, "_ZN8S20605C82v5Ev");}
void  S20605C8 ::v6(){vfunc_called(this, "_ZN8S20605C82v6Ev");}
S20605C8 ::~S20605C8(){ note_dtor("S20605C8", this);} // tgen
S20605C8 ::S20605C8(){ note_ctor("S20605C8", this);} // tgen

static void Test_S20605C8()
{
  extern Class_Descriptor cd_S20605C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,73)];
    init_test(&cd_S20605C8, buf);
    S20605C8 *dp, &lv = *(dp=new (buf) S20605C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S20605C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C8)");
    check_base_class_offset(lv, (S20605C5*)(S20605C4*), ABISELECT(384,284), "S20605C8");
    check_base_class_offset(lv, (S20605C4*), 0, "S20605C8");
    /*is_ambiguous_... S20605C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20605C8");
    check_field_offset(lv, s20605c8f0, ABISELECT(32,24), "S20605C8.s20605c8f0");
    check_field_offset(lv, s20605c8f1, ABISELECT(48,36), "S20605C8.s20605c8f1");
    check_field_offset(lv, s20605c8f2, ABISELECT(56,40), "S20605C8.s20605c8f2");
    test_class_info(&lv, &cd_S20605C8);
    dp->~S20605C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C8(Test_S20605C8, "S20605C8", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN8S20605C8C1Ev();
extern void _ZN8S20605C8D1Ev();
Name_Map name_map_S20605C8[] = {
  NSPAIR(_ZN8S20605C8C1Ev),
  NSPAIR(_ZN8S20605C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20605C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(384,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20605C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20605C8[];
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY vtc_S20605C8[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C8[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S20605C8[];
static  VTBL_ENTRY _tg__ZTV8S20605C4__8S20605C8[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
static  VTT_ENTRY vtt_S20605C8[] = {
  {&(_ZTV8S20605C8[3]),  3,5},
  {&(_tg__ZTV8S20605C4__8S20605C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20605C8[];
extern  VTBL_ENTRY _ZTV8S20605C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C8[];
Class_Descriptor cd_S20605C8 = {  "S20605C8", // class name
  bases_S20605C8, 3,
  &(vtc_S20605C8[0]), // expected_vtbl_contents
  &(vtt_S20605C8[0]), // expected_vtt_contents
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI8S20605C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20605C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20605C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20605C6  : virtual S20605C7 , S20605C8 , virtual S20605C3 {
  virtual void  v7(); // _ZN8S20605C62v7Ev
  ~S20605C6(); // tgen
  S20605C6(); // tgen
};
//SIG(-1 S20605C6) C1{ VBC2{ v2 v3 v4 FD Fl} BC3{ BC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc} BC5 v5 v6 FD Fp FC6{ m Fc FC4[10]}} VBC6 v1}


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

static void Test_S20605C6()
{
  extern Class_Descriptor cd_S20605C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,139)];
    init_test(&cd_S20605C6, buf);
    S20605C6 *dp, &lv = *(dp=new (buf) S20605C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,552), "sizeof(S20605C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C6)");
    check_base_class_offset(lv, (S20605C7*), ABISELECT(384,284), "S20605C6");
    check_base_class_offset(lv, (S20605C5*)(S20605C4*)(S20605C8*), ABISELECT(424,304), "S20605C6");
    check_base_class_offset(lv, (S20605C4*)(S20605C8*), 0, "S20605C6");
    /*is_ambiguous_... S20605C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C8*), ABISELECT(22,18), "S20605C6");
    check_base_class_offset(lv, (S20605C8*), 0, "S20605C6");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(432,308), "S20605C6");
    test_class_info(&lv, &cd_S20605C6);
    dp->~S20605C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C6(Test_S20605C6, "S20605C6", ABISELECT(768,552));

#else // __cplusplus

extern void _ZN8S20605C6C1Ev();
extern void _ZN8S20605C6D1Ev();
Name_Map name_map_S20605C6[] = {
  NSPAIR(_ZN8S20605C6C1Ev),
  NSPAIR(_ZN8S20605C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C7;
extern VTBL_ENTRY _ZTI8S20605C7[];
extern  VTBL_ENTRY _ZTV8S20605C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C8;
extern VTBL_ENTRY _ZTI8S20605C8[];
extern  VTBL_ENTRY _ZTV8S20605C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C8[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20605C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C7,    ABISELECT(384,284), //bcp->offset
    8, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(424,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20605C4,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20605C8,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C3,    ABISELECT(432,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20605C6[];
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY vtc_S20605C6[] = {
  ABISELECT(432,308),
  ABISELECT(384,284),
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
extern VTBL_ENTRY _ZTV8S20605C6[];
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C8__8S20605C6[] = {
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C8[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C48S20605C8__8S20605C6[] = {
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
static  VTT_ENTRY vtt_S20605C6[] = {
  {&(_ZTV8S20605C6[5]),  5,16},
  {&(_tg__ZTV8S20605C8__8S20605C6[3]),  3,5},
  {&(_tg__ZTV8S20605C48S20605C8__8S20605C6[3]),  3,3},
  {&(_ZTV8S20605C6[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20605C6[];
extern  VTBL_ENTRY _ZTV8S20605C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C6[];
Class_Descriptor cd_S20605C6 = {  "S20605C6", // class name
  bases_S20605C6, 6,
  &(vtc_S20605C6[0]), // expected_vtbl_contents
  &(vtt_S20605C6[0]), // expected_vtt_contents
  ABISELECT(768,552), // object size
  NSPAIRA(_ZTI8S20605C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20605C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20605C6),4, //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  S20605C9  {
  long double s20605c9f0;
  virtual void  v8(); // _ZN8S20605C92v8Ev
  ~S20605C9(); // tgen
  S20605C9(); // tgen
};
//SIG(-1 S20605C9) C1{ v1 FD}


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

static void Test_S20605C9()
{
  extern Class_Descriptor cd_S20605C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S20605C9, buf);
    S20605C9 *dp, &lv = *(dp=new (buf) S20605C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20605C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C9)");
    check_field_offset(lv, s20605c9f0, ABISELECT(16,4), "S20605C9.s20605c9f0");
    test_class_info(&lv, &cd_S20605C9);
    dp->~S20605C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C9(Test_S20605C9, "S20605C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20605C9C1Ev();
extern void _ZN8S20605C9D1Ev();
Name_Map name_map_S20605C9[] = {
  NSPAIR(_ZN8S20605C9C1Ev),
  NSPAIR(_ZN8S20605C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20605C9[];
extern void _ZN8S20605C92v8Ev();
static  VTBL_ENTRY vtc_S20605C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C9[0]),
  (VTBL_ENTRY)&_ZN8S20605C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S20605C9[];
extern  VTBL_ENTRY _ZTV8S20605C9[];
Class_Descriptor cd_S20605C9 = {  "S20605C9", // class name
  0,0,//no base classes
  &(vtc_S20605C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20605C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20605C9),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  S20605C2  : virtual S20605C3 , S20605C6 , virtual S20605C9 , S20605C4 {
  ::S3465C9_nt s20605c2f0;
  void *s20605c2f1;
  int s20605c2f2;
  virtual  ~S20605C2(); // _ZN8S20605C2D2Ev
  virtual void  v9(); // _ZN8S20605C22v9Ev
  S20605C2(); // tgen
};
//SIG(-1 S20605C2) C1{ VBC2{ m Fc FC3{ VBC4{ m Fs[2]} FC4 Fs Fi Fc}[10]} BC5{ VBC6{ v2 v3 v4 FD Fl} BC7{ BC3 BC4 v5 v6 FD Fp FC2} VBC2 v7} VBC8{ v8 FD} BC3 vd v1 FC9{} Fp Fi}


 S20605C2 ::~S20605C2(){ note_dtor("S20605C2", this);}
void  S20605C2 ::v9(){vfunc_called(this, "_ZN8S20605C22v9Ev");}
S20605C2 ::S20605C2(){ note_ctor("S20605C2", this);} // tgen

static void Test_S20605C2()
{
  extern Class_Descriptor cd_S20605C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,150)];
    init_test(&cd_S20605C2, buf);
    S20605C2 *dp, &lv = *(dp=new (buf) S20605C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,596), "sizeof(S20605C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C2)");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(424,312), "S20605C2");
    check_base_class_offset(lv, (S20605C3*)(S20605C6*), ABISELECT(424,312), "S20605C2");
    check_base_class_offset(lv, (S20605C7*)(S20605C6*), ABISELECT(752,556), "S20605C2");
    check_base_class_offset(lv, (S20605C5*)(S20605C4*)(S20605C8*)(S20605C6*), ABISELECT(792,576), "S20605C2");
    /*is_ambiguous_... S20605C2::S20605C4 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C4*), ABISELECT(792,576), "S20605C2");
    check_base_class_offset(lv, (S20605C4*)(S20605C8*)(S20605C6*), 0, "S20605C2");
    /*is_ambiguous_... S20605C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C8*)(S20605C6*), ABISELECT(22,18), "S20605C2");
    check_base_class_offset(lv, (S20605C8*)(S20605C6*), 0, "S20605C2");
    check_base_class_offset(lv, (S20605C6*), 0, "S20605C2");
    check_base_class_offset(lv, (S20605C9*), ABISELECT(800,580), "S20605C2");
    /*is_ambiguous_... S20605C2::S20605C4 */ AMB_check_base_class_offset(lv, (S20605C4*), ABISELECT(384,284), "S20605C2");
    check_field_offset(lv, s20605c2f0, ABISELECT(405,301), "S20605C2.s20605c2f0");
    check_field_offset(lv, s20605c2f1, ABISELECT(408,304), "S20605C2.s20605c2f1");
    check_field_offset(lv, s20605c2f2, ABISELECT(416,308), "S20605C2.s20605c2f2");
    test_class_info(&lv, &cd_S20605C2);
    dp->~S20605C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C2(Test_S20605C2, "S20605C2", ABISELECT(832,596));

#else // __cplusplus

extern void _ZN8S20605C2C1Ev();
extern void _ZN8S20605C2D2Ev();
Name_Map name_map_S20605C2[] = {
  NSPAIR(_ZN8S20605C2C1Ev),
  NSPAIR(_ZN8S20605C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20605C7;
extern VTBL_ENTRY _ZTI8S20605C7[];
extern  VTBL_ENTRY _ZTV8S20605C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C8;
extern VTBL_ENTRY _ZTI8S20605C8[];
extern  VTBL_ENTRY _ZTV8S20605C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C8[];
extern Class_Descriptor cd_S20605C6;
extern VTBL_ENTRY _ZTI8S20605C6[];
extern  VTBL_ENTRY _ZTV8S20605C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C6[];
extern Class_Descriptor cd_S20605C9;
extern VTBL_ENTRY _ZTI8S20605C9[];
extern  VTBL_ENTRY _ZTV8S20605C9[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
static Base_Class bases_S20605C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C3,    ABISELECT(424,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C7,    ABISELECT(752,556), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20605C5,    ABISELECT(792,576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20605C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20605C8,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C9,    ABISELECT(800,580), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C4,    ABISELECT(384,284), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20605C2[];
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
extern void _ZN8S20605C2D1Ev();
extern void _ZN8S20605C2D0Ev();
extern void _ZN8S20605C22v9Ev();
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
extern void _ZN8S20605C92v8Ev();
static  VTBL_ENTRY vtc_S20605C2[] = {
  ABISELECT(800,580),
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20605C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20605C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20605C22v9Ev,
  ABISELECT(408,292),
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
  0,
  ABISELECT(-800,-580),
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
  (VTBL_ENTRY)&_ZN8S20605C92v8Ev,
};
extern VTBL_ENTRY _ZTV8S20605C2[];
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C6__8S20605C2[] = {
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C88S20605C6__8S20605C2[] = {
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C8[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C48S20605C88S20605C6__8S20605C2[] = {
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C7__8S20605C6__8S20605C2[] = {
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C4__A1__8S20605C2[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
static  VTT_ENTRY vtt_S20605C2[] = {
  {&(_ZTV8S20605C2[6]),  6,27},
  {&(_tg__ZTV8S20605C6__8S20605C2[5]),  5,8},
  {&(_tg__ZTV8S20605C88S20605C6__8S20605C2[3]),  3,5},
  {&(_tg__ZTV8S20605C48S20605C88S20605C6__8S20605C2[3]),  3,3},
  {&(_tg__ZTV8S20605C7__8S20605C6__8S20605C2[5]),  5,8},
  {&(_tg__ZTV8S20605C4__A1__8S20605C2[3]),  3,3},
  {&(_ZTV8S20605C2[20]),  20,27},
  {&(_ZTV8S20605C2[26]),  26,27},
  {&(_ZTV8S20605C2[15]),  15,27},
};
extern VTBL_ENTRY _ZTI8S20605C2[];
extern  VTBL_ENTRY _ZTV8S20605C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C2[];
Class_Descriptor cd_S20605C2 = {  "S20605C2", // class name
  bases_S20605C2, 9,
  &(vtc_S20605C2[0]), // expected_vtbl_contents
  &(vtt_S20605C2[0]), // expected_vtt_contents
  ABISELECT(832,596), // object size
  NSPAIRA(_ZTI8S20605C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20605C2),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20605C2),9, //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  S20605C11  : virtual S20605C8 {
  virtual  ~S20605C11(); // _ZN9S20605C11D2Ev
  S20605C11(); // tgen
};
//SIG(-1 S20605C11) C1{ VBC2{ BC3{ VBC4{ m Fs[2]} FC4 Fs Fi Fc} BC4 v1 v2 FD Fp FC5{ m Fc FC3[10]}} vd}


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

static void Test_S20605C11()
{
  extern Class_Descriptor cd_S20605C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,74)];
    init_test(&cd_S20605C11, buf);
    S20605C11 *dp, &lv = *(dp=new (buf) S20605C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,292), "sizeof(S20605C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C11)");
    check_base_class_offset(lv, (S20605C5*)(S20605C4*)(S20605C8*), ABISELECT(400,288), "S20605C11");
    check_base_class_offset(lv, (S20605C4*)(S20605C8*), ABISELECT(16,4), "S20605C11");
    /*is_ambiguous_... S20605C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C8*), ABISELECT(38,22), "S20605C11");
    check_base_class_offset(lv, (S20605C8*), ABISELECT(16,4), "S20605C11");
    test_class_info(&lv, &cd_S20605C11);
    dp->~S20605C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C11(Test_S20605C11, "S20605C11", ABISELECT(416,292));

#else // __cplusplus

extern void _ZN9S20605C11C1Ev();
extern void _ZN9S20605C11D2Ev();
Name_Map name_map_S20605C11[] = {
  NSPAIR(_ZN9S20605C11C1Ev),
  NSPAIR(_ZN9S20605C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C8;
extern VTBL_ENTRY _ZTI8S20605C8[];
extern  VTBL_ENTRY _ZTV8S20605C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C8[];
static Base_Class bases_S20605C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(400,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20605C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(38,22), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20605C8,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20605C11[];
extern void _ZN9S20605C11D1Ev();
extern void _ZN9S20605C11D0Ev();
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY vtc_S20605C11[] = {
  ABISELECT(400,288),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20605C11[0]),
  (VTBL_ENTRY)&_ZN9S20605C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20605C11D0Ev,
  0,
  0,
  ABISELECT(384,284),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20605C11[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
extern VTBL_ENTRY _ZTV9S20605C11[];
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C8__9S20605C11[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C8[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C48S20605C8__9S20605C11[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
static  VTT_ENTRY vtt_S20605C11[] = {
  {&(_ZTV9S20605C11[4]),  4,13},
  {&(_ZTV9S20605C11[11]),  11,13},
  {&(_tg__ZTV8S20605C8__9S20605C11[3]),  3,5},
  {&(_tg__ZTV8S20605C48S20605C8__9S20605C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20605C11[];
extern  VTBL_ENTRY _ZTV9S20605C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20605C11[];
Class_Descriptor cd_S20605C11 = {  "S20605C11", // class name
  bases_S20605C11, 4,
  &(vtc_S20605C11[0]), // expected_vtbl_contents
  &(vtt_S20605C11[0]), // expected_vtt_contents
  ABISELECT(416,292), // object size
  NSPAIRA(_ZTI9S20605C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20605C11),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20605C11),4, //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  S20605C12  : virtual S20605C7 , virtual S20605C3 {
  int s20605c12f0;
  ~S20605C12(); // tgen
  S20605C12(); // tgen
};
//SIG(-1 S20605C12) C1{ VBC2{ v1 v2 v3 FD Fl} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S20605C12()
{
  extern Class_Descriptor cd_S20605C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,69)];
    init_test(&cd_S20605C12, buf);
    S20605C12 *dp, &lv = *(dp=new (buf) S20605C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,272), "sizeof(S20605C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C12)");
    check_base_class_offset(lv, (S20605C7*), ABISELECT(16,8), "S20605C12");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,28), "S20605C12");
    check_field_offset(lv, s20605c12f0, ABISELECT(8,4), "S20605C12.s20605c12f0");
    test_class_info(&lv, &cd_S20605C12);
    dp->~S20605C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C12(Test_S20605C12, "S20605C12", ABISELECT(384,272));

#else // __cplusplus

extern void _ZN9S20605C12C1Ev();
extern void _ZN9S20605C12D1Ev();
Name_Map name_map_S20605C12[] = {
  NSPAIR(_ZN9S20605C12C1Ev),
  NSPAIR(_ZN9S20605C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C7;
extern VTBL_ENTRY _ZTI8S20605C7[];
extern  VTBL_ENTRY _ZTV8S20605C7[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20605C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C7,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20605C12[];
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY vtc_S20605C12[] = {
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20605C12[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20605C12[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
extern VTBL_ENTRY _ZTV9S20605C12[];
static  VTT_ENTRY vtt_S20605C12[] = {
  {&(_ZTV9S20605C12[4]),  4,12},
  {&(_ZTV9S20605C12[9]),  9,12},
};
extern VTBL_ENTRY _ZTI9S20605C12[];
extern  VTBL_ENTRY _ZTV9S20605C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20605C12[];
Class_Descriptor cd_S20605C12 = {  "S20605C12", // class name
  bases_S20605C12, 2,
  &(vtc_S20605C12[0]), // expected_vtbl_contents
  &(vtt_S20605C12[0]), // expected_vtt_contents
  ABISELECT(384,272), // object size
  NSPAIRA(_ZTI9S20605C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20605C12),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20605C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20605C13  {
  ::S20605C9 s20605c13f0;
  void  mf20605c13(); // _ZN9S20605C1310mf20605c13Ev
};
//SIG(-1 S20605C13) C1{ m FC2{ v1 FD}}


void  S20605C13 ::mf20605c13(){}

static void Test_S20605C13()
{
  {
    init_simple_test("S20605C13");
    S20605C13 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20605C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C13)");
    check_field_offset(lv, s20605c13f0, 0, "S20605C13.s20605c13f0");
  }
}
static Arrange_To_Call_Me vS20605C13(Test_S20605C13, "S20605C13", ABISELECT(32,16));

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S20605C1  : virtual S20605C2 , S20605C11 , S20605C6 , S20605C12 , S20605C13 {
  virtual  ~S20605C1(); // _ZN8S20605C1D2Ev
  virtual void  v1(); // _ZN8S20605C12v1Ev
  S20605C1(); // tgen
};
//SIG(1 S20605C1) C1{ VBC2{ VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} BC6{ VBC7{ v2 v3 v4 FD Fl} BC8{ BC4 BC5 v5 v6 FD Fp FC3} VBC3 v7} VBC9{ v8 FD} BC4 vd v9 FC10{} Fp Fi} BC11{ VBC8 vd} BC6 BC12{ VBC7 VBC3 Fi} BC13{ m FC9} vd v1}


 S20605C1 ::~S20605C1(){ note_dtor("S20605C1", this);}
void  S20605C1 ::v1(){vfunc_called(this, "_ZN8S20605C12v1Ev");}
S20605C1 ::S20605C1(){ note_ctor("S20605C1", this);} // tgen

static void Test_S20605C1()
{
  extern Class_Descriptor cd_S20605C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(105,299)];
    init_test(&cd_S20605C1, buf);
    S20605C1 *dp, &lv = *(dp=new (buf) S20605C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1192), "sizeof(S20605C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20605C1)");
    check_base_class_offset(lv, (S20605C3*)(S20605C2*), ABISELECT(872,624), "S20605C1");
    check_base_class_offset(lv, (S20605C3*)(S20605C6*)(S20605C2*), ABISELECT(872,624), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C6 */ AMB_check_base_class_offset(lv, (S20605C3*)(S20605C6*), ABISELECT(872,624), "S20605C1");
    check_base_class_offset(lv, (S20605C3*)(S20605C12*), ABISELECT(872,624), "S20605C1");
    check_base_class_offset(lv, (S20605C7*)(S20605C6*)(S20605C2*), ABISELECT(1200,868), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C6 */ AMB_check_base_class_offset(lv, (S20605C7*)(S20605C6*), ABISELECT(1200,868), "S20605C1");
    check_base_class_offset(lv, (S20605C7*)(S20605C12*), ABISELECT(1200,868), "S20605C1");
    check_base_class_offset(lv, (S20605C5*)(S20605C4*)(S20605C8*)(S20605C6*)(S20605C2*), ABISELECT(1240,888), "S20605C1");
    /*is_ambiguous_... S20605C2::S20605C4 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C4*)(S20605C2*), ABISELECT(1240,888), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C8 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C4*)(S20605C8*), ABISELECT(1240,888), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C4*)(S20605C8*)(S20605C6*), ABISELECT(1240,888), "S20605C1");
    check_base_class_offset(lv, (S20605C4*)(S20605C8*)(S20605C6*)(S20605C2*), ABISELECT(448,312), "S20605C1");
    /*is_ambiguous_... S20605C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C8*)(S20605C6*)(S20605C2*), ABISELECT(470,330), "S20605C1");
    check_base_class_offset(lv, (S20605C8*)(S20605C6*)(S20605C2*), ABISELECT(448,312), "S20605C1");
    check_base_class_offset(lv, (S20605C6*)(S20605C2*), ABISELECT(448,312), "S20605C1");
    check_base_class_offset(lv, (S20605C9*)(S20605C2*), ABISELECT(1248,892), "S20605C1");
    /*is_ambiguous_... S20605C2::S20605C4 */ AMB_check_base_class_offset(lv, (S20605C4*)(S20605C2*), ABISELECT(832,596), "S20605C1");
    check_base_class_offset(lv, (S20605C2*), ABISELECT(448,312), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C8 */ AMB_check_base_class_offset(lv, (S20605C4*)(S20605C8*), ABISELECT(1280,908), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C8 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C8*), ABISELECT(1302,926), "S20605C1");
    check_base_class_offset(lv, (S20605C8*)(S20605C11*), ABISELECT(1280,908), "S20605C1");
    check_base_class_offset(lv, (S20605C11*), 0, "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C6 */ AMB_check_base_class_offset(lv, (S20605C4*)(S20605C8*)(S20605C6*), ABISELECT(16,4), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20605C8*)(S20605C6*), ABISELECT(38,22), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C6 */ AMB_check_base_class_offset(lv, (S20605C8*)(S20605C6*), ABISELECT(16,4), "S20605C1");
    /*is_ambiguous_... S20605C1::S20605C6 */ AMB_check_base_class_offset(lv, (S20605C6*), ABISELECT(16,4), "S20605C1");
    check_base_class_offset(lv, (S20605C12*), ABISELECT(400,288), "S20605C1");
    check_base_class_offset(lv, (S20605C13*), ABISELECT(416,296), "S20605C1");
    test_class_info(&lv, &cd_S20605C1);
    dp->~S20605C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20605C1(Test_S20605C1, "S20605C1", ABISELECT(1664,1192));

#else // __cplusplus

extern void _ZN8S20605C1C1Ev();
extern void _ZN8S20605C1D2Ev();
Name_Map name_map_S20605C1[] = {
  NSPAIR(_ZN8S20605C1C1Ev),
  NSPAIR(_ZN8S20605C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20605C7;
extern VTBL_ENTRY _ZTI8S20605C7[];
extern  VTBL_ENTRY _ZTV8S20605C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C8;
extern VTBL_ENTRY _ZTI8S20605C8[];
extern  VTBL_ENTRY _ZTV8S20605C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C8[];
extern Class_Descriptor cd_S20605C6;
extern VTBL_ENTRY _ZTI8S20605C6[];
extern  VTBL_ENTRY _ZTV8S20605C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C6[];
extern Class_Descriptor cd_S20605C9;
extern VTBL_ENTRY _ZTI8S20605C9[];
extern  VTBL_ENTRY _ZTV8S20605C9[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C2;
extern VTBL_ENTRY _ZTI8S20605C2[];
extern  VTBL_ENTRY _ZTV8S20605C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C2[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C8;
extern VTBL_ENTRY _ZTI8S20605C8[];
extern  VTBL_ENTRY _ZTV8S20605C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C8[];
extern Class_Descriptor cd_S20605C11;
extern VTBL_ENTRY _ZTI9S20605C11[];
extern  VTBL_ENTRY _ZTV9S20605C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20605C11[];
extern Class_Descriptor cd_S20605C4;
extern VTBL_ENTRY _ZTI8S20605C4[];
extern  VTBL_ENTRY _ZTV8S20605C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20605C8;
extern VTBL_ENTRY _ZTI8S20605C8[];
extern  VTBL_ENTRY _ZTV8S20605C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C8[];
extern Class_Descriptor cd_S20605C6;
extern VTBL_ENTRY _ZTI8S20605C6[];
extern  VTBL_ENTRY _ZTV8S20605C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C6[];
extern Class_Descriptor cd_S20605C12;
extern VTBL_ENTRY _ZTI9S20605C12[];
extern  VTBL_ENTRY _ZTV9S20605C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20605C12[];
extern Class_Descriptor cd_S20605C13;
extern VTBL_ENTRY _ZTI9S20605C13[];
static Base_Class bases_S20605C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C3,    ABISELECT(872,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20605C7,    ABISELECT(1200,868), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20605C5,    ABISELECT(1240,888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20605C4,    ABISELECT(448,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(470,330), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20605C8,    ABISELECT(448,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C6,    ABISELECT(448,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20605C9,    ABISELECT(1248,892), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20605C4,    ABISELECT(832,596), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20605C2,    ABISELECT(448,312), //bcp->offset
    23, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C4,    ABISELECT(1280,908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(1302,926), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20605C8,    ABISELECT(1280,908), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20605C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(38,22), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20605C8,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20605C6,    ABISELECT(16,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C12,    ABISELECT(400,288), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C13,    ABISELECT(416,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20605C1[];
extern void _ZN8S20605C1D1Ev();
extern void _ZN8S20605C1D0Ev();
extern void _ZN8S20605C12v1Ev();
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20605C1D1Ev,_ZTv0_n40_N8S20605C1D1Ev)();
extern void ABISELECT(_ZThn448_N8S20605C1D1Ev,_ZThn312_N8S20605C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20605C1D0Ev,_ZTv0_n40_N8S20605C1D0Ev)();
extern void ABISELECT(_ZThn448_N8S20605C1D0Ev,_ZThn312_N8S20605C1D0Ev)() __attribute__((weak));
extern void _ZN8S20605C22v9Ev();
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
extern void _ZN8S20605C92v8Ev();
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY vtc_S20605C1[] = {
  ABISELECT(1248,892),
  ABISELECT(1200,868),
  ABISELECT(872,624),
  ABISELECT(448,312),
  ABISELECT(1240,888),
  ABISELECT(1280,908),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  (VTBL_ENTRY)&_ZN8S20605C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20605C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20605C12v1Ev,
  ABISELECT(856,620),
  ABISELECT(1184,864),
  ABISELECT(1224,884),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
  ABISELECT(472,336),
  ABISELECT(800,580),
  ABISELECT(-400,-288),
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  0,
  ABISELECT(-448,-312),
  0,
  0,
  0,
  ABISELECT(800,580),
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,576),
  ABISELECT(-448,-312),
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20605C1D1Ev,_ZTv0_n40_N8S20605C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20605C1D0Ev,_ZTv0_n40_N8S20605C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20605C22v9Ev,
  ABISELECT(408,292),
  ABISELECT(-832,-596),
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  0,
  0,
  0,
  ABISELECT(-1200,-868),
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
  0,
  ABISELECT(-1248,-892),
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  (VTBL_ENTRY)&_ZN8S20605C92v8Ev,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-1280,-908),
  (VTBL_ENTRY)&(_ZTI8S20605C1[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S20605C1[];
extern void _ZN9S20605C11D1Ev();
extern void _ZN9S20605C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20605C11__8S20605C1[] = {
  ABISELECT(1240,888),
  ABISELECT(1280,908),
  0,
  (VTBL_ENTRY)&(_ZTI9S20605C11[0]),
  (VTBL_ENTRY)&_ZN9S20605C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20605C11D0Ev,
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C8__9S20605C11__8S20605C1[] = {
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-1280,-908),
  (VTBL_ENTRY)&(_ZTI9S20605C11[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C6__A1__8S20605C1[] = {
  ABISELECT(856,620),
  ABISELECT(1184,864),
  ABISELECT(1224,884),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C88S20605C6__A2__8S20605C1[] = {
  ABISELECT(1224,884),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C8[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C48S20605C88S20605C6__A3__8S20605C1[] = {
  ABISELECT(1224,884),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C7__8S20605C6__A1__8S20605C1[] = {
  0,
  0,
  0,
  ABISELECT(-1184,-864),
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20605C12__8S20605C1[] = {
  ABISELECT(472,336),
  ABISELECT(800,580),
  0,
  (VTBL_ENTRY)&(_ZTI9S20605C12[0]),
};
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C7__9S20605C12__8S20605C1[] = {
  0,
  0,
  0,
  ABISELECT(-800,-580),
  (VTBL_ENTRY)&(_ZTI9S20605C12[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
extern void _ZN8S20605C2D1Ev();
extern void _ZN8S20605C2D0Ev();
extern void _ZN8S20605C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C2__8S20605C1[] = {
  ABISELECT(800,580),
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20605C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20605C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20605C22v9Ev,
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
extern void _ZN8S20605C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C68S20605C2__8S20605C1[] = {
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20605C62v7Ev,
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C88S20605C68S20605C2__8S20605C1[] = {
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C8[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C48S20605C88S20605C68S20605C2__8S20605C1[] = {
  ABISELECT(792,576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C7__8S20605C68S20605C2__8S20605C1[] = {
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20605C6[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C48S20605C2__A1__8S20605C1[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
extern void _ZN8S20605C72v2Ev();
extern void _ZN8S20605C72v3Ev();
extern void _ZN8S20605C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C7__8S20605C2__8S20605C1[] = {
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
  (VTBL_ENTRY)&_ZN8S20605C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20605C72v4Ev,
};
extern void _ZN8S20605C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C9__8S20605C2__8S20605C1[] = {
  0,
  ABISELECT(-800,-580),
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
  (VTBL_ENTRY)&_ZN8S20605C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C4__A1__8S20605C2__8S20605C1[] = {
  ABISELECT(408,292),
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20605C2[0]),
};
extern void _ZN8S20605C82v5Ev();
extern void _ZN8S20605C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20605C8__A1__8S20605C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C8[0]),
  (VTBL_ENTRY)&_ZN8S20605C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20605C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20605C48S20605C8__A2__8S20605C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20605C4[0]),
};
static  VTT_ENTRY vtt_S20605C1[] = {
  {&(_ZTV8S20605C1[8]),  8,62},
  {&(_tg__ZTV9S20605C11__8S20605C1[4]),  4,6},
  {&(_tg__ZTV8S20605C8__9S20605C11__8S20605C1[5]),  5,7},
  {&(_tg__ZTV8S20605C6__A1__8S20605C1[5]),  5,8},
  {&(_tg__ZTV8S20605C88S20605C6__A2__8S20605C1[3]),  3,5},
  {&(_tg__ZTV8S20605C48S20605C88S20605C6__A3__8S20605C1[3]),  3,3},
  {&(_tg__ZTV8S20605C7__8S20605C6__A1__8S20605C1[5]),  5,8},
  {&(_tg__ZTV9S20605C12__8S20605C1[4]),  4,4},
  {&(_tg__ZTV8S20605C7__9S20605C12__8S20605C1[5]),  5,8},
  {&(_ZTV8S20605C1[34]),  34,62},
  {&(_ZTV8S20605C1[48]),  48,62},
  {&(_ZTV8S20605C1[54]),  54,62},
  {&(_ZTV8S20605C1[43]),  43,62},
  {&(_ZTV8S20605C1[60]),  60,62},
  {&(_ZTV8S20605C1[16]),  16,62},
  {&(_ZTV8S20605C1[23]),  23,62},
  {&(_tg__ZTV8S20605C2__8S20605C1[6]),  6,12},
  {&(_tg__ZTV8S20605C68S20605C2__8S20605C1[5]),  5,8},
  {&(_tg__ZTV8S20605C88S20605C68S20605C2__8S20605C1[3]),  3,5},
  {&(_tg__ZTV8S20605C48S20605C88S20605C68S20605C2__8S20605C1[3]),  3,3},
  {&(_tg__ZTV8S20605C7__8S20605C68S20605C2__8S20605C1[5]),  5,8},
  {&(_tg__ZTV8S20605C48S20605C2__A1__8S20605C1[3]),  3,3},
  {&(_tg__ZTV8S20605C7__8S20605C2__8S20605C1[5]),  5,8},
  {&(_tg__ZTV8S20605C9__8S20605C2__8S20605C1[3]),  3,4},
  {&(_tg__ZTV8S20605C4__A1__8S20605C2__8S20605C1[3]),  3,3},
  {&(_tg__ZTV8S20605C8__A1__8S20605C1[3]),  3,5},
  {&(_tg__ZTV8S20605C48S20605C8__A2__8S20605C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20605C1[];
extern  VTBL_ENTRY _ZTV8S20605C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20605C1[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20605C1D0Ev,_ZTv0_n40_N8S20605C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20605C1D0Ev,_ZThn312_N8S20605C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20605C1D1Ev,_ZTv0_n40_N8S20605C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20605C1D1Ev,_ZThn312_N8S20605C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20605C1 = {  "S20605C1", // class name
  bases_S20605C1, 20,
  &(vtc_S20605C1[0]), // expected_vtbl_contents
  &(vtt_S20605C1[0]), // expected_vtt_contents
  ABISELECT(1664,1192), // object size
  NSPAIRA(_ZTI8S20605C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20605C1),62, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20605C1),27, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20606C7  {
  long double s20606c7f0;
  __tsi64 s20606c7f1;
  virtual void  v2(); // _ZN8S20606C72v2Ev
  virtual void  v3(); // _ZN8S20606C72v3Ev
  virtual void  v4(); // _ZN8S20606C72v4Ev
  ~S20606C7(); // tgen
  S20606C7(); // tgen
};
//SIG(-1 S20606C7) C1{ v1 v2 v3 FD FL}


void  S20606C7 ::v2(){vfunc_called(this, "_ZN8S20606C72v2Ev");}
void  S20606C7 ::v3(){vfunc_called(this, "_ZN8S20606C72v3Ev");}
void  S20606C7 ::v4(){vfunc_called(this, "_ZN8S20606C72v4Ev");}
S20606C7 ::~S20606C7(){ note_dtor("S20606C7", this);} // tgen
S20606C7 ::S20606C7(){ note_ctor("S20606C7", this);} // tgen

static void Test_S20606C7()
{
  extern Class_Descriptor cd_S20606C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20606C7, buf);
    S20606C7 *dp, &lv = *(dp=new (buf) S20606C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20606C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C7)");
    check_field_offset(lv, s20606c7f0, ABISELECT(16,4), "S20606C7.s20606c7f0");
    check_field_offset(lv, s20606c7f1, ABISELECT(32,16), "S20606C7.s20606c7f1");
    test_class_info(&lv, &cd_S20606C7);
    dp->~S20606C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C7(Test_S20606C7, "S20606C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20606C7C1Ev();
extern void _ZN8S20606C7D1Ev();
Name_Map name_map_S20606C7[] = {
  NSPAIR(_ZN8S20606C7C1Ev),
  NSPAIR(_ZN8S20606C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20606C7[];
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY vtc_S20606C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C7[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
extern VTBL_ENTRY _ZTI8S20606C7[];
extern  VTBL_ENTRY _ZTV8S20606C7[];
Class_Descriptor cd_S20606C7 = {  "S20606C7", // class name
  0,0,//no base classes
  &(vtc_S20606C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20606C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20606C7),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  S20606C4  : virtual S20605C5 {
  ::S20605C5 s20606c4f0;
  short s20606c4f1;
  int s20606c4f2;
  char s20606c4f3;
  ~S20606C4(); // tgen
  S20606C4(); // tgen
};
//SIG(-1 S20606C4) C1{ VBC2{ m Fs[2]} FC2 Fs Fi Fc}


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

static void Test_S20606C4()
{
  extern Class_Descriptor cd_S20606C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20606C4, buf);
    S20606C4 *dp, &lv = *(dp=new (buf) S20606C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20606C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20606C4)");
    check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20606C4");
    check_field_offset(lv, s20606c4f0, ABISELECT(8,4), "S20606C4.s20606c4f0");
    check_field_offset(lv, s20606c4f1, ABISELECT(12,8), "S20606C4.s20606c4f1");
    check_field_offset(lv, s20606c4f2, ABISELECT(16,12), "S20606C4.s20606c4f2");
    check_field_offset(lv, s20606c4f3, ABISELECT(20,16), "S20606C4.s20606c4f3");
    test_class_info(&lv, &cd_S20606C4);
    dp->~S20606C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C4(Test_S20606C4, "S20606C4", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20606C4C1Ev();
extern void _ZN8S20606C4D1Ev();
Name_Map name_map_S20606C4[] = {
  NSPAIR(_ZN8S20606C4C1Ev),
  NSPAIR(_ZN8S20606C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20606C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20606C4[];
static  VTBL_ENTRY vtc_S20606C4[] = {
  ABISELECT(22,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
extern VTBL_ENTRY _ZTV8S20606C4[];
static  VTT_ENTRY vtt_S20606C4[] = {
  {&(_ZTV8S20606C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
Class_Descriptor cd_S20606C4 = {  "S20606C4", // class name
  bases_S20606C4, 1,
  &(vtc_S20606C4[0]), // expected_vtbl_contents
  &(vtt_S20606C4[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20606C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20606C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20606C4),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  S20606C8  : S20606C4 , S20605C5 {
  long double s20606c8f0;
  void *s20606c8f1;
  ::S20605C3 s20606c8f2;
  virtual void  v5(); // _ZN8S20606C82v5Ev
  virtual void  v6(); // _ZN8S20606C82v6Ev
  ~S20606C8(); // tgen
  S20606C8(); // tgen
};
//SIG(-1 S20606C8) C1{ BC2{ VBC3{ m Fs[2]} FC3 Fs Fi Fc} BC3 v1 v2 FD Fp FC4{ m Fc FC5{ VBC3 FC3 Fs Fi Fc}[10]}}


void  S20606C8 ::v5(){vfunc_called(this, "_ZN8S20606C82v5Ev");}
void  S20606C8 ::v6(){vfunc_called(this, "_ZN8S20606C82v6Ev");}
S20606C8 ::~S20606C8(){ note_dtor("S20606C8", this);} // tgen
S20606C8 ::S20606C8(){ note_ctor("S20606C8", this);} // tgen

static void Test_S20606C8()
{
  extern Class_Descriptor cd_S20606C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,73)];
    init_test(&cd_S20606C8, buf);
    S20606C8 *dp, &lv = *(dp=new (buf) S20606C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S20606C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C8)");
    check_base_class_offset(lv, (S20605C5*)(S20606C4*), ABISELECT(384,284), "S20606C8");
    check_base_class_offset(lv, (S20606C4*), 0, "S20606C8");
    /*is_ambiguous_... S20606C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20606C8");
    check_field_offset(lv, s20606c8f0, ABISELECT(32,24), "S20606C8.s20606c8f0");
    check_field_offset(lv, s20606c8f1, ABISELECT(48,36), "S20606C8.s20606c8f1");
    check_field_offset(lv, s20606c8f2, ABISELECT(56,40), "S20606C8.s20606c8f2");
    test_class_info(&lv, &cd_S20606C8);
    dp->~S20606C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C8(Test_S20606C8, "S20606C8", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN8S20606C8C1Ev();
extern void _ZN8S20606C8D1Ev();
Name_Map name_map_S20606C8[] = {
  NSPAIR(_ZN8S20606C8C1Ev),
  NSPAIR(_ZN8S20606C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20606C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(384,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20606C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20606C8[];
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY vtc_S20606C8[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C8[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S20606C8[];
static  VTBL_ENTRY _tg__ZTV8S20606C4__8S20606C8[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
static  VTT_ENTRY vtt_S20606C8[] = {
  {&(_ZTV8S20606C8[3]),  3,5},
  {&(_tg__ZTV8S20606C4__8S20606C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20606C8[];
extern  VTBL_ENTRY _ZTV8S20606C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C8[];
Class_Descriptor cd_S20606C8 = {  "S20606C8", // class name
  bases_S20606C8, 3,
  &(vtc_S20606C8[0]), // expected_vtbl_contents
  &(vtt_S20606C8[0]), // expected_vtt_contents
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI8S20606C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20606C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20606C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20606C6  : virtual S20606C7 , S20606C8 , virtual S20605C3 {
  virtual void  v7(); // _ZN8S20606C62v7Ev
  ~S20606C6(); // tgen
  S20606C6(); // tgen
};
//SIG(-1 S20606C6) C1{ VBC2{ v2 v3 v4 FD FL} BC3{ BC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc} BC5 v5 v6 FD Fp FC6{ m Fc FC7{ VBC5 FC5 Fs Fi Fc}[10]}} VBC6 v1}


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

static void Test_S20606C6()
{
  extern Class_Descriptor cd_S20606C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,140)];
    init_test(&cd_S20606C6, buf);
    S20606C6 *dp, &lv = *(dp=new (buf) S20606C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,556), "sizeof(S20606C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C6)");
    check_base_class_offset(lv, (S20606C7*), ABISELECT(384,284), "S20606C6");
    check_base_class_offset(lv, (S20605C5*)(S20606C4*)(S20606C8*), ABISELECT(424,308), "S20606C6");
    check_base_class_offset(lv, (S20606C4*)(S20606C8*), 0, "S20606C6");
    /*is_ambiguous_... S20606C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C8*), ABISELECT(22,18), "S20606C6");
    check_base_class_offset(lv, (S20606C8*), 0, "S20606C6");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(432,312), "S20606C6");
    test_class_info(&lv, &cd_S20606C6);
    dp->~S20606C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C6(Test_S20606C6, "S20606C6", ABISELECT(768,556));

#else // __cplusplus

extern void _ZN8S20606C6C1Ev();
extern void _ZN8S20606C6D1Ev();
Name_Map name_map_S20606C6[] = {
  NSPAIR(_ZN8S20606C6C1Ev),
  NSPAIR(_ZN8S20606C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20606C7;
extern VTBL_ENTRY _ZTI8S20606C7[];
extern  VTBL_ENTRY _ZTV8S20606C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C8;
extern VTBL_ENTRY _ZTI8S20606C8[];
extern  VTBL_ENTRY _ZTV8S20606C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C8[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20606C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20606C7,    ABISELECT(384,284), //bcp->offset
    8, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(424,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20606C4,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20606C8,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C3,    ABISELECT(432,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20606C6[];
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY vtc_S20606C6[] = {
  ABISELECT(432,312),
  ABISELECT(384,284),
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
extern VTBL_ENTRY _ZTV8S20606C6[];
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C8__8S20606C6[] = {
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C8[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C48S20606C8__8S20606C6[] = {
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
static  VTT_ENTRY vtt_S20606C6[] = {
  {&(_ZTV8S20606C6[5]),  5,16},
  {&(_tg__ZTV8S20606C8__8S20606C6[3]),  3,5},
  {&(_tg__ZTV8S20606C48S20606C8__8S20606C6[3]),  3,3},
  {&(_ZTV8S20606C6[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20606C6[];
extern  VTBL_ENTRY _ZTV8S20606C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C6[];
Class_Descriptor cd_S20606C6 = {  "S20606C6", // class name
  bases_S20606C6, 6,
  &(vtc_S20606C6[0]), // expected_vtbl_contents
  &(vtt_S20606C6[0]), // expected_vtt_contents
  ABISELECT(768,556), // object size
  NSPAIRA(_ZTI8S20606C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20606C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20606C6),4, //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  S20606C9  {
  long double s20606c9f0;
  virtual void  v8(); // _ZN8S20606C92v8Ev
  ~S20606C9(); // tgen
  S20606C9(); // tgen
};
//SIG(-1 S20606C9) C1{ v1 FD}


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

static void Test_S20606C9()
{
  extern Class_Descriptor cd_S20606C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S20606C9, buf);
    S20606C9 *dp, &lv = *(dp=new (buf) S20606C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20606C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C9)");
    check_field_offset(lv, s20606c9f0, ABISELECT(16,4), "S20606C9.s20606c9f0");
    test_class_info(&lv, &cd_S20606C9);
    dp->~S20606C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C9(Test_S20606C9, "S20606C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20606C9C1Ev();
extern void _ZN8S20606C9D1Ev();
Name_Map name_map_S20606C9[] = {
  NSPAIR(_ZN8S20606C9C1Ev),
  NSPAIR(_ZN8S20606C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20606C9[];
extern void _ZN8S20606C92v8Ev();
static  VTBL_ENTRY vtc_S20606C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C9[0]),
  (VTBL_ENTRY)&_ZN8S20606C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S20606C9[];
extern  VTBL_ENTRY _ZTV8S20606C9[];
Class_Descriptor cd_S20606C9 = {  "S20606C9", // class name
  0,0,//no base classes
  &(vtc_S20606C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20606C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20606C9),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  S20606C2  : virtual S20605C3 , S20606C6 , virtual S20606C9 , S20606C4 {
  ::S3465C9_nt s20606c2f0;
  void *s20606c2f1;
  int s20606c2f2;
  virtual  ~S20606C2(); // _ZN8S20606C2D2Ev
  virtual void  v9(); // _ZN8S20606C22v9Ev
  S20606C2(); // tgen
};
//SIG(-1 S20606C2) C1{ VBC2{ m Fc FC3{ VBC4{ m Fs[2]} FC4 Fs Fi Fc}[10]} BC5{ VBC6{ v2 v3 v4 FD FL} BC7{ BC8{ VBC4 FC4 Fs Fi Fc} BC4 v5 v6 FD Fp FC2} VBC2 v7} VBC9{ v8 FD} BC8 vd v1 FC10{} Fp Fi}


 S20606C2 ::~S20606C2(){ note_dtor("S20606C2", this);}
void  S20606C2 ::v9(){vfunc_called(this, "_ZN8S20606C22v9Ev");}
S20606C2 ::S20606C2(){ note_ctor("S20606C2", this);} // tgen

static void Test_S20606C2()
{
  extern Class_Descriptor cd_S20606C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,151)];
    init_test(&cd_S20606C2, buf);
    S20606C2 *dp, &lv = *(dp=new (buf) S20606C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,600), "sizeof(S20606C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C2)");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(424,312), "S20606C2");
    check_base_class_offset(lv, (S20605C3*)(S20606C6*), ABISELECT(424,312), "S20606C2");
    check_base_class_offset(lv, (S20606C7*)(S20606C6*), ABISELECT(752,556), "S20606C2");
    check_base_class_offset(lv, (S20605C5*)(S20606C4*)(S20606C8*)(S20606C6*), ABISELECT(792,580), "S20606C2");
    /*is_ambiguous_... S20606C2::S20606C4 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C4*), ABISELECT(792,580), "S20606C2");
    check_base_class_offset(lv, (S20606C4*)(S20606C8*)(S20606C6*), 0, "S20606C2");
    /*is_ambiguous_... S20606C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C8*)(S20606C6*), ABISELECT(22,18), "S20606C2");
    check_base_class_offset(lv, (S20606C8*)(S20606C6*), 0, "S20606C2");
    check_base_class_offset(lv, (S20606C6*), 0, "S20606C2");
    check_base_class_offset(lv, (S20606C9*), ABISELECT(800,584), "S20606C2");
    /*is_ambiguous_... S20606C2::S20606C4 */ AMB_check_base_class_offset(lv, (S20606C4*), ABISELECT(384,284), "S20606C2");
    check_field_offset(lv, s20606c2f0, ABISELECT(405,301), "S20606C2.s20606c2f0");
    check_field_offset(lv, s20606c2f1, ABISELECT(408,304), "S20606C2.s20606c2f1");
    check_field_offset(lv, s20606c2f2, ABISELECT(416,308), "S20606C2.s20606c2f2");
    test_class_info(&lv, &cd_S20606C2);
    dp->~S20606C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C2(Test_S20606C2, "S20606C2", ABISELECT(832,600));

#else // __cplusplus

extern void _ZN8S20606C2C1Ev();
extern void _ZN8S20606C2D2Ev();
Name_Map name_map_S20606C2[] = {
  NSPAIR(_ZN8S20606C2C1Ev),
  NSPAIR(_ZN8S20606C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20606C7;
extern VTBL_ENTRY _ZTI8S20606C7[];
extern  VTBL_ENTRY _ZTV8S20606C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C8;
extern VTBL_ENTRY _ZTI8S20606C8[];
extern  VTBL_ENTRY _ZTV8S20606C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C8[];
extern Class_Descriptor cd_S20606C6;
extern VTBL_ENTRY _ZTI8S20606C6[];
extern  VTBL_ENTRY _ZTV8S20606C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C6[];
extern Class_Descriptor cd_S20606C9;
extern VTBL_ENTRY _ZTI8S20606C9[];
extern  VTBL_ENTRY _ZTV8S20606C9[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
static Base_Class bases_S20606C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C3,    ABISELECT(424,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20606C7,    ABISELECT(752,556), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20605C5,    ABISELECT(792,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20606C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20606C8,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20606C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20606C9,    ABISELECT(800,584), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20606C4,    ABISELECT(384,284), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20606C2[];
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
extern void _ZN8S20606C2D1Ev();
extern void _ZN8S20606C2D0Ev();
extern void _ZN8S20606C22v9Ev();
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
extern void _ZN8S20606C92v8Ev();
static  VTBL_ENTRY vtc_S20606C2[] = {
  ABISELECT(800,584),
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20606C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20606C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20606C22v9Ev,
  ABISELECT(408,296),
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
  0,
  ABISELECT(-800,-584),
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
  (VTBL_ENTRY)&_ZN8S20606C92v8Ev,
};
extern VTBL_ENTRY _ZTV8S20606C2[];
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C6__8S20606C2[] = {
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C88S20606C6__8S20606C2[] = {
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C8[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C48S20606C88S20606C6__8S20606C2[] = {
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C7__8S20606C6__8S20606C2[] = {
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C4__A1__8S20606C2[] = {
  ABISELECT(408,296),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
static  VTT_ENTRY vtt_S20606C2[] = {
  {&(_ZTV8S20606C2[6]),  6,27},
  {&(_tg__ZTV8S20606C6__8S20606C2[5]),  5,8},
  {&(_tg__ZTV8S20606C88S20606C6__8S20606C2[3]),  3,5},
  {&(_tg__ZTV8S20606C48S20606C88S20606C6__8S20606C2[3]),  3,3},
  {&(_tg__ZTV8S20606C7__8S20606C6__8S20606C2[5]),  5,8},
  {&(_tg__ZTV8S20606C4__A1__8S20606C2[3]),  3,3},
  {&(_ZTV8S20606C2[20]),  20,27},
  {&(_ZTV8S20606C2[26]),  26,27},
  {&(_ZTV8S20606C2[15]),  15,27},
};
extern VTBL_ENTRY _ZTI8S20606C2[];
extern  VTBL_ENTRY _ZTV8S20606C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C2[];
Class_Descriptor cd_S20606C2 = {  "S20606C2", // class name
  bases_S20606C2, 9,
  &(vtc_S20606C2[0]), // expected_vtbl_contents
  &(vtt_S20606C2[0]), // expected_vtt_contents
  ABISELECT(832,600), // object size
  NSPAIRA(_ZTI8S20606C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20606C2),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20606C2),9, //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  S20606C11  : virtual S20606C8 {
  virtual  ~S20606C11(); // _ZN9S20606C11D2Ev
  S20606C11(); // tgen
};
//SIG(-1 S20606C11) C1{ VBC2{ BC3{ VBC4{ m Fs[2]} FC4 Fs Fi Fc} BC4 v1 v2 FD Fp FC5{ m Fc FC6{ VBC4 FC4 Fs Fi Fc}[10]}} vd}


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

static void Test_S20606C11()
{
  extern Class_Descriptor cd_S20606C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(27,74)];
    init_test(&cd_S20606C11, buf);
    S20606C11 *dp, &lv = *(dp=new (buf) S20606C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,292), "sizeof(S20606C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C11)");
    check_base_class_offset(lv, (S20605C5*)(S20606C4*)(S20606C8*), ABISELECT(400,288), "S20606C11");
    check_base_class_offset(lv, (S20606C4*)(S20606C8*), ABISELECT(16,4), "S20606C11");
    /*is_ambiguous_... S20606C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C8*), ABISELECT(38,22), "S20606C11");
    check_base_class_offset(lv, (S20606C8*), ABISELECT(16,4), "S20606C11");
    test_class_info(&lv, &cd_S20606C11);
    dp->~S20606C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C11(Test_S20606C11, "S20606C11", ABISELECT(416,292));

#else // __cplusplus

extern void _ZN9S20606C11C1Ev();
extern void _ZN9S20606C11D2Ev();
Name_Map name_map_S20606C11[] = {
  NSPAIR(_ZN9S20606C11C1Ev),
  NSPAIR(_ZN9S20606C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C8;
extern VTBL_ENTRY _ZTI8S20606C8[];
extern  VTBL_ENTRY _ZTV8S20606C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C8[];
static Base_Class bases_S20606C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(400,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20606C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(38,22), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20606C8,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20606C11[];
extern void _ZN9S20606C11D1Ev();
extern void _ZN9S20606C11D0Ev();
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY vtc_S20606C11[] = {
  ABISELECT(400,288),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20606C11[0]),
  (VTBL_ENTRY)&_ZN9S20606C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20606C11D0Ev,
  0,
  0,
  ABISELECT(384,284),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20606C11[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
extern VTBL_ENTRY _ZTV9S20606C11[];
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C8__9S20606C11[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C8[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C48S20606C8__9S20606C11[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
static  VTT_ENTRY vtt_S20606C11[] = {
  {&(_ZTV9S20606C11[4]),  4,13},
  {&(_ZTV9S20606C11[11]),  11,13},
  {&(_tg__ZTV8S20606C8__9S20606C11[3]),  3,5},
  {&(_tg__ZTV8S20606C48S20606C8__9S20606C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20606C11[];
extern  VTBL_ENTRY _ZTV9S20606C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20606C11[];
Class_Descriptor cd_S20606C11 = {  "S20606C11", // class name
  bases_S20606C11, 4,
  &(vtc_S20606C11[0]), // expected_vtbl_contents
  &(vtt_S20606C11[0]), // expected_vtt_contents
  ABISELECT(416,292), // object size
  NSPAIRA(_ZTI9S20606C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20606C11),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20606C11),4, //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  S20606C12  : virtual S20606C7 , virtual S20605C3 {
  int s20606c12f0;
  ~S20606C12(); // tgen
  S20606C12(); // tgen
};
//SIG(-1 S20606C12) C1{ VBC2{ v1 v2 v3 FD FL} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S20606C12()
{
  extern Class_Descriptor cd_S20606C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,70)];
    init_test(&cd_S20606C12, buf);
    S20606C12 *dp, &lv = *(dp=new (buf) S20606C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S20606C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C12)");
    check_base_class_offset(lv, (S20606C7*), ABISELECT(16,8), "S20606C12");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,32), "S20606C12");
    check_field_offset(lv, s20606c12f0, ABISELECT(8,4), "S20606C12.s20606c12f0");
    test_class_info(&lv, &cd_S20606C12);
    dp->~S20606C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C12(Test_S20606C12, "S20606C12", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN9S20606C12C1Ev();
extern void _ZN9S20606C12D1Ev();
Name_Map name_map_S20606C12[] = {
  NSPAIR(_ZN9S20606C12C1Ev),
  NSPAIR(_ZN9S20606C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20606C7;
extern VTBL_ENTRY _ZTI8S20606C7[];
extern  VTBL_ENTRY _ZTV8S20606C7[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20606C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20606C7,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20606C12[];
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY vtc_S20606C12[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20606C12[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20606C12[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
extern VTBL_ENTRY _ZTV9S20606C12[];
static  VTT_ENTRY vtt_S20606C12[] = {
  {&(_ZTV9S20606C12[4]),  4,12},
  {&(_ZTV9S20606C12[9]),  9,12},
};
extern VTBL_ENTRY _ZTI9S20606C12[];
extern  VTBL_ENTRY _ZTV9S20606C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20606C12[];
Class_Descriptor cd_S20606C12 = {  "S20606C12", // class name
  bases_S20606C12, 2,
  &(vtc_S20606C12[0]), // expected_vtbl_contents
  &(vtt_S20606C12[0]), // expected_vtt_contents
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI9S20606C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20606C12),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20606C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20606C1  : virtual S20606C2 , S20606C11 , S20606C6 , S20606C12 , S20605C13 {
  virtual  ~S20606C1(); // _ZN8S20606C1D2Ev
  virtual void  v1(); // _ZN8S20606C12v1Ev
  S20606C1(); // tgen
};
//SIG(1 S20606C1) C1{ VBC2{ VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} BC6{ VBC7{ v2 v3 v4 FD FL} BC8{ BC9{ VBC5 FC5 Fs Fi Fc} BC5 v5 v6 FD Fp FC3} VBC3 v7} VBC10{ v8 FD} BC9 vd v9 FC11{} Fp Fi} BC12{ VBC8 vd} BC6 BC13{ VBC7 VBC3 Fi} BC14{ m FC15{ v10 FD}} vd v1}


 S20606C1 ::~S20606C1(){ note_dtor("S20606C1", this);}
void  S20606C1 ::v1(){vfunc_called(this, "_ZN8S20606C12v1Ev");}
S20606C1 ::S20606C1(){ note_ctor("S20606C1", this);} // tgen

static void Test_S20606C1()
{
  extern Class_Descriptor cd_S20606C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(105,300)];
    init_test(&cd_S20606C1, buf);
    S20606C1 *dp, &lv = *(dp=new (buf) S20606C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1196), "sizeof(S20606C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20606C1)");
    check_base_class_offset(lv, (S20605C3*)(S20606C2*), ABISELECT(872,624), "S20606C1");
    check_base_class_offset(lv, (S20605C3*)(S20606C6*)(S20606C2*), ABISELECT(872,624), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C6 */ AMB_check_base_class_offset(lv, (S20605C3*)(S20606C6*), ABISELECT(872,624), "S20606C1");
    check_base_class_offset(lv, (S20605C3*)(S20606C12*), ABISELECT(872,624), "S20606C1");
    check_base_class_offset(lv, (S20606C7*)(S20606C6*)(S20606C2*), ABISELECT(1200,868), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C6 */ AMB_check_base_class_offset(lv, (S20606C7*)(S20606C6*), ABISELECT(1200,868), "S20606C1");
    check_base_class_offset(lv, (S20606C7*)(S20606C12*), ABISELECT(1200,868), "S20606C1");
    check_base_class_offset(lv, (S20605C5*)(S20606C4*)(S20606C8*)(S20606C6*)(S20606C2*), ABISELECT(1240,892), "S20606C1");
    /*is_ambiguous_... S20606C2::S20606C4 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C4*)(S20606C2*), ABISELECT(1240,892), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C8 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C4*)(S20606C8*), ABISELECT(1240,892), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C4*)(S20606C8*)(S20606C6*), ABISELECT(1240,892), "S20606C1");
    check_base_class_offset(lv, (S20606C4*)(S20606C8*)(S20606C6*)(S20606C2*), ABISELECT(448,312), "S20606C1");
    /*is_ambiguous_... S20606C8::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C8*)(S20606C6*)(S20606C2*), ABISELECT(470,330), "S20606C1");
    check_base_class_offset(lv, (S20606C8*)(S20606C6*)(S20606C2*), ABISELECT(448,312), "S20606C1");
    check_base_class_offset(lv, (S20606C6*)(S20606C2*), ABISELECT(448,312), "S20606C1");
    check_base_class_offset(lv, (S20606C9*)(S20606C2*), ABISELECT(1248,896), "S20606C1");
    /*is_ambiguous_... S20606C2::S20606C4 */ AMB_check_base_class_offset(lv, (S20606C4*)(S20606C2*), ABISELECT(832,596), "S20606C1");
    check_base_class_offset(lv, (S20606C2*), ABISELECT(448,312), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C8 */ AMB_check_base_class_offset(lv, (S20606C4*)(S20606C8*), ABISELECT(1280,912), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C8 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C8*), ABISELECT(1302,930), "S20606C1");
    check_base_class_offset(lv, (S20606C8*)(S20606C11*), ABISELECT(1280,912), "S20606C1");
    check_base_class_offset(lv, (S20606C11*), 0, "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C6 */ AMB_check_base_class_offset(lv, (S20606C4*)(S20606C8*)(S20606C6*), ABISELECT(16,4), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20606C8*)(S20606C6*), ABISELECT(38,22), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C6 */ AMB_check_base_class_offset(lv, (S20606C8*)(S20606C6*), ABISELECT(16,4), "S20606C1");
    /*is_ambiguous_... S20606C1::S20606C6 */ AMB_check_base_class_offset(lv, (S20606C6*), ABISELECT(16,4), "S20606C1");
    check_base_class_offset(lv, (S20606C12*), ABISELECT(400,288), "S20606C1");
    check_base_class_offset(lv, (S20605C13*), ABISELECT(416,296), "S20606C1");
    test_class_info(&lv, &cd_S20606C1);
    dp->~S20606C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20606C1(Test_S20606C1, "S20606C1", ABISELECT(1664,1196));

#else // __cplusplus

extern void _ZN8S20606C1C1Ev();
extern void _ZN8S20606C1D2Ev();
Name_Map name_map_S20606C1[] = {
  NSPAIR(_ZN8S20606C1C1Ev),
  NSPAIR(_ZN8S20606C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20606C7;
extern VTBL_ENTRY _ZTI8S20606C7[];
extern  VTBL_ENTRY _ZTV8S20606C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C8;
extern VTBL_ENTRY _ZTI8S20606C8[];
extern  VTBL_ENTRY _ZTV8S20606C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C8[];
extern Class_Descriptor cd_S20606C6;
extern VTBL_ENTRY _ZTI8S20606C6[];
extern  VTBL_ENTRY _ZTV8S20606C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C6[];
extern Class_Descriptor cd_S20606C9;
extern VTBL_ENTRY _ZTI8S20606C9[];
extern  VTBL_ENTRY _ZTV8S20606C9[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20606C2;
extern VTBL_ENTRY _ZTI8S20606C2[];
extern  VTBL_ENTRY _ZTV8S20606C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C2[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C8;
extern VTBL_ENTRY _ZTI8S20606C8[];
extern  VTBL_ENTRY _ZTV8S20606C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C8[];
extern Class_Descriptor cd_S20606C11;
extern VTBL_ENTRY _ZTI9S20606C11[];
extern  VTBL_ENTRY _ZTV9S20606C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20606C11[];
extern Class_Descriptor cd_S20606C4;
extern VTBL_ENTRY _ZTI8S20606C4[];
extern  VTBL_ENTRY _ZTV8S20606C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20606C8;
extern VTBL_ENTRY _ZTI8S20606C8[];
extern  VTBL_ENTRY _ZTV8S20606C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C8[];
extern Class_Descriptor cd_S20606C6;
extern VTBL_ENTRY _ZTI8S20606C6[];
extern  VTBL_ENTRY _ZTV8S20606C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C6[];
extern Class_Descriptor cd_S20606C12;
extern VTBL_ENTRY _ZTI9S20606C12[];
extern  VTBL_ENTRY _ZTV9S20606C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20606C12[];
extern Class_Descriptor cd_S20605C13;
extern VTBL_ENTRY _ZTI9S20605C13[];
static Base_Class bases_S20606C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C3,    ABISELECT(872,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20606C7,    ABISELECT(1200,868), //bcp->offset
    43, //bcp->virtual_function_table_offset
    5, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20605C5,    ABISELECT(1240,892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20606C4,    ABISELECT(448,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(470,330), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20606C8,    ABISELECT(448,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20606C6,    ABISELECT(448,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20606C9,    ABISELECT(1248,896), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20606C4,    ABISELECT(832,596), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20606C2,    ABISELECT(448,312), //bcp->offset
    23, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20606C4,    ABISELECT(1280,912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(1302,930), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20606C8,    ABISELECT(1280,912), //bcp->offset
    55, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20606C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20606C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(38,22), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20606C8,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20606C6,    ABISELECT(16,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20606C12,    ABISELECT(400,288), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C13,    ABISELECT(416,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20606C1[];
extern void _ZN8S20606C1D1Ev();
extern void _ZN8S20606C1D0Ev();
extern void _ZN8S20606C12v1Ev();
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
extern void ABISELECT(_ZTv0_n80_N8S20606C1D1Ev,_ZTv0_n40_N8S20606C1D1Ev)();
extern void ABISELECT(_ZThn448_N8S20606C1D1Ev,_ZThn312_N8S20606C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20606C1D0Ev,_ZTv0_n40_N8S20606C1D0Ev)();
extern void ABISELECT(_ZThn448_N8S20606C1D0Ev,_ZThn312_N8S20606C1D0Ev)() __attribute__((weak));
extern void _ZN8S20606C22v9Ev();
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
extern void _ZN8S20606C92v8Ev();
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY vtc_S20606C1[] = {
  ABISELECT(1248,896),
  ABISELECT(1200,868),
  ABISELECT(872,624),
  ABISELECT(448,312),
  ABISELECT(1240,892),
  ABISELECT(1280,912),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  (VTBL_ENTRY)&_ZN8S20606C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20606C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20606C12v1Ev,
  ABISELECT(856,620),
  ABISELECT(1184,864),
  ABISELECT(1224,888),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
  ABISELECT(472,336),
  ABISELECT(800,580),
  ABISELECT(-400,-288),
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  0,
  ABISELECT(-448,-312),
  0,
  0,
  0,
  ABISELECT(800,584),
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,580),
  ABISELECT(-448,-312),
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20606C1D1Ev,_ZTv0_n40_N8S20606C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20606C1D0Ev,_ZTv0_n40_N8S20606C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20606C22v9Ev,
  ABISELECT(408,296),
  ABISELECT(-832,-596),
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  0,
  0,
  0,
  ABISELECT(-1200,-868),
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
  0,
  ABISELECT(-1248,-896),
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  (VTBL_ENTRY)&_ZN8S20606C92v8Ev,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-1280,-912),
  (VTBL_ENTRY)&(_ZTI8S20606C1[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
extern VTBL_ENTRY _ZTV8S20606C1[];
extern void _ZN9S20606C11D1Ev();
extern void _ZN9S20606C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20606C11__8S20606C1[] = {
  ABISELECT(1240,892),
  ABISELECT(1280,912),
  0,
  (VTBL_ENTRY)&(_ZTI9S20606C11[0]),
  (VTBL_ENTRY)&_ZN9S20606C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20606C11D0Ev,
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C8__9S20606C11__8S20606C1[] = {
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-1280,-912),
  (VTBL_ENTRY)&(_ZTI9S20606C11[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C6__A1__8S20606C1[] = {
  ABISELECT(856,620),
  ABISELECT(1184,864),
  ABISELECT(1224,888),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C88S20606C6__A2__8S20606C1[] = {
  ABISELECT(1224,888),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C8[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C48S20606C88S20606C6__A3__8S20606C1[] = {
  ABISELECT(1224,888),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C7__8S20606C6__A1__8S20606C1[] = {
  0,
  0,
  0,
  ABISELECT(-1184,-864),
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20606C12__8S20606C1[] = {
  ABISELECT(472,336),
  ABISELECT(800,580),
  0,
  (VTBL_ENTRY)&(_ZTI9S20606C12[0]),
};
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C7__9S20606C12__8S20606C1[] = {
  0,
  0,
  0,
  ABISELECT(-800,-580),
  (VTBL_ENTRY)&(_ZTI9S20606C12[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
extern void _ZN8S20606C2D1Ev();
extern void _ZN8S20606C2D0Ev();
extern void _ZN8S20606C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C2__8S20606C1[] = {
  ABISELECT(800,584),
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20606C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20606C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20606C22v9Ev,
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
extern void _ZN8S20606C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C68S20606C2__8S20606C1[] = {
  ABISELECT(424,312),
  ABISELECT(752,556),
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
  (VTBL_ENTRY)&_ZN8S20606C62v7Ev,
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C88S20606C68S20606C2__8S20606C1[] = {
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C8[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C48S20606C88S20606C68S20606C2__8S20606C1[] = {
  ABISELECT(792,580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C7__8S20606C68S20606C2__8S20606C1[] = {
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20606C6[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C48S20606C2__A1__8S20606C1[] = {
  ABISELECT(408,296),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
extern void _ZN8S20606C72v2Ev();
extern void _ZN8S20606C72v3Ev();
extern void _ZN8S20606C72v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C7__8S20606C2__8S20606C1[] = {
  0,
  0,
  0,
  ABISELECT(-752,-556),
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
  (VTBL_ENTRY)&_ZN8S20606C72v2Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v3Ev,
  (VTBL_ENTRY)&_ZN8S20606C72v4Ev,
};
extern void _ZN8S20606C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C9__8S20606C2__8S20606C1[] = {
  0,
  ABISELECT(-800,-584),
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
  (VTBL_ENTRY)&_ZN8S20606C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C4__A1__8S20606C2__8S20606C1[] = {
  ABISELECT(408,296),
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20606C2[0]),
};
extern void _ZN8S20606C82v5Ev();
extern void _ZN8S20606C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20606C8__A1__8S20606C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C8[0]),
  (VTBL_ENTRY)&_ZN8S20606C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20606C82v6Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20606C48S20606C8__A2__8S20606C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20606C4[0]),
};
static  VTT_ENTRY vtt_S20606C1[] = {
  {&(_ZTV8S20606C1[8]),  8,62},
  {&(_tg__ZTV9S20606C11__8S20606C1[4]),  4,6},
  {&(_tg__ZTV8S20606C8__9S20606C11__8S20606C1[5]),  5,7},
  {&(_tg__ZTV8S20606C6__A1__8S20606C1[5]),  5,8},
  {&(_tg__ZTV8S20606C88S20606C6__A2__8S20606C1[3]),  3,5},
  {&(_tg__ZTV8S20606C48S20606C88S20606C6__A3__8S20606C1[3]),  3,3},
  {&(_tg__ZTV8S20606C7__8S20606C6__A1__8S20606C1[5]),  5,8},
  {&(_tg__ZTV9S20606C12__8S20606C1[4]),  4,4},
  {&(_tg__ZTV8S20606C7__9S20606C12__8S20606C1[5]),  5,8},
  {&(_ZTV8S20606C1[34]),  34,62},
  {&(_ZTV8S20606C1[48]),  48,62},
  {&(_ZTV8S20606C1[54]),  54,62},
  {&(_ZTV8S20606C1[43]),  43,62},
  {&(_ZTV8S20606C1[60]),  60,62},
  {&(_ZTV8S20606C1[16]),  16,62},
  {&(_ZTV8S20606C1[23]),  23,62},
  {&(_tg__ZTV8S20606C2__8S20606C1[6]),  6,12},
  {&(_tg__ZTV8S20606C68S20606C2__8S20606C1[5]),  5,8},
  {&(_tg__ZTV8S20606C88S20606C68S20606C2__8S20606C1[3]),  3,5},
  {&(_tg__ZTV8S20606C48S20606C88S20606C68S20606C2__8S20606C1[3]),  3,3},
  {&(_tg__ZTV8S20606C7__8S20606C68S20606C2__8S20606C1[5]),  5,8},
  {&(_tg__ZTV8S20606C48S20606C2__A1__8S20606C1[3]),  3,3},
  {&(_tg__ZTV8S20606C7__8S20606C2__8S20606C1[5]),  5,8},
  {&(_tg__ZTV8S20606C9__8S20606C2__8S20606C1[3]),  3,4},
  {&(_tg__ZTV8S20606C4__A1__8S20606C2__8S20606C1[3]),  3,3},
  {&(_tg__ZTV8S20606C8__A1__8S20606C1[3]),  3,5},
  {&(_tg__ZTV8S20606C48S20606C8__A2__8S20606C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20606C1[];
extern  VTBL_ENTRY _ZTV8S20606C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20606C1[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20606C1D0Ev,_ZTv0_n40_N8S20606C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20606C1D0Ev,_ZThn312_N8S20606C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20606C1D1Ev,_ZTv0_n40_N8S20606C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20606C1D1Ev,_ZThn312_N8S20606C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20606C1 = {  "S20606C1", // class name
  bases_S20606C1, 20,
  &(vtc_S20606C1[0]), // expected_vtbl_contents
  &(vtt_S20606C1[0]), // expected_vtt_contents
  ABISELECT(1664,1196), // object size
  NSPAIRA(_ZTI8S20606C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20606C1),62, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20606C1),27, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7803C4  {
  __tsi64 s7803c4f0;
  char s7803c4f1;
  virtual void  v5(); // _ZN7S7803C42v5Ev
  virtual void  v6(); // _ZN7S7803C42v6Ev
  virtual void  v7(); // _ZN7S7803C42v7Ev
  virtual void  v8(); // _ZN7S7803C42v8Ev
  virtual void  v9(); // _ZN7S7803C42v9Ev
  ~S7803C4(); // tgen
  S7803C4(); // tgen
};
//SIG(-1 S7803C4) C1{ v1 v2 v3 v4 v5 FL Fc}


void  S7803C4 ::v5(){vfunc_called(this, "_ZN7S7803C42v5Ev");}
void  S7803C4 ::v6(){vfunc_called(this, "_ZN7S7803C42v6Ev");}
void  S7803C4 ::v7(){vfunc_called(this, "_ZN7S7803C42v7Ev");}
void  S7803C4 ::v8(){vfunc_called(this, "_ZN7S7803C42v8Ev");}
void  S7803C4 ::v9(){vfunc_called(this, "_ZN7S7803C42v9Ev");}
S7803C4 ::~S7803C4(){ note_dtor("S7803C4", this);} // tgen
S7803C4 ::S7803C4(){ note_ctor("S7803C4", this);} // tgen

static void Test_S7803C4()
{
  extern Class_Descriptor cd_S7803C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7803C4, buf);
    S7803C4 *dp, &lv = *(dp=new (buf) S7803C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7803C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C4)");
    check_field_offset(lv, s7803c4f0, ABISELECT(8,4), "S7803C4.s7803c4f0");
    check_field_offset(lv, s7803c4f1, ABISELECT(16,12), "S7803C4.s7803c4f1");
    test_class_info(&lv, &cd_S7803C4);
    dp->~S7803C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C4(Test_S7803C4, "S7803C4", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7803C4C1Ev();
extern void _ZN7S7803C4D1Ev();
Name_Map name_map_S7803C4[] = {
  NSPAIR(_ZN7S7803C4C1Ev),
  NSPAIR(_ZN7S7803C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7803C4[];
extern void _ZN7S7803C42v5Ev();
extern void _ZN7S7803C42v6Ev();
extern void _ZN7S7803C42v7Ev();
extern void _ZN7S7803C42v8Ev();
extern void _ZN7S7803C42v9Ev();
static  VTBL_ENTRY vtc_S7803C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C4[0]),
  (VTBL_ENTRY)&_ZN7S7803C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S7803C4[];
extern  VTBL_ENTRY _ZTV7S7803C4[];
Class_Descriptor cd_S7803C4 = {  "S7803C4", // class name
  0,0,//no base classes
  &(vtc_S7803C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7803C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7803C4),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  S7803C3  : virtual S7803C4 {
  virtual  ~S7803C3(); // _ZN7S7803C3D2Ev
  virtual void  v10(); // _ZN7S7803C33v10Ev
  S7803C3(); // tgen
};
//SIG(-1 S7803C3) C1{ VBC2{ v2 v3 v4 v5 v6 FL Fc} vd v1}


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

static void Test_S7803C3()
{
  extern Class_Descriptor cd_S7803C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7803C3, buf);
    S7803C3 *dp, &lv = *(dp=new (buf) S7803C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7803C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C3)");
    check_base_class_offset(lv, (S7803C4*), ABISELECT(8,4), "S7803C3");
    test_class_info(&lv, &cd_S7803C3);
    dp->~S7803C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C3(Test_S7803C3, "S7803C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7803C3C1Ev();
extern void _ZN7S7803C3D2Ev();
Name_Map name_map_S7803C3[] = {
  NSPAIR(_ZN7S7803C3C1Ev),
  NSPAIR(_ZN7S7803C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7803C4;
extern VTBL_ENTRY _ZTI7S7803C4[];
extern  VTBL_ENTRY _ZTV7S7803C4[];
static Base_Class bases_S7803C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7803C4,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    7, //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 _ZTI7S7803C3[];
extern void _ZN7S7803C3D1Ev();
extern void _ZN7S7803C3D0Ev();
extern void _ZN7S7803C33v10Ev();
extern void _ZN7S7803C42v5Ev();
extern void _ZN7S7803C42v6Ev();
extern void _ZN7S7803C42v7Ev();
extern void _ZN7S7803C42v8Ev();
extern void _ZN7S7803C42v9Ev();
static  VTBL_ENTRY vtc_S7803C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C3[0]),
  (VTBL_ENTRY)&_ZN7S7803C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7803C33v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7803C3[0]),
  (VTBL_ENTRY)&_ZN7S7803C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v9Ev,
};
extern VTBL_ENTRY _ZTV7S7803C3[];
static  VTT_ENTRY vtt_S7803C3[] = {
  {&(_ZTV7S7803C3[3]),  3,18},
  {&(_ZTV7S7803C3[13]),  13,18},
};
extern VTBL_ENTRY _ZTI7S7803C3[];
extern  VTBL_ENTRY _ZTV7S7803C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C3[];
Class_Descriptor cd_S7803C3 = {  "S7803C3", // class name
  bases_S7803C3, 1,
  &(vtc_S7803C3[0]), // expected_vtbl_contents
  &(vtt_S7803C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7803C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7803C3),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7803C3),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  S7803C6  {
  virtual void  v11(); // _ZN7S7803C63v11Ev
  ~S7803C6(); // tgen
  S7803C6(); // tgen
};
//SIG(-1 S7803C6) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN7S7803C6C1Ev();
extern void _ZN7S7803C6D1Ev();
Name_Map name_map_S7803C6[] = {
  NSPAIR(_ZN7S7803C6C1Ev),
  NSPAIR(_ZN7S7803C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7803C6[];
extern void _ZN7S7803C63v11Ev();
static  VTBL_ENTRY vtc_S7803C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C6[0]),
  (VTBL_ENTRY)&_ZN7S7803C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S7803C6[];
extern  VTBL_ENTRY _ZTV7S7803C6[];
Class_Descriptor cd_S7803C6 = {  "S7803C6", // class name
  0,0,//no base classes
  &(vtc_S7803C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7803C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7803C6),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  S7803C8  {
  int s7803c8f0[10];
  virtual void  v12(); // _ZN7S7803C83v12Ev
  virtual void  v13(); // _ZN7S7803C83v13Ev
  virtual void  v14(); // _ZN7S7803C83v14Ev
  virtual void  v15(); // _ZN7S7803C83v15Ev
  ~S7803C8(); // tgen
  S7803C8(); // tgen
};
//SIG(-1 S7803C8) C1{ v1 v2 v3 v4 Fi[10]}


void  S7803C8 ::v12(){vfunc_called(this, "_ZN7S7803C83v12Ev");}
void  S7803C8 ::v13(){vfunc_called(this, "_ZN7S7803C83v13Ev");}
void  S7803C8 ::v14(){vfunc_called(this, "_ZN7S7803C83v14Ev");}
void  S7803C8 ::v15(){vfunc_called(this, "_ZN7S7803C83v15Ev");}
S7803C8 ::~S7803C8(){ note_dtor("S7803C8", this);} // tgen
S7803C8 ::S7803C8(){ note_ctor("S7803C8", this);} // tgen

static void Test_S7803C8()
{
  extern Class_Descriptor cd_S7803C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S7803C8, buf);
    S7803C8 *dp, &lv = *(dp=new (buf) S7803C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S7803C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C8)");
    check_field_offset(lv, s7803c8f0, ABISELECT(8,4), "S7803C8.s7803c8f0");
    test_class_info(&lv, &cd_S7803C8);
    dp->~S7803C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C8(Test_S7803C8, "S7803C8", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S7803C8C1Ev();
extern void _ZN7S7803C8D1Ev();
Name_Map name_map_S7803C8[] = {
  NSPAIR(_ZN7S7803C8C1Ev),
  NSPAIR(_ZN7S7803C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7803C8[];
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
static  VTBL_ENTRY vtc_S7803C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C8[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
};
extern VTBL_ENTRY _ZTI7S7803C8[];
extern  VTBL_ENTRY _ZTV7S7803C8[];
Class_Descriptor cd_S7803C8 = {  "S7803C8", // class name
  0,0,//no base classes
  &(vtc_S7803C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S7803C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7803C8),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  S7803C9  {
  void *s7803c9f0;
  virtual  ~S7803C9(); // _ZN7S7803C9D1Ev
  virtual void  v16(); // _ZN7S7803C93v16Ev
  virtual void  v17(); // _ZN7S7803C93v17Ev
  S7803C9(); // tgen
};
//SIG(-1 S7803C9) C1{ vd v1 v2 Fp}


 S7803C9 ::~S7803C9(){ note_dtor("S7803C9", this);}
void  S7803C9 ::v16(){vfunc_called(this, "_ZN7S7803C93v16Ev");}
void  S7803C9 ::v17(){vfunc_called(this, "_ZN7S7803C93v17Ev");}
S7803C9 ::S7803C9(){ note_ctor("S7803C9", this);} // tgen

static void Test_S7803C9()
{
  extern Class_Descriptor cd_S7803C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7803C9, buf);
    S7803C9 *dp, &lv = *(dp=new (buf) S7803C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7803C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C9)");
    check_field_offset(lv, s7803c9f0, ABISELECT(8,4), "S7803C9.s7803c9f0");
    test_class_info(&lv, &cd_S7803C9);
    dp->~S7803C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C9(Test_S7803C9, "S7803C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7803C9C1Ev();
extern void _ZN7S7803C9D1Ev();
Name_Map name_map_S7803C9[] = {
  NSPAIR(_ZN7S7803C9C1Ev),
  NSPAIR(_ZN7S7803C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7803C9[];
extern void _ZN7S7803C9D1Ev();
extern void _ZN7S7803C9D0Ev();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY vtc_S7803C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C9[0]),
  (VTBL_ENTRY)&_ZN7S7803C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
extern VTBL_ENTRY _ZTI7S7803C9[];
extern  VTBL_ENTRY _ZTV7S7803C9[];
Class_Descriptor cd_S7803C9 = {  "S7803C9", // class name
  0,0,//no base classes
  &(vtc_S7803C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7803C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7803C9),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  S7803C7  : S7803C8 , S7803C9 {
  int s7803c7f0:4;
  char s7803c7f1;
  virtual void  v18(); // _ZN7S7803C73v18Ev
  virtual void  v19(); // _ZN7S7803C73v19Ev
  virtual void  v20(); // _ZN7S7803C73v20Ev
  virtual void  v21(); // _ZN7S7803C73v21Ev
  virtual void  v22(); // _ZN7S7803C73v22Ev
  virtual void  v23(); // _ZN7S7803C73v23Ev
  ~S7803C7(); // tgen
  S7803C7(); // tgen
};
//SIG(-1 S7803C7) C1{ BC2{ v7 v8 v9 v10 Fi[10]} BC3{ vd v11 v12 Fp} v1 v2 v3 v4 v5 v6 Fi:4 Fc}


void  S7803C7 ::v18(){vfunc_called(this, "_ZN7S7803C73v18Ev");}
void  S7803C7 ::v19(){vfunc_called(this, "_ZN7S7803C73v19Ev");}
void  S7803C7 ::v20(){vfunc_called(this, "_ZN7S7803C73v20Ev");}
void  S7803C7 ::v21(){vfunc_called(this, "_ZN7S7803C73v21Ev");}
void  S7803C7 ::v22(){vfunc_called(this, "_ZN7S7803C73v22Ev");}
void  S7803C7 ::v23(){vfunc_called(this, "_ZN7S7803C73v23Ev");}
S7803C7 ::~S7803C7(){ note_dtor("S7803C7", this);} // tgen
S7803C7 ::S7803C7(){ note_ctor("S7803C7", this);} // tgen

static void Test_S7803C7()
{
  extern Class_Descriptor cd_S7803C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S7803C7, buf);
    S7803C7 *dp, &lv = *(dp=new (buf) S7803C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S7803C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C7)");
    check_base_class_offset(lv, (S7803C8*), 0, "S7803C7");
    check_base_class_offset(lv, (S7803C9*), ABISELECT(48,44), "S7803C7");
    set_bf_and_test(lv, s7803c7f0, ABISELECT(64,52), 0, 4, 1, "S7803C7");
    set_bf_and_test(lv, s7803c7f0, ABISELECT(64,52), 0, 4, hide_sll(1LL<<3), "S7803C7");
    check_field_offset(lv, s7803c7f1, ABISELECT(65,53), "S7803C7.s7803c7f1");
    test_class_info(&lv, &cd_S7803C7);
    dp->~S7803C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C7(Test_S7803C7, "S7803C7", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S7803C7C1Ev();
extern void _ZN7S7803C7D1Ev();
Name_Map name_map_S7803C7[] = {
  NSPAIR(_ZN7S7803C7C1Ev),
  NSPAIR(_ZN7S7803C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7803C8;
extern VTBL_ENTRY _ZTI7S7803C8[];
extern  VTBL_ENTRY _ZTV7S7803C8[];
extern Class_Descriptor cd_S7803C9;
extern VTBL_ENTRY _ZTI7S7803C9[];
extern  VTBL_ENTRY _ZTV7S7803C9[];
static Base_Class bases_S7803C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7803C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7803C9,    ABISELECT(48,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S7803C7[];
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
extern void _ZN7S7803C73v18Ev();
extern void _ZN7S7803C73v19Ev();
extern void _ZN7S7803C73v20Ev();
extern void _ZN7S7803C73v21Ev();
extern void _ZN7S7803C73v22Ev();
extern void _ZN7S7803C73v23Ev();
extern void _ZN7S7803C7D1Ev();
extern void _ZN7S7803C7D0Ev();
extern void ABISELECT(_ZThn48_N7S7803C7D1Ev,_ZThn44_N7S7803C7D1Ev)();
extern void ABISELECT(_ZThn48_N7S7803C7D0Ev,_ZThn44_N7S7803C7D0Ev)();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY vtc_S7803C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C7[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7803C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C7D0Ev,
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI7S7803C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7803C7D1Ev,_ZThn44_N7S7803C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7803C7D0Ev,_ZThn44_N7S7803C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
extern VTBL_ENTRY _ZTI7S7803C7[];
extern  VTBL_ENTRY _ZTV7S7803C7[];
Class_Descriptor cd_S7803C7 = {  "S7803C7", // class name
  bases_S7803C7, 2,
  &(vtc_S7803C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S7803C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7803C7),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7803C5  : virtual S7803C6 , virtual S7803C7 {
  virtual void  v24(); // _ZN7S7803C53v24Ev
  virtual void  v25(); // _ZN7S7803C53v25Ev
  virtual void  v26(); // _ZN7S7803C53v26Ev
  ~S7803C5(); // tgen
  S7803C5(); // tgen
};
//SIG(-1 S7803C5) C1{ VBC2{ v4} VBC3{ BC4{ v5 v6 v7 v8 Fi[10]} BC5{ vd v9 v10 Fp} v11 v12 v13 v14 v15 v16 Fi:4 Fc} v1 v2 v3}


void  S7803C5 ::v24(){vfunc_called(this, "_ZN7S7803C53v24Ev");}
void  S7803C5 ::v25(){vfunc_called(this, "_ZN7S7803C53v25Ev");}
void  S7803C5 ::v26(){vfunc_called(this, "_ZN7S7803C53v26Ev");}
S7803C5 ::~S7803C5(){ note_dtor("S7803C5", this);} // tgen
S7803C5 ::S7803C5(){ note_ctor("S7803C5", this);} // tgen

static void Test_S7803C5()
{
  extern Class_Descriptor cd_S7803C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S7803C5, buf);
    S7803C5 *dp, &lv = *(dp=new (buf) S7803C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S7803C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C5)");
    check_base_class_offset(lv, (S7803C6*), 0, "S7803C5");
    check_base_class_offset(lv, (S7803C8*)(S7803C7*), ABISELECT(8,4), "S7803C5");
    check_base_class_offset(lv, (S7803C9*)(S7803C7*), ABISELECT(56,48), "S7803C5");
    check_base_class_offset(lv, (S7803C7*), ABISELECT(8,4), "S7803C5");
    test_class_info(&lv, &cd_S7803C5);
    dp->~S7803C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C5(Test_S7803C5, "S7803C5", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S7803C5C1Ev();
extern void _ZN7S7803C5D1Ev();
Name_Map name_map_S7803C5[] = {
  NSPAIR(_ZN7S7803C5C1Ev),
  NSPAIR(_ZN7S7803C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7803C6;
extern VTBL_ENTRY _ZTI7S7803C6[];
extern  VTBL_ENTRY _ZTV7S7803C6[];
extern Class_Descriptor cd_S7803C8;
extern VTBL_ENTRY _ZTI7S7803C8[];
extern  VTBL_ENTRY _ZTV7S7803C8[];
extern Class_Descriptor cd_S7803C9;
extern VTBL_ENTRY _ZTI7S7803C9[];
extern  VTBL_ENTRY _ZTV7S7803C9[];
extern Class_Descriptor cd_S7803C7;
extern VTBL_ENTRY _ZTI7S7803C7[];
extern  VTBL_ENTRY _ZTV7S7803C7[];
static Base_Class bases_S7803C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7803C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7803C8,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7803C9,    ABISELECT(56,48), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7803C7,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //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 _ZTI7S7803C5[];
extern void _ZN7S7803C63v11Ev();
extern void _ZN7S7803C53v24Ev();
extern void _ZN7S7803C53v25Ev();
extern void _ZN7S7803C53v26Ev();
extern void _ZN7S7803C5D1Ev();
extern void _ZN7S7803C5D0Ev();
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
extern void _ZN7S7803C73v18Ev();
extern void _ZN7S7803C73v19Ev();
extern void _ZN7S7803C73v20Ev();
extern void _ZN7S7803C73v21Ev();
extern void _ZN7S7803C73v22Ev();
extern void _ZN7S7803C73v23Ev();
extern void ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7803C5D1Ev,_ZThn4_N7S7803C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7803C5D0Ev,_ZThn4_N7S7803C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S7803C5D1Ev,_ZTvn44_n52_N7S7803C5D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7803C5D0Ev,_ZTvn44_n52_N7S7803C5D0Ev)();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY vtc_S7803C5[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&_ZN7S7803C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7803C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C5D0Ev,
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C5D1Ev,_ZTvn44_n52_N7S7803C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C5D0Ev,_ZTvn44_n52_N7S7803C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
extern VTBL_ENTRY _ZTV7S7803C5[];
static  VTT_ENTRY vtt_S7803C5[] = {
  {&(_ZTV7S7803C5[5]),  5,44},
  {&(_ZTV7S7803C5[5]),  5,44},
  {&(_ZTV7S7803C5[26]),  26,44},
  {&(_ZTV7S7803C5[40]),  40,44},
};
extern VTBL_ENTRY _ZTI7S7803C5[];
extern  VTBL_ENTRY _ZTV7S7803C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C5[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7803C5D0Ev,_ZThn4_N7S7803C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7803C5D1Ev,_ZThn4_N7S7803C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7803C5 = {  "S7803C5", // class name
  bases_S7803C5, 4,
  &(vtc_S7803C5[0]), // expected_vtbl_contents
  &(vtt_S7803C5[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S7803C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7803C5),44, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7803C5),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7803C2  : virtual S7803C3 , virtual S7803C5 {
  void *s7803c2f0;
  virtual  ~S7803C2(); // _ZN7S7803C2D2Ev
  virtual void  v27(); // _ZN7S7803C23v27Ev
  virtual void  v28(); // _ZN7S7803C23v28Ev
  virtual void  v29(); // _ZN7S7803C23v29Ev
  virtual void  v30(); // _ZN7S7803C23v30Ev
  virtual void  v31(); // _ZN7S7803C23v31Ev
  S7803C2(); // tgen
};
//SIG(-1 S7803C2) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 FL Fc} vd v11} VBC4{ VBC5{ v12} VBC6{ BC7{ v13 v14 v15 v16 Fi[10]} BC8{ vd v17 v18 Fp} v19 v20 v21 v22 v23 v24 Fi:4 Fc} v25 v26 v27} vd v1 v2 v3 v4 v5 Fp}


 S7803C2 ::~S7803C2(){ note_dtor("S7803C2", this);}
void  S7803C2 ::v27(){vfunc_called(this, "_ZN7S7803C23v27Ev");}
void  S7803C2 ::v28(){vfunc_called(this, "_ZN7S7803C23v28Ev");}
void  S7803C2 ::v29(){vfunc_called(this, "_ZN7S7803C23v29Ev");}
void  S7803C2 ::v30(){vfunc_called(this, "_ZN7S7803C23v30Ev");}
void  S7803C2 ::v31(){vfunc_called(this, "_ZN7S7803C23v31Ev");}
S7803C2 ::S7803C2(){ note_ctor("S7803C2", this);} // tgen

static void Test_S7803C2()
{
  extern Class_Descriptor cd_S7803C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S7803C2, buf);
    S7803C2 *dp, &lv = *(dp=new (buf) S7803C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S7803C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C2)");
    check_base_class_offset(lv, (S7803C4*)(S7803C3*), ABISELECT(16,8), "S7803C2");
    check_base_class_offset(lv, (S7803C3*), 0, "S7803C2");
    check_base_class_offset(lv, (S7803C6*)(S7803C5*), ABISELECT(40,24), "S7803C2");
    check_base_class_offset(lv, (S7803C8*)(S7803C7*), ABISELECT(48,28), "S7803C2");
    check_base_class_offset(lv, (S7803C9*)(S7803C7*), ABISELECT(96,72), "S7803C2");
    check_base_class_offset(lv, (S7803C7*)(S7803C5*), ABISELECT(48,28), "S7803C2");
    check_base_class_offset(lv, (S7803C5*), ABISELECT(40,24), "S7803C2");
    check_field_offset(lv, s7803c2f0, ABISELECT(8,4), "S7803C2.s7803c2f0");
    test_class_info(&lv, &cd_S7803C2);
    dp->~S7803C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C2(Test_S7803C2, "S7803C2", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S7803C2C1Ev();
extern void _ZN7S7803C2D2Ev();
Name_Map name_map_S7803C2[] = {
  NSPAIR(_ZN7S7803C2C1Ev),
  NSPAIR(_ZN7S7803C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7803C4;
extern VTBL_ENTRY _ZTI7S7803C4[];
extern  VTBL_ENTRY _ZTV7S7803C4[];
extern Class_Descriptor cd_S7803C3;
extern VTBL_ENTRY _ZTI7S7803C3[];
extern  VTBL_ENTRY _ZTV7S7803C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C3[];
extern Class_Descriptor cd_S7803C6;
extern VTBL_ENTRY _ZTI7S7803C6[];
extern  VTBL_ENTRY _ZTV7S7803C6[];
extern Class_Descriptor cd_S7803C8;
extern VTBL_ENTRY _ZTI7S7803C8[];
extern  VTBL_ENTRY _ZTV7S7803C8[];
extern Class_Descriptor cd_S7803C9;
extern VTBL_ENTRY _ZTI7S7803C9[];
extern  VTBL_ENTRY _ZTV7S7803C9[];
extern Class_Descriptor cd_S7803C7;
extern VTBL_ENTRY _ZTI7S7803C7[];
extern  VTBL_ENTRY _ZTV7S7803C7[];
extern Class_Descriptor cd_S7803C5;
extern VTBL_ENTRY _ZTI7S7803C5[];
extern  VTBL_ENTRY _ZTV7S7803C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C5[];
static Base_Class bases_S7803C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7803C4,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //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_S7803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7803C6,    ABISELECT(40,24), //bcp->offset
    -1, //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
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7803C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7803C9,    ABISELECT(96,72), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7803C7,    ABISELECT(48,28), //bcp->offset
    44, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7803C5,    ABISELECT(40,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7803C2[];
extern void _ZN7S7803C2D1Ev();
extern void _ZN7S7803C2D0Ev();
extern void _ZN7S7803C33v10Ev();
extern void _ZN7S7803C23v27Ev();
extern void _ZN7S7803C23v28Ev();
extern void _ZN7S7803C23v29Ev();
extern void _ZN7S7803C23v30Ev();
extern void _ZN7S7803C23v31Ev();
extern void _ZN7S7803C42v5Ev();
extern void _ZN7S7803C42v6Ev();
extern void _ZN7S7803C42v7Ev();
extern void _ZN7S7803C42v8Ev();
extern void _ZN7S7803C42v9Ev();
extern void _ZN7S7803C63v11Ev();
extern void _ZN7S7803C53v24Ev();
extern void _ZN7S7803C53v25Ev();
extern void _ZN7S7803C53v26Ev();
extern void ABISELECT(_ZTv0_n72_N7S7803C2D1Ev,_ZTv0_n36_N7S7803C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7803C2D1Ev,_ZThn24_N7S7803C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7803C2D0Ev,_ZTv0_n36_N7S7803C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7803C2D0Ev,_ZThn24_N7S7803C2D0Ev)() __attribute__((weak));
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
extern void _ZN7S7803C73v18Ev();
extern void _ZN7S7803C73v19Ev();
extern void _ZN7S7803C73v20Ev();
extern void _ZN7S7803C73v21Ev();
extern void _ZN7S7803C73v22Ev();
extern void _ZN7S7803C73v23Ev();
extern void ABISELECT(_ZTv0_n104_N7S7803C2D1Ev,_ZTv0_n52_N7S7803C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7803C2D1Ev,_ZThn28_N7S7803C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7803C2D0Ev,_ZTv0_n52_N7S7803C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7803C2D0Ev,_ZThn28_N7S7803C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S7803C2D1Ev,_ZTvn44_n52_N7S7803C2D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7803C2D0Ev,_ZTvn44_n52_N7S7803C2D0Ev)();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY vtc_S7803C2[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7803C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v31Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v9Ev,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7803C2D1Ev,_ZTv0_n36_N7S7803C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7803C2D0Ev,_ZTv0_n36_N7S7803C2D0Ev),
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-48,-28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C2D1Ev,_ZTv0_n52_N7S7803C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C2D0Ev,_ZTv0_n52_N7S7803C2D0Ev),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C2D1Ev,_ZTvn44_n52_N7S7803C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C2D0Ev,_ZTvn44_n52_N7S7803C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
extern VTBL_ENTRY _ZTV7S7803C2[];
extern void _ZN7S7803C3D1Ev();
extern void _ZN7S7803C3D0Ev();
extern void _ZN7S7803C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C3__7S7803C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C3[0]),
  (VTBL_ENTRY)&_ZN7S7803C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7803C33v10Ev,
};
extern void _ZN7S7803C42v5Ev();
extern void _ZN7S7803C42v6Ev();
extern void _ZN7S7803C42v7Ev();
extern void _ZN7S7803C42v8Ev();
extern void _ZN7S7803C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C4__7S7803C3__7S7803C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7803C3[0]),
  (VTBL_ENTRY)&_ZN7S7803C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v9Ev,
};
extern void _ZN7S7803C63v11Ev();
extern void _ZN7S7803C53v24Ev();
extern void _ZN7S7803C53v25Ev();
extern void _ZN7S7803C53v26Ev();
extern void _ZN7S7803C5D1Ev();
extern void _ZN7S7803C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C5__7S7803C2[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&_ZN7S7803C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7803C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C5D0Ev,
};
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
extern void _ZN7S7803C73v18Ev();
extern void _ZN7S7803C73v19Ev();
extern void _ZN7S7803C73v20Ev();
extern void _ZN7S7803C73v21Ev();
extern void _ZN7S7803C73v22Ev();
extern void _ZN7S7803C73v23Ev();
extern void ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7803C5D1Ev,_ZThn4_N7S7803C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7803C5D0Ev,_ZThn4_N7S7803C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7803C7__7S7803C5__7S7803C2[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N7S7803C5D1Ev,_ZTvn44_n52_N7S7803C5D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7803C5D0Ev,_ZTvn44_n52_N7S7803C5D0Ev)();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C97S7803C7__7S7803C5__7S7803C2[] = {
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C5D1Ev,_ZTvn44_n52_N7S7803C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C5D0Ev,_ZTvn44_n52_N7S7803C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
static  VTT_ENTRY vtt_S7803C2[] = {
  {&(_ZTV7S7803C2[9]),  9,77},
  {&(_ZTV7S7803C2[9]),  9,77},
  {&(_ZTV7S7803C2[24]),  24,77},
  {&(_ZTV7S7803C2[38]),  38,77},
  {&(_ZTV7S7803C2[38]),  38,77},
  {&(_ZTV7S7803C2[59]),  59,77},
  {&(_ZTV7S7803C2[73]),  73,77},
  {&(_tg__ZTV7S7803C3__7S7803C2[3]),  3,6},
  {&(_tg__ZTV7S7803C4__7S7803C3__7S7803C2[7]),  7,12},
  {&(_tg__ZTV7S7803C5__7S7803C2[5]),  5,11},
  {&(_tg__ZTV7S7803C5__7S7803C2[5]),  5,11},
  {&(_tg__ZTV7S7803C7__7S7803C5__7S7803C2[15]),  15,27},
  {&(_tg__ZTV7S7803C97S7803C7__7S7803C5__7S7803C2[2]),  2,6},
};
extern VTBL_ENTRY _ZTI7S7803C2[];
extern  VTBL_ENTRY _ZTV7S7803C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C2[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7803C5D0Ev,_ZThn4_N7S7803C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7803C5D1Ev,_ZThn4_N7S7803C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C2D0Ev,_ZTv0_n52_N7S7803C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7803C2D0Ev,_ZThn28_N7S7803C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C2D1Ev,_ZTv0_n52_N7S7803C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7803C2D1Ev,_ZThn28_N7S7803C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7803C2D0Ev,_ZTv0_n36_N7S7803C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7803C2D0Ev,_ZThn24_N7S7803C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7803C2D1Ev,_ZTv0_n36_N7S7803C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7803C2D1Ev,_ZThn24_N7S7803C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7803C2 = {  "S7803C2", // class name
  bases_S7803C2, 7,
  &(vtc_S7803C2[0]), // expected_vtbl_contents
  &(vtt_S7803C2[0]), // expected_vtt_contents
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S7803C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7803C2),77, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7803C2),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7803C1  : S7803C2 {
  virtual  ~S7803C1(); // _ZN7S7803C1D2Ev
  virtual void  v1(); // _ZN7S7803C12v1Ev
  virtual void  v2(); // _ZN7S7803C12v2Ev
  virtual void  v3(); // _ZN7S7803C12v3Ev
  virtual void  v4(); // _ZN7S7803C12v4Ev
  S7803C1(); // tgen
};
//SIG(1 S7803C1) C1{ BC2{ VBC3{ VBC4{ v5 v6 v7 v8 v9 FL Fc} vd v10} VBC5{ VBC6{ v11} VBC7{ BC8{ v12 v13 v14 v15 Fi[10]} BC9{ vd v16 v17 Fp} v18 v19 v20 v21 v22 v23 Fi:4 Fc} v24 v25 v26} vd v27 v28 v29 v30 v31 Fp} vd v1 v2 v3 v4}


 S7803C1 ::~S7803C1(){ note_dtor("S7803C1", this);}
void  S7803C1 ::v1(){vfunc_called(this, "_ZN7S7803C12v1Ev");}
void  S7803C1 ::v2(){vfunc_called(this, "_ZN7S7803C12v2Ev");}
void  S7803C1 ::v3(){vfunc_called(this, "_ZN7S7803C12v3Ev");}
void  S7803C1 ::v4(){vfunc_called(this, "_ZN7S7803C12v4Ev");}
S7803C1 ::S7803C1(){ note_ctor("S7803C1", this);} // tgen

static void Test_S7803C1()
{
  extern Class_Descriptor cd_S7803C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,22)];
    init_test(&cd_S7803C1, buf);
    S7803C1 *dp, &lv = *(dp=new (buf) S7803C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,84), "sizeof(S7803C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7803C1)");
    check_base_class_offset(lv, (S7803C4*)(S7803C3*), ABISELECT(16,8), "S7803C1");
    check_base_class_offset(lv, (S7803C3*)(S7803C2*), 0, "S7803C1");
    check_base_class_offset(lv, (S7803C6*)(S7803C5*), ABISELECT(40,24), "S7803C1");
    check_base_class_offset(lv, (S7803C8*)(S7803C7*), ABISELECT(48,28), "S7803C1");
    check_base_class_offset(lv, (S7803C9*)(S7803C7*), ABISELECT(96,72), "S7803C1");
    check_base_class_offset(lv, (S7803C7*)(S7803C5*), ABISELECT(48,28), "S7803C1");
    check_base_class_offset(lv, (S7803C5*)(S7803C2*), ABISELECT(40,24), "S7803C1");
    check_base_class_offset(lv, (S7803C2*), 0, "S7803C1");
    test_class_info(&lv, &cd_S7803C1);
    dp->~S7803C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7803C1(Test_S7803C1, "S7803C1", ABISELECT(120,84));

#else // __cplusplus

extern void _ZN7S7803C1C1Ev();
extern void _ZN7S7803C1D2Ev();
Name_Map name_map_S7803C1[] = {
  NSPAIR(_ZN7S7803C1C1Ev),
  NSPAIR(_ZN7S7803C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7803C4;
extern VTBL_ENTRY _ZTI7S7803C4[];
extern  VTBL_ENTRY _ZTV7S7803C4[];
extern Class_Descriptor cd_S7803C3;
extern VTBL_ENTRY _ZTI7S7803C3[];
extern  VTBL_ENTRY _ZTV7S7803C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C3[];
extern Class_Descriptor cd_S7803C6;
extern VTBL_ENTRY _ZTI7S7803C6[];
extern  VTBL_ENTRY _ZTV7S7803C6[];
extern Class_Descriptor cd_S7803C8;
extern VTBL_ENTRY _ZTI7S7803C8[];
extern  VTBL_ENTRY _ZTV7S7803C8[];
extern Class_Descriptor cd_S7803C9;
extern VTBL_ENTRY _ZTI7S7803C9[];
extern  VTBL_ENTRY _ZTV7S7803C9[];
extern Class_Descriptor cd_S7803C7;
extern VTBL_ENTRY _ZTI7S7803C7[];
extern  VTBL_ENTRY _ZTV7S7803C7[];
extern Class_Descriptor cd_S7803C5;
extern VTBL_ENTRY _ZTI7S7803C5[];
extern  VTBL_ENTRY _ZTV7S7803C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C5[];
extern Class_Descriptor cd_S7803C2;
extern VTBL_ENTRY _ZTI7S7803C2[];
extern  VTBL_ENTRY _ZTV7S7803C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C2[];
static Base_Class bases_S7803C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7803C4,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7803C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7803C6,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7803C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7803C9,    ABISELECT(96,72), //bcp->offset
    75, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7803C7,    ABISELECT(48,28), //bcp->offset
    48, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7803C5,    ABISELECT(40,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7803C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7803C1[];
extern void _ZN7S7803C1D1Ev();
extern void _ZN7S7803C1D0Ev();
extern void _ZN7S7803C33v10Ev();
extern void _ZN7S7803C23v27Ev();
extern void _ZN7S7803C23v28Ev();
extern void _ZN7S7803C23v29Ev();
extern void _ZN7S7803C23v30Ev();
extern void _ZN7S7803C23v31Ev();
extern void _ZN7S7803C12v1Ev();
extern void _ZN7S7803C12v2Ev();
extern void _ZN7S7803C12v3Ev();
extern void _ZN7S7803C12v4Ev();
extern void _ZN7S7803C42v5Ev();
extern void _ZN7S7803C42v6Ev();
extern void _ZN7S7803C42v7Ev();
extern void _ZN7S7803C42v8Ev();
extern void _ZN7S7803C42v9Ev();
extern void _ZN7S7803C63v11Ev();
extern void _ZN7S7803C53v24Ev();
extern void _ZN7S7803C53v25Ev();
extern void _ZN7S7803C53v26Ev();
extern void ABISELECT(_ZTv0_n72_N7S7803C1D1Ev,_ZTv0_n36_N7S7803C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S7803C1D1Ev,_ZThn24_N7S7803C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7803C1D0Ev,_ZTv0_n36_N7S7803C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S7803C1D0Ev,_ZThn24_N7S7803C1D0Ev)() __attribute__((weak));
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
extern void _ZN7S7803C73v18Ev();
extern void _ZN7S7803C73v19Ev();
extern void _ZN7S7803C73v20Ev();
extern void _ZN7S7803C73v21Ev();
extern void _ZN7S7803C73v22Ev();
extern void _ZN7S7803C73v23Ev();
extern void ABISELECT(_ZTv0_n104_N7S7803C1D1Ev,_ZTv0_n52_N7S7803C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7803C1D1Ev,_ZThn28_N7S7803C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7803C1D0Ev,_ZTv0_n52_N7S7803C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7803C1D0Ev,_ZThn28_N7S7803C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S7803C1D1Ev,_ZTvn44_n52_N7S7803C1D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7803C1D0Ev,_ZTvn44_n52_N7S7803C1D0Ev)();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY vtc_S7803C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C1[0]),
  (VTBL_ENTRY)&_ZN7S7803C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7803C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7803C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7803C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7803C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7803C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7803C1[0]),
  (VTBL_ENTRY)&_ZN7S7803C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v9Ev,
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7803C1[0]),
  (VTBL_ENTRY)&_ZN7S7803C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7803C1D1Ev,_ZTv0_n36_N7S7803C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7803C1D0Ev,_ZTv0_n36_N7S7803C1D0Ev),
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-48,-28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7803C1[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C1D1Ev,_ZTv0_n52_N7S7803C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C1D0Ev,_ZTv0_n52_N7S7803C1D0Ev),
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7803C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C1D1Ev,_ZTvn44_n52_N7S7803C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C1D0Ev,_ZTvn44_n52_N7S7803C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
extern VTBL_ENTRY _ZTV7S7803C1[];
extern void _ZN7S7803C2D1Ev();
extern void _ZN7S7803C2D0Ev();
extern void _ZN7S7803C33v10Ev();
extern void _ZN7S7803C23v27Ev();
extern void _ZN7S7803C23v28Ev();
extern void _ZN7S7803C23v29Ev();
extern void _ZN7S7803C23v30Ev();
extern void _ZN7S7803C23v31Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C2__7S7803C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(40,24),
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7803C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7803C23v31Ev,
};
extern void _ZN7S7803C42v5Ev();
extern void _ZN7S7803C42v6Ev();
extern void _ZN7S7803C42v7Ev();
extern void _ZN7S7803C42v8Ev();
extern void _ZN7S7803C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C4__7S7803C2__7S7803C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v9Ev,
};
extern void _ZN7S7803C63v11Ev();
extern void _ZN7S7803C53v24Ev();
extern void _ZN7S7803C53v25Ev();
extern void _ZN7S7803C53v26Ev();
extern void ABISELECT(_ZTv0_n72_N7S7803C2D1Ev,_ZTv0_n36_N7S7803C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7803C2D1Ev,_ZThn24_N7S7803C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7803C2D0Ev,_ZTv0_n36_N7S7803C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7803C2D0Ev,_ZThn24_N7S7803C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7803C5__7S7803C2__7S7803C1[] = {
  ABISELECT(-40,-24),
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v26Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7803C2D1Ev,_ZTv0_n36_N7S7803C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7803C2D0Ev,_ZTv0_n36_N7S7803C2D0Ev),
};
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
extern void _ZN7S7803C73v18Ev();
extern void _ZN7S7803C73v19Ev();
extern void _ZN7S7803C73v20Ev();
extern void _ZN7S7803C73v21Ev();
extern void _ZN7S7803C73v22Ev();
extern void _ZN7S7803C73v23Ev();
extern void ABISELECT(_ZTv0_n104_N7S7803C2D1Ev,_ZTv0_n52_N7S7803C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7803C2D1Ev,_ZThn28_N7S7803C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7803C2D0Ev,_ZTv0_n52_N7S7803C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S7803C2D0Ev,_ZThn28_N7S7803C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7803C7__7S7803C2__7S7803C1[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-48,-28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C2D1Ev,_ZTv0_n52_N7S7803C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C2D0Ev,_ZTv0_n52_N7S7803C2D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N7S7803C2D1Ev,_ZTvn44_n52_N7S7803C2D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7803C2D0Ev,_ZTvn44_n52_N7S7803C2D0Ev)();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C97S7803C7__7S7803C2__7S7803C1[] = {
  ABISELECT(-96,-72),
  (VTBL_ENTRY)&(_ZTI7S7803C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C2D1Ev,_ZTvn44_n52_N7S7803C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C2D0Ev,_ZTvn44_n52_N7S7803C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
extern void _ZN7S7803C3D1Ev();
extern void _ZN7S7803C3D0Ev();
extern void _ZN7S7803C33v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C3__7S7803C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C3[0]),
  (VTBL_ENTRY)&_ZN7S7803C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7803C33v10Ev,
};
extern void _ZN7S7803C42v5Ev();
extern void _ZN7S7803C42v6Ev();
extern void _ZN7S7803C42v7Ev();
extern void _ZN7S7803C42v8Ev();
extern void _ZN7S7803C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C4__7S7803C3__7S7803C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7803C3[0]),
  (VTBL_ENTRY)&_ZN7S7803C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7803C42v9Ev,
};
extern void _ZN7S7803C63v11Ev();
extern void _ZN7S7803C53v24Ev();
extern void _ZN7S7803C53v25Ev();
extern void _ZN7S7803C53v26Ev();
extern void _ZN7S7803C5D1Ev();
extern void _ZN7S7803C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C5__7S7803C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&_ZN7S7803C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v24Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v25Ev,
  (VTBL_ENTRY)&_ZN7S7803C53v26Ev,
  (VTBL_ENTRY)&_ZN7S7803C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7803C5D0Ev,
};
extern void _ZN7S7803C83v12Ev();
extern void _ZN7S7803C83v13Ev();
extern void _ZN7S7803C83v14Ev();
extern void _ZN7S7803C83v15Ev();
extern void _ZN7S7803C73v18Ev();
extern void _ZN7S7803C73v19Ev();
extern void _ZN7S7803C73v20Ev();
extern void _ZN7S7803C73v21Ev();
extern void _ZN7S7803C73v22Ev();
extern void _ZN7S7803C73v23Ev();
extern void ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev)();
extern void ABISELECT(_ZThn8_N7S7803C5D1Ev,_ZThn4_N7S7803C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev)();
extern void ABISELECT(_ZThn8_N7S7803C5D0Ev,_ZThn4_N7S7803C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7803C7__7S7803C5__7S7803C1[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&_ZN7S7803C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7803C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v18Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v19Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v20Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v21Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7803C73v23Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N7S7803C5D1Ev,_ZTvn44_n52_N7S7803C5D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S7803C5D0Ev,_ZTvn44_n52_N7S7803C5D0Ev)();
extern void _ZN7S7803C93v16Ev();
extern void _ZN7S7803C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7803C97S7803C7__7S7803C5__7S7803C1[] = {
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI7S7803C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C5D1Ev,_ZTvn44_n52_N7S7803C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S7803C5D0Ev,_ZTvn44_n52_N7S7803C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7803C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7803C93v17Ev,
};
static  VTT_ENTRY vtt_S7803C1[] = {
  {&(_ZTV7S7803C1[9]),  9,81},
  {&(_tg__ZTV7S7803C2__7S7803C1[9]),  9,17},
  {&(_tg__ZTV7S7803C2__7S7803C1[9]),  9,17},
  {&(_tg__ZTV7S7803C4__7S7803C2__7S7803C1[7]),  7,12},
  {&(_tg__ZTV7S7803C5__7S7803C2__7S7803C1[9]),  9,15},
  {&(_tg__ZTV7S7803C5__7S7803C2__7S7803C1[9]),  9,15},
  {&(_tg__ZTV7S7803C7__7S7803C2__7S7803C1[15]),  15,27},
  {&(_tg__ZTV7S7803C97S7803C7__7S7803C2__7S7803C1[2]),  2,6},
  {&(_ZTV7S7803C1[9]),  9,81},
  {&(_ZTV7S7803C1[28]),  28,81},
  {&(_ZTV7S7803C1[42]),  42,81},
  {&(_ZTV7S7803C1[42]),  42,81},
  {&(_ZTV7S7803C1[63]),  63,81},
  {&(_ZTV7S7803C1[77]),  77,81},
  {&(_tg__ZTV7S7803C3__7S7803C1[3]),  3,6},
  {&(_tg__ZTV7S7803C4__7S7803C3__7S7803C1[7]),  7,12},
  {&(_tg__ZTV7S7803C5__7S7803C1[5]),  5,11},
  {&(_tg__ZTV7S7803C5__7S7803C1[5]),  5,11},
  {&(_tg__ZTV7S7803C7__7S7803C5__7S7803C1[15]),  15,27},
  {&(_tg__ZTV7S7803C97S7803C7__7S7803C5__7S7803C1[2]),  2,6},
};
extern VTBL_ENTRY _ZTI7S7803C1[];
extern  VTBL_ENTRY _ZTV7S7803C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7803C1[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C5D0Ev,_ZTv0_n52_N7S7803C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7803C5D0Ev,_ZThn4_N7S7803C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C5D1Ev,_ZTv0_n52_N7S7803C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7803C5D1Ev,_ZThn4_N7S7803C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C2D0Ev,_ZTv0_n52_N7S7803C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7803C2D0Ev,_ZThn28_N7S7803C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C2D1Ev,_ZTv0_n52_N7S7803C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7803C2D1Ev,_ZThn28_N7S7803C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7803C2D0Ev,_ZTv0_n36_N7S7803C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7803C2D0Ev,_ZThn24_N7S7803C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7803C2D1Ev,_ZTv0_n36_N7S7803C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7803C2D1Ev,_ZThn24_N7S7803C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C1D0Ev,_ZTv0_n52_N7S7803C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7803C1D0Ev,_ZThn28_N7S7803C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7803C1D1Ev,_ZTv0_n52_N7S7803C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7803C1D1Ev,_ZThn28_N7S7803C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7803C1D0Ev,_ZTv0_n36_N7S7803C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7803C1D0Ev,_ZThn24_N7S7803C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7803C1D1Ev,_ZTv0_n36_N7S7803C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7803C1D1Ev,_ZThn24_N7S7803C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7803C1 = {  "S7803C1", // class name
  bases_S7803C1, 8,
  &(vtc_S7803C1[0]), // expected_vtbl_contents
  &(vtt_S7803C1[0]), // expected_vtt_contents
  ABISELECT(120,84), // object size
  NSPAIRA(_ZTI7S7803C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7803C1),81, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7803C1),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1707C3_nt  : S3715C3_nt {
  virtual void  v6(); // _ZN10S1707C3_nt2v6Ev
  virtual void  v7(); // _ZN10S1707C3_nt2v7Ev
  virtual void  v8(); // _ZN10S1707C3_nt2v8Ev
  virtual void  v9(); // _ZN10S1707C3_nt2v9Ev
  virtual void  v10(); // _ZN10S1707C3_nt3v10Ev
  ~S1707C3_nt(); // tgen
  S1707C3_nt(); // tgen
};
//SIG(-1 S1707C3_nt) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S1707C3_nt ::v6(){vfunc_called(this, "_ZN10S1707C3_nt2v6Ev");}
void  S1707C3_nt ::v7(){vfunc_called(this, "_ZN10S1707C3_nt2v7Ev");}
void  S1707C3_nt ::v8(){vfunc_called(this, "_ZN10S1707C3_nt2v8Ev");}
void  S1707C3_nt ::v9(){vfunc_called(this, "_ZN10S1707C3_nt2v9Ev");}
void  S1707C3_nt ::v10(){vfunc_called(this, "_ZN10S1707C3_nt3v10Ev");}
S1707C3_nt ::~S1707C3_nt(){ note_dtor("S1707C3_nt", this);} // tgen
S1707C3_nt ::S1707C3_nt(){ note_ctor("S1707C3_nt", this);} // tgen

//skip512 S1707C3_nt

#else // __cplusplus

extern void _ZN10S1707C3_ntC1Ev();
extern void _ZN10S1707C3_ntD1Ev();
Name_Map name_map_S1707C3_nt[] = {
  NSPAIR(_ZN10S1707C3_ntC1Ev),
  NSPAIR(_ZN10S1707C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
static Base_Class bases_S1707C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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 _ZTI10S1707C3_nt[];
extern void _ZN10S1707C3_ntD1Ev();
extern void _ZN10S1707C3_ntD0Ev();
extern void _ZN10S1707C3_nt2v6Ev();
extern void _ZN10S1707C3_nt2v7Ev();
extern void _ZN10S1707C3_nt2v8Ev();
extern void _ZN10S1707C3_nt2v9Ev();
extern void _ZN10S1707C3_nt3v10Ev();
static  VTBL_ENTRY vtc_S1707C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1707C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1707C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S1707C3_nt[];
VTBL_ENTRY *P__ZTI10S1707C3_nt = _ZTI10S1707C3_nt; 
extern  VTBL_ENTRY _ZTV10S1707C3_nt[];
Class_Descriptor cd_S1707C3_nt = {  "S1707C3_nt", // class name
  bases_S1707C3_nt, 1,
  &(vtc_S1707C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1707C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1707C3_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1707C5_nt  {
  ::S22028C26_nt s1707c5f0;
  void *s1707c5f1[2];
  void  mf1707c5(); // _ZN10S1707C5_nt8mf1707c5Ev
};
//SIG(-1 S1707C5_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S1707C5_nt ::mf1707c5(){}

//skip512 S1707C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1707C2_nt  : S1707C3_nt {
  void *s1707c2f0[3];
  ::S1707C5_nt s1707c2f1;
  virtual void  v11(); // _ZN10S1707C2_nt3v11Ev
  virtual void  v12(); // _ZN10S1707C2_nt3v12Ev
  virtual void  v13(); // _ZN10S1707C2_nt3v13Ev
  virtual void  v14(); // _ZN10S1707C2_nt3v14Ev
  virtual void  v15(); // _ZN10S1707C2_nt3v15Ev
  virtual void  v16(); // _ZN10S1707C2_nt3v16Ev
  virtual void  v17(); // _ZN10S1707C2_nt3v17Ev
  virtual void  v18(); // _ZN10S1707C2_nt3v18Ev
  virtual void  v19(); // _ZN10S1707C2_nt3v19Ev
  virtual void  v20(); // _ZN10S1707C2_nt3v20Ev
  virtual void  v21(); // _ZN10S1707C2_nt3v21Ev
  ~S1707C2_nt(); // tgen
  S1707C2_nt(); // tgen
};
//SIG(-1 S1707C2_nt) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S1707C2_nt ::v11(){vfunc_called(this, "_ZN10S1707C2_nt3v11Ev");}
void  S1707C2_nt ::v12(){vfunc_called(this, "_ZN10S1707C2_nt3v12Ev");}
void  S1707C2_nt ::v13(){vfunc_called(this, "_ZN10S1707C2_nt3v13Ev");}
void  S1707C2_nt ::v14(){vfunc_called(this, "_ZN10S1707C2_nt3v14Ev");}
void  S1707C2_nt ::v15(){vfunc_called(this, "_ZN10S1707C2_nt3v15Ev");}
void  S1707C2_nt ::v16(){vfunc_called(this, "_ZN10S1707C2_nt3v16Ev");}
void  S1707C2_nt ::v17(){vfunc_called(this, "_ZN10S1707C2_nt3v17Ev");}
void  S1707C2_nt ::v18(){vfunc_called(this, "_ZN10S1707C2_nt3v18Ev");}
void  S1707C2_nt ::v19(){vfunc_called(this, "_ZN10S1707C2_nt3v19Ev");}
void  S1707C2_nt ::v20(){vfunc_called(this, "_ZN10S1707C2_nt3v20Ev");}
void  S1707C2_nt ::v21(){vfunc_called(this, "_ZN10S1707C2_nt3v21Ev");}
S1707C2_nt ::~S1707C2_nt(){ note_dtor("S1707C2_nt", this);} // tgen
S1707C2_nt ::S1707C2_nt(){ note_ctor("S1707C2_nt", this);} // tgen

//skip512 S1707C2_nt

#else // __cplusplus

extern void _ZN10S1707C2_ntC1Ev();
extern void _ZN10S1707C2_ntD1Ev();
Name_Map name_map_S1707C2_nt[] = {
  NSPAIR(_ZN10S1707C2_ntC1Ev),
  NSPAIR(_ZN10S1707C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S1707C3_nt;
extern VTBL_ENTRY _ZTI10S1707C3_nt[];
extern  VTBL_ENTRY _ZTV10S1707C3_nt[];
static Base_Class bases_S1707C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S1707C3_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 _ZTI10S1707C2_nt[];
extern void _ZN10S1707C2_ntD1Ev();
extern void _ZN10S1707C2_ntD0Ev();
extern void _ZN10S1707C3_nt2v6Ev();
extern void _ZN10S1707C3_nt2v7Ev();
extern void _ZN10S1707C3_nt2v8Ev();
extern void _ZN10S1707C3_nt2v9Ev();
extern void _ZN10S1707C3_nt3v10Ev();
extern void _ZN10S1707C2_nt3v11Ev();
extern void _ZN10S1707C2_nt3v12Ev();
extern void _ZN10S1707C2_nt3v13Ev();
extern void _ZN10S1707C2_nt3v14Ev();
extern void _ZN10S1707C2_nt3v15Ev();
extern void _ZN10S1707C2_nt3v16Ev();
extern void _ZN10S1707C2_nt3v17Ev();
extern void _ZN10S1707C2_nt3v18Ev();
extern void _ZN10S1707C2_nt3v19Ev();
extern void _ZN10S1707C2_nt3v20Ev();
extern void _ZN10S1707C2_nt3v21Ev();
static  VTBL_ENTRY vtc_S1707C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1707C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1707C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v21Ev,
};
extern VTBL_ENTRY _ZTI10S1707C2_nt[];
VTBL_ENTRY *P__ZTI10S1707C2_nt = _ZTI10S1707C2_nt; 
extern  VTBL_ENTRY _ZTV10S1707C2_nt[];
Class_Descriptor cd_S1707C2_nt = {  "S1707C2_nt", // class name
  bases_S1707C2_nt, 2,
  &(vtc_S1707C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI10S1707C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1707C2_nt),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  S1707C1  : S1707C2_nt {
  ::S22028C11_nt s1707c1f0;
  ::S22028C11_nt s1707c1f1;
  char s1707c1f2;
  void *s1707c1f3;
  ::S22028C73 s1707c1f4;
  virtual  ~S1707C1(); // _ZN7S1707C1D1Ev
  virtual void  v1(); // _ZN7S1707C12v1Ev
  virtual void  v2(); // _ZN7S1707C12v2Ev
  virtual void  v3(); // _ZN7S1707C12v3Ev
  virtual void  v4(); // _ZN7S1707C12v4Ev
  virtual void  v5(); // _ZN7S1707C12v5Ev
  S1707C1(); // tgen
};
//SIG(1 S1707C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v6 v7 v8 v9 v10} v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} vd v1 v2 v3 v4 v5 FC8{ m Fp Fi FC9{ m}} FC8 Fc Fp FC10{ m Fp[2]}}


 S1707C1 ::~S1707C1(){ note_dtor("S1707C1", this);}
void  S1707C1 ::v1(){vfunc_called(this, "_ZN7S1707C12v1Ev");}
void  S1707C1 ::v2(){vfunc_called(this, "_ZN7S1707C12v2Ev");}
void  S1707C1 ::v3(){vfunc_called(this, "_ZN7S1707C12v3Ev");}
void  S1707C1 ::v4(){vfunc_called(this, "_ZN7S1707C12v4Ev");}
void  S1707C1 ::v5(){vfunc_called(this, "_ZN7S1707C12v5Ev");}
S1707C1 ::S1707C1(){ note_ctor("S1707C1", this);} // tgen

static void Test_S1707C1()
{
  extern Class_Descriptor cd_S1707C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S1707C1, buf);
    S1707C1 *dp, &lv = *(dp=new (buf) S1707C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S1707C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1707C1)");
    check_base_class_offset(lv, (S3715C3_nt*)(S1707C3_nt*)(S1707C2_nt*), 0, "S1707C1");
    check_base_class_offset(lv, (S1707C3_nt*)(S1707C2_nt*), 0, "S1707C1");
    check_base_class_offset(lv, (S1707C2_nt*), 0, "S1707C1");
    check_field_offset(lv, s1707c1f0, ABISELECT(80,44), "S1707C1.s1707c1f0");
    check_field_offset(lv, s1707c1f1, ABISELECT(96,56), "S1707C1.s1707c1f1");
    check_field_offset(lv, s1707c1f2, ABISELECT(112,68), "S1707C1.s1707c1f2");
    check_field_offset(lv, s1707c1f3, ABISELECT(120,72), "S1707C1.s1707c1f3");
    check_field_offset(lv, s1707c1f4, ABISELECT(128,76), "S1707C1.s1707c1f4");
    test_class_info(&lv, &cd_S1707C1);
    dp->~S1707C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1707C1(Test_S1707C1, "S1707C1", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S1707C1C1Ev();
extern void _ZN7S1707C1D1Ev();
Name_Map name_map_S1707C1[] = {
  NSPAIR(_ZN7S1707C1C1Ev),
  NSPAIR(_ZN7S1707C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3715C3_nt;
extern VTBL_ENTRY _ZTI10S3715C3_nt[];
extern  VTBL_ENTRY _ZTV10S3715C3_nt[];
extern Class_Descriptor cd_S1707C3_nt;
extern VTBL_ENTRY _ZTI10S1707C3_nt[];
extern  VTBL_ENTRY _ZTV10S1707C3_nt[];
extern Class_Descriptor cd_S1707C2_nt;
extern VTBL_ENTRY _ZTI10S1707C2_nt[];
extern  VTBL_ENTRY _ZTV10S1707C2_nt[];
static Base_Class bases_S1707C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3715C3_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_S1707C3_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_S1707C2_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 _ZTI7S1707C1[];
extern void _ZN7S1707C1D1Ev();
extern void _ZN7S1707C1D0Ev();
extern void _ZN10S1707C3_nt2v6Ev();
extern void _ZN10S1707C3_nt2v7Ev();
extern void _ZN10S1707C3_nt2v8Ev();
extern void _ZN10S1707C3_nt2v9Ev();
extern void _ZN10S1707C3_nt3v10Ev();
extern void _ZN10S1707C2_nt3v11Ev();
extern void _ZN10S1707C2_nt3v12Ev();
extern void _ZN10S1707C2_nt3v13Ev();
extern void _ZN10S1707C2_nt3v14Ev();
extern void _ZN10S1707C2_nt3v15Ev();
extern void _ZN10S1707C2_nt3v16Ev();
extern void _ZN10S1707C2_nt3v17Ev();
extern void _ZN10S1707C2_nt3v18Ev();
extern void _ZN10S1707C2_nt3v19Ev();
extern void _ZN10S1707C2_nt3v20Ev();
extern void _ZN10S1707C2_nt3v21Ev();
extern void _ZN7S1707C12v1Ev();
extern void _ZN7S1707C12v2Ev();
extern void _ZN7S1707C12v3Ev();
extern void _ZN7S1707C12v4Ev();
extern void _ZN7S1707C12v5Ev();
static  VTBL_ENTRY vtc_S1707C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1707C1[0]),
  (VTBL_ENTRY)&_ZN7S1707C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1707C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1707C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1707C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN7S1707C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1707C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1707C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1707C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1707C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1707C1[];
extern  VTBL_ENTRY _ZTV7S1707C1[];
Class_Descriptor cd_S1707C1 = {  "S1707C1", // class name
  bases_S1707C1, 3,
  &(vtc_S1707C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S1707C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1707C1),25, //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  S15531C3  {
  int s15531c3f0[4];
  char s15531c3f1[10];
  short s15531c3f2[2];
  char s15531c3f3[9];
  void  mf15531c3(); // _ZN8S15531C39mf15531c3Ev
};
//SIG(-1 S15531C3) C1{ m Fi[4] Fc[10] Fs[2] Fc[9]}


void  S15531C3 ::mf15531c3(){}

static void Test_S15531C3()
{
  {
    init_simple_test("S15531C3");
    S15531C3 lv;
    check2(sizeof(lv), 40, "sizeof(S15531C3)");
    check2(__alignof__(lv), 4, "__alignof__(S15531C3)");
    check_field_offset(lv, s15531c3f0, 0, "S15531C3.s15531c3f0");
    check_field_offset(lv, s15531c3f1, 16, "S15531C3.s15531c3f1");
    check_field_offset(lv, s15531c3f2, 26, "S15531C3.s15531c3f2");
    check_field_offset(lv, s15531c3f3, 30, "S15531C3.s15531c3f3");
  }
}
static Arrange_To_Call_Me vS15531C3(Test_S15531C3, "S15531C3", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15531C2  {
  ::S15531C3 s15531c2f0;
};
//SIG(-1 S15531C2) C1{ FC2{ m Fi[4] Fc[10] Fs[2] Fc[9]}}



static void Test_S15531C2()
{
  {
    init_simple_test("S15531C2");
    S15531C2 lv;
    check2(sizeof(lv), 40, "sizeof(S15531C2)");
    check2(__alignof__(lv), 4, "__alignof__(S15531C2)");
    check_field_offset(lv, s15531c2f0, 0, "S15531C2.s15531c2f0");
  }
}
static Arrange_To_Call_Me vS15531C2(Test_S15531C2, "S15531C2", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15531C4  {
  short s15531c4f0[2];
  int s15531c4f1[3];
  void  mf15531c4(); // _ZN8S15531C49mf15531c4Ev
};
//SIG(-1 S15531C4) C1{ m Fs[2] Fi[3]}


void  S15531C4 ::mf15531c4(){}

static void Test_S15531C4()
{
  {
    init_simple_test("S15531C4");
    S15531C4 lv;
    check2(sizeof(lv), 16, "sizeof(S15531C4)");
    check2(__alignof__(lv), 4, "__alignof__(S15531C4)");
    check_field_offset(lv, s15531c4f0, 0, "S15531C4.s15531c4f0");
    check_field_offset(lv, s15531c4f1, 4, "S15531C4.s15531c4f1");
  }
}
static Arrange_To_Call_Me vS15531C4(Test_S15531C4, "S15531C4", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15531C6_nt  {
  char s15531c6f0[8];
};
//SIG(-1 S15531C6_nt) C1{ Fc[8]}



//skip512 S15531C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15531C5  {
  ::S15531C6_nt s15531c5f0;
  int s15531c5f1;
};
//SIG(-1 S15531C5) C1{ FC2{ Fc[8]} Fi}



static void Test_S15531C5()
{
  {
    init_simple_test("S15531C5");
    S15531C5 lv;
    check2(sizeof(lv), 12, "sizeof(S15531C5)");
    check2(__alignof__(lv), 4, "__alignof__(S15531C5)");
    check_field_offset(lv, s15531c5f0, 0, "S15531C5.s15531c5f0");
    check_field_offset(lv, s15531c5f1, 8, "S15531C5.s15531c5f1");
  }
}
static Arrange_To_Call_Me vS15531C5(Test_S15531C5, "S15531C5", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15531C7  {
  char s15531c7f0[32];
  int s15531c7f1[3];
  char s15531c7f2[4];
  ::S17189C2 s15531c7f3;
  char s15531c7f4[4];
  void  mf15531c7(); // _ZN8S15531C79mf15531c7Ev
};
//SIG(-1 S15531C7) C1{ m Fc[32] Fi[3] Fc[4] FC2{ m Fi:1 Fi:7 Fi:2 Fi:2 Fi:2 Fi:2 Fi} Fc[4]}


void  S15531C7 ::mf15531c7(){}

static void Test_S15531C7()
{
  {
    init_simple_test("S15531C7");
    static S15531C7 lv;
    check2(sizeof(lv), 60, "sizeof(S15531C7)");
    check2(__alignof__(lv), 4, "__alignof__(S15531C7)");
    check_field_offset(lv, s15531c7f0, 0, "S15531C7.s15531c7f0");
    check_field_offset(lv, s15531c7f1, 32, "S15531C7.s15531c7f1");
    check_field_offset(lv, s15531c7f2, 44, "S15531C7.s15531c7f2");
    check_field_offset(lv, s15531c7f3, 48, "S15531C7.s15531c7f3");
    check_field_offset(lv, s15531c7f4, 56, "S15531C7.s15531c7f4");
  }
}
static Arrange_To_Call_Me vS15531C7(Test_S15531C7, "S15531C7", 60);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15531C9  {
  void *s15531c9f0;
  int s15531c9f1[4];
  ::S15531C5 s15531c9f2;
  int s15531c9f3;
  short s15531c9f4[2];
  char s15531c9f5[4];
  void  mf15531c9(); // _ZN8S15531C99mf15531c9Ev
};
//SIG(-1 S15531C9) C1{ m Fp Fi[4] FC2{ FC3{ Fc[8]} Fi} Fi Fs[2] Fc[4]}


void  S15531C9 ::mf15531c9(){}

static void Test_S15531C9()
{
  {
    init_simple_test("S15531C9");
    S15531C9 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S15531C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15531C9)");
    check_field_offset(lv, s15531c9f0, 0, "S15531C9.s15531c9f0");
    check_field_offset(lv, s15531c9f1, ABISELECT(8,4), "S15531C9.s15531c9f1");
    check_field_offset(lv, s15531c9f2, ABISELECT(24,20), "S15531C9.s15531c9f2");
    check_field_offset(lv, s15531c9f3, ABISELECT(36,32), "S15531C9.s15531c9f3");
    check_field_offset(lv, s15531c9f4, ABISELECT(40,36), "S15531C9.s15531c9f4");
    check_field_offset(lv, s15531c9f5, ABISELECT(44,40), "S15531C9.s15531c9f5");
  }
}
static Arrange_To_Call_Me vS15531C9(Test_S15531C9, "S15531C9", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15531C1  {
  ::S15531C2 s15531c1f0;
  ::S15531C4 s15531c1f1;
  ::S15531C5 s15531c1f2;
  ::S15531C7 s15531c1f3;
  ::S15531C9 s15531c1f4;
  void  mf15531c1(); // _ZN8S15531C19mf15531c1Ev
};
//SIG(1 S15531C1) C1{ m FC2{ FC3{ m Fi[4] Fc[10] Fs[2] Fc[9]}} FC4{ m Fs[2] Fi[3]} FC5{ FC6{ Fc[8]} Fi} FC7{ m Fc[32] Fi[3] Fc[4] FC8{ m Fi:1 Fi:7 Fi:2 Fi:2 Fi:2 Fi:2 Fi} Fc[4]} FC9{ m Fp Fi[4] FC5 Fi Fs[2] Fc[4]}}


void  S15531C1 ::mf15531c1(){}

static void Test_S15531C1()
{
  {
    init_simple_test("S15531C1");
    static S15531C1 lv;
    check2(sizeof(lv), ABISELECT(176,172), "sizeof(S15531C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15531C1)");
    check_field_offset(lv, s15531c1f0, 0, "S15531C1.s15531c1f0");
    check_field_offset(lv, s15531c1f1, 40, "S15531C1.s15531c1f1");
    check_field_offset(lv, s15531c1f2, 56, "S15531C1.s15531c1f2");
    check_field_offset(lv, s15531c1f3, 68, "S15531C1.s15531c1f3");
    check_field_offset(lv, s15531c1f4, 128, "S15531C1.s15531c1f4");
  }
}
static Arrange_To_Call_Me vS15531C1(Test_S15531C1, "S15531C1", ABISELECT(176,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6429C2  {
  virtual void  v1(); // _ZN7S6429C22v1Ev
  ~S6429C2(); // tgen
  S6429C2(); // tgen
};
//SIG(-1 S6429C2) C1{ v1}


void  S6429C2 ::v1(){vfunc_called(this, "_ZN7S6429C22v1Ev");}
S6429C2 ::~S6429C2(){ note_dtor("S6429C2", this);} // tgen
S6429C2 ::S6429C2(){ note_ctor("S6429C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6429C2C1Ev();
extern void _ZN7S6429C2D1Ev();
Name_Map name_map_S6429C2[] = {
  NSPAIR(_ZN7S6429C2C1Ev),
  NSPAIR(_ZN7S6429C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6429C2[];
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY vtc_S6429C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C2[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
Class_Descriptor cd_S6429C2 = {  "S6429C2", // class name
  0,0,//no base classes
  &(vtc_S6429C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6429C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6429C2),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  S6429C3  : virtual S6429C2 {
  __tsi64 s6429c3f0;
  int s6429c3f1;
  long double s6429c3f2[9];
  virtual void  v2(); // _ZN7S6429C32v2Ev
  virtual void  v3(); // _ZN7S6429C32v3Ev
  virtual void  v4(); // _ZN7S6429C32v4Ev
  virtual void  v5(); // _ZN7S6429C32v5Ev
  virtual void  v6(); // _ZN7S6429C32v6Ev
  ~S6429C3(); // tgen
  S6429C3(); // tgen
};
//SIG(-1 S6429C3) C1{ VBC2{ v6} v1 v2 v3 v4 v5 FL Fi FD[9]}


void  S6429C3 ::v2(){vfunc_called(this, "_ZN7S6429C32v2Ev");}
void  S6429C3 ::v3(){vfunc_called(this, "_ZN7S6429C32v3Ev");}
void  S6429C3 ::v4(){vfunc_called(this, "_ZN7S6429C32v4Ev");}
void  S6429C3 ::v5(){vfunc_called(this, "_ZN7S6429C32v5Ev");}
void  S6429C3 ::v6(){vfunc_called(this, "_ZN7S6429C32v6Ev");}
S6429C3 ::~S6429C3(){ note_dtor("S6429C3", this);} // tgen
S6429C3 ::S6429C3(){ note_ctor("S6429C3", this);} // tgen

static void Test_S6429C3()
{
  extern Class_Descriptor cd_S6429C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S6429C3, buf);
    S6429C3 *dp, &lv = *(dp=new (buf) S6429C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S6429C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6429C3)");
    check_base_class_offset(lv, (S6429C2*), 0, "S6429C3");
    check_field_offset(lv, s6429c3f0, ABISELECT(8,4), "S6429C3.s6429c3f0");
    check_field_offset(lv, s6429c3f1, ABISELECT(16,12), "S6429C3.s6429c3f1");
    check_field_offset(lv, s6429c3f2, ABISELECT(32,16), "S6429C3.s6429c3f2");
    test_class_info(&lv, &cd_S6429C3);
    dp->~S6429C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6429C3(Test_S6429C3, "S6429C3", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S6429C3C1Ev();
extern void _ZN7S6429C3D1Ev();
Name_Map name_map_S6429C3[] = {
  NSPAIR(_ZN7S6429C3C1Ev),
  NSPAIR(_ZN7S6429C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
static Base_Class bases_S6429C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6429C3[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY vtc_S6429C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S6429C3[];
static  VTT_ENTRY vtt_S6429C3[] = {
  {&(_ZTV7S6429C3[4]),  4,10},
  {&(_ZTV7S6429C3[4]),  4,10},
};
extern VTBL_ENTRY _ZTI7S6429C3[];
extern  VTBL_ENTRY _ZTV7S6429C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C3[];
Class_Descriptor cd_S6429C3 = {  "S6429C3", // class name
  bases_S6429C3, 1,
  &(vtc_S6429C3[0]), // expected_vtbl_contents
  &(vtt_S6429C3[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S6429C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6429C3),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6429C3),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  S6429C4  : virtual S6429C2 , virtual S6429C3 {
  virtual  ~S6429C4(); // _ZN7S6429C4D2Ev
  virtual void  v7(); // _ZN7S6429C42v7Ev
  virtual void  v8(); // _ZN7S6429C42v8Ev
  virtual void  v9(); // _ZN7S6429C42v9Ev
  virtual void  v10(); // _ZN7S6429C43v10Ev
  virtual void  v11(); // _ZN7S6429C43v11Ev
  virtual void  v12(); // _ZN7S6429C43v12Ev
  virtual void  v13(); // _ZN7S6429C43v13Ev
  virtual void  v14(); // _ZN7S6429C43v14Ev
  virtual void  v15(); // _ZN7S6429C43v15Ev
  S6429C4(); // tgen
};
//SIG(-1 S6429C4) C1{ VBC2{ v10} VBC3{ VBC2 v11 v12 v13 v14 v15 FL Fi FD[9]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S6429C4 ::~S6429C4(){ note_dtor("S6429C4", this);}
void  S6429C4 ::v7(){vfunc_called(this, "_ZN7S6429C42v7Ev");}
void  S6429C4 ::v8(){vfunc_called(this, "_ZN7S6429C42v8Ev");}
void  S6429C4 ::v9(){vfunc_called(this, "_ZN7S6429C42v9Ev");}
void  S6429C4 ::v10(){vfunc_called(this, "_ZN7S6429C43v10Ev");}
void  S6429C4 ::v11(){vfunc_called(this, "_ZN7S6429C43v11Ev");}
void  S6429C4 ::v12(){vfunc_called(this, "_ZN7S6429C43v12Ev");}
void  S6429C4 ::v13(){vfunc_called(this, "_ZN7S6429C43v13Ev");}
void  S6429C4 ::v14(){vfunc_called(this, "_ZN7S6429C43v14Ev");}
void  S6429C4 ::v15(){vfunc_called(this, "_ZN7S6429C43v15Ev");}
S6429C4 ::S6429C4(){ note_ctor("S6429C4", this);} // tgen

static void Test_S6429C4()
{
  extern Class_Descriptor cd_S6429C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,33)];
    init_test(&cd_S6429C4, buf);
    S6429C4 *dp, &lv = *(dp=new (buf) S6429C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,128), "sizeof(S6429C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6429C4)");
    check_base_class_offset(lv, (S6429C2*), 0, "S6429C4");
    check_base_class_offset(lv, (S6429C2*)(S6429C3*), 0, "S6429C4");
    check_base_class_offset(lv, (S6429C3*), ABISELECT(16,4), "S6429C4");
    test_class_info(&lv, &cd_S6429C4);
    dp->~S6429C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6429C4(Test_S6429C4, "S6429C4", ABISELECT(192,128));

#else // __cplusplus

extern void _ZN7S6429C4C1Ev();
extern void _ZN7S6429C4D2Ev();
Name_Map name_map_S6429C4[] = {
  NSPAIR(_ZN7S6429C4C1Ev),
  NSPAIR(_ZN7S6429C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C3;
extern VTBL_ENTRY _ZTI7S6429C3[];
extern  VTBL_ENTRY _ZTV7S6429C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C3[];
static Base_Class bases_S6429C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6429C3,    ABISELECT(16,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6429C4[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C4D1Ev();
extern void _ZN7S6429C4D0Ev();
extern void _ZN7S6429C42v7Ev();
extern void _ZN7S6429C42v8Ev();
extern void _ZN7S6429C42v9Ev();
extern void _ZN7S6429C43v10Ev();
extern void _ZN7S6429C43v11Ev();
extern void _ZN7S6429C43v12Ev();
extern void _ZN7S6429C43v13Ev();
extern void _ZN7S6429C43v14Ev();
extern void _ZN7S6429C43v15Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY vtc_S6429C4[] = {
  ABISELECT(16,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C4[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6429C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S6429C4[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S6429C4[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__7S6429C4[] = {
  ABISELECT(-16,-4),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C2__7S6429C3__7S6429C4[] = {
  0,
  ABISELECT(16,4),
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
static  VTT_ENTRY vtt_S6429C4[] = {
  {&(_ZTV7S6429C4[5]),  5,32},
  {&(_ZTV7S6429C4[5]),  5,32},
  {&(_ZTV7S6429C4[26]),  26,32},
  {&(_tg__ZTV7S6429C3__7S6429C4[4]),  4,10},
  {&(_tg__ZTV7S6429C2__7S6429C3__7S6429C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6429C4[];
extern  VTBL_ENTRY _ZTV7S6429C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C4[];
Class_Descriptor cd_S6429C4 = {  "S6429C4", // class name
  bases_S6429C4, 2,
  &(vtc_S6429C4[0]), // expected_vtbl_contents
  &(vtt_S6429C4[0]), // expected_vtt_contents
  ABISELECT(192,128), // object size
  NSPAIRA(_ZTI7S6429C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6429C4),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6429C4),5, //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  S6429C6  : S6429C2 {
  virtual void  v16(); // _ZN7S6429C63v16Ev
  virtual void  v17(); // _ZN7S6429C63v17Ev
  virtual void  v18(); // _ZN7S6429C63v18Ev
  virtual void  v19(); // _ZN7S6429C63v19Ev
  virtual void  v20(); // _ZN7S6429C63v20Ev
  virtual void  v21(); // _ZN7S6429C63v21Ev
  ~S6429C6(); // tgen
  S6429C6(); // tgen
};
//SIG(-1 S6429C6) C1{ BC2{ v7} v1 v2 v3 v4 v5 v6}


void  S6429C6 ::v16(){vfunc_called(this, "_ZN7S6429C63v16Ev");}
void  S6429C6 ::v17(){vfunc_called(this, "_ZN7S6429C63v17Ev");}
void  S6429C6 ::v18(){vfunc_called(this, "_ZN7S6429C63v18Ev");}
void  S6429C6 ::v19(){vfunc_called(this, "_ZN7S6429C63v19Ev");}
void  S6429C6 ::v20(){vfunc_called(this, "_ZN7S6429C63v20Ev");}
void  S6429C6 ::v21(){vfunc_called(this, "_ZN7S6429C63v21Ev");}
S6429C6 ::~S6429C6(){ note_dtor("S6429C6", this);} // tgen
S6429C6 ::S6429C6(){ note_ctor("S6429C6", this);} // tgen

static void Test_S6429C6()
{
  extern Class_Descriptor cd_S6429C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6429C6, buf);
    S6429C6 *dp, &lv = *(dp=new (buf) S6429C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6429C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6429C6)");
    check_base_class_offset(lv, (S6429C2*), 0, "S6429C6");
    test_class_info(&lv, &cd_S6429C6);
    dp->~S6429C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6429C6(Test_S6429C6, "S6429C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6429C6C1Ev();
extern void _ZN7S6429C6D1Ev();
Name_Map name_map_S6429C6[] = {
  NSPAIR(_ZN7S6429C6C1Ev),
  NSPAIR(_ZN7S6429C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
static Base_Class bases_S6429C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6429C6[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C63v16Ev();
extern void _ZN7S6429C63v17Ev();
extern void _ZN7S6429C63v18Ev();
extern void _ZN7S6429C63v19Ev();
extern void _ZN7S6429C63v20Ev();
extern void _ZN7S6429C63v21Ev();
static  VTBL_ENTRY vtc_S6429C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C6[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v21Ev,
};
extern VTBL_ENTRY _ZTI7S6429C6[];
extern  VTBL_ENTRY _ZTV7S6429C6[];
Class_Descriptor cd_S6429C6 = {  "S6429C6", // class name
  bases_S6429C6, 1,
  &(vtc_S6429C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6429C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6429C6),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6429C5  : virtual S6429C4 , S6429C6 , S6429C3 , S6429C2 {
  virtual  ~S6429C5(); // _ZN7S6429C5D2Ev
  virtual void  v22(); // _ZN7S6429C53v22Ev
  virtual void  v23(); // _ZN7S6429C53v23Ev
  virtual void  v24(); // _ZN7S6429C53v24Ev
  virtual void  v25(); // _ZN7S6429C53v25Ev
  virtual void  v26(); // _ZN7S6429C53v26Ev
  S6429C5(); // tgen
};
//SIG(-1 S6429C5) C1{ VBC2{ VBC3{ v6} VBC4{ VBC3 v7 v8 v9 v10 v11 FL Fi FD[9]} vd v12 v13 v14 v15 v16 v17 v18 v19 v20} BC5{ BC3 v21 v22 v23 v24 v25 v26} BC4 BC3 vd v1 v2 v3 v4 v5}


 S6429C5 ::~S6429C5(){ note_dtor("S6429C5", this);}
void  S6429C5 ::v22(){vfunc_called(this, "_ZN7S6429C53v22Ev");}
void  S6429C5 ::v23(){vfunc_called(this, "_ZN7S6429C53v23Ev");}
void  S6429C5 ::v24(){vfunc_called(this, "_ZN7S6429C53v24Ev");}
void  S6429C5 ::v25(){vfunc_called(this, "_ZN7S6429C53v25Ev");}
void  S6429C5 ::v26(){vfunc_called(this, "_ZN7S6429C53v26Ev");}
S6429C5 ::S6429C5(){ note_ctor("S6429C5", this);} // tgen

static void Test_S6429C5()
{
  extern Class_Descriptor cd_S6429C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,66)];
    init_test(&cd_S6429C5, buf);
    S6429C5 *dp, &lv = *(dp=new (buf) S6429C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,260), "sizeof(S6429C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6429C5)");
    check_base_class_offset(lv, (S6429C2*)(S6429C4*), ABISELECT(200,132), "S6429C5");
    /*is_ambiguous_... S6429C5::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C2*)(S6429C3*), ABISELECT(200,132), "S6429C5");
    /*is_ambiguous_... S6429C5::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C2*)(S6429C3*), ABISELECT(200,132), "S6429C5");
    check_base_class_offset(lv, (S6429C3*)(S6429C4*), ABISELECT(208,136), "S6429C5");
    check_base_class_offset(lv, (S6429C4*), ABISELECT(200,132), "S6429C5");
    check_base_class_offset(lv, (S6429C2*)(S6429C6*), 0, "S6429C5");
    check_base_class_offset(lv, (S6429C6*), 0, "S6429C5");
    /*is_ambiguous_... S6429C5::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C3*), ABISELECT(16,4), "S6429C5");
    /*is_ambiguous_... S6429C5::S6429C2 */ AMB_check_base_class_offset(lv, (S6429C2*), ABISELECT(192,128), "S6429C5");
    test_class_info(&lv, &cd_S6429C5);
    dp->~S6429C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6429C5(Test_S6429C5, "S6429C5", ABISELECT(384,260));

#else // __cplusplus

extern void _ZN7S6429C5C1Ev();
extern void _ZN7S6429C5D2Ev();
Name_Map name_map_S6429C5[] = {
  NSPAIR(_ZN7S6429C5C1Ev),
  NSPAIR(_ZN7S6429C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C3;
extern VTBL_ENTRY _ZTI7S6429C3[];
extern  VTBL_ENTRY _ZTV7S6429C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C3[];
extern Class_Descriptor cd_S6429C4;
extern VTBL_ENTRY _ZTI7S6429C4[];
extern  VTBL_ENTRY _ZTV7S6429C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C4[];
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C6;
extern VTBL_ENTRY _ZTI7S6429C6[];
extern  VTBL_ENTRY _ZTV7S6429C6[];
extern Class_Descriptor cd_S6429C3;
extern VTBL_ENTRY _ZTI7S6429C3[];
extern  VTBL_ENTRY _ZTV7S6429C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C3[];
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
static Base_Class bases_S6429C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6429C2,    ABISELECT(200,132), //bcp->offset
    -1, //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
  0, 1},
  {&cd_S6429C3,    ABISELECT(208,136), //bcp->offset
    59, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6429C4,    ABISELECT(200,132), //bcp->offset
    32, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6429C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6429C3,    ABISELECT(16,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6429C2,    ABISELECT(192,128), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6429C5[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C63v16Ev();
extern void _ZN7S6429C63v17Ev();
extern void _ZN7S6429C63v18Ev();
extern void _ZN7S6429C63v19Ev();
extern void _ZN7S6429C63v20Ev();
extern void _ZN7S6429C63v21Ev();
extern void _ZN7S6429C5D1Ev();
extern void _ZN7S6429C5D0Ev();
extern void _ZN7S6429C53v22Ev();
extern void _ZN7S6429C53v23Ev();
extern void _ZN7S6429C53v24Ev();
extern void _ZN7S6429C53v25Ev();
extern void _ZN7S6429C53v26Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C22v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S6429C5D1Ev,_ZTv0_n24_N7S6429C5D1Ev)();
extern void ABISELECT(_ZThn200_N7S6429C5D1Ev,_ZThn132_N7S6429C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6429C5D0Ev,_ZTv0_n24_N7S6429C5D0Ev)();
extern void ABISELECT(_ZThn200_N7S6429C5D0Ev,_ZThn132_N7S6429C5D0Ev)() __attribute__((weak));
extern void _ZN7S6429C42v7Ev();
extern void _ZN7S6429C42v8Ev();
extern void _ZN7S6429C42v9Ev();
extern void _ZN7S6429C43v10Ev();
extern void _ZN7S6429C43v11Ev();
extern void _ZN7S6429C43v12Ev();
extern void _ZN7S6429C43v13Ev();
extern void _ZN7S6429C43v14Ev();
extern void _ZN7S6429C43v15Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY vtc_S6429C5[] = {
  ABISELECT(208,136),
  ABISELECT(200,132),
  ABISELECT(200,132),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6429C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6429C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v22Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v23Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v24Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v25Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v26Ev,
  ABISELECT(184,128),
  ABISELECT(184,128),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-200,-132),
  ABISELECT(8,4),
  0,
  0,
  ABISELECT(-200,-132),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6429C5D1Ev,_ZTv0_n24_N7S6429C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6429C5D0Ev,_ZTv0_n24_N7S6429C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-208,-136),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S6429C5[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__A__7S6429C5[] = {
  ABISELECT(184,128),
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C2__7S6429C3__A__7S6429C5[] = {
  0,
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C4D1Ev();
extern void _ZN7S6429C4D0Ev();
extern void _ZN7S6429C42v7Ev();
extern void _ZN7S6429C42v8Ev();
extern void _ZN7S6429C42v9Ev();
extern void _ZN7S6429C43v10Ev();
extern void _ZN7S6429C43v11Ev();
extern void _ZN7S6429C43v12Ev();
extern void _ZN7S6429C43v13Ev();
extern void _ZN7S6429C43v14Ev();
extern void _ZN7S6429C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C4__7S6429C5[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C4[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6429C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v15Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__7S6429C4__7S6429C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6429C4[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__7S6429C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C2__7S6429C3__7S6429C5[] = {
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
static  VTT_ENTRY vtt_S6429C5[] = {
  {&(_ZTV7S6429C5[5]),  5,74},
  {&(_tg__ZTV7S6429C3__A__7S6429C5[4]),  4,10},
  {&(_tg__ZTV7S6429C2__7S6429C3__A__7S6429C5[3]),  3,4},
  {&(_ZTV7S6429C5[47]),  47,74},
  {&(_ZTV7S6429C5[47]),  47,74},
  {&(_ZTV7S6429C5[68]),  68,74},
  {&(_ZTV7S6429C5[23]),  23,74},
  {&(_tg__ZTV7S6429C4__7S6429C5[5]),  5,17},
  {&(_tg__ZTV7S6429C4__7S6429C5[5]),  5,17},
  {&(_tg__ZTV7S6429C3__7S6429C4__7S6429C5[9]),  9,15},
  {&(_tg__ZTV7S6429C3__7S6429C5[4]),  4,10},
  {&(_tg__ZTV7S6429C2__7S6429C3__7S6429C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6429C5[];
extern  VTBL_ENTRY _ZTV7S6429C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C5[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6429C5D0Ev,_ZTv0_n24_N7S6429C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N7S6429C5D0Ev,_ZThn132_N7S6429C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6429C5D1Ev,_ZTv0_n24_N7S6429C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N7S6429C5D1Ev,_ZThn132_N7S6429C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6429C5 = {  "S6429C5", // class name
  bases_S6429C5, 7,
  &(vtc_S6429C5[0]), // expected_vtbl_contents
  &(vtt_S6429C5[0]), // expected_vtt_contents
  ABISELECT(384,260), // object size
  NSPAIRA(_ZTI7S6429C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6429C5),74, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6429C5),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6429C1  : S6429C2 , S6429C3 , virtual S6429C4 , S6429C5 , S6429C6 {
  char s6429c1f0;
  virtual  ~S6429C1(); // _ZN7S6429C1D2Ev
  S6429C1(); // tgen
};
//SIG(1 S6429C1) C1{ BC2{ v1} BC3{ VBC2 v2 v3 v4 v5 v6 FL Fi FD[9]} VBC4{ VBC2 VBC3 vd v7 v8 v9 v10 v11 v12 v13 v14 v15} BC5{ VBC4 BC6{ BC2 v16 v17 v18 v19 v20 v21} BC3 BC2 vd v22 v23 v24 v25 v26} BC6 vd Fc}


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

static void Test_S6429C1()
{
  extern Class_Descriptor cd_S6429C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,100)];
    init_test(&cd_S6429C1, buf);
    S6429C1 *dp, &lv = *(dp=new (buf) S6429C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,396), "sizeof(S6429C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6429C1)");
    /*is_ambiguous_... S6429C1::S6429C2 */ AMB_check_base_class_offset(lv, (S6429C2*), 0, "S6429C1");
    /*is_ambiguous_... S6429C1::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C2*)(S6429C3*), ABISELECT(16,4), "S6429C1");
    check_base_class_offset(lv, (S6429C2*)(S6429C4*), ABISELECT(16,4), "S6429C1");
    /*is_ambiguous_... S6429C1::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C2*)(S6429C3*), ABISELECT(16,4), "S6429C1");
    /*is_ambiguous_... S6429C5::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C2*)(S6429C3*)(S6429C5*), ABISELECT(16,4), "S6429C1");
    /*is_ambiguous_... S6429C1::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C3*), ABISELECT(16,4), "S6429C1");
    check_base_class_offset(lv, (S6429C3*)(S6429C4*), ABISELECT(416,272), "S6429C1");
    check_base_class_offset(lv, (S6429C4*), ABISELECT(408,268), "S6429C1");
    check_base_class_offset(lv, (S6429C4*)(S6429C5*), ABISELECT(408,268), "S6429C1");
    check_base_class_offset(lv, (S6429C2*)(S6429C6*)(S6429C5*), ABISELECT(192,128), "S6429C1");
    check_base_class_offset(lv, (S6429C6*)(S6429C5*), ABISELECT(192,128), "S6429C1");
    /*is_ambiguous_... S6429C5::S6429C3 */ AMB_check_base_class_offset(lv, (S6429C3*)(S6429C5*), ABISELECT(208,132), "S6429C1");
    /*is_ambiguous_... S6429C5::S6429C2 */ AMB_check_base_class_offset(lv, (S6429C2*)(S6429C5*), ABISELECT(384,256), "S6429C1");
    check_base_class_offset(lv, (S6429C5*), ABISELECT(192,128), "S6429C1");
    /*is_ambiguous_... S6429C1::S6429C6 */ AMB_check_base_class_offset(lv, (S6429C2*)(S6429C6*), ABISELECT(392,260), "S6429C1");
    /*is_ambiguous_... S6429C1::S6429C6 */ AMB_check_base_class_offset(lv, (S6429C6*), ABISELECT(392,260), "S6429C1");
    check_field_offset(lv, s6429c1f0, ABISELECT(400,264), "S6429C1.s6429c1f0");
    test_class_info(&lv, &cd_S6429C1);
    dp->~S6429C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6429C1(Test_S6429C1, "S6429C1", ABISELECT(592,396));

#else // __cplusplus

extern void _ZN7S6429C1C1Ev();
extern void _ZN7S6429C1D2Ev();
Name_Map name_map_S6429C1[] = {
  NSPAIR(_ZN7S6429C1C1Ev),
  NSPAIR(_ZN7S6429C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C3;
extern VTBL_ENTRY _ZTI7S6429C3[];
extern  VTBL_ENTRY _ZTV7S6429C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C3[];
extern Class_Descriptor cd_S6429C3;
extern VTBL_ENTRY _ZTI7S6429C3[];
extern  VTBL_ENTRY _ZTV7S6429C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C3[];
extern Class_Descriptor cd_S6429C4;
extern VTBL_ENTRY _ZTI7S6429C4[];
extern  VTBL_ENTRY _ZTV7S6429C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C4[];
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C6;
extern VTBL_ENTRY _ZTI7S6429C6[];
extern  VTBL_ENTRY _ZTV7S6429C6[];
extern Class_Descriptor cd_S6429C3;
extern VTBL_ENTRY _ZTI7S6429C3[];
extern  VTBL_ENTRY _ZTV7S6429C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C3[];
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C5;
extern VTBL_ENTRY _ZTI7S6429C5[];
extern  VTBL_ENTRY _ZTV7S6429C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C5[];
extern Class_Descriptor cd_S6429C2;
extern VTBL_ENTRY _ZTI7S6429C2[];
extern  VTBL_ENTRY _ZTV7S6429C2[];
extern Class_Descriptor cd_S6429C6;
extern VTBL_ENTRY _ZTI7S6429C6[];
extern  VTBL_ENTRY _ZTV7S6429C6[];
static Base_Class bases_S6429C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6429C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S6429C3,    ABISELECT(16,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6429C3,    ABISELECT(416,272), //bcp->offset
    86, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6429C4,    ABISELECT(408,268), //bcp->offset
    59, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6429C2,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6429C6,    ABISELECT(192,128), //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S6429C3,    ABISELECT(208,132), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6429C2,    ABISELECT(384,256), //bcp->offset
    47, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S6429C5,    ABISELECT(192,128), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6429C2,    ABISELECT(392,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6429C6,    ABISELECT(392,260), //bcp->offset
    50, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6429C1[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C1D1Ev();
extern void _ZN7S6429C1D0Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C63v16Ev();
extern void _ZN7S6429C63v17Ev();
extern void _ZN7S6429C63v18Ev();
extern void _ZN7S6429C63v19Ev();
extern void _ZN7S6429C63v20Ev();
extern void _ZN7S6429C63v21Ev();
extern void ABISELECT(_ZThn192_N7S6429C1D1Ev,_ZThn128_N7S6429C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S6429C1D0Ev,_ZThn128_N7S6429C1D0Ev)();
extern void _ZN7S6429C53v22Ev();
extern void _ZN7S6429C53v23Ev();
extern void _ZN7S6429C53v24Ev();
extern void _ZN7S6429C53v25Ev();
extern void _ZN7S6429C53v26Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C63v16Ev();
extern void _ZN7S6429C63v17Ev();
extern void _ZN7S6429C63v18Ev();
extern void _ZN7S6429C63v19Ev();
extern void _ZN7S6429C63v20Ev();
extern void _ZN7S6429C63v21Ev();
extern void _ZN7S6429C22v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S6429C1D1Ev,_ZTv0_n24_N7S6429C1D1Ev)();
extern void ABISELECT(_ZThn408_N7S6429C1D1Ev,_ZThn268_N7S6429C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6429C1D0Ev,_ZTv0_n24_N7S6429C1D0Ev)();
extern void ABISELECT(_ZThn408_N7S6429C1D0Ev,_ZThn268_N7S6429C1D0Ev)() __attribute__((weak));
extern void _ZN7S6429C42v7Ev();
extern void _ZN7S6429C42v8Ev();
extern void _ZN7S6429C42v9Ev();
extern void _ZN7S6429C43v10Ev();
extern void _ZN7S6429C43v11Ev();
extern void _ZN7S6429C43v12Ev();
extern void _ZN7S6429C43v13Ev();
extern void _ZN7S6429C43v14Ev();
extern void _ZN7S6429C43v15Ev();
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY vtc_S6429C1[] = {
  ABISELECT(416,272),
  ABISELECT(408,268),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6429C1D0Ev,
  0,
  0,
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
  ABISELECT(224,144),
  ABISELECT(-176,-124),
  ABISELECT(216,140),
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v21Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn192_N7S6429C1D1Ev,_ZThn128_N7S6429C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn192_N7S6429C1D0Ev,_ZThn128_N7S6429C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6429C53v22Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v23Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v24Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v25Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v26Ev,
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
  ABISELECT(-384,-256),
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  ABISELECT(-392,-260),
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-408,-268),
  ABISELECT(8,4),
  ABISELECT(-392,-264),
  ABISELECT(-392,-264),
  ABISELECT(-408,-268),
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6429C1D1Ev,_ZTv0_n24_N7S6429C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6429C1D0Ev,_ZTv0_n24_N7S6429C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v15Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-268),
  ABISELECT(-400,-268),
  ABISELECT(-416,-272),
  (VTBL_ENTRY)&(_ZTI7S6429C1[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern VTBL_ENTRY _ZTV7S6429C1[];
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__A__7S6429C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C63v16Ev();
extern void _ZN7S6429C63v17Ev();
extern void _ZN7S6429C63v18Ev();
extern void _ZN7S6429C63v19Ev();
extern void _ZN7S6429C63v20Ev();
extern void _ZN7S6429C63v21Ev();
extern void _ZN7S6429C5D1Ev();
extern void _ZN7S6429C5D0Ev();
extern void _ZN7S6429C53v22Ev();
extern void _ZN7S6429C53v23Ev();
extern void _ZN7S6429C53v24Ev();
extern void _ZN7S6429C53v25Ev();
extern void _ZN7S6429C53v26Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C5__7S6429C1[] = {
  ABISELECT(224,144),
  ABISELECT(-176,-124),
  ABISELECT(216,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v16Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v17Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v18Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v19Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v20Ev,
  (VTBL_ENTRY)&_ZN7S6429C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6429C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6429C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v22Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v23Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v24Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v25Ev,
  (VTBL_ENTRY)&_ZN7S6429C53v26Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C37S6429C5__A2__7S6429C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C2__7S6429C37S6429C5__A2__7S6429C1[] = {
  0,
  ABISELECT(192,128),
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S6429C5D1Ev,_ZTv0_n24_N7S6429C5D1Ev)();
extern void ABISELECT(_ZThn216_N7S6429C5D1Ev,_ZThn140_N7S6429C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6429C5D0Ev,_ZTv0_n24_N7S6429C5D0Ev)();
extern void ABISELECT(_ZThn216_N7S6429C5D0Ev,_ZThn140_N7S6429C5D0Ev)() __attribute__((weak));
extern void _ZN7S6429C42v7Ev();
extern void _ZN7S6429C42v8Ev();
extern void _ZN7S6429C42v9Ev();
extern void _ZN7S6429C43v10Ev();
extern void _ZN7S6429C43v11Ev();
extern void _ZN7S6429C43v12Ev();
extern void _ZN7S6429C43v13Ev();
extern void _ZN7S6429C43v14Ev();
extern void _ZN7S6429C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C4__7S6429C5__7S6429C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-140),
  ABISELECT(8,4),
  ABISELECT(-392,-264),
  ABISELECT(-392,-264),
  ABISELECT(-216,-140),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6429C5D1Ev,_ZTv0_n24_N7S6429C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6429C5D0Ev,_ZTv0_n24_N7S6429C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v15Ev,
};
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C2__7S6429C5__7S6429C1[] = {
  0,
  ABISELECT(176,124),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__7S6429C5__7S6429C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-268),
  ABISELECT(-400,-268),
  ABISELECT(-224,-144),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__A__7S6429C5__7S6429C1[] = {
  ABISELECT(-192,-128),
  ABISELECT(-192,-128),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S6429C5[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C4D1Ev();
extern void _ZN7S6429C4D0Ev();
extern void _ZN7S6429C42v7Ev();
extern void _ZN7S6429C42v8Ev();
extern void _ZN7S6429C42v9Ev();
extern void _ZN7S6429C43v10Ev();
extern void _ZN7S6429C43v11Ev();
extern void _ZN7S6429C43v12Ev();
extern void _ZN7S6429C43v13Ev();
extern void _ZN7S6429C43v14Ev();
extern void _ZN7S6429C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C4__7S6429C1[] = {
  ABISELECT(8,4),
  ABISELECT(-392,-264),
  ABISELECT(-392,-264),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C4[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6429C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S6429C43v15Ev,
};
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C2__7S6429C4__7S6429C1[] = {
  0,
  ABISELECT(392,264),
  (VTBL_ENTRY)&(_ZTI7S6429C4[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__7S6429C4__7S6429C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-400,-268),
  ABISELECT(-400,-268),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6429C4[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
extern void _ZN7S6429C32v2Ev();
extern void _ZN7S6429C32v3Ev();
extern void _ZN7S6429C32v4Ev();
extern void _ZN7S6429C32v5Ev();
extern void _ZN7S6429C32v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C3__A1__7S6429C1[] = {
  ABISELECT(-400,-268),
  ABISELECT(-400,-268),
  0,
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v2Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v3Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v4Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v5Ev,
  (VTBL_ENTRY)&_ZN7S6429C32v6Ev,
};
extern void _ZN7S6429C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6429C2__7S6429C3__A1__7S6429C1[] = {
  0,
  ABISELECT(400,268),
  (VTBL_ENTRY)&(_ZTI7S6429C3[0]),
  (VTBL_ENTRY)&_ZN7S6429C22v1Ev,
};
static  VTT_ENTRY vtt_S6429C1[] = {
  {&(_ZTV7S6429C1[5]),  5,101},
  {&(_tg__ZTV7S6429C3__A__7S6429C1[4]),  4,10},
  {&(_tg__ZTV7S6429C3__A__7S6429C1[4]),  4,10},
  {&(_tg__ZTV7S6429C5__7S6429C1[5]),  5,19},
  {&(_tg__ZTV7S6429C37S6429C5__A2__7S6429C1[4]),  4,10},
  {&(_tg__ZTV7S6429C2__7S6429C37S6429C5__A2__7S6429C1[3]),  3,4},
  {&(_tg__ZTV7S6429C4__7S6429C5__7S6429C1[15]),  15,27},
  {&(_tg__ZTV7S6429C2__7S6429C5__7S6429C1[3]),  3,4},
  {&(_tg__ZTV7S6429C3__7S6429C5__7S6429C1[9]),  9,15},
  {&(_tg__ZTV7S6429C3__A__7S6429C5__7S6429C1[4]),  4,10},
  {&(_ZTV7S6429C1[12]),  12,101},
  {&(_ZTV7S6429C1[12]),  12,101},
  {&(_ZTV7S6429C1[74]),  74,101},
  {&(_ZTV7S6429C1[95]),  95,101},
  {&(_ZTV7S6429C1[23]),  23,101},
  {&(_ZTV7S6429C1[41]),  41,101},
  {&(_tg__ZTV7S6429C4__7S6429C1[5]),  5,17},
  {&(_tg__ZTV7S6429C2__7S6429C4__7S6429C1[3]),  3,4},
  {&(_tg__ZTV7S6429C3__7S6429C4__7S6429C1[9]),  9,15},
  {&(_tg__ZTV7S6429C3__A1__7S6429C1[4]),  4,10},
  {&(_tg__ZTV7S6429C2__7S6429C3__A1__7S6429C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6429C1[];
extern  VTBL_ENTRY _ZTV7S6429C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6429C1[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6429C5D0Ev,_ZTv0_n24_N7S6429C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S6429C5D0Ev,_ZThn140_N7S6429C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6429C5D1Ev,_ZTv0_n24_N7S6429C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N7S6429C5D1Ev,_ZThn140_N7S6429C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6429C1D0Ev,_ZTv0_n24_N7S6429C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S6429C1D0Ev,_ZThn268_N7S6429C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6429C1D1Ev,_ZTv0_n24_N7S6429C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S6429C1D1Ev,_ZThn268_N7S6429C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6429C1 = {  "S6429C1", // class name
  bases_S6429C1, 12,
  &(vtc_S6429C1[0]), // expected_vtbl_contents
  &(vtt_S6429C1[0]), // expected_vtt_contents
  ABISELECT(592,396), // object size
  NSPAIRA(_ZTI7S6429C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6429C1),101, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6429C1),21, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3135C3  {
  void *s3135c3f0[2];
  int s3135c3f1;
  virtual void  v3(); // _ZN7S3135C32v3Ev
  virtual void  v4(); // _ZN7S3135C32v4Ev
  ~S3135C3(); // tgen
  S3135C3(); // tgen
};
//SIG(-1 S3135C3) C1{ v1 v2 Fp[2] Fi}


void  S3135C3 ::v3(){vfunc_called(this, "_ZN7S3135C32v3Ev");}
void  S3135C3 ::v4(){vfunc_called(this, "_ZN7S3135C32v4Ev");}
S3135C3 ::~S3135C3(){ note_dtor("S3135C3", this);} // tgen
S3135C3 ::S3135C3(){ note_ctor("S3135C3", this);} // tgen

static void Test_S3135C3()
{
  extern Class_Descriptor cd_S3135C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3135C3, buf);
    S3135C3 *dp, &lv = *(dp=new (buf) S3135C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3135C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3135C3)");
    check_field_offset(lv, s3135c3f0, ABISELECT(8,4), "S3135C3.s3135c3f0");
    check_field_offset(lv, s3135c3f1, ABISELECT(24,12), "S3135C3.s3135c3f1");
    test_class_info(&lv, &cd_S3135C3);
    dp->~S3135C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3135C3(Test_S3135C3, "S3135C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3135C3C1Ev();
extern void _ZN7S3135C3D1Ev();
Name_Map name_map_S3135C3[] = {
  NSPAIR(_ZN7S3135C3C1Ev),
  NSPAIR(_ZN7S3135C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3135C3[];
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
static  VTBL_ENTRY vtc_S3135C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C3[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
Class_Descriptor cd_S3135C3 = {  "S3135C3", // class name
  0,0,//no base classes
  &(vtc_S3135C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3135C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3135C3),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

union  S3135C4  {
  long double s3135c4f0[2];
  long double s3135c4f1[6];
  __tsi64 s3135c4f2;
  int s3135c4f3:32;
  short s3135c4f4;
  long double s3135c4f5;
  void  mf3135c4(); // _ZN7S3135C48mf3135c4Ev
};
//SIG(1 S3135C4) U1{ m FD[2] FD[6] FL Fi:32 Fs FD}

#endif // __cplusplus
#ifdef __cplusplus

struct  S3135C2  : S3135C3 {
  ::S3135C4 s3135c2f0;
  ::S3135C3 s3135c2f1;
  __tsi64 s3135c2f2;
  virtual  ~S3135C2(); // _ZN7S3135C2D1Ev
  S3135C2(); // tgen
};
//SIG(-1 S3135C2) C1{ BC2{ v1 v2 Fp[2] Fi} vd FU3{ m FD[2] FD[6] FL Fi:32 Fs FD} FC2 FL}


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

static void Test_S3135C2()
{
  extern Class_Descriptor cd_S3135C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,29)];
    init_test(&cd_S3135C2, buf);
    S3135C2 *dp, &lv = *(dp=new (buf) S3135C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,112), "sizeof(S3135C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3135C2)");
    check_base_class_offset(lv, (S3135C3*), 0, "S3135C2");
    check_field_offset(lv, s3135c2f0, ABISELECT(32,16), "S3135C2.s3135c2f0");
    check_field_offset(lv, s3135c2f1, ABISELECT(128,88), "S3135C2.s3135c2f1");
    check_field_offset(lv, s3135c2f2, ABISELECT(160,104), "S3135C2.s3135c2f2");
    test_class_info(&lv, &cd_S3135C2);
    dp->~S3135C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3135C2(Test_S3135C2, "S3135C2", ABISELECT(176,112));

#else // __cplusplus

extern void _ZN7S3135C2C1Ev();
extern void _ZN7S3135C2D1Ev();
Name_Map name_map_S3135C2[] = {
  NSPAIR(_ZN7S3135C2C1Ev),
  NSPAIR(_ZN7S3135C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
static Base_Class bases_S3135C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3135C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3135C2[];
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C2D1Ev();
extern void _ZN7S3135C2D0Ev();
static  VTBL_ENTRY vtc_S3135C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C2[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3135C2[];
extern  VTBL_ENTRY _ZTV7S3135C2[];
Class_Descriptor cd_S3135C2 = {  "S3135C2", // class name
  bases_S3135C2, 1,
  &(vtc_S3135C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,112), // object size
  NSPAIRA(_ZTI7S3135C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3135C2),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  S3135C6  : virtual S3135C3 , S3135C2 {
  long double s3135c6f0;
  long double s3135c6f1;
  void *s3135c6f2;
  char s3135c6f3[6];
  ::S3135C2 s3135c6f4[10];
  char s3135c6f5:4;
  virtual void  v5(); // _ZN7S3135C62v5Ev
  virtual void  v6(); // _ZN7S3135C62v6Ev
  ~S3135C6(); // tgen
  S3135C6(); // tgen
};
//SIG(-1 S3135C6) C1{ VBC2{ v3 v4 Fp[2] Fi} BC3{ BC2 vd FU4{ m FD[2] FD[6] FL Fi:32 Fs FD} FC2 FL} v1 v2 FD FD Fp Fc[6] FC3[10] Fc:4}


void  S3135C6 ::v5(){vfunc_called(this, "_ZN7S3135C62v5Ev");}
void  S3135C6 ::v6(){vfunc_called(this, "_ZN7S3135C62v6Ev");}
S3135C6 ::~S3135C6(){ note_dtor("S3135C6", this);} // tgen
S3135C6 ::S3135C6(){ note_ctor("S3135C6", this);} // tgen

static void Test_S3135C6()
{
  extern Class_Descriptor cd_S3135C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,323)];
    init_test(&cd_S3135C6, buf);
    S3135C6 *dp, &lv = *(dp=new (buf) S3135C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1288), "sizeof(S3135C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3135C6)");
    /*is_ambiguous_... S3135C6::S3135C3 */ AMB_check_base_class_offset(lv, (S3135C3*), ABISELECT(1992,1272), "S3135C6");
    check_base_class_offset(lv, (S3135C3*)(S3135C2*), 0, "S3135C6");
    check_base_class_offset(lv, (S3135C2*), 0, "S3135C6");
    check_field_offset(lv, s3135c6f0, ABISELECT(176,112), "S3135C6.s3135c6f0");
    check_field_offset(lv, s3135c6f1, ABISELECT(192,124), "S3135C6.s3135c6f1");
    check_field_offset(lv, s3135c6f2, ABISELECT(208,136), "S3135C6.s3135c6f2");
    check_field_offset(lv, s3135c6f3, ABISELECT(216,140), "S3135C6.s3135c6f3");
    check_field_offset(lv, s3135c6f4, ABISELECT(224,148), "S3135C6.s3135c6f4");
    set_bf_and_test(lv, s3135c6f5, ABISELECT(1984,1268), 0, 4, 1, "S3135C6");
    set_bf_and_test(lv, s3135c6f5, ABISELECT(1984,1268), 0, 4, hide_sll(1LL<<3), "S3135C6");
    test_class_info(&lv, &cd_S3135C6);
    dp->~S3135C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3135C6(Test_S3135C6, "S3135C6", ABISELECT(2032,1288));

#else // __cplusplus

extern void _ZN7S3135C6C1Ev();
extern void _ZN7S3135C6D1Ev();
Name_Map name_map_S3135C6[] = {
  NSPAIR(_ZN7S3135C6C1Ev),
  NSPAIR(_ZN7S3135C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C2;
extern VTBL_ENTRY _ZTI7S3135C2[];
extern  VTBL_ENTRY _ZTV7S3135C2[];
static Base_Class bases_S3135C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3135C3,    ABISELECT(1992,1272), //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_S3135C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3135C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3135C6[];
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C6D1Ev();
extern void _ZN7S3135C6D0Ev();
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
static  VTBL_ENTRY vtc_S3135C6[] = {
  ABISELECT(1992,1272),
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
  0,
  0,
  ABISELECT(-1992,-1272),
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S3135C6[];
static  VTT_ENTRY vtt_S3135C6[] = {
  {&(_ZTV7S3135C6[3]),  3,15},
  {&(_ZTV7S3135C6[13]),  13,15},
};
extern VTBL_ENTRY _ZTI7S3135C6[];
extern  VTBL_ENTRY _ZTV7S3135C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3135C6[];
Class_Descriptor cd_S3135C6 = {  "S3135C6", // class name
  bases_S3135C6, 3,
  &(vtc_S3135C6[0]), // expected_vtbl_contents
  &(vtt_S3135C6[0]), // expected_vtt_contents
  ABISELECT(2032,1288), // object size
  NSPAIRA(_ZTI7S3135C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3135C6),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3135C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3135C5  : virtual S3135C3 , S3135C6 {
  void *s3135c5f0;
  short s3135c5f1;
  virtual void  v7(); // _ZN7S3135C52v7Ev
  virtual void  v8(); // _ZN7S3135C52v8Ev
  virtual void  v9(); // _ZN7S3135C52v9Ev
  ~S3135C5(); // tgen
  S3135C5(); // tgen
};
//SIG(-1 S3135C5) C1{ VBC2{ v4 v5 Fp[2] Fi} BC3{ VBC2 BC4{ BC2 vd FU5{ m FD[2] FD[6] FL Fi:32 Fs FD} FC2 FL} v6 v7 FD FD Fp Fc[6] FC4[10] Fc:4} v1 v2 v3 Fp Fs}


void  S3135C5 ::v7(){vfunc_called(this, "_ZN7S3135C52v7Ev");}
void  S3135C5 ::v8(){vfunc_called(this, "_ZN7S3135C52v8Ev");}
void  S3135C5 ::v9(){vfunc_called(this, "_ZN7S3135C52v9Ev");}
S3135C5 ::~S3135C5(){ note_dtor("S3135C5", this);} // tgen
S3135C5 ::S3135C5(){ note_ctor("S3135C5", this);} // tgen

static void Test_S3135C5()
{
  extern Class_Descriptor cd_S3135C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(129,325)];
    init_test(&cd_S3135C5, buf);
    S3135C5 *dp, &lv = *(dp=new (buf) S3135C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2048,1296), "sizeof(S3135C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3135C5)");
    /*is_ambiguous_... S3135C5::S3135C3 */ AMB_check_base_class_offset(lv, (S3135C3*), ABISELECT(2008,1280), "S3135C5");
    /*is_ambiguous_... S3135C6::S3135C3 */ AMB_check_base_class_offset(lv, (S3135C3*)(S3135C6*), ABISELECT(2008,1280), "S3135C5");
    check_base_class_offset(lv, (S3135C3*)(S3135C2*)(S3135C6*), 0, "S3135C5");
    check_base_class_offset(lv, (S3135C2*)(S3135C6*), 0, "S3135C5");
    check_base_class_offset(lv, (S3135C6*), 0, "S3135C5");
    check_field_offset(lv, s3135c5f0, ABISELECT(1992,1272), "S3135C5.s3135c5f0");
    check_field_offset(lv, s3135c5f1, ABISELECT(2000,1276), "S3135C5.s3135c5f1");
    test_class_info(&lv, &cd_S3135C5);
    dp->~S3135C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3135C5(Test_S3135C5, "S3135C5", ABISELECT(2048,1296));

#else // __cplusplus

extern void _ZN7S3135C5C1Ev();
extern void _ZN7S3135C5D1Ev();
Name_Map name_map_S3135C5[] = {
  NSPAIR(_ZN7S3135C5C1Ev),
  NSPAIR(_ZN7S3135C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C2;
extern VTBL_ENTRY _ZTI7S3135C2[];
extern  VTBL_ENTRY _ZTV7S3135C2[];
extern Class_Descriptor cd_S3135C6;
extern VTBL_ENTRY _ZTI7S3135C6[];
extern  VTBL_ENTRY _ZTV7S3135C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3135C6[];
static Base_Class bases_S3135C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3135C3,    ABISELECT(2008,1280), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3135C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3135C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3135C6,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3135C5[];
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C5D1Ev();
extern void _ZN7S3135C5D0Ev();
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
extern void _ZN7S3135C52v7Ev();
extern void _ZN7S3135C52v8Ev();
extern void _ZN7S3135C52v9Ev();
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
static  VTBL_ENTRY vtc_S3135C5[] = {
  ABISELECT(2008,1280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C5[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v9Ev,
  0,
  0,
  ABISELECT(-2008,-1280),
  (VTBL_ENTRY)&(_ZTI7S3135C5[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
};
extern VTBL_ENTRY _ZTV7S3135C5[];
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C6D1Ev();
extern void _ZN7S3135C6D0Ev();
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C6__7S3135C5[] = {
  ABISELECT(2008,1280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
};
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C3__7S3135C6__7S3135C5[] = {
  0,
  0,
  ABISELECT(-2008,-1280),
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
};
static  VTT_ENTRY vtt_S3135C5[] = {
  {&(_ZTV7S3135C5[3]),  3,18},
  {&(_tg__ZTV7S3135C6__7S3135C5[3]),  3,9},
  {&(_tg__ZTV7S3135C3__7S3135C6__7S3135C5[4]),  4,6},
  {&(_ZTV7S3135C5[16]),  16,18},
};
extern VTBL_ENTRY _ZTI7S3135C5[];
extern  VTBL_ENTRY _ZTV7S3135C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3135C5[];
Class_Descriptor cd_S3135C5 = {  "S3135C5", // class name
  bases_S3135C5, 4,
  &(vtc_S3135C5[0]), // expected_vtbl_contents
  &(vtt_S3135C5[0]), // expected_vtt_contents
  ABISELECT(2048,1296), // object size
  NSPAIRA(_ZTI7S3135C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3135C5),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3135C5),4, //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  S3135C1  : S3135C2 , S3135C3 , virtual S3135C5 , virtual S3135C6 {
  void *s3135c1f0;
  ::S3135C2 s3135c1f1;
  int s3135c1f2;
  __tsi64 s3135c1f3;
  void *s3135c1f4;
  virtual  ~S3135C1(); // _ZN7S3135C1D2Ev
  virtual void  v1(); // _ZN7S3135C12v1Ev
  virtual void  v2(); // _ZN7S3135C12v2Ev
  S3135C1(); // tgen
};
//SIG(1 S3135C1) C1{ BC2{ BC3{ v3 v4 Fp[2] Fi} vd FU4{ m FD[2] FD[6] FL Fi:32 Fs FD} FC3 FL} BC3 VBC5{ VBC3 BC6{ VBC3 BC2 v5 v6 FD FD Fp Fc[6] FC2[10] Fc:4} v7 v8 v9 Fp Fs} VBC6 vd v1 v2 Fp FC2 Fi FL Fp}


 S3135C1 ::~S3135C1(){ note_dtor("S3135C1", this);}
void  S3135C1 ::v1(){vfunc_called(this, "_ZN7S3135C12v1Ev");}
void  S3135C1 ::v2(){vfunc_called(this, "_ZN7S3135C12v2Ev");}
S3135C1 ::S3135C1(){ note_ctor("S3135C1", this);} // tgen

static void Test_S3135C1()
{
  extern Class_Descriptor cd_S3135C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(280,708)];
    init_test(&cd_S3135C1, buf);
    S3135C1 *dp, &lv = *(dp=new (buf) S3135C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4464,2828), "sizeof(S3135C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3135C1)");
    /*is_ambiguous_... S3135C1::S3135C2 */ AMB_check_base_class_offset(lv, (S3135C3*)(S3135C2*), 0, "S3135C1");
    /*is_ambiguous_... S3135C1::S3135C2 */ AMB_check_base_class_offset(lv, (S3135C2*), 0, "S3135C1");
    /*is_ambiguous_... S3135C1::S3135C3 */ AMB_check_base_class_offset(lv, (S3135C3*), ABISELECT(168,112), "S3135C1");
    /*is_ambiguous_... S3135C5::S3135C3 */ AMB_check_base_class_offset(lv, (S3135C3*)(S3135C5*), ABISELECT(2424,1540), "S3135C1");
    /*is_ambiguous_... S3135C6::S3135C3 */ AMB_check_base_class_offset(lv, (S3135C3*)(S3135C6*)(S3135C5*), ABISELECT(2424,1540), "S3135C1");
    /*is_ambiguous_... S3135C1::S3135C6 */ AMB_check_base_class_offset(lv, (S3135C3*)(S3135C6*), ABISELECT(2424,1540), "S3135C1");
    check_base_class_offset(lv, (S3135C3*)(S3135C2*)(S3135C6*)(S3135C5*), ABISELECT(416,260), "S3135C1");
    check_base_class_offset(lv, (S3135C2*)(S3135C6*)(S3135C5*), ABISELECT(416,260), "S3135C1");
    check_base_class_offset(lv, (S3135C6*)(S3135C5*), ABISELECT(416,260), "S3135C1");
    check_base_class_offset(lv, (S3135C5*), ABISELECT(416,260), "S3135C1");
    /*is_ambiguous_... S3135C1::S3135C6 */ AMB_check_base_class_offset(lv, (S3135C3*)(S3135C2*)(S3135C6*), ABISELECT(2464,1556), "S3135C1");
    /*is_ambiguous_... S3135C1::S3135C6 */ AMB_check_base_class_offset(lv, (S3135C2*)(S3135C6*), ABISELECT(2464,1556), "S3135C1");
    /*is_ambiguous_... S3135C1::S3135C6 */ AMB_check_base_class_offset(lv, (S3135C6*), ABISELECT(2464,1556), "S3135C1");
    check_field_offset(lv, s3135c1f0, ABISELECT(200,128), "S3135C1.s3135c1f0");
    check_field_offset(lv, s3135c1f1, ABISELECT(208,132), "S3135C1.s3135c1f1");
    check_field_offset(lv, s3135c1f2, ABISELECT(384,244), "S3135C1.s3135c1f2");
    check_field_offset(lv, s3135c1f3, ABISELECT(392,248), "S3135C1.s3135c1f3");
    check_field_offset(lv, s3135c1f4, ABISELECT(400,256), "S3135C1.s3135c1f4");
    test_class_info(&lv, &cd_S3135C1);
    dp->~S3135C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3135C1(Test_S3135C1, "S3135C1", ABISELECT(4464,2828));

#else // __cplusplus

extern void _ZN7S3135C1C1Ev();
extern void _ZN7S3135C1D2Ev();
Name_Map name_map_S3135C1[] = {
  NSPAIR(_ZN7S3135C1C1Ev),
  NSPAIR(_ZN7S3135C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C2;
extern VTBL_ENTRY _ZTI7S3135C2[];
extern  VTBL_ENTRY _ZTV7S3135C2[];
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C2;
extern VTBL_ENTRY _ZTI7S3135C2[];
extern  VTBL_ENTRY _ZTV7S3135C2[];
extern Class_Descriptor cd_S3135C6;
extern VTBL_ENTRY _ZTI7S3135C6[];
extern  VTBL_ENTRY _ZTV7S3135C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3135C6[];
extern Class_Descriptor cd_S3135C5;
extern VTBL_ENTRY _ZTI7S3135C5[];
extern  VTBL_ENTRY _ZTV7S3135C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3135C5[];
extern Class_Descriptor cd_S3135C3;
extern VTBL_ENTRY _ZTI7S3135C3[];
extern  VTBL_ENTRY _ZTV7S3135C3[];
extern Class_Descriptor cd_S3135C2;
extern VTBL_ENTRY _ZTI7S3135C2[];
extern  VTBL_ENTRY _ZTV7S3135C2[];
extern Class_Descriptor cd_S3135C6;
extern VTBL_ENTRY _ZTI7S3135C6[];
extern  VTBL_ENTRY _ZTV7S3135C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3135C6[];
static Base_Class bases_S3135C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3135C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    1, //immediately_derived
  0, 0},
  {&cd_S3135C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3135C3,    ABISELECT(168,112), //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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3135C3,    ABISELECT(2424,1540), //bcp->offset
    35, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3135C3,    ABISELECT(416,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3135C2,    ABISELECT(416,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3135C6,    ABISELECT(416,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3135C5,    ABISELECT(416,260), //bcp->offset
    15, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3135C3,    ABISELECT(2464,1556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3135C2,    ABISELECT(2464,1556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3135C6,    ABISELECT(2464,1556), //bcp->offset
    41, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI7S3135C1[];
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C1D1Ev();
extern void _ZN7S3135C1D0Ev();
extern void _ZN7S3135C12v1Ev();
extern void _ZN7S3135C12v2Ev();
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N7S3135C1D1Ev,_ZTv0_n24_N7S3135C1D1Ev)();
extern void ABISELECT(_ZThn416_N7S3135C1D1Ev,_ZThn260_N7S3135C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3135C1D0Ev,_ZTv0_n24_N7S3135C1D0Ev)();
extern void ABISELECT(_ZThn416_N7S3135C1D0Ev,_ZThn260_N7S3135C1D0Ev)() __attribute__((weak));
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
extern void _ZN7S3135C52v7Ev();
extern void _ZN7S3135C52v8Ev();
extern void _ZN7S3135C52v9Ev();
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void ABISELECT(_ZTv0_n48_N7S3135C1D1Ev,_ZTv0_n24_N7S3135C1D1Ev)();
extern void ABISELECT(_ZThn2464_N7S3135C1D1Ev,_ZThn1556_N7S3135C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S3135C1D0Ev,_ZTv0_n24_N7S3135C1D0Ev)();
extern void ABISELECT(_ZThn2464_N7S3135C1D0Ev,_ZThn1556_N7S3135C1D0Ev)() __attribute__((weak));
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
static  VTBL_ENTRY vtc_S3135C1[] = {
  ABISELECT(2464,1556),
  ABISELECT(2424,1540),
  ABISELECT(416,260),
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C1[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3135C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3135C12v2Ev,
  ABISELECT(-168,-112),
  (VTBL_ENTRY)&(_ZTI7S3135C1[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-416,-260),
  0,
  0,
  ABISELECT(2008,1280),
  ABISELECT(-416,-260),
  (VTBL_ENTRY)&(_ZTI7S3135C1[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3135C1D1Ev,_ZTv0_n24_N7S3135C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3135C1D0Ev,_ZTv0_n24_N7S3135C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v9Ev,
  0,
  0,
  ABISELECT(-2424,-1540),
  (VTBL_ENTRY)&(_ZTI7S3135C1[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  0,
  0,
  ABISELECT(-2464,-1556),
  0,
  0,
  ABISELECT(-40,-16),
  ABISELECT(-2464,-1556),
  (VTBL_ENTRY)&(_ZTI7S3135C1[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3135C1D1Ev,_ZTv0_n24_N7S3135C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S3135C1D0Ev,_ZTv0_n24_N7S3135C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
};
extern VTBL_ENTRY _ZTV7S3135C1[];
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C5D1Ev();
extern void _ZN7S3135C5D0Ev();
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
extern void _ZN7S3135C52v7Ev();
extern void _ZN7S3135C52v8Ev();
extern void _ZN7S3135C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C5__7S3135C1[] = {
  ABISELECT(2008,1280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C5[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3135C52v9Ev,
};
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C6D1Ev();
extern void _ZN7S3135C6D0Ev();
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C67S3135C5__7S3135C1[] = {
  ABISELECT(2008,1280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
};
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C3__7S3135C67S3135C5__7S3135C1[] = {
  0,
  0,
  ABISELECT(-2008,-1280),
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
};
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C3__7S3135C5__7S3135C1[] = {
  0,
  0,
  ABISELECT(-2008,-1280),
  (VTBL_ENTRY)&(_ZTI7S3135C5[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
};
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
extern void _ZN7S3135C6D1Ev();
extern void _ZN7S3135C6D0Ev();
extern void _ZN7S3135C62v5Ev();
extern void _ZN7S3135C62v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C6__A1__7S3135C1[] = {
  ABISELECT(-40,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3135C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v5Ev,
  (VTBL_ENTRY)&_ZN7S3135C62v6Ev,
};
extern void _ZN7S3135C32v3Ev();
extern void _ZN7S3135C32v4Ev();
static  VTBL_ENTRY _tg__ZTV7S3135C3__7S3135C6__A1__7S3135C1[] = {
  0,
  0,
  ABISELECT(40,16),
  (VTBL_ENTRY)&(_ZTI7S3135C6[0]),
  (VTBL_ENTRY)&_ZN7S3135C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3135C32v4Ev,
};
static  VTT_ENTRY vtt_S3135C1[] = {
  {&(_ZTV7S3135C1[5]),  5,55},
  {&(_ZTV7S3135C1[26]),  26,55},
  {&(_ZTV7S3135C1[39]),  39,55},
  {&(_ZTV7S3135C1[49]),  49,55},
  {&(_tg__ZTV7S3135C5__7S3135C1[3]),  3,12},
  {&(_tg__ZTV7S3135C67S3135C5__7S3135C1[3]),  3,9},
  {&(_tg__ZTV7S3135C3__7S3135C67S3135C5__7S3135C1[4]),  4,6},
  {&(_tg__ZTV7S3135C3__7S3135C5__7S3135C1[4]),  4,6},
  {&(_tg__ZTV7S3135C6__A1__7S3135C1[3]),  3,9},
  {&(_tg__ZTV7S3135C3__7S3135C6__A1__7S3135C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S3135C1[];
extern  VTBL_ENTRY _ZTV7S3135C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3135C1[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3135C1D0Ev,_ZTv0_n24_N7S3135C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2464_N7S3135C1D0Ev,_ZThn1556_N7S3135C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3135C1D0Ev,_ZThn260_N7S3135C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S3135C1D1Ev,_ZTv0_n24_N7S3135C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2464_N7S3135C1D1Ev,_ZThn1556_N7S3135C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N7S3135C1D1Ev,_ZThn260_N7S3135C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3135C1 = {  "S3135C1", // class name
  bases_S3135C1, 11,
  &(vtc_S3135C1[0]), // expected_vtbl_contents
  &(vtt_S3135C1[0]), // expected_vtt_contents
  ABISELECT(4464,2828), // object size
  NSPAIRA(_ZTI7S3135C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3135C1),55, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3135C1),10, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15482C3_nt  {
  virtual  ~S15482C3_nt(); // _ZN11S15482C3_ntD1Ev
  virtual void  v15(); // _ZN11S15482C3_nt3v15Ev
  virtual void  v16(); // _ZN11S15482C3_nt3v16Ev
  virtual void  v17(); // _ZN11S15482C3_nt3v17Ev
  virtual void  v18(); // _ZN11S15482C3_nt3v18Ev
  virtual void  v19(); // _ZN11S15482C3_nt3v19Ev
  virtual void  v20(); // _ZN11S15482C3_nt3v20Ev
  virtual void  v21(); // _ZN11S15482C3_nt3v21Ev
  virtual void  v22(); // _ZN11S15482C3_nt3v22Ev
  virtual void  v23(); // _ZN11S15482C3_nt3v23Ev
  virtual void  v24(); // _ZN11S15482C3_nt3v24Ev
  virtual void  v25(); // _ZN11S15482C3_nt3v25Ev
  virtual void  v26(); // _ZN11S15482C3_nt3v26Ev
  virtual void  v27(); // _ZN11S15482C3_nt3v27Ev
  virtual void  v28(); // _ZN11S15482C3_nt3v28Ev
  S15482C3_nt(); // tgen
};
//SIG(-1 S15482C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14}


 S15482C3_nt ::~S15482C3_nt(){ note_dtor("S15482C3_nt", this);}
void  S15482C3_nt ::v15(){vfunc_called(this, "_ZN11S15482C3_nt3v15Ev");}
void  S15482C3_nt ::v16(){vfunc_called(this, "_ZN11S15482C3_nt3v16Ev");}
void  S15482C3_nt ::v17(){vfunc_called(this, "_ZN11S15482C3_nt3v17Ev");}
void  S15482C3_nt ::v18(){vfunc_called(this, "_ZN11S15482C3_nt3v18Ev");}
void  S15482C3_nt ::v19(){vfunc_called(this, "_ZN11S15482C3_nt3v19Ev");}
void  S15482C3_nt ::v20(){vfunc_called(this, "_ZN11S15482C3_nt3v20Ev");}
void  S15482C3_nt ::v21(){vfunc_called(this, "_ZN11S15482C3_nt3v21Ev");}
void  S15482C3_nt ::v22(){vfunc_called(this, "_ZN11S15482C3_nt3v22Ev");}
void  S15482C3_nt ::v23(){vfunc_called(this, "_ZN11S15482C3_nt3v23Ev");}
void  S15482C3_nt ::v24(){vfunc_called(this, "_ZN11S15482C3_nt3v24Ev");}
void  S15482C3_nt ::v25(){vfunc_called(this, "_ZN11S15482C3_nt3v25Ev");}
void  S15482C3_nt ::v26(){vfunc_called(this, "_ZN11S15482C3_nt3v26Ev");}
void  S15482C3_nt ::v27(){vfunc_called(this, "_ZN11S15482C3_nt3v27Ev");}
void  S15482C3_nt ::v28(){vfunc_called(this, "_ZN11S15482C3_nt3v28Ev");}
S15482C3_nt ::S15482C3_nt(){ note_ctor("S15482C3_nt", this);} // tgen

//skip512 S15482C3_nt

#else // __cplusplus

extern void _ZN11S15482C3_ntC1Ev();
extern void _ZN11S15482C3_ntD1Ev();
Name_Map name_map_S15482C3_nt[] = {
  NSPAIR(_ZN11S15482C3_ntC1Ev),
  NSPAIR(_ZN11S15482C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S15482C3_nt[];
extern void _ZN11S15482C3_ntD1Ev();
extern void _ZN11S15482C3_ntD0Ev();
extern void _ZN11S15482C3_nt3v15Ev();
extern void _ZN11S15482C3_nt3v16Ev();
extern void _ZN11S15482C3_nt3v17Ev();
extern void _ZN11S15482C3_nt3v18Ev();
extern void _ZN11S15482C3_nt3v19Ev();
extern void _ZN11S15482C3_nt3v20Ev();
extern void _ZN11S15482C3_nt3v21Ev();
extern void _ZN11S15482C3_nt3v22Ev();
extern void _ZN11S15482C3_nt3v23Ev();
extern void _ZN11S15482C3_nt3v24Ev();
extern void _ZN11S15482C3_nt3v25Ev();
extern void _ZN11S15482C3_nt3v26Ev();
extern void _ZN11S15482C3_nt3v27Ev();
extern void _ZN11S15482C3_nt3v28Ev();
static  VTBL_ENTRY vtc_S15482C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S15482C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S15482C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v28Ev,
};
extern VTBL_ENTRY _ZTI11S15482C3_nt[];
VTBL_ENTRY *P__ZTI11S15482C3_nt = _ZTI11S15482C3_nt; 
extern  VTBL_ENTRY _ZTV11S15482C3_nt[];
Class_Descriptor cd_S15482C3_nt = {  "S15482C3_nt", // class name
  0,0,//no base classes
  &(vtc_S15482C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S15482C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S15482C3_nt),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15482C4  {
  ::S17189C4_nt s15482c4f0;
};
//SIG(-1 S15482C4) C1{ FC2{ BC3{ m Fc[16]}}}



static void Test_S15482C4()
{
  {
    init_simple_test("S15482C4");
    S15482C4 lv;
    check2(sizeof(lv), 16, "sizeof(S15482C4)");
    check2(__alignof__(lv), 1, "__alignof__(S15482C4)");
    check_field_offset(lv, s15482c4f0, 0, "S15482C4.s15482c4f0");
  }
}
static Arrange_To_Call_Me vS15482C4(Test_S15482C4, "S15482C4", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15482C2  : S15482C3_nt {
  ::S15482C4 s15482c2f0;
  virtual  ~S15482C2(); // _ZN8S15482C2D1Ev
  virtual void  v1(); // _ZN8S15482C22v1Ev
  virtual void  v2(); // _ZN8S15482C22v2Ev
  virtual void  v3(); // _ZN8S15482C22v3Ev
  virtual void  v4(); // _ZN8S15482C22v4Ev
  virtual void  v5(); // _ZN8S15482C22v5Ev
  virtual void  v6(); // _ZN8S15482C22v6Ev
  virtual void  v7(); // _ZN8S15482C22v7Ev
  virtual void  v8(); // _ZN8S15482C22v8Ev
  virtual void  v9(); // _ZN8S15482C22v9Ev
  virtual void  v10(); // _ZN8S15482C23v10Ev
  virtual void  v11(); // _ZN8S15482C23v11Ev
  virtual void  v12(); // _ZN8S15482C23v12Ev
  virtual void  v13(); // _ZN8S15482C23v13Ev
  virtual void  v14(); // _ZN8S15482C23v14Ev
  S15482C2(); // tgen
};
//SIG(-1 S15482C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 FC3{ FC4{ BC5{ m Fc[16]}}}}


 S15482C2 ::~S15482C2(){ note_dtor("S15482C2", this);}
void  S15482C2 ::v1(){vfunc_called(this, "_ZN8S15482C22v1Ev");}
void  S15482C2 ::v2(){vfunc_called(this, "_ZN8S15482C22v2Ev");}
void  S15482C2 ::v3(){vfunc_called(this, "_ZN8S15482C22v3Ev");}
void  S15482C2 ::v4(){vfunc_called(this, "_ZN8S15482C22v4Ev");}
void  S15482C2 ::v5(){vfunc_called(this, "_ZN8S15482C22v5Ev");}
void  S15482C2 ::v6(){vfunc_called(this, "_ZN8S15482C22v6Ev");}
void  S15482C2 ::v7(){vfunc_called(this, "_ZN8S15482C22v7Ev");}
void  S15482C2 ::v8(){vfunc_called(this, "_ZN8S15482C22v8Ev");}
void  S15482C2 ::v9(){vfunc_called(this, "_ZN8S15482C22v9Ev");}
void  S15482C2 ::v10(){vfunc_called(this, "_ZN8S15482C23v10Ev");}
void  S15482C2 ::v11(){vfunc_called(this, "_ZN8S15482C23v11Ev");}
void  S15482C2 ::v12(){vfunc_called(this, "_ZN8S15482C23v12Ev");}
void  S15482C2 ::v13(){vfunc_called(this, "_ZN8S15482C23v13Ev");}
void  S15482C2 ::v14(){vfunc_called(this, "_ZN8S15482C23v14Ev");}
S15482C2 ::S15482C2(){ note_ctor("S15482C2", this);} // tgen

static void Test_S15482C2()
{
  extern Class_Descriptor cd_S15482C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S15482C2, buf);
    S15482C2 *dp, &lv = *(dp=new (buf) S15482C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S15482C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15482C2)");
    check_base_class_offset(lv, (S15482C3_nt*), 0, "S15482C2");
    check_field_offset(lv, s15482c2f0, ABISELECT(8,4), "S15482C2.s15482c2f0");
    test_class_info(&lv, &cd_S15482C2);
    dp->~S15482C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15482C2(Test_S15482C2, "S15482C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S15482C2C1Ev();
extern void _ZN8S15482C2D1Ev();
Name_Map name_map_S15482C2[] = {
  NSPAIR(_ZN8S15482C2C1Ev),
  NSPAIR(_ZN8S15482C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S15482C3_nt;
extern VTBL_ENTRY _ZTI11S15482C3_nt[];
extern  VTBL_ENTRY _ZTV11S15482C3_nt[];
static Base_Class bases_S15482C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15482C3_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 _ZTI8S15482C2[];
extern void _ZN8S15482C2D1Ev();
extern void _ZN8S15482C2D0Ev();
extern void _ZN11S15482C3_nt3v15Ev();
extern void _ZN11S15482C3_nt3v16Ev();
extern void _ZN11S15482C3_nt3v17Ev();
extern void _ZN11S15482C3_nt3v18Ev();
extern void _ZN11S15482C3_nt3v19Ev();
extern void _ZN11S15482C3_nt3v20Ev();
extern void _ZN11S15482C3_nt3v21Ev();
extern void _ZN11S15482C3_nt3v22Ev();
extern void _ZN11S15482C3_nt3v23Ev();
extern void _ZN11S15482C3_nt3v24Ev();
extern void _ZN11S15482C3_nt3v25Ev();
extern void _ZN11S15482C3_nt3v26Ev();
extern void _ZN11S15482C3_nt3v27Ev();
extern void _ZN11S15482C3_nt3v28Ev();
extern void _ZN8S15482C22v1Ev();
extern void _ZN8S15482C22v2Ev();
extern void _ZN8S15482C22v3Ev();
extern void _ZN8S15482C22v4Ev();
extern void _ZN8S15482C22v5Ev();
extern void _ZN8S15482C22v6Ev();
extern void _ZN8S15482C22v7Ev();
extern void _ZN8S15482C22v8Ev();
extern void _ZN8S15482C22v9Ev();
extern void _ZN8S15482C23v10Ev();
extern void _ZN8S15482C23v11Ev();
extern void _ZN8S15482C23v12Ev();
extern void _ZN8S15482C23v13Ev();
extern void _ZN8S15482C23v14Ev();
static  VTBL_ENTRY vtc_S15482C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S15482C2[0]),
  (VTBL_ENTRY)&_ZN8S15482C2D1Ev,
  (VTBL_ENTRY)&_ZN8S15482C2D0Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN11S15482C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v1Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v2Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v3Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v4Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v5Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v6Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v7Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v8Ev,
  (VTBL_ENTRY)&_ZN8S15482C22v9Ev,
  (VTBL_ENTRY)&_ZN8S15482C23v10Ev,
  (VTBL_ENTRY)&_ZN8S15482C23v11Ev,
  (VTBL_ENTRY)&_ZN8S15482C23v12Ev,
  (VTBL_ENTRY)&_ZN8S15482C23v13Ev,
  (VTBL_ENTRY)&_ZN8S15482C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S15482C2[];
extern  VTBL_ENTRY _ZTV8S15482C2[];
Class_Descriptor cd_S15482C2 = {  "S15482C2", // class name
  bases_S15482C2, 1,
  &(vtc_S15482C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S15482C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S15482C2),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15482C1  {
  ::S15482C2 s15482c1f0;
  ::S17189C4_nt s15482c1f1;
  ::S17189C4_nt s15482c1f2;
  int s15482c1f3[2];
  char s15482c1f4[2];
  void  mf15482c1(); // _ZN8S15482C19mf15482c1Ev
};
//SIG(1 S15482C1) C1{ m FC2{ BC3{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 FC4{ FC5{ BC6{ m Fc[16]}}}} FC5 FC5 Fi[2] Fc[2]}


void  S15482C1 ::mf15482c1(){}

static void Test_S15482C1()
{
  {
    init_simple_test("S15482C1");
    S15482C1 lv;
    check2(sizeof(lv), ABISELECT(72,64), "sizeof(S15482C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15482C1)");
    check_field_offset(lv, s15482c1f0, 0, "S15482C1.s15482c1f0");
    check_field_offset(lv, s15482c1f1, ABISELECT(24,20), "S15482C1.s15482c1f1");
    check_field_offset(lv, s15482c1f2, ABISELECT(40,36), "S15482C1.s15482c1f2");
    check_field_offset(lv, s15482c1f3, ABISELECT(56,52), "S15482C1.s15482c1f3");
    check_field_offset(lv, s15482c1f4, ABISELECT(64,60), "S15482C1.s15482c1f4");
  }
}
static Arrange_To_Call_Me vS15482C1(Test_S15482C1, "S15482C1", ABISELECT(72,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19799C4  : virtual S20605C5 {
  ::S20605C5 s19799c4f0;
  short s19799c4f1;
  int s19799c4f2;
  char s19799c4f3;
  ~S19799C4(); // tgen
  S19799C4(); // tgen
};
//SIG(-1 S19799C4) C1{ VBC2{ m Fs[2]} FC2 Fs Fi Fc}


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

static void Test_S19799C4()
{
  extern Class_Descriptor cd_S19799C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19799C4, buf);
    S19799C4 *dp, &lv = *(dp=new (buf) S19799C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19799C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19799C4)");
    check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S19799C4");
    check_field_offset(lv, s19799c4f0, ABISELECT(8,4), "S19799C4.s19799c4f0");
    check_field_offset(lv, s19799c4f1, ABISELECT(12,8), "S19799C4.s19799c4f1");
    check_field_offset(lv, s19799c4f2, ABISELECT(16,12), "S19799C4.s19799c4f2");
    check_field_offset(lv, s19799c4f3, ABISELECT(20,16), "S19799C4.s19799c4f3");
    test_class_info(&lv, &cd_S19799C4);
    dp->~S19799C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19799C4(Test_S19799C4, "S19799C4", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19799C4C1Ev();
extern void _ZN8S19799C4D1Ev();
Name_Map name_map_S19799C4[] = {
  NSPAIR(_ZN8S19799C4C1Ev),
  NSPAIR(_ZN8S19799C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S19799C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19799C4[];
static  VTBL_ENTRY vtc_S19799C4[] = {
  ABISELECT(22,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C4[0]),
};
extern VTBL_ENTRY _ZTV8S19799C4[];
static  VTT_ENTRY vtt_S19799C4[] = {
  {&(_ZTV8S19799C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19799C4[];
extern  VTBL_ENTRY _ZTV8S19799C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C4[];
Class_Descriptor cd_S19799C4 = {  "S19799C4", // class name
  bases_S19799C4, 1,
  &(vtc_S19799C4[0]), // expected_vtbl_contents
  &(vtt_S19799C4[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19799C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19799C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19799C4),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  S19799C3  : S19799C4 , S20605C5 {
  long double s19799c3f0;
  void *s19799c3f1;
  ::S20605C3 s19799c3f2;
  virtual void  v3(); // _ZN8S19799C32v3Ev
  virtual void  v4(); // _ZN8S19799C32v4Ev
  ~S19799C3(); // tgen
  S19799C3(); // tgen
};
//SIG(-1 S19799C3) C1{ BC2{ VBC3{ m Fs[2]} FC3 Fs Fi Fc} BC3 v1 v2 FD Fp FC4{ m Fc FC5{ VBC3 FC3 Fs Fi Fc}[10]}}


void  S19799C3 ::v3(){vfunc_called(this, "_ZN8S19799C32v3Ev");}
void  S19799C3 ::v4(){vfunc_called(this, "_ZN8S19799C32v4Ev");}
S19799C3 ::~S19799C3(){ note_dtor("S19799C3", this);} // tgen
S19799C3 ::S19799C3(){ note_ctor("S19799C3", this);} // tgen

static void Test_S19799C3()
{
  extern Class_Descriptor cd_S19799C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,73)];
    init_test(&cd_S19799C3, buf);
    S19799C3 *dp, &lv = *(dp=new (buf) S19799C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S19799C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19799C3)");
    check_base_class_offset(lv, (S20605C5*)(S19799C4*), ABISELECT(384,284), "S19799C3");
    check_base_class_offset(lv, (S19799C4*), 0, "S19799C3");
    /*is_ambiguous_... S19799C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S19799C3");
    check_field_offset(lv, s19799c3f0, ABISELECT(32,24), "S19799C3.s19799c3f0");
    check_field_offset(lv, s19799c3f1, ABISELECT(48,36), "S19799C3.s19799c3f1");
    check_field_offset(lv, s19799c3f2, ABISELECT(56,40), "S19799C3.s19799c3f2");
    test_class_info(&lv, &cd_S19799C3);
    dp->~S19799C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19799C3(Test_S19799C3, "S19799C3", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN8S19799C3C1Ev();
extern void _ZN8S19799C3D1Ev();
Name_Map name_map_S19799C3[] = {
  NSPAIR(_ZN8S19799C3C1Ev),
  NSPAIR(_ZN8S19799C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C4;
extern VTBL_ENTRY _ZTI8S19799C4[];
extern  VTBL_ENTRY _ZTV8S19799C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S19799C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(384,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19799C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19799C3[];
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
static  VTBL_ENTRY vtc_S19799C3[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C3[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S19799C3[];
static  VTBL_ENTRY _tg__ZTV8S19799C4__8S19799C3[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C4[0]),
};
static  VTT_ENTRY vtt_S19799C3[] = {
  {&(_ZTV8S19799C3[3]),  3,5},
  {&(_tg__ZTV8S19799C4__8S19799C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19799C3[];
extern  VTBL_ENTRY _ZTV8S19799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C3[];
Class_Descriptor cd_S19799C3 = {  "S19799C3", // class name
  bases_S19799C3, 3,
  &(vtc_S19799C3[0]), // expected_vtbl_contents
  &(vtt_S19799C3[0]), // expected_vtt_contents
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI8S19799C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19799C3),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19799C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19799C7  {
  long double s19799c7f0;
  __tsi64 s19799c7f1;
  virtual void  v5(); // _ZN8S19799C72v5Ev
  virtual void  v6(); // _ZN8S19799C72v6Ev
  virtual void  v7(); // _ZN8S19799C72v7Ev
  ~S19799C7(); // tgen
  S19799C7(); // tgen
};
//SIG(-1 S19799C7) C1{ v1 v2 v3 FD FL}


void  S19799C7 ::v5(){vfunc_called(this, "_ZN8S19799C72v5Ev");}
void  S19799C7 ::v6(){vfunc_called(this, "_ZN8S19799C72v6Ev");}
void  S19799C7 ::v7(){vfunc_called(this, "_ZN8S19799C72v7Ev");}
S19799C7 ::~S19799C7(){ note_dtor("S19799C7", this);} // tgen
S19799C7 ::S19799C7(){ note_ctor("S19799C7", this);} // tgen

static void Test_S19799C7()
{
  extern Class_Descriptor cd_S19799C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19799C7, buf);
    S19799C7 *dp, &lv = *(dp=new (buf) S19799C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19799C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19799C7)");
    check_field_offset(lv, s19799c7f0, ABISELECT(16,4), "S19799C7.s19799c7f0");
    check_field_offset(lv, s19799c7f1, ABISELECT(32,16), "S19799C7.s19799c7f1");
    test_class_info(&lv, &cd_S19799C7);
    dp->~S19799C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19799C7(Test_S19799C7, "S19799C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19799C7C1Ev();
extern void _ZN8S19799C7D1Ev();
Name_Map name_map_S19799C7[] = {
  NSPAIR(_ZN8S19799C7C1Ev),
  NSPAIR(_ZN8S19799C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19799C7[];
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY vtc_S19799C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C7[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
extern VTBL_ENTRY _ZTI8S19799C7[];
extern  VTBL_ENTRY _ZTV8S19799C7[];
Class_Descriptor cd_S19799C7 = {  "S19799C7", // class name
  0,0,//no base classes
  &(vtc_S19799C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19799C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19799C7),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  S19799C6  : virtual S19799C7 , S19799C3 , virtual S20605C3 {
  virtual void  v8(); // _ZN8S19799C62v8Ev
  ~S19799C6(); // tgen
  S19799C6(); // tgen
};
//SIG(-1 S19799C6) C1{ VBC2{ v2 v3 v4 FD FL} BC3{ BC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc} BC5 v5 v6 FD Fp FC6{ m Fc FC7{ VBC5 FC5 Fs Fi Fc}[10]}} VBC6 v1}


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

static void Test_S19799C6()
{
  extern Class_Descriptor cd_S19799C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,140)];
    init_test(&cd_S19799C6, buf);
    S19799C6 *dp, &lv = *(dp=new (buf) S19799C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,556), "sizeof(S19799C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19799C6)");
    check_base_class_offset(lv, (S19799C7*), ABISELECT(384,284), "S19799C6");
    check_base_class_offset(lv, (S20605C5*)(S19799C4*)(S19799C3*), ABISELECT(424,308), "S19799C6");
    check_base_class_offset(lv, (S19799C4*)(S19799C3*), 0, "S19799C6");
    /*is_ambiguous_... S19799C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19799C3*), ABISELECT(22,18), "S19799C6");
    check_base_class_offset(lv, (S19799C3*), 0, "S19799C6");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(432,312), "S19799C6");
    test_class_info(&lv, &cd_S19799C6);
    dp->~S19799C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19799C6(Test_S19799C6, "S19799C6", ABISELECT(768,556));

#else // __cplusplus

extern void _ZN8S19799C6C1Ev();
extern void _ZN8S19799C6D1Ev();
Name_Map name_map_S19799C6[] = {
  NSPAIR(_ZN8S19799C6C1Ev),
  NSPAIR(_ZN8S19799C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19799C7;
extern VTBL_ENTRY _ZTI8S19799C7[];
extern  VTBL_ENTRY _ZTV8S19799C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C4;
extern VTBL_ENTRY _ZTI8S19799C4[];
extern  VTBL_ENTRY _ZTV8S19799C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C3;
extern VTBL_ENTRY _ZTI8S19799C3[];
extern  VTBL_ENTRY _ZTV8S19799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S19799C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19799C7,    ABISELECT(384,284), //bcp->offset
    8, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(424,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19799C4,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19799C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C3,    ABISELECT(432,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19799C6[];
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY vtc_S19799C6[] = {
  ABISELECT(432,312),
  ABISELECT(384,284),
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
extern VTBL_ENTRY _ZTV8S19799C6[];
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C3__8S19799C6[] = {
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C3[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C48S19799C3__8S19799C6[] = {
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C4[0]),
};
static  VTT_ENTRY vtt_S19799C6[] = {
  {&(_ZTV8S19799C6[5]),  5,16},
  {&(_tg__ZTV8S19799C3__8S19799C6[3]),  3,5},
  {&(_tg__ZTV8S19799C48S19799C3__8S19799C6[3]),  3,3},
  {&(_ZTV8S19799C6[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S19799C6[];
extern  VTBL_ENTRY _ZTV8S19799C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C6[];
Class_Descriptor cd_S19799C6 = {  "S19799C6", // class name
  bases_S19799C6, 6,
  &(vtc_S19799C6[0]), // expected_vtbl_contents
  &(vtt_S19799C6[0]), // expected_vtt_contents
  ABISELECT(768,556), // object size
  NSPAIRA(_ZTI8S19799C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19799C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19799C6),4, //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  S19799C9  : virtual S19799C7 , virtual S20605C3 {
  int s19799c9f0;
  ~S19799C9(); // tgen
  S19799C9(); // tgen
};
//SIG(-1 S19799C9) C1{ VBC2{ v1 v2 v3 FD FL} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S19799C9()
{
  extern Class_Descriptor cd_S19799C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,70)];
    init_test(&cd_S19799C9, buf);
    S19799C9 *dp, &lv = *(dp=new (buf) S19799C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S19799C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19799C9)");
    check_base_class_offset(lv, (S19799C7*), ABISELECT(16,8), "S19799C9");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,32), "S19799C9");
    check_field_offset(lv, s19799c9f0, ABISELECT(8,4), "S19799C9.s19799c9f0");
    test_class_info(&lv, &cd_S19799C9);
    dp->~S19799C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19799C9(Test_S19799C9, "S19799C9", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN8S19799C9C1Ev();
extern void _ZN8S19799C9D1Ev();
Name_Map name_map_S19799C9[] = {
  NSPAIR(_ZN8S19799C9C1Ev),
  NSPAIR(_ZN8S19799C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19799C7;
extern VTBL_ENTRY _ZTI8S19799C7[];
extern  VTBL_ENTRY _ZTV8S19799C7[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S19799C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19799C7,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19799C9[];
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY vtc_S19799C9[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C9[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19799C9[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
extern VTBL_ENTRY _ZTV8S19799C9[];
static  VTT_ENTRY vtt_S19799C9[] = {
  {&(_ZTV8S19799C9[4]),  4,12},
  {&(_ZTV8S19799C9[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S19799C9[];
extern  VTBL_ENTRY _ZTV8S19799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C9[];
Class_Descriptor cd_S19799C9 = {  "S19799C9", // class name
  bases_S19799C9, 2,
  &(vtc_S19799C9[0]), // expected_vtbl_contents
  &(vtt_S19799C9[0]), // expected_vtt_contents
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI8S19799C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19799C9),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19799C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19799C8  : virtual S19799C7 , virtual S20605C3 , virtual S19799C9 , S19799C6 {
  char  :0;
  ~S19799C8(); // tgen
  S19799C8(); // tgen
};
//SIG(-1 S19799C8) C1{ VBC2{ v1 v2 v3 FD FL} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} VBC6{ VBC2 VBC3 Fi} BC7{ VBC2 BC8{ BC9{ VBC5 FC5 Fs Fi Fc} BC5 v4 v5 FD Fp FC3} VBC3 v6} Fc:0}


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

static void Test_S19799C8()
{
  extern Class_Descriptor cd_S19799C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,142)];
    init_test(&cd_S19799C8, buf);
    S19799C8 *dp, &lv = *(dp=new (buf) S19799C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,564), "sizeof(S19799C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19799C8)");
    check_base_class_offset(lv, (S19799C7*), ABISELECT(384,284), "S19799C8");
    check_base_class_offset(lv, (S19799C7*)(S19799C9*), ABISELECT(384,284), "S19799C8");
    check_base_class_offset(lv, (S19799C7*)(S19799C6*), ABISELECT(384,284), "S19799C8");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(424,308), "S19799C8");
    check_base_class_offset(lv, (S20605C3*)(S19799C9*), ABISELECT(424,308), "S19799C8");
    check_base_class_offset(lv, (S20605C3*)(S19799C6*), ABISELECT(424,308), "S19799C8");
    check_base_class_offset(lv, (S19799C9*), ABISELECT(752,552), "S19799C8");
    check_base_class_offset(lv, (S20605C5*)(S19799C4*)(S19799C3*)(S19799C6*), ABISELECT(764,560), "S19799C8");
    check_base_class_offset(lv, (S19799C4*)(S19799C3*)(S19799C6*), 0, "S19799C8");
    /*is_ambiguous_... S19799C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19799C3*)(S19799C6*), ABISELECT(22,18), "S19799C8");
    check_base_class_offset(lv, (S19799C3*)(S19799C6*), 0, "S19799C8");
    check_base_class_offset(lv, (S19799C6*), 0, "S19799C8");
    test_class_info(&lv, &cd_S19799C8);
    dp->~S19799C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19799C8(Test_S19799C8, "S19799C8", ABISELECT(768,564));

#else // __cplusplus

extern void _ZN8S19799C8C1Ev();
extern void _ZN8S19799C8D1Ev();
Name_Map name_map_S19799C8[] = {
  NSPAIR(_ZN8S19799C8C1Ev),
  NSPAIR(_ZN8S19799C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19799C7;
extern VTBL_ENTRY _ZTI8S19799C7[];
extern  VTBL_ENTRY _ZTV8S19799C7[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S19799C9;
extern VTBL_ENTRY _ZTI8S19799C9[];
extern  VTBL_ENTRY _ZTV8S19799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C9[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C4;
extern VTBL_ENTRY _ZTI8S19799C4[];
extern  VTBL_ENTRY _ZTV8S19799C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C3;
extern VTBL_ENTRY _ZTI8S19799C3[];
extern  VTBL_ENTRY _ZTV8S19799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C3[];
extern Class_Descriptor cd_S19799C6;
extern VTBL_ENTRY _ZTI8S19799C6[];
extern  VTBL_ENTRY _ZTV8S19799C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C6[];
static Base_Class bases_S19799C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19799C7,    ABISELECT(384,284), //bcp->offset
    9, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(424,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19799C9,    ABISELECT(752,552), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(764,560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19799C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19799C3,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19799C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19799C8[];
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY vtc_S19799C8[] = {
  ABISELECT(752,552),
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C8[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19799C8[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  ABISELECT(-752,-552),
  (VTBL_ENTRY)&(_ZTI8S19799C8[0]),
};
extern VTBL_ENTRY _ZTV8S19799C8[];
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C6__8S19799C8[] = {
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
};
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C38S19799C6__8S19799C8[] = {
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C3[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C48S19799C38S19799C6__8S19799C8[] = {
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C4[0]),
};
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C7__8S19799C6__8S19799C8[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C9__8S19799C8[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C9[0]),
};
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C7__8S19799C9__8S19799C8[] = {
  0,
  0,
  0,
  ABISELECT(368,268),
  (VTBL_ENTRY)&(_ZTI8S19799C9[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
static  VTT_ENTRY vtt_S19799C8[] = {
  {&(_ZTV8S19799C8[6]),  6,21},
  {&(_tg__ZTV8S19799C6__8S19799C8[5]),  5,8},
  {&(_tg__ZTV8S19799C38S19799C6__8S19799C8[3]),  3,5},
  {&(_tg__ZTV8S19799C48S19799C38S19799C6__8S19799C8[3]),  3,3},
  {&(_tg__ZTV8S19799C7__8S19799C6__8S19799C8[5]),  5,8},
  {&(_ZTV8S19799C8[14]),  14,21},
  {&(_ZTV8S19799C8[21]),  21,21},
  {&(_tg__ZTV8S19799C9__8S19799C8[4]),  4,4},
  {&(_tg__ZTV8S19799C7__8S19799C9__8S19799C8[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19799C8[];
extern  VTBL_ENTRY _ZTV8S19799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C8[];
Class_Descriptor cd_S19799C8 = {  "S19799C8", // class name
  bases_S19799C8, 8,
  &(vtc_S19799C8[0]), // expected_vtbl_contents
  &(vtt_S19799C8[0]), // expected_vtt_contents
  ABISELECT(768,564), // object size
  NSPAIRA(_ZTI8S19799C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19799C8),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19799C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19799C1  : virtual S20605C5 , virtual S19799C3 , virtual S19799C6 , S19799C8 {
  int s19799c1f0;
  ::S19799C7 s19799c1f1;
  int s19799c1f2;
  virtual void  v1(); // _ZN8S19799C12v1Ev
  virtual void  v2(); // _ZN8S19799C12v2Ev
  ~S19799C1(); // tgen
  S19799C1(); // tgen
};
//SIG(1 S19799C1) C1{ VBC2{ m Fs[2]} VBC3{ BC4{ VBC2 FC2 Fs Fi Fc} BC2 v3 v4 FD Fp FC5{ m Fc FC6{ VBC2 FC2 Fs Fi Fc}[10]}} VBC7{ VBC8{ v5 v6 v7 FD FL} BC3 VBC5 v8} BC9{ VBC8 VBC5 VBC10{ VBC8 VBC5 Fi} BC7 Fc:0} v1 v2 Fi FC8 Fi}


void  S19799C1 ::v1(){vfunc_called(this, "_ZN8S19799C12v1Ev");}
void  S19799C1 ::v2(){vfunc_called(this, "_ZN8S19799C12v2Ev");}
S19799C1 ::~S19799C1(){ note_dtor("S19799C1", this);} // tgen
S19799C1 ::S19799C1(){ note_ctor("S19799C1", this);} // tgen

static void Test_S19799C1()
{
  extern Class_Descriptor cd_S19799C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(102,292)];
    init_test(&cd_S19799C1, buf);
    S19799C1 *dp, &lv = *(dp=new (buf) S19799C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1616,1164), "sizeof(S19799C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19799C1)");
    /*is_ambiguous_... S19799C1::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(452,316), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C3 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19799C4*)(S19799C3*), ABISELECT(452,316), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19799C4*)(S19799C3*)(S19799C6*), ABISELECT(452,316), "S19799C1");
    check_base_class_offset(lv, (S20605C5*)(S19799C4*)(S19799C3*)(S19799C6*)(S19799C8*), ABISELECT(452,316), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C3 */ AMB_check_base_class_offset(lv, (S19799C4*)(S19799C3*), ABISELECT(464,320), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C3 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19799C3*), ABISELECT(486,338), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C3 */ AMB_check_base_class_offset(lv, (S19799C3*), ABISELECT(464,320), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C6 */ AMB_check_base_class_offset(lv, (S19799C7*)(S19799C6*), ABISELECT(1232,888), "S19799C1");
    check_base_class_offset(lv, (S19799C7*)(S19799C8*), ABISELECT(1232,888), "S19799C1");
    check_base_class_offset(lv, (S19799C7*)(S19799C9*), ABISELECT(1232,888), "S19799C1");
    check_base_class_offset(lv, (S19799C7*)(S19799C6*)(S19799C8*), ABISELECT(1232,888), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C6 */ AMB_check_base_class_offset(lv, (S19799C4*)(S19799C3*)(S19799C6*), ABISELECT(848,604), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19799C3*)(S19799C6*), ABISELECT(870,622), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C6 */ AMB_check_base_class_offset(lv, (S19799C3*)(S19799C6*), ABISELECT(848,604), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C6 */ AMB_check_base_class_offset(lv, (S20605C3*)(S19799C6*), ABISELECT(1272,912), "S19799C1");
    check_base_class_offset(lv, (S20605C3*)(S19799C8*), ABISELECT(1272,912), "S19799C1");
    check_base_class_offset(lv, (S20605C3*)(S19799C9*), ABISELECT(1272,912), "S19799C1");
    check_base_class_offset(lv, (S20605C3*)(S19799C6*)(S19799C8*), ABISELECT(1272,912), "S19799C1");
    /*is_ambiguous_... S19799C1::S19799C6 */ AMB_check_base_class_offset(lv, (S19799C6*), ABISELECT(848,604), "S19799C1");
    check_base_class_offset(lv, (S19799C9*)(S19799C8*), ABISELECT(1600,1156), "S19799C1");
    check_base_class_offset(lv, (S19799C4*)(S19799C3*)(S19799C6*)(S19799C8*), 0, "S19799C1");
    /*is_ambiguous_... S19799C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19799C3*)(S19799C6*)(S19799C8*), ABISELECT(22,18), "S19799C1");
    check_base_class_offset(lv, (S19799C3*)(S19799C6*)(S19799C8*), 0, "S19799C1");
    check_base_class_offset(lv, (S19799C6*)(S19799C8*), 0, "S19799C1");
    check_base_class_offset(lv, (S19799C8*), 0, "S19799C1");
    check_field_offset(lv, s19799c1f0, ABISELECT(384,284), "S19799C1.s19799c1f0");
    check_field_offset(lv, s19799c1f1, ABISELECT(400,288), "S19799C1.s19799c1f1");
    check_field_offset(lv, s19799c1f2, ABISELECT(448,312), "S19799C1.s19799c1f2");
    test_class_info(&lv, &cd_S19799C1);
    dp->~S19799C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19799C1(Test_S19799C1, "S19799C1", ABISELECT(1616,1164));

#else // __cplusplus

extern void _ZN8S19799C1C1Ev();
extern void _ZN8S19799C1D1Ev();
Name_Map name_map_S19799C1[] = {
  NSPAIR(_ZN8S19799C1C1Ev),
  NSPAIR(_ZN8S19799C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C4;
extern VTBL_ENTRY _ZTI8S19799C4[];
extern  VTBL_ENTRY _ZTV8S19799C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C3;
extern VTBL_ENTRY _ZTI8S19799C3[];
extern  VTBL_ENTRY _ZTV8S19799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C3[];
extern Class_Descriptor cd_S19799C7;
extern VTBL_ENTRY _ZTI8S19799C7[];
extern  VTBL_ENTRY _ZTV8S19799C7[];
extern Class_Descriptor cd_S19799C4;
extern VTBL_ENTRY _ZTI8S19799C4[];
extern  VTBL_ENTRY _ZTV8S19799C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C3;
extern VTBL_ENTRY _ZTI8S19799C3[];
extern  VTBL_ENTRY _ZTV8S19799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S19799C6;
extern VTBL_ENTRY _ZTI8S19799C6[];
extern  VTBL_ENTRY _ZTV8S19799C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C6[];
extern Class_Descriptor cd_S19799C9;
extern VTBL_ENTRY _ZTI8S19799C9[];
extern  VTBL_ENTRY _ZTV8S19799C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C9[];
extern Class_Descriptor cd_S19799C4;
extern VTBL_ENTRY _ZTI8S19799C4[];
extern  VTBL_ENTRY _ZTV8S19799C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19799C3;
extern VTBL_ENTRY _ZTI8S19799C3[];
extern  VTBL_ENTRY _ZTV8S19799C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C3[];
extern Class_Descriptor cd_S19799C6;
extern VTBL_ENTRY _ZTI8S19799C6[];
extern  VTBL_ENTRY _ZTV8S19799C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C6[];
extern Class_Descriptor cd_S19799C8;
extern VTBL_ENTRY _ZTI8S19799C8[];
extern  VTBL_ENTRY _ZTV8S19799C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C8[];
static Base_Class bases_S19799C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(452,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19799C4,    ABISELECT(464,320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(486,338), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19799C3,    ABISELECT(464,320), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19799C7,    ABISELECT(1232,888), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19799C4,    ABISELECT(848,604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(870,622), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19799C3,    ABISELECT(848,604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20605C3,    ABISELECT(1272,912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19799C6,    ABISELECT(848,604), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19799C9,    ABISELECT(1600,1156), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19799C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19799C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19799C6,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19799C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19799C1[];
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
extern void _ZN8S19799C12v1Ev();
extern void _ZN8S19799C12v2Ev();
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY vtc_S19799C1[] = {
  ABISELECT(848,604),
  ABISELECT(464,320),
  ABISELECT(1600,1156),
  ABISELECT(1272,912),
  ABISELECT(1232,888),
  ABISELECT(452,316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C1[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19799C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19799C12v2Ev,
  0,
  0,
  ABISELECT(-12,-4),
  ABISELECT(-464,-320),
  (VTBL_ENTRY)&(_ZTI8S19799C1[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  0,
  0,
  0,
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(-396,-288),
  ABISELECT(-848,-604),
  (VTBL_ENTRY)&(_ZTI8S19799C1[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-1232,-888),
  (VTBL_ENTRY)&(_ZTI8S19799C1[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  ABISELECT(-1600,-1156),
  (VTBL_ENTRY)&(_ZTI8S19799C1[0]),
};
extern VTBL_ENTRY _ZTV8S19799C1[];
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C8__8S19799C1[] = {
  ABISELECT(1600,1156),
  ABISELECT(1272,912),
  ABISELECT(1232,888),
  ABISELECT(452,316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C8[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
};
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C68S19799C8__A1__8S19799C1[] = {
  ABISELECT(1272,912),
  ABISELECT(1232,888),
  ABISELECT(452,316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
};
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C38S19799C68S19799C8__A2__8S19799C1[] = {
  ABISELECT(452,316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C3[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C48S19799C38S19799C68S19799C8__A2__8S19799C1[] = {
  ABISELECT(452,316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C4[0]),
};
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C7__8S19799C68S19799C8__A1__8S19799C1[] = {
  0,
  0,
  0,
  ABISELECT(-1232,-888),
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C7__8S19799C8__8S19799C1[] = {
  0,
  0,
  0,
  ABISELECT(-1232,-888),
  (VTBL_ENTRY)&(_ZTI8S19799C8[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C9__8S19799C8__8S19799C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  ABISELECT(-1600,-1156),
  (VTBL_ENTRY)&(_ZTI8S19799C8[0]),
};
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C3__8S19799C1[] = {
  ABISELECT(-12,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C3[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C48S19799C3__8S19799C1[] = {
  ABISELECT(-12,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C4[0]),
};
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
extern void _ZN8S19799C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C6__8S19799C1[] = {
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(-396,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19799C62v8Ev,
};
extern void _ZN8S19799C32v3Ev();
extern void _ZN8S19799C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C38S19799C6__A1__8S19799C1[] = {
  ABISELECT(-396,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C3[0]),
  (VTBL_ENTRY)&_ZN8S19799C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19799C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C48S19799C38S19799C6__A1__8S19799C1[] = {
  ABISELECT(-396,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C4[0]),
};
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C7__8S19799C6__8S19799C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19799C6[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19799C9__8S19799C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  0,
  (VTBL_ENTRY)&(_ZTI8S19799C9[0]),
};
extern void _ZN8S19799C72v5Ev();
extern void _ZN8S19799C72v6Ev();
extern void _ZN8S19799C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19799C7__8S19799C9__8S19799C1[] = {
  0,
  0,
  0,
  ABISELECT(368,268),
  (VTBL_ENTRY)&(_ZTI8S19799C9[0]),
  (VTBL_ENTRY)&_ZN8S19799C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19799C72v7Ev,
};
static  VTT_ENTRY vtt_S19799C1[] = {
  {&(_ZTV8S19799C1[8]),  8,43},
  {&(_tg__ZTV8S19799C8__8S19799C1[6]),  6,9},
  {&(_tg__ZTV8S19799C68S19799C8__A1__8S19799C1[5]),  5,8},
  {&(_tg__ZTV8S19799C38S19799C68S19799C8__A2__8S19799C1[3]),  3,5},
  {&(_tg__ZTV8S19799C48S19799C38S19799C68S19799C8__A2__8S19799C1[3]),  3,3},
  {&(_tg__ZTV8S19799C7__8S19799C68S19799C8__A1__8S19799C1[5]),  5,8},
  {&(_tg__ZTV8S19799C7__8S19799C8__8S19799C1[5]),  5,8},
  {&(_tg__ZTV8S19799C9__8S19799C8__8S19799C1[4]),  4,4},
  {&(_ZTV8S19799C1[18]),  18,43},
  {&(_ZTV8S19799C1[28]),  28,43},
  {&(_ZTV8S19799C1[36]),  36,43},
  {&(_ZTV8S19799C1[43]),  43,43},
  {&(_tg__ZTV8S19799C3__8S19799C1[3]),  3,5},
  {&(_tg__ZTV8S19799C48S19799C3__8S19799C1[3]),  3,3},
  {&(_tg__ZTV8S19799C6__8S19799C1[5]),  5,8},
  {&(_tg__ZTV8S19799C38S19799C6__A1__8S19799C1[3]),  3,5},
  {&(_tg__ZTV8S19799C48S19799C38S19799C6__A1__8S19799C1[3]),  3,3},
  {&(_tg__ZTV8S19799C7__8S19799C6__8S19799C1[5]),  5,8},
  {&(_tg__ZTV8S19799C9__8S19799C1[4]),  4,4},
  {&(_tg__ZTV8S19799C7__8S19799C9__8S19799C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19799C1[];
extern  VTBL_ENTRY _ZTV8S19799C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19799C1[];
Class_Descriptor cd_S19799C1 = {  "S19799C1", // class name
  bases_S19799C1, 16,
  &(vtc_S19799C1[0]), // expected_vtbl_contents
  &(vtt_S19799C1[0]), // expected_vtt_contents
  ABISELECT(1616,1164), // object size
  NSPAIRA(_ZTI8S19799C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19799C1),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19799C1),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19798C4  : virtual S20605C5 {
  ::S20605C5 s19798c4f0;
  short s19798c4f1;
  int s19798c4f2;
  char s19798c4f3;
  ~S19798C4(); // tgen
  S19798C4(); // tgen
};
//SIG(-1 S19798C4) C1{ VBC2{ m Fs[2]} FC2 Fs Fi Fc}


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

static void Test_S19798C4()
{
  extern Class_Descriptor cd_S19798C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19798C4, buf);
    S19798C4 *dp, &lv = *(dp=new (buf) S19798C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19798C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19798C4)");
    check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S19798C4");
    check_field_offset(lv, s19798c4f0, ABISELECT(8,4), "S19798C4.s19798c4f0");
    check_field_offset(lv, s19798c4f1, ABISELECT(12,8), "S19798C4.s19798c4f1");
    check_field_offset(lv, s19798c4f2, ABISELECT(16,12), "S19798C4.s19798c4f2");
    check_field_offset(lv, s19798c4f3, ABISELECT(20,16), "S19798C4.s19798c4f3");
    test_class_info(&lv, &cd_S19798C4);
    dp->~S19798C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19798C4(Test_S19798C4, "S19798C4", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19798C4C1Ev();
extern void _ZN8S19798C4D1Ev();
Name_Map name_map_S19798C4[] = {
  NSPAIR(_ZN8S19798C4C1Ev),
  NSPAIR(_ZN8S19798C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S19798C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19798C4[];
static  VTBL_ENTRY vtc_S19798C4[] = {
  ABISELECT(22,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C4[0]),
};
extern VTBL_ENTRY _ZTV8S19798C4[];
static  VTT_ENTRY vtt_S19798C4[] = {
  {&(_ZTV8S19798C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19798C4[];
extern  VTBL_ENTRY _ZTV8S19798C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C4[];
Class_Descriptor cd_S19798C4 = {  "S19798C4", // class name
  bases_S19798C4, 1,
  &(vtc_S19798C4[0]), // expected_vtbl_contents
  &(vtt_S19798C4[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19798C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19798C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19798C4),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  S19798C3  : S19798C4 , S20605C5 {
  long double s19798c3f0;
  void *s19798c3f1;
  ::S20605C3 s19798c3f2;
  virtual void  v3(); // _ZN8S19798C32v3Ev
  virtual void  v4(); // _ZN8S19798C32v4Ev
  ~S19798C3(); // tgen
  S19798C3(); // tgen
};
//SIG(-1 S19798C3) C1{ BC2{ VBC3{ m Fs[2]} FC3 Fs Fi Fc} BC3 v1 v2 FD Fp FC4{ m Fc FC5{ VBC3 FC3 Fs Fi Fc}[10]}}


void  S19798C3 ::v3(){vfunc_called(this, "_ZN8S19798C32v3Ev");}
void  S19798C3 ::v4(){vfunc_called(this, "_ZN8S19798C32v4Ev");}
S19798C3 ::~S19798C3(){ note_dtor("S19798C3", this);} // tgen
S19798C3 ::S19798C3(){ note_ctor("S19798C3", this);} // tgen

static void Test_S19798C3()
{
  extern Class_Descriptor cd_S19798C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,73)];
    init_test(&cd_S19798C3, buf);
    S19798C3 *dp, &lv = *(dp=new (buf) S19798C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S19798C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19798C3)");
    check_base_class_offset(lv, (S20605C5*)(S19798C4*), ABISELECT(384,284), "S19798C3");
    check_base_class_offset(lv, (S19798C4*), 0, "S19798C3");
    /*is_ambiguous_... S19798C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S19798C3");
    check_field_offset(lv, s19798c3f0, ABISELECT(32,24), "S19798C3.s19798c3f0");
    check_field_offset(lv, s19798c3f1, ABISELECT(48,36), "S19798C3.s19798c3f1");
    check_field_offset(lv, s19798c3f2, ABISELECT(56,40), "S19798C3.s19798c3f2");
    test_class_info(&lv, &cd_S19798C3);
    dp->~S19798C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19798C3(Test_S19798C3, "S19798C3", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN8S19798C3C1Ev();
extern void _ZN8S19798C3D1Ev();
Name_Map name_map_S19798C3[] = {
  NSPAIR(_ZN8S19798C3C1Ev),
  NSPAIR(_ZN8S19798C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C4;
extern VTBL_ENTRY _ZTI8S19798C4[];
extern  VTBL_ENTRY _ZTV8S19798C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S19798C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(384,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19798C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19798C3[];
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
static  VTBL_ENTRY vtc_S19798C3[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C3[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
};
extern VTBL_ENTRY _ZTV8S19798C3[];
static  VTBL_ENTRY _tg__ZTV8S19798C4__8S19798C3[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C4[0]),
};
static  VTT_ENTRY vtt_S19798C3[] = {
  {&(_ZTV8S19798C3[3]),  3,5},
  {&(_tg__ZTV8S19798C4__8S19798C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19798C3[];
extern  VTBL_ENTRY _ZTV8S19798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C3[];
Class_Descriptor cd_S19798C3 = {  "S19798C3", // class name
  bases_S19798C3, 3,
  &(vtc_S19798C3[0]), // expected_vtbl_contents
  &(vtt_S19798C3[0]), // expected_vtt_contents
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI8S19798C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19798C3),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19798C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19798C7  {
  long double s19798c7f0;
  long s19798c7f1;
  virtual void  v5(); // _ZN8S19798C72v5Ev
  virtual void  v6(); // _ZN8S19798C72v6Ev
  virtual void  v7(); // _ZN8S19798C72v7Ev
  ~S19798C7(); // tgen
  S19798C7(); // tgen
};
//SIG(-1 S19798C7) C1{ v1 v2 v3 FD Fl}


void  S19798C7 ::v5(){vfunc_called(this, "_ZN8S19798C72v5Ev");}
void  S19798C7 ::v6(){vfunc_called(this, "_ZN8S19798C72v6Ev");}
void  S19798C7 ::v7(){vfunc_called(this, "_ZN8S19798C72v7Ev");}
S19798C7 ::~S19798C7(){ note_dtor("S19798C7", this);} // tgen
S19798C7 ::S19798C7(){ note_ctor("S19798C7", this);} // tgen

static void Test_S19798C7()
{
  extern Class_Descriptor cd_S19798C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19798C7, buf);
    S19798C7 *dp, &lv = *(dp=new (buf) S19798C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S19798C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19798C7)");
    check_field_offset(lv, s19798c7f0, ABISELECT(16,4), "S19798C7.s19798c7f0");
    check_field_offset(lv, s19798c7f1, ABISELECT(32,16), "S19798C7.s19798c7f1");
    test_class_info(&lv, &cd_S19798C7);
    dp->~S19798C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19798C7(Test_S19798C7, "S19798C7", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN8S19798C7C1Ev();
extern void _ZN8S19798C7D1Ev();
Name_Map name_map_S19798C7[] = {
  NSPAIR(_ZN8S19798C7C1Ev),
  NSPAIR(_ZN8S19798C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19798C7[];
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY vtc_S19798C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C7[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
extern VTBL_ENTRY _ZTI8S19798C7[];
extern  VTBL_ENTRY _ZTV8S19798C7[];
Class_Descriptor cd_S19798C7 = {  "S19798C7", // class name
  0,0,//no base classes
  &(vtc_S19798C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI8S19798C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19798C7),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  S19798C6  : virtual S19798C7 , S19798C3 , virtual S20605C3 {
  virtual void  v8(); // _ZN8S19798C62v8Ev
  ~S19798C6(); // tgen
  S19798C6(); // tgen
};
//SIG(-1 S19798C6) C1{ VBC2{ v2 v3 v4 FD Fl} BC3{ BC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc} BC5 v5 v6 FD Fp FC6{ m Fc FC7{ VBC5 FC5 Fs Fi Fc}[10]}} VBC6 v1}


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

static void Test_S19798C6()
{
  extern Class_Descriptor cd_S19798C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,139)];
    init_test(&cd_S19798C6, buf);
    S19798C6 *dp, &lv = *(dp=new (buf) S19798C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,552), "sizeof(S19798C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19798C6)");
    check_base_class_offset(lv, (S19798C7*), ABISELECT(384,284), "S19798C6");
    check_base_class_offset(lv, (S20605C5*)(S19798C4*)(S19798C3*), ABISELECT(424,304), "S19798C6");
    check_base_class_offset(lv, (S19798C4*)(S19798C3*), 0, "S19798C6");
    /*is_ambiguous_... S19798C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19798C3*), ABISELECT(22,18), "S19798C6");
    check_base_class_offset(lv, (S19798C3*), 0, "S19798C6");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(432,308), "S19798C6");
    test_class_info(&lv, &cd_S19798C6);
    dp->~S19798C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19798C6(Test_S19798C6, "S19798C6", ABISELECT(768,552));

#else // __cplusplus

extern void _ZN8S19798C6C1Ev();
extern void _ZN8S19798C6D1Ev();
Name_Map name_map_S19798C6[] = {
  NSPAIR(_ZN8S19798C6C1Ev),
  NSPAIR(_ZN8S19798C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19798C7;
extern VTBL_ENTRY _ZTI8S19798C7[];
extern  VTBL_ENTRY _ZTV8S19798C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C4;
extern VTBL_ENTRY _ZTI8S19798C4[];
extern  VTBL_ENTRY _ZTV8S19798C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C3;
extern VTBL_ENTRY _ZTI8S19798C3[];
extern  VTBL_ENTRY _ZTV8S19798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S19798C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19798C7,    ABISELECT(384,284), //bcp->offset
    8, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(424,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19798C4,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19798C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C3,    ABISELECT(432,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19798C6[];
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY vtc_S19798C6[] = {
  ABISELECT(432,308),
  ABISELECT(384,284),
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
extern VTBL_ENTRY _ZTV8S19798C6[];
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C3__8S19798C6[] = {
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C3[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C48S19798C3__8S19798C6[] = {
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C4[0]),
};
static  VTT_ENTRY vtt_S19798C6[] = {
  {&(_ZTV8S19798C6[5]),  5,16},
  {&(_tg__ZTV8S19798C3__8S19798C6[3]),  3,5},
  {&(_tg__ZTV8S19798C48S19798C3__8S19798C6[3]),  3,3},
  {&(_ZTV8S19798C6[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S19798C6[];
extern  VTBL_ENTRY _ZTV8S19798C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C6[];
Class_Descriptor cd_S19798C6 = {  "S19798C6", // class name
  bases_S19798C6, 6,
  &(vtc_S19798C6[0]), // expected_vtbl_contents
  &(vtt_S19798C6[0]), // expected_vtt_contents
  ABISELECT(768,552), // object size
  NSPAIRA(_ZTI8S19798C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19798C6),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19798C6),4, //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  S19798C9  : virtual S19798C7 , virtual S20605C3 {
  int s19798c9f0;
  ~S19798C9(); // tgen
  S19798C9(); // tgen
};
//SIG(-1 S19798C9) C1{ VBC2{ v1 v2 v3 FD Fl} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S19798C9()
{
  extern Class_Descriptor cd_S19798C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,69)];
    init_test(&cd_S19798C9, buf);
    S19798C9 *dp, &lv = *(dp=new (buf) S19798C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,272), "sizeof(S19798C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19798C9)");
    check_base_class_offset(lv, (S19798C7*), ABISELECT(16,8), "S19798C9");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,28), "S19798C9");
    check_field_offset(lv, s19798c9f0, ABISELECT(8,4), "S19798C9.s19798c9f0");
    test_class_info(&lv, &cd_S19798C9);
    dp->~S19798C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19798C9(Test_S19798C9, "S19798C9", ABISELECT(384,272));

#else // __cplusplus

extern void _ZN8S19798C9C1Ev();
extern void _ZN8S19798C9D1Ev();
Name_Map name_map_S19798C9[] = {
  NSPAIR(_ZN8S19798C9C1Ev),
  NSPAIR(_ZN8S19798C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19798C7;
extern VTBL_ENTRY _ZTI8S19798C7[];
extern  VTBL_ENTRY _ZTV8S19798C7[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S19798C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19798C7,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19798C9[];
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY vtc_S19798C9[] = {
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C9[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19798C9[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
extern VTBL_ENTRY _ZTV8S19798C9[];
static  VTT_ENTRY vtt_S19798C9[] = {
  {&(_ZTV8S19798C9[4]),  4,12},
  {&(_ZTV8S19798C9[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S19798C9[];
extern  VTBL_ENTRY _ZTV8S19798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C9[];
Class_Descriptor cd_S19798C9 = {  "S19798C9", // class name
  bases_S19798C9, 2,
  &(vtc_S19798C9[0]), // expected_vtbl_contents
  &(vtt_S19798C9[0]), // expected_vtt_contents
  ABISELECT(384,272), // object size
  NSPAIRA(_ZTI8S19798C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19798C9),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19798C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19798C8  : virtual S19798C7 , virtual S20605C3 , virtual S19798C9 , S19798C6 {
  char  :0;
  ~S19798C8(); // tgen
  S19798C8(); // tgen
};
//SIG(-1 S19798C8) C1{ VBC2{ v1 v2 v3 FD Fl} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} VBC6{ VBC2 VBC3 Fi} BC7{ VBC2 BC8{ BC9{ VBC5 FC5 Fs Fi Fc} BC5 v4 v5 FD Fp FC3} VBC3 v6} Fc:0}


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

static void Test_S19798C8()
{
  extern Class_Descriptor cd_S19798C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,141)];
    init_test(&cd_S19798C8, buf);
    S19798C8 *dp, &lv = *(dp=new (buf) S19798C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,560), "sizeof(S19798C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19798C8)");
    check_base_class_offset(lv, (S19798C7*), ABISELECT(384,284), "S19798C8");
    check_base_class_offset(lv, (S19798C7*)(S19798C9*), ABISELECT(384,284), "S19798C8");
    check_base_class_offset(lv, (S19798C7*)(S19798C6*), ABISELECT(384,284), "S19798C8");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(424,304), "S19798C8");
    check_base_class_offset(lv, (S20605C3*)(S19798C9*), ABISELECT(424,304), "S19798C8");
    check_base_class_offset(lv, (S20605C3*)(S19798C6*), ABISELECT(424,304), "S19798C8");
    check_base_class_offset(lv, (S19798C9*), ABISELECT(752,548), "S19798C8");
    check_base_class_offset(lv, (S20605C5*)(S19798C4*)(S19798C3*)(S19798C6*), ABISELECT(764,556), "S19798C8");
    check_base_class_offset(lv, (S19798C4*)(S19798C3*)(S19798C6*), 0, "S19798C8");
    /*is_ambiguous_... S19798C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19798C3*)(S19798C6*), ABISELECT(22,18), "S19798C8");
    check_base_class_offset(lv, (S19798C3*)(S19798C6*), 0, "S19798C8");
    check_base_class_offset(lv, (S19798C6*), 0, "S19798C8");
    test_class_info(&lv, &cd_S19798C8);
    dp->~S19798C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19798C8(Test_S19798C8, "S19798C8", ABISELECT(768,560));

#else // __cplusplus

extern void _ZN8S19798C8C1Ev();
extern void _ZN8S19798C8D1Ev();
Name_Map name_map_S19798C8[] = {
  NSPAIR(_ZN8S19798C8C1Ev),
  NSPAIR(_ZN8S19798C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19798C7;
extern VTBL_ENTRY _ZTI8S19798C7[];
extern  VTBL_ENTRY _ZTV8S19798C7[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S19798C9;
extern VTBL_ENTRY _ZTI8S19798C9[];
extern  VTBL_ENTRY _ZTV8S19798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C9[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C4;
extern VTBL_ENTRY _ZTI8S19798C4[];
extern  VTBL_ENTRY _ZTV8S19798C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C3;
extern VTBL_ENTRY _ZTI8S19798C3[];
extern  VTBL_ENTRY _ZTV8S19798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C3[];
extern Class_Descriptor cd_S19798C6;
extern VTBL_ENTRY _ZTI8S19798C6[];
extern  VTBL_ENTRY _ZTV8S19798C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C6[];
static Base_Class bases_S19798C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19798C7,    ABISELECT(384,284), //bcp->offset
    9, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(424,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19798C9,    ABISELECT(752,548), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(764,556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19798C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19798C3,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19798C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19798C8[];
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY vtc_S19798C8[] = {
  ABISELECT(752,548),
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C8[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19798C8[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  ABISELECT(-752,-548),
  (VTBL_ENTRY)&(_ZTI8S19798C8[0]),
};
extern VTBL_ENTRY _ZTV8S19798C8[];
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C6__8S19798C8[] = {
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
};
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C38S19798C6__8S19798C8[] = {
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C3[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C48S19798C38S19798C6__8S19798C8[] = {
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C4[0]),
};
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C7__8S19798C6__8S19798C8[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C9__8S19798C8[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C9[0]),
};
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C7__8S19798C9__8S19798C8[] = {
  0,
  0,
  0,
  ABISELECT(368,264),
  (VTBL_ENTRY)&(_ZTI8S19798C9[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
static  VTT_ENTRY vtt_S19798C8[] = {
  {&(_ZTV8S19798C8[6]),  6,21},
  {&(_tg__ZTV8S19798C6__8S19798C8[5]),  5,8},
  {&(_tg__ZTV8S19798C38S19798C6__8S19798C8[3]),  3,5},
  {&(_tg__ZTV8S19798C48S19798C38S19798C6__8S19798C8[3]),  3,3},
  {&(_tg__ZTV8S19798C7__8S19798C6__8S19798C8[5]),  5,8},
  {&(_ZTV8S19798C8[14]),  14,21},
  {&(_ZTV8S19798C8[21]),  21,21},
  {&(_tg__ZTV8S19798C9__8S19798C8[4]),  4,4},
  {&(_tg__ZTV8S19798C7__8S19798C9__8S19798C8[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19798C8[];
extern  VTBL_ENTRY _ZTV8S19798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C8[];
Class_Descriptor cd_S19798C8 = {  "S19798C8", // class name
  bases_S19798C8, 8,
  &(vtc_S19798C8[0]), // expected_vtbl_contents
  &(vtt_S19798C8[0]), // expected_vtt_contents
  ABISELECT(768,560), // object size
  NSPAIRA(_ZTI8S19798C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19798C8),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19798C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19798C1  : virtual S20605C5 , virtual S19798C3 , virtual S19798C6 , S19798C8 {
  int s19798c1f0;
  ::S19798C7 s19798c1f1;
  int s19798c1f2;
  virtual void  v1(); // _ZN8S19798C12v1Ev
  virtual void  v2(); // _ZN8S19798C12v2Ev
  ~S19798C1(); // tgen
  S19798C1(); // tgen
};
//SIG(1 S19798C1) C1{ VBC2{ m Fs[2]} VBC3{ BC4{ VBC2 FC2 Fs Fi Fc} BC2 v3 v4 FD Fp FC5{ m Fc FC6{ VBC2 FC2 Fs Fi Fc}[10]}} VBC7{ VBC8{ v5 v6 v7 FD Fl} BC3 VBC5 v8} BC9{ VBC8 VBC5 VBC10{ VBC8 VBC5 Fi} BC7 Fc:0} v1 v2 Fi FC8 Fi}


void  S19798C1 ::v1(){vfunc_called(this, "_ZN8S19798C12v1Ev");}
void  S19798C1 ::v2(){vfunc_called(this, "_ZN8S19798C12v2Ev");}
S19798C1 ::~S19798C1(){ note_dtor("S19798C1", this);} // tgen
S19798C1 ::S19798C1(){ note_ctor("S19798C1", this);} // tgen

static void Test_S19798C1()
{
  extern Class_Descriptor cd_S19798C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(102,290)];
    init_test(&cd_S19798C1, buf);
    S19798C1 *dp, &lv = *(dp=new (buf) S19798C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1616,1156), "sizeof(S19798C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19798C1)");
    /*is_ambiguous_... S19798C1::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(452,312), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C3 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19798C4*)(S19798C3*), ABISELECT(452,312), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19798C4*)(S19798C3*)(S19798C6*), ABISELECT(452,312), "S19798C1");
    check_base_class_offset(lv, (S20605C5*)(S19798C4*)(S19798C3*)(S19798C6*)(S19798C8*), ABISELECT(452,312), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C3 */ AMB_check_base_class_offset(lv, (S19798C4*)(S19798C3*), ABISELECT(464,316), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C3 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19798C3*), ABISELECT(486,334), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C3 */ AMB_check_base_class_offset(lv, (S19798C3*), ABISELECT(464,316), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C6 */ AMB_check_base_class_offset(lv, (S19798C7*)(S19798C6*), ABISELECT(1232,884), "S19798C1");
    check_base_class_offset(lv, (S19798C7*)(S19798C8*), ABISELECT(1232,884), "S19798C1");
    check_base_class_offset(lv, (S19798C7*)(S19798C9*), ABISELECT(1232,884), "S19798C1");
    check_base_class_offset(lv, (S19798C7*)(S19798C6*)(S19798C8*), ABISELECT(1232,884), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C6 */ AMB_check_base_class_offset(lv, (S19798C4*)(S19798C3*)(S19798C6*), ABISELECT(848,600), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C6 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19798C3*)(S19798C6*), ABISELECT(870,618), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C6 */ AMB_check_base_class_offset(lv, (S19798C3*)(S19798C6*), ABISELECT(848,600), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C6 */ AMB_check_base_class_offset(lv, (S20605C3*)(S19798C6*), ABISELECT(1272,904), "S19798C1");
    check_base_class_offset(lv, (S20605C3*)(S19798C8*), ABISELECT(1272,904), "S19798C1");
    check_base_class_offset(lv, (S20605C3*)(S19798C9*), ABISELECT(1272,904), "S19798C1");
    check_base_class_offset(lv, (S20605C3*)(S19798C6*)(S19798C8*), ABISELECT(1272,904), "S19798C1");
    /*is_ambiguous_... S19798C1::S19798C6 */ AMB_check_base_class_offset(lv, (S19798C6*), ABISELECT(848,600), "S19798C1");
    check_base_class_offset(lv, (S19798C9*)(S19798C8*), ABISELECT(1600,1148), "S19798C1");
    check_base_class_offset(lv, (S19798C4*)(S19798C3*)(S19798C6*)(S19798C8*), 0, "S19798C1");
    /*is_ambiguous_... S19798C3::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S19798C3*)(S19798C6*)(S19798C8*), ABISELECT(22,18), "S19798C1");
    check_base_class_offset(lv, (S19798C3*)(S19798C6*)(S19798C8*), 0, "S19798C1");
    check_base_class_offset(lv, (S19798C6*)(S19798C8*), 0, "S19798C1");
    check_base_class_offset(lv, (S19798C8*), 0, "S19798C1");
    check_field_offset(lv, s19798c1f0, ABISELECT(384,284), "S19798C1.s19798c1f0");
    check_field_offset(lv, s19798c1f1, ABISELECT(400,288), "S19798C1.s19798c1f1");
    check_field_offset(lv, s19798c1f2, ABISELECT(448,308), "S19798C1.s19798c1f2");
    test_class_info(&lv, &cd_S19798C1);
    dp->~S19798C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19798C1(Test_S19798C1, "S19798C1", ABISELECT(1616,1156));

#else // __cplusplus

extern void _ZN8S19798C1C1Ev();
extern void _ZN8S19798C1D1Ev();
Name_Map name_map_S19798C1[] = {
  NSPAIR(_ZN8S19798C1C1Ev),
  NSPAIR(_ZN8S19798C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C4;
extern VTBL_ENTRY _ZTI8S19798C4[];
extern  VTBL_ENTRY _ZTV8S19798C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C3;
extern VTBL_ENTRY _ZTI8S19798C3[];
extern  VTBL_ENTRY _ZTV8S19798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C3[];
extern Class_Descriptor cd_S19798C7;
extern VTBL_ENTRY _ZTI8S19798C7[];
extern  VTBL_ENTRY _ZTV8S19798C7[];
extern Class_Descriptor cd_S19798C4;
extern VTBL_ENTRY _ZTI8S19798C4[];
extern  VTBL_ENTRY _ZTV8S19798C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C3;
extern VTBL_ENTRY _ZTI8S19798C3[];
extern  VTBL_ENTRY _ZTV8S19798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S19798C6;
extern VTBL_ENTRY _ZTI8S19798C6[];
extern  VTBL_ENTRY _ZTV8S19798C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C6[];
extern Class_Descriptor cd_S19798C9;
extern VTBL_ENTRY _ZTI8S19798C9[];
extern  VTBL_ENTRY _ZTV8S19798C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C9[];
extern Class_Descriptor cd_S19798C4;
extern VTBL_ENTRY _ZTI8S19798C4[];
extern  VTBL_ENTRY _ZTV8S19798C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C4[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S19798C3;
extern VTBL_ENTRY _ZTI8S19798C3[];
extern  VTBL_ENTRY _ZTV8S19798C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C3[];
extern Class_Descriptor cd_S19798C6;
extern VTBL_ENTRY _ZTI8S19798C6[];
extern  VTBL_ENTRY _ZTV8S19798C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C6[];
extern Class_Descriptor cd_S19798C8;
extern VTBL_ENTRY _ZTI8S19798C8[];
extern  VTBL_ENTRY _ZTV8S19798C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C8[];
static Base_Class bases_S19798C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(452,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19798C4,    ABISELECT(464,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(486,334), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19798C3,    ABISELECT(464,316), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19798C7,    ABISELECT(1232,884), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19798C4,    ABISELECT(848,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(870,618), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19798C3,    ABISELECT(848,600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20605C3,    ABISELECT(1272,904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19798C6,    ABISELECT(848,600), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19798C9,    ABISELECT(1600,1148), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19798C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19798C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19798C6,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19798C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19798C1[];
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
extern void _ZN8S19798C12v1Ev();
extern void _ZN8S19798C12v2Ev();
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY vtc_S19798C1[] = {
  ABISELECT(848,600),
  ABISELECT(464,316),
  ABISELECT(1600,1148),
  ABISELECT(1272,904),
  ABISELECT(1232,884),
  ABISELECT(452,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C1[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19798C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19798C12v2Ev,
  0,
  0,
  ABISELECT(-12,-4),
  ABISELECT(-464,-316),
  (VTBL_ENTRY)&(_ZTI8S19798C1[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  0,
  0,
  0,
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(-396,-288),
  ABISELECT(-848,-600),
  (VTBL_ENTRY)&(_ZTI8S19798C1[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
  0,
  0,
  0,
  ABISELECT(-1232,-884),
  (VTBL_ENTRY)&(_ZTI8S19798C1[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  ABISELECT(-1600,-1148),
  (VTBL_ENTRY)&(_ZTI8S19798C1[0]),
};
extern VTBL_ENTRY _ZTV8S19798C1[];
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C8__8S19798C1[] = {
  ABISELECT(1600,1148),
  ABISELECT(1272,904),
  ABISELECT(1232,884),
  ABISELECT(452,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C8[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
};
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C68S19798C8__A1__8S19798C1[] = {
  ABISELECT(1272,904),
  ABISELECT(1232,884),
  ABISELECT(452,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
};
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C38S19798C68S19798C8__A2__8S19798C1[] = {
  ABISELECT(452,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C3[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C48S19798C38S19798C68S19798C8__A2__8S19798C1[] = {
  ABISELECT(452,312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C4[0]),
};
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C7__8S19798C68S19798C8__A1__8S19798C1[] = {
  0,
  0,
  0,
  ABISELECT(-1232,-884),
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C7__8S19798C8__8S19798C1[] = {
  0,
  0,
  0,
  ABISELECT(-1232,-884),
  (VTBL_ENTRY)&(_ZTI8S19798C8[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C9__8S19798C8__8S19798C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  ABISELECT(-1600,-1148),
  (VTBL_ENTRY)&(_ZTI8S19798C8[0]),
};
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C3__8S19798C1[] = {
  ABISELECT(-12,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C3[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C48S19798C3__8S19798C1[] = {
  ABISELECT(-12,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C4[0]),
};
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
extern void _ZN8S19798C62v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C6__8S19798C1[] = {
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(-396,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19798C62v8Ev,
};
extern void _ZN8S19798C32v3Ev();
extern void _ZN8S19798C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C38S19798C6__A1__8S19798C1[] = {
  ABISELECT(-396,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C3[0]),
  (VTBL_ENTRY)&_ZN8S19798C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19798C32v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C48S19798C38S19798C6__A1__8S19798C1[] = {
  ABISELECT(-396,-288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C4[0]),
};
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C7__8S19798C6__8S19798C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S19798C6[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19798C9__8S19798C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19798C9[0]),
};
extern void _ZN8S19798C72v5Ev();
extern void _ZN8S19798C72v6Ev();
extern void _ZN8S19798C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S19798C7__8S19798C9__8S19798C1[] = {
  0,
  0,
  0,
  ABISELECT(368,264),
  (VTBL_ENTRY)&(_ZTI8S19798C9[0]),
  (VTBL_ENTRY)&_ZN8S19798C72v5Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v6Ev,
  (VTBL_ENTRY)&_ZN8S19798C72v7Ev,
};
static  VTT_ENTRY vtt_S19798C1[] = {
  {&(_ZTV8S19798C1[8]),  8,43},
  {&(_tg__ZTV8S19798C8__8S19798C1[6]),  6,9},
  {&(_tg__ZTV8S19798C68S19798C8__A1__8S19798C1[5]),  5,8},
  {&(_tg__ZTV8S19798C38S19798C68S19798C8__A2__8S19798C1[3]),  3,5},
  {&(_tg__ZTV8S19798C48S19798C38S19798C68S19798C8__A2__8S19798C1[3]),  3,3},
  {&(_tg__ZTV8S19798C7__8S19798C68S19798C8__A1__8S19798C1[5]),  5,8},
  {&(_tg__ZTV8S19798C7__8S19798C8__8S19798C1[5]),  5,8},
  {&(_tg__ZTV8S19798C9__8S19798C8__8S19798C1[4]),  4,4},
  {&(_ZTV8S19798C1[18]),  18,43},
  {&(_ZTV8S19798C1[28]),  28,43},
  {&(_ZTV8S19798C1[36]),  36,43},
  {&(_ZTV8S19798C1[43]),  43,43},
  {&(_tg__ZTV8S19798C3__8S19798C1[3]),  3,5},
  {&(_tg__ZTV8S19798C48S19798C3__8S19798C1[3]),  3,3},
  {&(_tg__ZTV8S19798C6__8S19798C1[5]),  5,8},
  {&(_tg__ZTV8S19798C38S19798C6__A1__8S19798C1[3]),  3,5},
  {&(_tg__ZTV8S19798C48S19798C38S19798C6__A1__8S19798C1[3]),  3,3},
  {&(_tg__ZTV8S19798C7__8S19798C6__8S19798C1[5]),  5,8},
  {&(_tg__ZTV8S19798C9__8S19798C1[4]),  4,4},
  {&(_tg__ZTV8S19798C7__8S19798C9__8S19798C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19798C1[];
extern  VTBL_ENTRY _ZTV8S19798C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19798C1[];
Class_Descriptor cd_S19798C1 = {  "S19798C1", // class name
  bases_S19798C1, 16,
  &(vtc_S19798C1[0]), // expected_vtbl_contents
  &(vtt_S19798C1[0]), // expected_vtt_contents
  ABISELECT(1616,1156), // object size
  NSPAIRA(_ZTI8S19798C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19798C1),43, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19798C1),20, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5169C3  {
  virtual  ~S5169C3(); // _ZN7S5169C3D1Ev
  virtual void  v4(); // _ZN7S5169C32v4Ev
  virtual void  v5(); // _ZN7S5169C32v5Ev
  virtual void  v6(); // _ZN7S5169C32v6Ev
  virtual void  v7(); // _ZN7S5169C32v7Ev
  virtual void  v8(); // _ZN7S5169C32v8Ev
  virtual void  v9(); // _ZN7S5169C32v9Ev
  virtual void  v10(); // _ZN7S5169C33v10Ev
  virtual void  v11(); // _ZN7S5169C33v11Ev
  virtual void  v12(); // _ZN7S5169C33v12Ev
  virtual void  v13(); // _ZN7S5169C33v13Ev
  virtual void  v14(); // _ZN7S5169C33v14Ev
  virtual void  v15(); // _ZN7S5169C33v15Ev
  virtual void  v16(); // _ZN7S5169C33v16Ev
  virtual void  v17(); // _ZN7S5169C33v17Ev
  S5169C3(); // tgen
};
//SIG(-1 S5169C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14}


 S5169C3 ::~S5169C3(){ note_dtor("S5169C3", this);}
void  S5169C3 ::v4(){vfunc_called(this, "_ZN7S5169C32v4Ev");}
void  S5169C3 ::v5(){vfunc_called(this, "_ZN7S5169C32v5Ev");}
void  S5169C3 ::v6(){vfunc_called(this, "_ZN7S5169C32v6Ev");}
void  S5169C3 ::v7(){vfunc_called(this, "_ZN7S5169C32v7Ev");}
void  S5169C3 ::v8(){vfunc_called(this, "_ZN7S5169C32v8Ev");}
void  S5169C3 ::v9(){vfunc_called(this, "_ZN7S5169C32v9Ev");}
void  S5169C3 ::v10(){vfunc_called(this, "_ZN7S5169C33v10Ev");}
void  S5169C3 ::v11(){vfunc_called(this, "_ZN7S5169C33v11Ev");}
void  S5169C3 ::v12(){vfunc_called(this, "_ZN7S5169C33v12Ev");}
void  S5169C3 ::v13(){vfunc_called(this, "_ZN7S5169C33v13Ev");}
void  S5169C3 ::v14(){vfunc_called(this, "_ZN7S5169C33v14Ev");}
void  S5169C3 ::v15(){vfunc_called(this, "_ZN7S5169C33v15Ev");}
void  S5169C3 ::v16(){vfunc_called(this, "_ZN7S5169C33v16Ev");}
void  S5169C3 ::v17(){vfunc_called(this, "_ZN7S5169C33v17Ev");}
S5169C3 ::S5169C3(){ note_ctor("S5169C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S5169C3C1Ev();
extern void _ZN7S5169C3D1Ev();
Name_Map name_map_S5169C3[] = {
  NSPAIR(_ZN7S5169C3C1Ev),
  NSPAIR(_ZN7S5169C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5169C3[];
extern void _ZN7S5169C3D1Ev();
extern void _ZN7S5169C3D0Ev();
extern void _ZN7S5169C32v4Ev();
extern void _ZN7S5169C32v5Ev();
extern void _ZN7S5169C32v6Ev();
extern void _ZN7S5169C32v7Ev();
extern void _ZN7S5169C32v8Ev();
extern void _ZN7S5169C32v9Ev();
extern void _ZN7S5169C33v10Ev();
extern void _ZN7S5169C33v11Ev();
extern void _ZN7S5169C33v12Ev();
extern void _ZN7S5169C33v13Ev();
extern void _ZN7S5169C33v14Ev();
extern void _ZN7S5169C33v15Ev();
extern void _ZN7S5169C33v16Ev();
extern void _ZN7S5169C33v17Ev();
static  VTBL_ENTRY vtc_S5169C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5169C3[0]),
  (VTBL_ENTRY)&_ZN7S5169C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5169C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v17Ev,
};
extern VTBL_ENTRY _ZTI7S5169C3[];
extern  VTBL_ENTRY _ZTV7S5169C3[];
Class_Descriptor cd_S5169C3 = {  "S5169C3", // class name
  0,0,//no base classes
  &(vtc_S5169C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5169C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5169C3),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5169C2  : S5169C3 {
  ::S15482C4 s5169c2f0;
  virtual  ~S5169C2(); // _ZN7S5169C2D1Ev
  virtual void  v18(); // _ZN7S5169C23v18Ev
  virtual void  v19(); // _ZN7S5169C23v19Ev
  virtual void  v20(); // _ZN7S5169C23v20Ev
  virtual void  v21(); // _ZN7S5169C23v21Ev
  virtual void  v22(); // _ZN7S5169C23v22Ev
  virtual void  v23(); // _ZN7S5169C23v23Ev
  virtual void  v24(); // _ZN7S5169C23v24Ev
  virtual void  v25(); // _ZN7S5169C23v25Ev
  virtual void  v26(); // _ZN7S5169C23v26Ev
  virtual void  v27(); // _ZN7S5169C23v27Ev
  virtual void  v28(); // _ZN7S5169C23v28Ev
  virtual void  v29(); // _ZN7S5169C23v29Ev
  virtual void  v30(); // _ZN7S5169C23v30Ev
  virtual void  v31(); // _ZN7S5169C23v31Ev
  S5169C2(); // tgen
};
//SIG(-1 S5169C2) C1{ BC2{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 FC3{ FC4{ BC5{ m Fc[16]}}}}


 S5169C2 ::~S5169C2(){ note_dtor("S5169C2", this);}
void  S5169C2 ::v18(){vfunc_called(this, "_ZN7S5169C23v18Ev");}
void  S5169C2 ::v19(){vfunc_called(this, "_ZN7S5169C23v19Ev");}
void  S5169C2 ::v20(){vfunc_called(this, "_ZN7S5169C23v20Ev");}
void  S5169C2 ::v21(){vfunc_called(this, "_ZN7S5169C23v21Ev");}
void  S5169C2 ::v22(){vfunc_called(this, "_ZN7S5169C23v22Ev");}
void  S5169C2 ::v23(){vfunc_called(this, "_ZN7S5169C23v23Ev");}
void  S5169C2 ::v24(){vfunc_called(this, "_ZN7S5169C23v24Ev");}
void  S5169C2 ::v25(){vfunc_called(this, "_ZN7S5169C23v25Ev");}
void  S5169C2 ::v26(){vfunc_called(this, "_ZN7S5169C23v26Ev");}
void  S5169C2 ::v27(){vfunc_called(this, "_ZN7S5169C23v27Ev");}
void  S5169C2 ::v28(){vfunc_called(this, "_ZN7S5169C23v28Ev");}
void  S5169C2 ::v29(){vfunc_called(this, "_ZN7S5169C23v29Ev");}
void  S5169C2 ::v30(){vfunc_called(this, "_ZN7S5169C23v30Ev");}
void  S5169C2 ::v31(){vfunc_called(this, "_ZN7S5169C23v31Ev");}
S5169C2 ::S5169C2(){ note_ctor("S5169C2", this);} // tgen

static void Test_S5169C2()
{
  extern Class_Descriptor cd_S5169C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S5169C2, buf);
    S5169C2 *dp, &lv = *(dp=new (buf) S5169C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S5169C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5169C2)");
    check_base_class_offset(lv, (S5169C3*), 0, "S5169C2");
    check_field_offset(lv, s5169c2f0, ABISELECT(8,4), "S5169C2.s5169c2f0");
    test_class_info(&lv, &cd_S5169C2);
    dp->~S5169C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5169C2(Test_S5169C2, "S5169C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S5169C2C1Ev();
extern void _ZN7S5169C2D1Ev();
Name_Map name_map_S5169C2[] = {
  NSPAIR(_ZN7S5169C2C1Ev),
  NSPAIR(_ZN7S5169C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5169C3;
extern VTBL_ENTRY _ZTI7S5169C3[];
extern  VTBL_ENTRY _ZTV7S5169C3[];
static Base_Class bases_S5169C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5169C2[];
extern void _ZN7S5169C2D1Ev();
extern void _ZN7S5169C2D0Ev();
extern void _ZN7S5169C32v4Ev();
extern void _ZN7S5169C32v5Ev();
extern void _ZN7S5169C32v6Ev();
extern void _ZN7S5169C32v7Ev();
extern void _ZN7S5169C32v8Ev();
extern void _ZN7S5169C32v9Ev();
extern void _ZN7S5169C33v10Ev();
extern void _ZN7S5169C33v11Ev();
extern void _ZN7S5169C33v12Ev();
extern void _ZN7S5169C33v13Ev();
extern void _ZN7S5169C33v14Ev();
extern void _ZN7S5169C33v15Ev();
extern void _ZN7S5169C33v16Ev();
extern void _ZN7S5169C33v17Ev();
extern void _ZN7S5169C23v18Ev();
extern void _ZN7S5169C23v19Ev();
extern void _ZN7S5169C23v20Ev();
extern void _ZN7S5169C23v21Ev();
extern void _ZN7S5169C23v22Ev();
extern void _ZN7S5169C23v23Ev();
extern void _ZN7S5169C23v24Ev();
extern void _ZN7S5169C23v25Ev();
extern void _ZN7S5169C23v26Ev();
extern void _ZN7S5169C23v27Ev();
extern void _ZN7S5169C23v28Ev();
extern void _ZN7S5169C23v29Ev();
extern void _ZN7S5169C23v30Ev();
extern void _ZN7S5169C23v31Ev();
static  VTBL_ENTRY vtc_S5169C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5169C2[0]),
  (VTBL_ENTRY)&_ZN7S5169C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5169C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v28Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v29Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v30Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v31Ev,
};
extern VTBL_ENTRY _ZTI7S5169C2[];
extern  VTBL_ENTRY _ZTV7S5169C2[];
Class_Descriptor cd_S5169C2 = {  "S5169C2", // class name
  bases_S5169C2, 1,
  &(vtc_S5169C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S5169C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5169C2),32, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5169C1  : S5169C2 {
  virtual  ~S5169C1(); // _ZN7S5169C1D1Ev
  virtual void  v1(); // _ZN7S5169C12v1Ev
  virtual void  v2(); // _ZN7S5169C12v2Ev
  virtual void  v3(); // _ZN7S5169C12v3Ev
  S5169C1(); // tgen
};
//SIG(1 S5169C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17} vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 FC4{ FC5{ BC6{ m Fc[16]}}}} vd v1 v2 v3}


 S5169C1 ::~S5169C1(){ note_dtor("S5169C1", this);}
void  S5169C1 ::v1(){vfunc_called(this, "_ZN7S5169C12v1Ev");}
void  S5169C1 ::v2(){vfunc_called(this, "_ZN7S5169C12v2Ev");}
void  S5169C1 ::v3(){vfunc_called(this, "_ZN7S5169C12v3Ev");}
S5169C1 ::S5169C1(){ note_ctor("S5169C1", this);} // tgen

static void Test_S5169C1()
{
  extern Class_Descriptor cd_S5169C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S5169C1, buf);
    S5169C1 *dp, &lv = *(dp=new (buf) S5169C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S5169C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5169C1)");
    check_base_class_offset(lv, (S5169C3*)(S5169C2*), 0, "S5169C1");
    check_base_class_offset(lv, (S5169C2*), 0, "S5169C1");
    test_class_info(&lv, &cd_S5169C1);
    dp->~S5169C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5169C1(Test_S5169C1, "S5169C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S5169C1C1Ev();
extern void _ZN7S5169C1D1Ev();
Name_Map name_map_S5169C1[] = {
  NSPAIR(_ZN7S5169C1C1Ev),
  NSPAIR(_ZN7S5169C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5169C3;
extern VTBL_ENTRY _ZTI7S5169C3[];
extern  VTBL_ENTRY _ZTV7S5169C3[];
extern Class_Descriptor cd_S5169C2;
extern VTBL_ENTRY _ZTI7S5169C2[];
extern  VTBL_ENTRY _ZTV7S5169C2[];
static Base_Class bases_S5169C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5169C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5169C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5169C1[];
extern void _ZN7S5169C1D1Ev();
extern void _ZN7S5169C1D0Ev();
extern void _ZN7S5169C32v4Ev();
extern void _ZN7S5169C32v5Ev();
extern void _ZN7S5169C32v6Ev();
extern void _ZN7S5169C32v7Ev();
extern void _ZN7S5169C32v8Ev();
extern void _ZN7S5169C32v9Ev();
extern void _ZN7S5169C33v10Ev();
extern void _ZN7S5169C33v11Ev();
extern void _ZN7S5169C33v12Ev();
extern void _ZN7S5169C33v13Ev();
extern void _ZN7S5169C33v14Ev();
extern void _ZN7S5169C33v15Ev();
extern void _ZN7S5169C33v16Ev();
extern void _ZN7S5169C33v17Ev();
extern void _ZN7S5169C23v18Ev();
extern void _ZN7S5169C23v19Ev();
extern void _ZN7S5169C23v20Ev();
extern void _ZN7S5169C23v21Ev();
extern void _ZN7S5169C23v22Ev();
extern void _ZN7S5169C23v23Ev();
extern void _ZN7S5169C23v24Ev();
extern void _ZN7S5169C23v25Ev();
extern void _ZN7S5169C23v26Ev();
extern void _ZN7S5169C23v27Ev();
extern void _ZN7S5169C23v28Ev();
extern void _ZN7S5169C23v29Ev();
extern void _ZN7S5169C23v30Ev();
extern void _ZN7S5169C23v31Ev();
extern void _ZN7S5169C12v1Ev();
extern void _ZN7S5169C12v2Ev();
extern void _ZN7S5169C12v3Ev();
static  VTBL_ENTRY vtc_S5169C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5169C1[0]),
  (VTBL_ENTRY)&_ZN7S5169C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5169C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5169C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v13Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v14Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v15Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v16Ev,
  (VTBL_ENTRY)&_ZN7S5169C33v17Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v18Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v19Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v20Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v21Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v22Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v23Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v24Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v25Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v26Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v27Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v28Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v29Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v30Ev,
  (VTBL_ENTRY)&_ZN7S5169C23v31Ev,
  (VTBL_ENTRY)&_ZN7S5169C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5169C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5169C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5169C1[];
extern  VTBL_ENTRY _ZTV7S5169C1[];
Class_Descriptor cd_S5169C1 = {  "S5169C1", // class name
  bases_S5169C1, 2,
  &(vtc_S5169C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S5169C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5169C1),35, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8896C2_nt  {
  void *s8896c2f0[2];
  virtual  ~S8896C2_nt(); // _ZN10S8896C2_ntD1Ev
  virtual void  v2(); // _ZN10S8896C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8896C2_nt2v3Ev
  S8896C2_nt(); // tgen
};
//SIG(-1 S8896C2_nt) C1{ vd v1 v2 Fp[2]}


 S8896C2_nt ::~S8896C2_nt(){ note_dtor("S8896C2_nt", this);}
void  S8896C2_nt ::v2(){vfunc_called(this, "_ZN10S8896C2_nt2v2Ev");}
void  S8896C2_nt ::v3(){vfunc_called(this, "_ZN10S8896C2_nt2v3Ev");}
S8896C2_nt ::S8896C2_nt(){ note_ctor("S8896C2_nt", this);} // tgen

//skip512 S8896C2_nt

#else // __cplusplus

extern void _ZN10S8896C2_ntC1Ev();
extern void _ZN10S8896C2_ntD1Ev();
Name_Map name_map_S8896C2_nt[] = {
  NSPAIR(_ZN10S8896C2_ntC1Ev),
  NSPAIR(_ZN10S8896C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8896C2_nt[];
extern void _ZN10S8896C2_ntD1Ev();
extern void _ZN10S8896C2_ntD0Ev();
extern void _ZN10S8896C2_nt2v2Ev();
extern void _ZN10S8896C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S8896C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8896C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8896C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8896C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8896C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8896C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI10S8896C2_nt[];
VTBL_ENTRY *P__ZTI10S8896C2_nt = _ZTI10S8896C2_nt; 
extern  VTBL_ENTRY _ZTV10S8896C2_nt[];
Class_Descriptor cd_S8896C2_nt = {  "S8896C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8896C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8896C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8896C2_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  S8896C6  {
  int s8896c6f0[2];
  void *s8896c6f1;
  char s8896c6f2;
  void  mf8896c6(); // _ZN7S8896C68mf8896c6Ev
};
//SIG(-1 S8896C6) C1{ m Fi[2] Fp Fc}


void  S8896C6 ::mf8896c6(){}

static void Test_S8896C6()
{
  {
    init_simple_test("S8896C6");
    S8896C6 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S8896C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8896C6)");
    check_field_offset(lv, s8896c6f0, 0, "S8896C6.s8896c6f0");
    check_field_offset(lv, s8896c6f1, 8, "S8896C6.s8896c6f1");
    check_field_offset(lv, s8896c6f2, ABISELECT(16,12), "S8896C6.s8896c6f2");
  }
}
static Arrange_To_Call_Me vS8896C6(Test_S8896C6, "S8896C6", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8896C1  : S8896C2_nt {
  void *s8896c1f0;
  char s8896c1f1;
  ::S22028C73 s8896c1f2;
  ::S22028C73 s8896c1f3;
  void *s8896c1f4;
  int s8896c1f5;
  ::S22028C26_nt s8896c1f6;
  ::S8896C6 s8896c1f7;
  ::S1707C5_nt s8896c1f8;
  void *s8896c1f9;
  int s8896c1f10;
  ::S22028C33_nt s8896c1f11;
  virtual  ~S8896C1(); // _ZN7S8896C1D1Ev
  virtual void  v1(); // _ZN7S8896C12v1Ev
  S8896C1(); // tgen
};
//SIG(1 S8896C1) C1{ BC2{ vd v2 v3 Fp[2]} vd v1 Fp Fc FC3{ m Fp[2]} FC3 Fp Fi FC4{ m Fp Fi[2] FC5{ m}} FC6{ m Fi[2] Fp Fc} FC7{ m FC4 Fp[2]} Fp Fi FC8{ m FC9{ m FL[2]}}}


 S8896C1 ::~S8896C1(){ note_dtor("S8896C1", this);}
void  S8896C1 ::v1(){vfunc_called(this, "_ZN7S8896C12v1Ev");}
S8896C1 ::S8896C1(){ note_ctor("S8896C1", this);} // tgen

static void Test_S8896C1()
{
  extern Class_Descriptor cd_S8896C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,32)];
    init_test(&cd_S8896C1, buf);
    S8896C1 *dp, &lv = *(dp=new (buf) S8896C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,124), "sizeof(S8896C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8896C1)");
    check_base_class_offset(lv, (S8896C2_nt*), 0, "S8896C1");
    check_field_offset(lv, s8896c1f0, ABISELECT(24,12), "S8896C1.s8896c1f0");
    check_field_offset(lv, s8896c1f1, ABISELECT(32,16), "S8896C1.s8896c1f1");
    check_field_offset(lv, s8896c1f2, ABISELECT(40,20), "S8896C1.s8896c1f2");
    check_field_offset(lv, s8896c1f3, ABISELECT(56,28), "S8896C1.s8896c1f3");
    check_field_offset(lv, s8896c1f4, ABISELECT(72,36), "S8896C1.s8896c1f4");
    check_field_offset(lv, s8896c1f5, ABISELECT(80,40), "S8896C1.s8896c1f5");
    check_field_offset(lv, s8896c1f6, ABISELECT(88,44), "S8896C1.s8896c1f6");
    check_field_offset(lv, s8896c1f7, ABISELECT(112,60), "S8896C1.s8896c1f7");
    check_field_offset(lv, s8896c1f8, ABISELECT(136,76), "S8896C1.s8896c1f8");
    check_field_offset(lv, s8896c1f9, ABISELECT(176,100), "S8896C1.s8896c1f9");
    check_field_offset(lv, s8896c1f10, ABISELECT(184,104), "S8896C1.s8896c1f10");
    check_field_offset(lv, s8896c1f11, ABISELECT(192,108), "S8896C1.s8896c1f11");
    test_class_info(&lv, &cd_S8896C1);
    dp->~S8896C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8896C1(Test_S8896C1, "S8896C1", ABISELECT(208,124));

#else // __cplusplus

extern void _ZN7S8896C1C1Ev();
extern void _ZN7S8896C1D1Ev();
Name_Map name_map_S8896C1[] = {
  NSPAIR(_ZN7S8896C1C1Ev),
  NSPAIR(_ZN7S8896C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8896C2_nt;
extern VTBL_ENTRY _ZTI10S8896C2_nt[];
extern  VTBL_ENTRY _ZTV10S8896C2_nt[];
static Base_Class bases_S8896C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8896C2_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 _ZTI7S8896C1[];
extern void _ZN7S8896C1D1Ev();
extern void _ZN7S8896C1D0Ev();
extern void _ZN10S8896C2_nt2v2Ev();
extern void _ZN10S8896C2_nt2v3Ev();
extern void _ZN7S8896C12v1Ev();
static  VTBL_ENTRY vtc_S8896C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8896C1[0]),
  (VTBL_ENTRY)&_ZN7S8896C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8896C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8896C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8896C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN7S8896C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8896C1[];
extern  VTBL_ENTRY _ZTV7S8896C1[];
Class_Descriptor cd_S8896C1 = {  "S8896C1", // class name
  bases_S8896C1, 1,
  &(vtc_S8896C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,124), // object size
  NSPAIRA(_ZTI7S8896C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8896C1),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  S20780C3  {
  long double s20780c3f0;
  __tsi64 s20780c3f1;
  virtual void  v1(); // _ZN8S20780C32v1Ev
  virtual void  v2(); // _ZN8S20780C32v2Ev
  virtual void  v3(); // _ZN8S20780C32v3Ev
  ~S20780C3(); // tgen
  S20780C3(); // tgen
};
//SIG(-1 S20780C3) C1{ v1 v2 v3 FD FL}


void  S20780C3 ::v1(){vfunc_called(this, "_ZN8S20780C32v1Ev");}
void  S20780C3 ::v2(){vfunc_called(this, "_ZN8S20780C32v2Ev");}
void  S20780C3 ::v3(){vfunc_called(this, "_ZN8S20780C32v3Ev");}
S20780C3 ::~S20780C3(){ note_dtor("S20780C3", this);} // tgen
S20780C3 ::S20780C3(){ note_ctor("S20780C3", this);} // tgen

static void Test_S20780C3()
{
  extern Class_Descriptor cd_S20780C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20780C3, buf);
    S20780C3 *dp, &lv = *(dp=new (buf) S20780C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20780C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20780C3)");
    check_field_offset(lv, s20780c3f0, ABISELECT(16,4), "S20780C3.s20780c3f0");
    check_field_offset(lv, s20780c3f1, ABISELECT(32,16), "S20780C3.s20780c3f1");
    test_class_info(&lv, &cd_S20780C3);
    dp->~S20780C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20780C3(Test_S20780C3, "S20780C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20780C3C1Ev();
extern void _ZN8S20780C3D1Ev();
Name_Map name_map_S20780C3[] = {
  NSPAIR(_ZN8S20780C3C1Ev),
  NSPAIR(_ZN8S20780C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20780C3[];
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY vtc_S20780C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C3[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
extern VTBL_ENTRY _ZTI8S20780C3[];
extern  VTBL_ENTRY _ZTV8S20780C3[];
Class_Descriptor cd_S20780C3 = {  "S20780C3", // class name
  0,0,//no base classes
  &(vtc_S20780C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20780C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20780C3),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  S20780C7  : virtual S20780C3 , virtual S20605C3 {
  int s20780c7f0;
  ~S20780C7(); // tgen
  S20780C7(); // tgen
};
//SIG(-1 S20780C7) C1{ VBC2{ v1 v2 v3 FD FL} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S20780C7()
{
  extern Class_Descriptor cd_S20780C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,70)];
    init_test(&cd_S20780C7, buf);
    S20780C7 *dp, &lv = *(dp=new (buf) S20780C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S20780C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20780C7)");
    check_base_class_offset(lv, (S20780C3*), ABISELECT(16,8), "S20780C7");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,32), "S20780C7");
    check_field_offset(lv, s20780c7f0, ABISELECT(8,4), "S20780C7.s20780c7f0");
    test_class_info(&lv, &cd_S20780C7);
    dp->~S20780C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20780C7(Test_S20780C7, "S20780C7", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN8S20780C7C1Ev();
extern void _ZN8S20780C7D1Ev();
Name_Map name_map_S20780C7[] = {
  NSPAIR(_ZN8S20780C7C1Ev),
  NSPAIR(_ZN8S20780C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20780C3;
extern VTBL_ENTRY _ZTI8S20780C3[];
extern  VTBL_ENTRY _ZTV8S20780C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20780C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20780C3,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20780C7[];
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY vtc_S20780C7[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C7[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20780C7[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20780C7[];
static  VTT_ENTRY vtt_S20780C7[] = {
  {&(_ZTV8S20780C7[4]),  4,12},
  {&(_ZTV8S20780C7[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S20780C7[];
extern  VTBL_ENTRY _ZTV8S20780C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C7[];
Class_Descriptor cd_S20780C7 = {  "S20780C7", // class name
  bases_S20780C7, 2,
  &(vtc_S20780C7[0]), // expected_vtbl_contents
  &(vtt_S20780C7[0]), // expected_vtt_contents
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI8S20780C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20780C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20780C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20780C5  : virtual S20605C5 {
  ::S20605C5 s20780c5f0;
  short s20780c5f1;
  int s20780c5f2;
  char s20780c5f3;
  ~S20780C5(); // tgen
  S20780C5(); // tgen
};
//SIG(-1 S20780C5) C1{ VBC2{ m Fs[2]} FC2 Fs Fi Fc}


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

static void Test_S20780C5()
{
  extern Class_Descriptor cd_S20780C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20780C5, buf);
    S20780C5 *dp, &lv = *(dp=new (buf) S20780C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20780C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20780C5)");
    check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20780C5");
    check_field_offset(lv, s20780c5f0, ABISELECT(8,4), "S20780C5.s20780c5f0");
    check_field_offset(lv, s20780c5f1, ABISELECT(12,8), "S20780C5.s20780c5f1");
    check_field_offset(lv, s20780c5f2, ABISELECT(16,12), "S20780C5.s20780c5f2");
    check_field_offset(lv, s20780c5f3, ABISELECT(20,16), "S20780C5.s20780c5f3");
    test_class_info(&lv, &cd_S20780C5);
    dp->~S20780C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20780C5(Test_S20780C5, "S20780C5", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20780C5C1Ev();
extern void _ZN8S20780C5D1Ev();
Name_Map name_map_S20780C5[] = {
  NSPAIR(_ZN8S20780C5C1Ev),
  NSPAIR(_ZN8S20780C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20780C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20780C5[];
static  VTBL_ENTRY vtc_S20780C5[] = {
  ABISELECT(22,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C5[0]),
};
extern VTBL_ENTRY _ZTV8S20780C5[];
static  VTT_ENTRY vtt_S20780C5[] = {
  {&(_ZTV8S20780C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20780C5[];
extern  VTBL_ENTRY _ZTV8S20780C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C5[];
Class_Descriptor cd_S20780C5 = {  "S20780C5", // class name
  bases_S20780C5, 1,
  &(vtc_S20780C5[0]), // expected_vtbl_contents
  &(vtt_S20780C5[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20780C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20780C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20780C5),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  S20780C9  : S20780C5 , S20605C5 {
  long double s20780c9f0;
  void *s20780c9f1;
  ::S20605C3 s20780c9f2;
  virtual void  v4(); // _ZN8S20780C92v4Ev
  virtual void  v5(); // _ZN8S20780C92v5Ev
  ~S20780C9(); // tgen
  S20780C9(); // tgen
};
//SIG(-1 S20780C9) C1{ BC2{ VBC3{ m Fs[2]} FC3 Fs Fi Fc} BC3 v1 v2 FD Fp FC4{ m Fc FC5{ VBC3 FC3 Fs Fi Fc}[10]}}


void  S20780C9 ::v4(){vfunc_called(this, "_ZN8S20780C92v4Ev");}
void  S20780C9 ::v5(){vfunc_called(this, "_ZN8S20780C92v5Ev");}
S20780C9 ::~S20780C9(){ note_dtor("S20780C9", this);} // tgen
S20780C9 ::S20780C9(){ note_ctor("S20780C9", this);} // tgen

static void Test_S20780C9()
{
  extern Class_Descriptor cd_S20780C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,73)];
    init_test(&cd_S20780C9, buf);
    S20780C9 *dp, &lv = *(dp=new (buf) S20780C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S20780C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20780C9)");
    check_base_class_offset(lv, (S20605C5*)(S20780C5*), ABISELECT(384,284), "S20780C9");
    check_base_class_offset(lv, (S20780C5*), 0, "S20780C9");
    /*is_ambiguous_... S20780C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20780C9");
    check_field_offset(lv, s20780c9f0, ABISELECT(32,24), "S20780C9.s20780c9f0");
    check_field_offset(lv, s20780c9f1, ABISELECT(48,36), "S20780C9.s20780c9f1");
    check_field_offset(lv, s20780c9f2, ABISELECT(56,40), "S20780C9.s20780c9f2");
    test_class_info(&lv, &cd_S20780C9);
    dp->~S20780C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20780C9(Test_S20780C9, "S20780C9", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN8S20780C9C1Ev();
extern void _ZN8S20780C9D1Ev();
Name_Map name_map_S20780C9[] = {
  NSPAIR(_ZN8S20780C9C1Ev),
  NSPAIR(_ZN8S20780C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20780C5;
extern VTBL_ENTRY _ZTI8S20780C5[];
extern  VTBL_ENTRY _ZTV8S20780C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20780C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(384,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20780C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20780C9[];
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
static  VTBL_ENTRY vtc_S20780C9[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C9[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
};
extern VTBL_ENTRY _ZTV8S20780C9[];
static  VTBL_ENTRY _tg__ZTV8S20780C5__8S20780C9[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C5[0]),
};
static  VTT_ENTRY vtt_S20780C9[] = {
  {&(_ZTV8S20780C9[3]),  3,5},
  {&(_tg__ZTV8S20780C5__8S20780C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20780C9[];
extern  VTBL_ENTRY _ZTV8S20780C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C9[];
Class_Descriptor cd_S20780C9 = {  "S20780C9", // class name
  bases_S20780C9, 3,
  &(vtc_S20780C9[0]), // expected_vtbl_contents
  &(vtt_S20780C9[0]), // expected_vtt_contents
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI8S20780C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20780C9),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20780C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20780C8  : virtual S20780C3 , S20780C9 , virtual S20605C3 {
  virtual void  v6(); // _ZN8S20780C82v6Ev
  ~S20780C8(); // tgen
  S20780C8(); // tgen
};
//SIG(-1 S20780C8) C1{ VBC2{ v2 v3 v4 FD FL} BC3{ BC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc} BC5 v5 v6 FD Fp FC6{ m Fc FC7{ VBC5 FC5 Fs Fi Fc}[10]}} VBC6 v1}


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

static void Test_S20780C8()
{
  extern Class_Descriptor cd_S20780C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,140)];
    init_test(&cd_S20780C8, buf);
    S20780C8 *dp, &lv = *(dp=new (buf) S20780C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,556), "sizeof(S20780C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20780C8)");
    check_base_class_offset(lv, (S20780C3*), ABISELECT(384,284), "S20780C8");
    check_base_class_offset(lv, (S20605C5*)(S20780C5*)(S20780C9*), ABISELECT(424,308), "S20780C8");
    check_base_class_offset(lv, (S20780C5*)(S20780C9*), 0, "S20780C8");
    /*is_ambiguous_... S20780C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20780C9*), ABISELECT(22,18), "S20780C8");
    check_base_class_offset(lv, (S20780C9*), 0, "S20780C8");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(432,312), "S20780C8");
    test_class_info(&lv, &cd_S20780C8);
    dp->~S20780C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20780C8(Test_S20780C8, "S20780C8", ABISELECT(768,556));

#else // __cplusplus

extern void _ZN8S20780C8C1Ev();
extern void _ZN8S20780C8D1Ev();
Name_Map name_map_S20780C8[] = {
  NSPAIR(_ZN8S20780C8C1Ev),
  NSPAIR(_ZN8S20780C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20780C3;
extern VTBL_ENTRY _ZTI8S20780C3[];
extern  VTBL_ENTRY _ZTV8S20780C3[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20780C5;
extern VTBL_ENTRY _ZTI8S20780C5[];
extern  VTBL_ENTRY _ZTV8S20780C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20780C9;
extern VTBL_ENTRY _ZTI8S20780C9[];
extern  VTBL_ENTRY _ZTV8S20780C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C9[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20780C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20780C3,    ABISELECT(384,284), //bcp->offset
    8, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(424,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20780C5,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20780C9,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C3,    ABISELECT(432,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20780C8[];
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
extern void _ZN8S20780C82v6Ev();
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY vtc_S20780C8[] = {
  ABISELECT(432,312),
  ABISELECT(384,284),
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C8[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20780C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20780C8[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20780C8[];
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C9__8S20780C8[] = {
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C9[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20780C58S20780C9__8S20780C8[] = {
  ABISELECT(424,308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C5[0]),
};
static  VTT_ENTRY vtt_S20780C8[] = {
  {&(_ZTV8S20780C8[5]),  5,16},
  {&(_tg__ZTV8S20780C9__8S20780C8[3]),  3,5},
  {&(_tg__ZTV8S20780C58S20780C9__8S20780C8[3]),  3,3},
  {&(_ZTV8S20780C8[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20780C8[];
extern  VTBL_ENTRY _ZTV8S20780C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C8[];
Class_Descriptor cd_S20780C8 = {  "S20780C8", // class name
  bases_S20780C8, 6,
  &(vtc_S20780C8[0]), // expected_vtbl_contents
  &(vtt_S20780C8[0]), // expected_vtt_contents
  ABISELECT(768,556), // object size
  NSPAIRA(_ZTI8S20780C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20780C8),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20780C8),4, //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  S20780C2  : virtual S20780C3 , virtual S20605C3 , virtual S20780C7 , S20780C8 {
  char  :0;
  ~S20780C2(); // tgen
  S20780C2(); // tgen
};
//SIG(-1 S20780C2) C1{ VBC2{ v1 v2 v3 FD FL} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} VBC6{ VBC2 VBC3 Fi} BC7{ VBC2 BC8{ BC9{ VBC5 FC5 Fs Fi Fc} BC5 v4 v5 FD Fp FC3} VBC3 v6} Fc:0}


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

static void Test_S20780C2()
{
  extern Class_Descriptor cd_S20780C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,142)];
    init_test(&cd_S20780C2, buf);
    S20780C2 *dp, &lv = *(dp=new (buf) S20780C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,564), "sizeof(S20780C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20780C2)");
    check_base_class_offset(lv, (S20780C3*), ABISELECT(384,284), "S20780C2");
    check_base_class_offset(lv, (S20780C3*)(S20780C7*), ABISELECT(384,284), "S20780C2");
    check_base_class_offset(lv, (S20780C3*)(S20780C8*), ABISELECT(384,284), "S20780C2");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(424,308), "S20780C2");
    check_base_class_offset(lv, (S20605C3*)(S20780C7*), ABISELECT(424,308), "S20780C2");
    check_base_class_offset(lv, (S20605C3*)(S20780C8*), ABISELECT(424,308), "S20780C2");
    check_base_class_offset(lv, (S20780C7*), ABISELECT(752,552), "S20780C2");
    check_base_class_offset(lv, (S20605C5*)(S20780C5*)(S20780C9*)(S20780C8*), ABISELECT(764,560), "S20780C2");
    check_base_class_offset(lv, (S20780C5*)(S20780C9*)(S20780C8*), 0, "S20780C2");
    /*is_ambiguous_... S20780C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20780C9*)(S20780C8*), ABISELECT(22,18), "S20780C2");
    check_base_class_offset(lv, (S20780C9*)(S20780C8*), 0, "S20780C2");
    check_base_class_offset(lv, (S20780C8*), 0, "S20780C2");
    test_class_info(&lv, &cd_S20780C2);
    dp->~S20780C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20780C2(Test_S20780C2, "S20780C2", ABISELECT(768,564));

#else // __cplusplus

extern void _ZN8S20780C2C1Ev();
extern void _ZN8S20780C2D1Ev();
Name_Map name_map_S20780C2[] = {
  NSPAIR(_ZN8S20780C2C1Ev),
  NSPAIR(_ZN8S20780C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20780C3;
extern VTBL_ENTRY _ZTI8S20780C3[];
extern  VTBL_ENTRY _ZTV8S20780C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20780C7;
extern VTBL_ENTRY _ZTI8S20780C7[];
extern  VTBL_ENTRY _ZTV8S20780C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20780C5;
extern VTBL_ENTRY _ZTI8S20780C5[];
extern  VTBL_ENTRY _ZTV8S20780C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20780C9;
extern VTBL_ENTRY _ZTI8S20780C9[];
extern  VTBL_ENTRY _ZTV8S20780C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C9[];
extern Class_Descriptor cd_S20780C8;
extern VTBL_ENTRY _ZTI8S20780C8[];
extern  VTBL_ENTRY _ZTV8S20780C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C8[];
static Base_Class bases_S20780C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20780C3,    ABISELECT(384,284), //bcp->offset
    9, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(424,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20780C7,    ABISELECT(752,552), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(764,560), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20780C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20780C9,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20780C8,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20780C2[];
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
extern void _ZN8S20780C82v6Ev();
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY vtc_S20780C2[] = {
  ABISELECT(752,552),
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C2[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20780C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20780C2[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  ABISELECT(-752,-552),
  (VTBL_ENTRY)&(_ZTI8S20780C2[0]),
};
extern VTBL_ENTRY _ZTV8S20780C2[];
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
extern void _ZN8S20780C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C8__8S20780C2[] = {
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C8[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20780C82v6Ev,
};
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C98S20780C8__8S20780C2[] = {
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C9[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20780C58S20780C98S20780C8__8S20780C2[] = {
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C5[0]),
};
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C3__8S20780C8__8S20780C2[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20780C8[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20780C7__8S20780C2[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C7[0]),
};
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C3__8S20780C7__8S20780C2[] = {
  0,
  0,
  0,
  ABISELECT(368,268),
  (VTBL_ENTRY)&(_ZTI8S20780C7[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
static  VTT_ENTRY vtt_S20780C2[] = {
  {&(_ZTV8S20780C2[6]),  6,21},
  {&(_tg__ZTV8S20780C8__8S20780C2[5]),  5,8},
  {&(_tg__ZTV8S20780C98S20780C8__8S20780C2[3]),  3,5},
  {&(_tg__ZTV8S20780C58S20780C98S20780C8__8S20780C2[3]),  3,3},
  {&(_tg__ZTV8S20780C3__8S20780C8__8S20780C2[5]),  5,8},
  {&(_ZTV8S20780C2[14]),  14,21},
  {&(_ZTV8S20780C2[21]),  21,21},
  {&(_tg__ZTV8S20780C7__8S20780C2[4]),  4,4},
  {&(_tg__ZTV8S20780C3__8S20780C7__8S20780C2[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20780C2[];
extern  VTBL_ENTRY _ZTV8S20780C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C2[];
Class_Descriptor cd_S20780C2 = {  "S20780C2", // class name
  bases_S20780C2, 8,
  &(vtc_S20780C2[0]), // expected_vtbl_contents
  &(vtt_S20780C2[0]), // expected_vtt_contents
  ABISELECT(768,564), // object size
  NSPAIRA(_ZTI8S20780C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20780C2),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20780C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20780C1  : virtual S20780C2 , S20780C3 , virtual S20780C5 {
  char s20780c1f0:7;
  ~S20780C1(); // tgen
  S20780C1(); // tgen
};
//SIG(1 S20780C1) C1{ VBC2{ VBC3{ v1 v2 v3 FD FL} VBC4{ m Fc FC5{ VBC6{ m Fs[2]} FC6 Fs Fi Fc}[10]} VBC7{ VBC3 VBC4 Fi} BC8{ VBC3 BC9{ BC10{ VBC6 FC6 Fs Fi Fc} BC6 v4 v5 FD Fp FC4} VBC4 v6} Fc:0} BC3 VBC10 Fc:7}


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

static void Test_S20780C1()
{
  extern Class_Descriptor cd_S20780C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,154)];
    init_test(&cd_S20780C1, buf);
    S20780C1 *dp, &lv = *(dp=new (buf) S20780C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,612), "sizeof(S20780C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20780C1)");
    check_base_class_offset(lv, (S20780C3*)(S20780C2*), ABISELECT(432,312), "S20780C1");
    check_base_class_offset(lv, (S20780C3*)(S20780C7*), ABISELECT(432,312), "S20780C1");
    check_base_class_offset(lv, (S20780C3*)(S20780C8*)(S20780C2*), ABISELECT(432,312), "S20780C1");
    check_base_class_offset(lv, (S20605C3*)(S20780C2*), ABISELECT(472,336), "S20780C1");
    check_base_class_offset(lv, (S20605C3*)(S20780C7*), ABISELECT(472,336), "S20780C1");
    check_base_class_offset(lv, (S20605C3*)(S20780C8*)(S20780C2*), ABISELECT(472,336), "S20780C1");
    check_base_class_offset(lv, (S20780C7*)(S20780C2*), ABISELECT(800,580), "S20780C1");
    check_base_class_offset(lv, (S20605C5*)(S20780C5*)(S20780C9*)(S20780C8*)(S20780C2*), ABISELECT(812,588), "S20780C1");
    /*is_ambiguous_... S20780C1::S20780C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20780C5*), ABISELECT(812,588), "S20780C1");
    check_base_class_offset(lv, (S20780C5*)(S20780C9*)(S20780C8*)(S20780C2*), ABISELECT(48,28), "S20780C1");
    /*is_ambiguous_... S20780C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20780C9*)(S20780C8*)(S20780C2*), ABISELECT(70,46), "S20780C1");
    check_base_class_offset(lv, (S20780C9*)(S20780C8*)(S20780C2*), ABISELECT(48,28), "S20780C1");
    check_base_class_offset(lv, (S20780C8*)(S20780C2*), ABISELECT(48,28), "S20780C1");
    check_base_class_offset(lv, (S20780C2*), ABISELECT(48,28), "S20780C1");
    /*is_ambiguous_... S20780C1::S20780C3 */ AMB_check_base_class_offset(lv, (S20780C3*), 0, "S20780C1");
    /*is_ambiguous_... S20780C1::S20780C5 */ AMB_check_base_class_offset(lv, (S20780C5*), ABISELECT(816,592), "S20780C1");
    set_bf_and_test(lv, s20780c1f0, ABISELECT(40,24), 0, 7, 1, "S20780C1");
    set_bf_and_test(lv, s20780c1f0, ABISELECT(40,24), 0, 7, hide_sll(1LL<<6), "S20780C1");
    test_class_info(&lv, &cd_S20780C1);
    dp->~S20780C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20780C1(Test_S20780C1, "S20780C1", ABISELECT(848,612));

#else // __cplusplus

extern void _ZN8S20780C1C1Ev();
extern void _ZN8S20780C1D1Ev();
Name_Map name_map_S20780C1[] = {
  NSPAIR(_ZN8S20780C1C1Ev),
  NSPAIR(_ZN8S20780C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20780C3;
extern VTBL_ENTRY _ZTI8S20780C3[];
extern  VTBL_ENTRY _ZTV8S20780C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20780C7;
extern VTBL_ENTRY _ZTI8S20780C7[];
extern  VTBL_ENTRY _ZTV8S20780C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20780C5;
extern VTBL_ENTRY _ZTI8S20780C5[];
extern  VTBL_ENTRY _ZTV8S20780C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20780C9;
extern VTBL_ENTRY _ZTI8S20780C9[];
extern  VTBL_ENTRY _ZTV8S20780C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C9[];
extern Class_Descriptor cd_S20780C8;
extern VTBL_ENTRY _ZTI8S20780C8[];
extern  VTBL_ENTRY _ZTV8S20780C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C8[];
extern Class_Descriptor cd_S20780C2;
extern VTBL_ENTRY _ZTI8S20780C2[];
extern  VTBL_ENTRY _ZTV8S20780C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C2[];
extern Class_Descriptor cd_S20780C3;
extern VTBL_ENTRY _ZTI8S20780C3[];
extern  VTBL_ENTRY _ZTV8S20780C3[];
extern Class_Descriptor cd_S20780C5;
extern VTBL_ENTRY _ZTI8S20780C5[];
extern  VTBL_ENTRY _ZTV8S20780C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C5[];
static Base_Class bases_S20780C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20780C3,    ABISELECT(432,312), //bcp->offset
    23, //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20605C3,    ABISELECT(472,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20780C7,    ABISELECT(800,580), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20605C5,    ABISELECT(812,588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20780C5,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(70,46), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20780C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20780C8,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20780C2,    ABISELECT(48,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20780C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S20780C5,    ABISELECT(816,592), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20780C1[];
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
extern void _ZN8S20780C82v6Ev();
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY vtc_S20780C1[] = {
  ABISELECT(816,592),
  ABISELECT(812,588),
  ABISELECT(800,580),
  ABISELECT(472,336),
  ABISELECT(432,312),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C1[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
  0,
  0,
  0,
  ABISELECT(752,552),
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(764,560),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20780C1[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20780C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-432,-312),
  (VTBL_ENTRY)&(_ZTI8S20780C1[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  ABISELECT(-800,-580),
  (VTBL_ENTRY)&(_ZTI8S20780C1[0]),
  -4,
  ABISELECT(-816,-592),
  (VTBL_ENTRY)&(_ZTI8S20780C1[0]),
};
extern VTBL_ENTRY _ZTV8S20780C1[];
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
extern void _ZN8S20780C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C2__8S20780C1[] = {
  ABISELECT(752,552),
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C2[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20780C82v6Ev,
};
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
extern void _ZN8S20780C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C88S20780C2__8S20780C1[] = {
  ABISELECT(424,308),
  ABISELECT(384,284),
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C8[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20780C82v6Ev,
};
extern void _ZN8S20780C92v4Ev();
extern void _ZN8S20780C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C98S20780C88S20780C2__8S20780C1[] = {
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C9[0]),
  (VTBL_ENTRY)&_ZN8S20780C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20780C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20780C58S20780C98S20780C88S20780C2__8S20780C1[] = {
  ABISELECT(764,560),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C5[0]),
};
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C3__8S20780C88S20780C2__8S20780C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20780C8[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C3__8S20780C2__8S20780C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20780C2[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20780C7__8S20780C2__8S20780C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  ABISELECT(-752,-552),
  (VTBL_ENTRY)&(_ZTI8S20780C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20780C7__8S20780C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C7[0]),
};
extern void _ZN8S20780C32v1Ev();
extern void _ZN8S20780C32v2Ev();
extern void _ZN8S20780C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20780C3__8S20780C7__8S20780C1[] = {
  0,
  0,
  0,
  ABISELECT(368,268),
  (VTBL_ENTRY)&(_ZTI8S20780C7[0]),
  (VTBL_ENTRY)&_ZN8S20780C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20780C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20780C5__A1__8S20780C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S20780C5[0]),
};
static  VTT_ENTRY vtt_S20780C1[] = {
  {&(_ZTV8S20780C1[8]),  8,38},
  {&(_ZTV8S20780C1[20]),  20,38},
  {&(_ZTV8S20780C1[28]),  28,38},
  {&(_ZTV8S20780C1[35]),  35,38},
  {&(_ZTV8S20780C1[38]),  38,38},
  {&(_tg__ZTV8S20780C2__8S20780C1[6]),  6,9},
  {&(_tg__ZTV8S20780C88S20780C2__8S20780C1[5]),  5,8},
  {&(_tg__ZTV8S20780C98S20780C88S20780C2__8S20780C1[3]),  3,5},
  {&(_tg__ZTV8S20780C58S20780C98S20780C88S20780C2__8S20780C1[3]),  3,3},
  {&(_tg__ZTV8S20780C3__8S20780C88S20780C2__8S20780C1[5]),  5,8},
  {&(_tg__ZTV8S20780C3__8S20780C2__8S20780C1[5]),  5,8},
  {&(_tg__ZTV8S20780C7__8S20780C2__8S20780C1[4]),  4,4},
  {&(_tg__ZTV8S20780C7__8S20780C1[4]),  4,4},
  {&(_tg__ZTV8S20780C3__8S20780C7__8S20780C1[5]),  5,8},
  {&(_tg__ZTV8S20780C5__A1__8S20780C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20780C1[];
extern  VTBL_ENTRY _ZTV8S20780C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20780C1[];
Class_Descriptor cd_S20780C1 = {  "S20780C1", // class name
  bases_S20780C1, 11,
  &(vtc_S20780C1[0]), // expected_vtbl_contents
  &(vtt_S20780C1[0]), // expected_vtt_contents
  ABISELECT(848,612), // object size
  NSPAIRA(_ZTI8S20780C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20780C1),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20780C1),15, //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  S20779C3  {
  long double s20779c3f0;
  long s20779c3f1;
  virtual void  v1(); // _ZN8S20779C32v1Ev
  virtual void  v2(); // _ZN8S20779C32v2Ev
  virtual void  v3(); // _ZN8S20779C32v3Ev
  ~S20779C3(); // tgen
  S20779C3(); // tgen
};
//SIG(-1 S20779C3) C1{ v1 v2 v3 FD Fl}


void  S20779C3 ::v1(){vfunc_called(this, "_ZN8S20779C32v1Ev");}
void  S20779C3 ::v2(){vfunc_called(this, "_ZN8S20779C32v2Ev");}
void  S20779C3 ::v3(){vfunc_called(this, "_ZN8S20779C32v3Ev");}
S20779C3 ::~S20779C3(){ note_dtor("S20779C3", this);} // tgen
S20779C3 ::S20779C3(){ note_ctor("S20779C3", this);} // tgen

static void Test_S20779C3()
{
  extern Class_Descriptor cd_S20779C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20779C3, buf);
    S20779C3 *dp, &lv = *(dp=new (buf) S20779C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S20779C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20779C3)");
    check_field_offset(lv, s20779c3f0, ABISELECT(16,4), "S20779C3.s20779c3f0");
    check_field_offset(lv, s20779c3f1, ABISELECT(32,16), "S20779C3.s20779c3f1");
    test_class_info(&lv, &cd_S20779C3);
    dp->~S20779C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20779C3(Test_S20779C3, "S20779C3", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN8S20779C3C1Ev();
extern void _ZN8S20779C3D1Ev();
Name_Map name_map_S20779C3[] = {
  NSPAIR(_ZN8S20779C3C1Ev),
  NSPAIR(_ZN8S20779C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20779C3[];
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY vtc_S20779C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C3[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
extern VTBL_ENTRY _ZTI8S20779C3[];
extern  VTBL_ENTRY _ZTV8S20779C3[];
Class_Descriptor cd_S20779C3 = {  "S20779C3", // class name
  0,0,//no base classes
  &(vtc_S20779C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI8S20779C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20779C3),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  S20779C7  : virtual S20779C3 , virtual S20605C3 {
  int s20779c7f0;
  ~S20779C7(); // tgen
  S20779C7(); // tgen
};
//SIG(-1 S20779C7) C1{ VBC2{ v1 v2 v3 FD Fl} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S20779C7()
{
  extern Class_Descriptor cd_S20779C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,69)];
    init_test(&cd_S20779C7, buf);
    S20779C7 *dp, &lv = *(dp=new (buf) S20779C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,272), "sizeof(S20779C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20779C7)");
    check_base_class_offset(lv, (S20779C3*), ABISELECT(16,8), "S20779C7");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,28), "S20779C7");
    check_field_offset(lv, s20779c7f0, ABISELECT(8,4), "S20779C7.s20779c7f0");
    test_class_info(&lv, &cd_S20779C7);
    dp->~S20779C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20779C7(Test_S20779C7, "S20779C7", ABISELECT(384,272));

#else // __cplusplus

extern void _ZN8S20779C7C1Ev();
extern void _ZN8S20779C7D1Ev();
Name_Map name_map_S20779C7[] = {
  NSPAIR(_ZN8S20779C7C1Ev),
  NSPAIR(_ZN8S20779C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20779C3;
extern VTBL_ENTRY _ZTI8S20779C3[];
extern  VTBL_ENTRY _ZTV8S20779C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20779C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20779C3,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20779C7[];
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY vtc_S20779C7[] = {
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C7[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20779C7[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20779C7[];
static  VTT_ENTRY vtt_S20779C7[] = {
  {&(_ZTV8S20779C7[4]),  4,12},
  {&(_ZTV8S20779C7[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S20779C7[];
extern  VTBL_ENTRY _ZTV8S20779C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C7[];
Class_Descriptor cd_S20779C7 = {  "S20779C7", // class name
  bases_S20779C7, 2,
  &(vtc_S20779C7[0]), // expected_vtbl_contents
  &(vtt_S20779C7[0]), // expected_vtt_contents
  ABISELECT(384,272), // object size
  NSPAIRA(_ZTI8S20779C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20779C7),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20779C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20779C5  : virtual S20605C5 {
  ::S20605C5 s20779c5f0;
  short s20779c5f1;
  int s20779c5f2;
  char s20779c5f3;
  ~S20779C5(); // tgen
  S20779C5(); // tgen
};
//SIG(-1 S20779C5) C1{ VBC2{ m Fs[2]} FC2 Fs Fi Fc}


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

static void Test_S20779C5()
{
  extern Class_Descriptor cd_S20779C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S20779C5, buf);
    S20779C5 *dp, &lv = *(dp=new (buf) S20779C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20779C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20779C5)");
    check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20779C5");
    check_field_offset(lv, s20779c5f0, ABISELECT(8,4), "S20779C5.s20779c5f0");
    check_field_offset(lv, s20779c5f1, ABISELECT(12,8), "S20779C5.s20779c5f1");
    check_field_offset(lv, s20779c5f2, ABISELECT(16,12), "S20779C5.s20779c5f2");
    check_field_offset(lv, s20779c5f3, ABISELECT(20,16), "S20779C5.s20779c5f3");
    test_class_info(&lv, &cd_S20779C5);
    dp->~S20779C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20779C5(Test_S20779C5, "S20779C5", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S20779C5C1Ev();
extern void _ZN8S20779C5D1Ev();
Name_Map name_map_S20779C5[] = {
  NSPAIR(_ZN8S20779C5C1Ev),
  NSPAIR(_ZN8S20779C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20779C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20779C5[];
static  VTBL_ENTRY vtc_S20779C5[] = {
  ABISELECT(22,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C5[0]),
};
extern VTBL_ENTRY _ZTV8S20779C5[];
static  VTT_ENTRY vtt_S20779C5[] = {
  {&(_ZTV8S20779C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20779C5[];
extern  VTBL_ENTRY _ZTV8S20779C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C5[];
Class_Descriptor cd_S20779C5 = {  "S20779C5", // class name
  bases_S20779C5, 1,
  &(vtc_S20779C5[0]), // expected_vtbl_contents
  &(vtt_S20779C5[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S20779C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20779C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20779C5),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  S20779C9  : S20779C5 , S20605C5 {
  long double s20779c9f0;
  void *s20779c9f1;
  ::S20605C3 s20779c9f2;
  virtual void  v4(); // _ZN8S20779C92v4Ev
  virtual void  v5(); // _ZN8S20779C92v5Ev
  ~S20779C9(); // tgen
  S20779C9(); // tgen
};
//SIG(-1 S20779C9) C1{ BC2{ VBC3{ m Fs[2]} FC3 Fs Fi Fc} BC3 v1 v2 FD Fp FC4{ m Fc FC5{ VBC3 FC3 Fs Fi Fc}[10]}}


void  S20779C9 ::v4(){vfunc_called(this, "_ZN8S20779C92v4Ev");}
void  S20779C9 ::v5(){vfunc_called(this, "_ZN8S20779C92v5Ev");}
S20779C9 ::~S20779C9(){ note_dtor("S20779C9", this);} // tgen
S20779C9 ::S20779C9(){ note_ctor("S20779C9", this);} // tgen

static void Test_S20779C9()
{
  extern Class_Descriptor cd_S20779C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(26,73)];
    init_test(&cd_S20779C9, buf);
    S20779C9 *dp, &lv = *(dp=new (buf) S20779C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S20779C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20779C9)");
    check_base_class_offset(lv, (S20605C5*)(S20779C5*), ABISELECT(384,284), "S20779C9");
    check_base_class_offset(lv, (S20779C5*), 0, "S20779C9");
    /*is_ambiguous_... S20779C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*), ABISELECT(22,18), "S20779C9");
    check_field_offset(lv, s20779c9f0, ABISELECT(32,24), "S20779C9.s20779c9f0");
    check_field_offset(lv, s20779c9f1, ABISELECT(48,36), "S20779C9.s20779c9f1");
    check_field_offset(lv, s20779c9f2, ABISELECT(56,40), "S20779C9.s20779c9f2");
    test_class_info(&lv, &cd_S20779C9);
    dp->~S20779C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20779C9(Test_S20779C9, "S20779C9", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN8S20779C9C1Ev();
extern void _ZN8S20779C9D1Ev();
Name_Map name_map_S20779C9[] = {
  NSPAIR(_ZN8S20779C9C1Ev),
  NSPAIR(_ZN8S20779C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20779C5;
extern VTBL_ENTRY _ZTI8S20779C5[];
extern  VTBL_ENTRY _ZTV8S20779C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
static Base_Class bases_S20779C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C5,    ABISELECT(384,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20779C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20779C9[];
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
static  VTBL_ENTRY vtc_S20779C9[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C9[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
};
extern VTBL_ENTRY _ZTV8S20779C9[];
static  VTBL_ENTRY _tg__ZTV8S20779C5__8S20779C9[] = {
  ABISELECT(384,284),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C5[0]),
};
static  VTT_ENTRY vtt_S20779C9[] = {
  {&(_ZTV8S20779C9[3]),  3,5},
  {&(_tg__ZTV8S20779C5__8S20779C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20779C9[];
extern  VTBL_ENTRY _ZTV8S20779C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C9[];
Class_Descriptor cd_S20779C9 = {  "S20779C9", // class name
  bases_S20779C9, 3,
  &(vtc_S20779C9[0]), // expected_vtbl_contents
  &(vtt_S20779C9[0]), // expected_vtt_contents
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI8S20779C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20779C9),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20779C9),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20779C8  : virtual S20779C3 , S20779C9 , virtual S20605C3 {
  virtual void  v6(); // _ZN8S20779C82v6Ev
  ~S20779C8(); // tgen
  S20779C8(); // tgen
};
//SIG(-1 S20779C8) C1{ VBC2{ v2 v3 v4 FD Fl} BC3{ BC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc} BC5 v5 v6 FD Fp FC6{ m Fc FC7{ VBC5 FC5 Fs Fi Fc}[10]}} VBC6 v1}


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

static void Test_S20779C8()
{
  extern Class_Descriptor cd_S20779C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,139)];
    init_test(&cd_S20779C8, buf);
    S20779C8 *dp, &lv = *(dp=new (buf) S20779C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,552), "sizeof(S20779C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20779C8)");
    check_base_class_offset(lv, (S20779C3*), ABISELECT(384,284), "S20779C8");
    check_base_class_offset(lv, (S20605C5*)(S20779C5*)(S20779C9*), ABISELECT(424,304), "S20779C8");
    check_base_class_offset(lv, (S20779C5*)(S20779C9*), 0, "S20779C8");
    /*is_ambiguous_... S20779C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20779C9*), ABISELECT(22,18), "S20779C8");
    check_base_class_offset(lv, (S20779C9*), 0, "S20779C8");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(432,308), "S20779C8");
    test_class_info(&lv, &cd_S20779C8);
    dp->~S20779C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20779C8(Test_S20779C8, "S20779C8", ABISELECT(768,552));

#else // __cplusplus

extern void _ZN8S20779C8C1Ev();
extern void _ZN8S20779C8D1Ev();
Name_Map name_map_S20779C8[] = {
  NSPAIR(_ZN8S20779C8C1Ev),
  NSPAIR(_ZN8S20779C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20779C3;
extern VTBL_ENTRY _ZTI8S20779C3[];
extern  VTBL_ENTRY _ZTV8S20779C3[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20779C5;
extern VTBL_ENTRY _ZTI8S20779C5[];
extern  VTBL_ENTRY _ZTV8S20779C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20779C9;
extern VTBL_ENTRY _ZTI8S20779C9[];
extern  VTBL_ENTRY _ZTV8S20779C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C9[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S20779C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20779C3,    ABISELECT(384,284), //bcp->offset
    8, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(424,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20779C5,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20779C9,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20605C3,    ABISELECT(432,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20779C8[];
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
extern void _ZN8S20779C82v6Ev();
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY vtc_S20779C8[] = {
  ABISELECT(432,308),
  ABISELECT(384,284),
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C8[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20779C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20779C8[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20779C8[];
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C9__8S20779C8[] = {
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C9[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20779C58S20779C9__8S20779C8[] = {
  ABISELECT(424,304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C5[0]),
};
static  VTT_ENTRY vtt_S20779C8[] = {
  {&(_ZTV8S20779C8[5]),  5,16},
  {&(_tg__ZTV8S20779C9__8S20779C8[3]),  3,5},
  {&(_tg__ZTV8S20779C58S20779C9__8S20779C8[3]),  3,3},
  {&(_ZTV8S20779C8[13]),  13,16},
};
extern VTBL_ENTRY _ZTI8S20779C8[];
extern  VTBL_ENTRY _ZTV8S20779C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C8[];
Class_Descriptor cd_S20779C8 = {  "S20779C8", // class name
  bases_S20779C8, 6,
  &(vtc_S20779C8[0]), // expected_vtbl_contents
  &(vtt_S20779C8[0]), // expected_vtt_contents
  ABISELECT(768,552), // object size
  NSPAIRA(_ZTI8S20779C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20779C8),16, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20779C8),4, //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  S20779C2  : virtual S20779C3 , virtual S20605C3 , virtual S20779C7 , S20779C8 {
  char  :0;
  ~S20779C2(); // tgen
  S20779C2(); // tgen
};
//SIG(-1 S20779C2) C1{ VBC2{ v1 v2 v3 FD Fl} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} VBC6{ VBC2 VBC3 Fi} BC7{ VBC2 BC8{ BC9{ VBC5 FC5 Fs Fi Fc} BC5 v4 v5 FD Fp FC3} VBC3 v6} Fc:0}


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

static void Test_S20779C2()
{
  extern Class_Descriptor cd_S20779C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,141)];
    init_test(&cd_S20779C2, buf);
    S20779C2 *dp, &lv = *(dp=new (buf) S20779C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,560), "sizeof(S20779C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20779C2)");
    check_base_class_offset(lv, (S20779C3*), ABISELECT(384,284), "S20779C2");
    check_base_class_offset(lv, (S20779C3*)(S20779C7*), ABISELECT(384,284), "S20779C2");
    check_base_class_offset(lv, (S20779C3*)(S20779C8*), ABISELECT(384,284), "S20779C2");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(424,304), "S20779C2");
    check_base_class_offset(lv, (S20605C3*)(S20779C7*), ABISELECT(424,304), "S20779C2");
    check_base_class_offset(lv, (S20605C3*)(S20779C8*), ABISELECT(424,304), "S20779C2");
    check_base_class_offset(lv, (S20779C7*), ABISELECT(752,548), "S20779C2");
    check_base_class_offset(lv, (S20605C5*)(S20779C5*)(S20779C9*)(S20779C8*), ABISELECT(764,556), "S20779C2");
    check_base_class_offset(lv, (S20779C5*)(S20779C9*)(S20779C8*), 0, "S20779C2");
    /*is_ambiguous_... S20779C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20779C9*)(S20779C8*), ABISELECT(22,18), "S20779C2");
    check_base_class_offset(lv, (S20779C9*)(S20779C8*), 0, "S20779C2");
    check_base_class_offset(lv, (S20779C8*), 0, "S20779C2");
    test_class_info(&lv, &cd_S20779C2);
    dp->~S20779C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20779C2(Test_S20779C2, "S20779C2", ABISELECT(768,560));

#else // __cplusplus

extern void _ZN8S20779C2C1Ev();
extern void _ZN8S20779C2D1Ev();
Name_Map name_map_S20779C2[] = {
  NSPAIR(_ZN8S20779C2C1Ev),
  NSPAIR(_ZN8S20779C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20779C3;
extern VTBL_ENTRY _ZTI8S20779C3[];
extern  VTBL_ENTRY _ZTV8S20779C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20779C7;
extern VTBL_ENTRY _ZTI8S20779C7[];
extern  VTBL_ENTRY _ZTV8S20779C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20779C5;
extern VTBL_ENTRY _ZTI8S20779C5[];
extern  VTBL_ENTRY _ZTV8S20779C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20779C9;
extern VTBL_ENTRY _ZTI8S20779C9[];
extern  VTBL_ENTRY _ZTV8S20779C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C9[];
extern Class_Descriptor cd_S20779C8;
extern VTBL_ENTRY _ZTI8S20779C8[];
extern  VTBL_ENTRY _ZTV8S20779C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C8[];
static Base_Class bases_S20779C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20779C3,    ABISELECT(384,284), //bcp->offset
    9, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(424,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20779C7,    ABISELECT(752,548), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C5,    ABISELECT(764,556), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20779C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(22,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20779C9,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20779C8,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20779C2[];
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
extern void _ZN8S20779C82v6Ev();
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY vtc_S20779C2[] = {
  ABISELECT(752,548),
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C2[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20779C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20779C2[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  ABISELECT(-752,-548),
  (VTBL_ENTRY)&(_ZTI8S20779C2[0]),
};
extern VTBL_ENTRY _ZTV8S20779C2[];
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
extern void _ZN8S20779C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C8__8S20779C2[] = {
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C8[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20779C82v6Ev,
};
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C98S20779C8__8S20779C2[] = {
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C9[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20779C58S20779C98S20779C8__8S20779C2[] = {
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C5[0]),
};
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C3__8S20779C8__8S20779C2[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20779C8[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20779C7__8S20779C2[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C7[0]),
};
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C3__8S20779C7__8S20779C2[] = {
  0,
  0,
  0,
  ABISELECT(368,264),
  (VTBL_ENTRY)&(_ZTI8S20779C7[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
static  VTT_ENTRY vtt_S20779C2[] = {
  {&(_ZTV8S20779C2[6]),  6,21},
  {&(_tg__ZTV8S20779C8__8S20779C2[5]),  5,8},
  {&(_tg__ZTV8S20779C98S20779C8__8S20779C2[3]),  3,5},
  {&(_tg__ZTV8S20779C58S20779C98S20779C8__8S20779C2[3]),  3,3},
  {&(_tg__ZTV8S20779C3__8S20779C8__8S20779C2[5]),  5,8},
  {&(_ZTV8S20779C2[14]),  14,21},
  {&(_ZTV8S20779C2[21]),  21,21},
  {&(_tg__ZTV8S20779C7__8S20779C2[4]),  4,4},
  {&(_tg__ZTV8S20779C3__8S20779C7__8S20779C2[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20779C2[];
extern  VTBL_ENTRY _ZTV8S20779C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C2[];
Class_Descriptor cd_S20779C2 = {  "S20779C2", // class name
  bases_S20779C2, 8,
  &(vtc_S20779C2[0]), // expected_vtbl_contents
  &(vtt_S20779C2[0]), // expected_vtt_contents
  ABISELECT(768,560), // object size
  NSPAIRA(_ZTI8S20779C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20779C2),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20779C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20779C1  : virtual S20779C2 , S20779C3 , virtual S20779C5 {
  char s20779c1f0:7;
  ~S20779C1(); // tgen
  S20779C1(); // tgen
};
//SIG(1 S20779C1) C1{ VBC2{ VBC3{ v1 v2 v3 FD Fl} VBC4{ m Fc FC5{ VBC6{ m Fs[2]} FC6 Fs Fi Fc}[10]} VBC7{ VBC3 VBC4 Fi} BC8{ VBC3 BC9{ BC10{ VBC6 FC6 Fs Fi Fc} BC6 v4 v5 FD Fp FC4} VBC4 v6} Fc:0} BC3 VBC10 Fc:7}


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

static void Test_S20779C1()
{
  extern Class_Descriptor cd_S20779C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(54,152)];
    init_test(&cd_S20779C1, buf);
    S20779C1 *dp, &lv = *(dp=new (buf) S20779C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,604), "sizeof(S20779C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20779C1)");
    check_base_class_offset(lv, (S20779C3*)(S20779C2*), ABISELECT(432,308), "S20779C1");
    check_base_class_offset(lv, (S20779C3*)(S20779C7*), ABISELECT(432,308), "S20779C1");
    check_base_class_offset(lv, (S20779C3*)(S20779C8*)(S20779C2*), ABISELECT(432,308), "S20779C1");
    check_base_class_offset(lv, (S20605C3*)(S20779C2*), ABISELECT(472,328), "S20779C1");
    check_base_class_offset(lv, (S20605C3*)(S20779C7*), ABISELECT(472,328), "S20779C1");
    check_base_class_offset(lv, (S20605C3*)(S20779C8*)(S20779C2*), ABISELECT(472,328), "S20779C1");
    check_base_class_offset(lv, (S20779C7*)(S20779C2*), ABISELECT(800,572), "S20779C1");
    check_base_class_offset(lv, (S20605C5*)(S20779C5*)(S20779C9*)(S20779C8*)(S20779C2*), ABISELECT(812,580), "S20779C1");
    /*is_ambiguous_... S20779C1::S20779C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20779C5*), ABISELECT(812,580), "S20779C1");
    check_base_class_offset(lv, (S20779C5*)(S20779C9*)(S20779C8*)(S20779C2*), ABISELECT(48,24), "S20779C1");
    /*is_ambiguous_... S20779C9::S20605C5 */ AMB_check_base_class_offset(lv, (S20605C5*)(S20779C9*)(S20779C8*)(S20779C2*), ABISELECT(70,42), "S20779C1");
    check_base_class_offset(lv, (S20779C9*)(S20779C8*)(S20779C2*), ABISELECT(48,24), "S20779C1");
    check_base_class_offset(lv, (S20779C8*)(S20779C2*), ABISELECT(48,24), "S20779C1");
    check_base_class_offset(lv, (S20779C2*), ABISELECT(48,24), "S20779C1");
    /*is_ambiguous_... S20779C1::S20779C3 */ AMB_check_base_class_offset(lv, (S20779C3*), 0, "S20779C1");
    /*is_ambiguous_... S20779C1::S20779C5 */ AMB_check_base_class_offset(lv, (S20779C5*), ABISELECT(816,584), "S20779C1");
    set_bf_and_test(lv, s20779c1f0, ABISELECT(40,20), 0, 7, 1, "S20779C1");
    set_bf_and_test(lv, s20779c1f0, ABISELECT(40,20), 0, 7, hide_sll(1LL<<6), "S20779C1");
    test_class_info(&lv, &cd_S20779C1);
    dp->~S20779C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20779C1(Test_S20779C1, "S20779C1", ABISELECT(848,604));

#else // __cplusplus

extern void _ZN8S20779C1C1Ev();
extern void _ZN8S20779C1D1Ev();
Name_Map name_map_S20779C1[] = {
  NSPAIR(_ZN8S20779C1C1Ev),
  NSPAIR(_ZN8S20779C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20779C3;
extern VTBL_ENTRY _ZTI8S20779C3[];
extern  VTBL_ENTRY _ZTV8S20779C3[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S20779C7;
extern VTBL_ENTRY _ZTI8S20779C7[];
extern  VTBL_ENTRY _ZTV8S20779C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C7[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20779C5;
extern VTBL_ENTRY _ZTI8S20779C5[];
extern  VTBL_ENTRY _ZTV8S20779C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C5[];
extern Class_Descriptor cd_S20605C5;
extern VTBL_ENTRY _ZTI8S20605C5[];
extern Class_Descriptor cd_S20779C9;
extern VTBL_ENTRY _ZTI8S20779C9[];
extern  VTBL_ENTRY _ZTV8S20779C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C9[];
extern Class_Descriptor cd_S20779C8;
extern VTBL_ENTRY _ZTI8S20779C8[];
extern  VTBL_ENTRY _ZTV8S20779C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C8[];
extern Class_Descriptor cd_S20779C2;
extern VTBL_ENTRY _ZTI8S20779C2[];
extern  VTBL_ENTRY _ZTV8S20779C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C2[];
extern Class_Descriptor cd_S20779C3;
extern VTBL_ENTRY _ZTI8S20779C3[];
extern  VTBL_ENTRY _ZTV8S20779C3[];
extern Class_Descriptor cd_S20779C5;
extern VTBL_ENTRY _ZTI8S20779C5[];
extern  VTBL_ENTRY _ZTV8S20779C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C5[];
static Base_Class bases_S20779C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20779C3,    ABISELECT(432,308), //bcp->offset
    23, //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20605C3,    ABISELECT(472,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20779C7,    ABISELECT(800,572), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20605C5,    ABISELECT(812,580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20779C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20605C5,    ABISELECT(70,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20779C9,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20779C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20779C2,    ABISELECT(48,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20779C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S20779C5,    ABISELECT(816,584), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20779C1[];
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
extern void _ZN8S20779C82v6Ev();
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY vtc_S20779C1[] = {
  ABISELECT(816,584),
  ABISELECT(812,580),
  ABISELECT(800,572),
  ABISELECT(472,328),
  ABISELECT(432,308),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C1[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
  0,
  0,
  0,
  ABISELECT(752,548),
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(764,556),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20779C1[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20779C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-432,-308),
  (VTBL_ENTRY)&(_ZTI8S20779C1[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  ABISELECT(-800,-572),
  (VTBL_ENTRY)&(_ZTI8S20779C1[0]),
  -4,
  ABISELECT(-816,-584),
  (VTBL_ENTRY)&(_ZTI8S20779C1[0]),
};
extern VTBL_ENTRY _ZTV8S20779C1[];
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
extern void _ZN8S20779C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C2__8S20779C1[] = {
  ABISELECT(752,548),
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C2[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20779C82v6Ev,
};
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
extern void _ZN8S20779C82v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C88S20779C2__8S20779C1[] = {
  ABISELECT(424,304),
  ABISELECT(384,284),
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C8[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
  (VTBL_ENTRY)&_ZN8S20779C82v6Ev,
};
extern void _ZN8S20779C92v4Ev();
extern void _ZN8S20779C92v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C98S20779C88S20779C2__8S20779C1[] = {
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C9[0]),
  (VTBL_ENTRY)&_ZN8S20779C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20779C92v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20779C58S20779C98S20779C88S20779C2__8S20779C1[] = {
  ABISELECT(764,556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C5[0]),
};
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C3__8S20779C88S20779C2__8S20779C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20779C8[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C3__8S20779C2__8S20779C1[] = {
  0,
  0,
  0,
  ABISELECT(-384,-284),
  (VTBL_ENTRY)&(_ZTI8S20779C2[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20779C7__8S20779C2__8S20779C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  ABISELECT(-752,-548),
  (VTBL_ENTRY)&(_ZTI8S20779C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20779C7__8S20779C1[] = {
  ABISELECT(-328,-244),
  ABISELECT(-368,-264),
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C7[0]),
};
extern void _ZN8S20779C32v1Ev();
extern void _ZN8S20779C32v2Ev();
extern void _ZN8S20779C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20779C3__8S20779C7__8S20779C1[] = {
  0,
  0,
  0,
  ABISELECT(368,264),
  (VTBL_ENTRY)&(_ZTI8S20779C7[0]),
  (VTBL_ENTRY)&_ZN8S20779C32v1Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v2Ev,
  (VTBL_ENTRY)&_ZN8S20779C32v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20779C5__A1__8S20779C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S20779C5[0]),
};
static  VTT_ENTRY vtt_S20779C1[] = {
  {&(_ZTV8S20779C1[8]),  8,38},
  {&(_ZTV8S20779C1[20]),  20,38},
  {&(_ZTV8S20779C1[28]),  28,38},
  {&(_ZTV8S20779C1[35]),  35,38},
  {&(_ZTV8S20779C1[38]),  38,38},
  {&(_tg__ZTV8S20779C2__8S20779C1[6]),  6,9},
  {&(_tg__ZTV8S20779C88S20779C2__8S20779C1[5]),  5,8},
  {&(_tg__ZTV8S20779C98S20779C88S20779C2__8S20779C1[3]),  3,5},
  {&(_tg__ZTV8S20779C58S20779C98S20779C88S20779C2__8S20779C1[3]),  3,3},
  {&(_tg__ZTV8S20779C3__8S20779C88S20779C2__8S20779C1[5]),  5,8},
  {&(_tg__ZTV8S20779C3__8S20779C2__8S20779C1[5]),  5,8},
  {&(_tg__ZTV8S20779C7__8S20779C2__8S20779C1[4]),  4,4},
  {&(_tg__ZTV8S20779C7__8S20779C1[4]),  4,4},
  {&(_tg__ZTV8S20779C3__8S20779C7__8S20779C1[5]),  5,8},
  {&(_tg__ZTV8S20779C5__A1__8S20779C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20779C1[];
extern  VTBL_ENTRY _ZTV8S20779C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20779C1[];
Class_Descriptor cd_S20779C1 = {  "S20779C1", // class name
  bases_S20779C1, 11,
  &(vtc_S20779C1[0]), // expected_vtbl_contents
  &(vtt_S20779C1[0]), // expected_vtt_contents
  ABISELECT(848,604), // object size
  NSPAIRA(_ZTI8S20779C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20779C1),38, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20779C1),15, //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  S7599C4  {
  short s7599c4f0;
  virtual  ~S7599C4(); // _ZN7S7599C4D1Ev
  virtual void  v19(); // _ZN7S7599C43v19Ev
  virtual void  v20(); // _ZN7S7599C43v20Ev
  virtual void  v21(); // _ZN7S7599C43v21Ev
  S7599C4(); // tgen
};
//SIG(-1 S7599C4) C1{ vd v1 v2 v3 Fs}


 S7599C4 ::~S7599C4(){ note_dtor("S7599C4", this);}
void  S7599C4 ::v19(){vfunc_called(this, "_ZN7S7599C43v19Ev");}
void  S7599C4 ::v20(){vfunc_called(this, "_ZN7S7599C43v20Ev");}
void  S7599C4 ::v21(){vfunc_called(this, "_ZN7S7599C43v21Ev");}
S7599C4 ::S7599C4(){ note_ctor("S7599C4", this);} // tgen

static void Test_S7599C4()
{
  extern Class_Descriptor cd_S7599C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7599C4, buf);
    S7599C4 *dp, &lv = *(dp=new (buf) S7599C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7599C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7599C4)");
    check_field_offset(lv, s7599c4f0, ABISELECT(8,4), "S7599C4.s7599c4f0");
    test_class_info(&lv, &cd_S7599C4);
    dp->~S7599C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7599C4(Test_S7599C4, "S7599C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7599C4C1Ev();
extern void _ZN7S7599C4D1Ev();
Name_Map name_map_S7599C4[] = {
  NSPAIR(_ZN7S7599C4C1Ev),
  NSPAIR(_ZN7S7599C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7599C4[];
extern void _ZN7S7599C4D1Ev();
extern void _ZN7S7599C4D0Ev();
extern void _ZN7S7599C43v19Ev();
extern void _ZN7S7599C43v20Ev();
extern void _ZN7S7599C43v21Ev();
static  VTBL_ENTRY vtc_S7599C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7599C4[0]),
  (VTBL_ENTRY)&_ZN7S7599C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7599C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7599C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7599C43v20Ev,
  (VTBL_ENTRY)&_ZN7S7599C43v21Ev,
};
extern VTBL_ENTRY _ZTI7S7599C4[];
extern  VTBL_ENTRY _ZTV7S7599C4[];
Class_Descriptor cd_S7599C4 = {  "S7599C4", // class name
  0,0,//no base classes
  &(vtc_S7599C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7599C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7599C4),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  S7599C3  {
  ::S7599C4 s7599c3f0;
  int s7599c3f1;
  long double s7599c3f2[2];
  ::S7589C7 s7599c3f3;
  virtual void  v4(); // _ZN7S7599C32v4Ev
  virtual void  v5(); // _ZN7S7599C32v5Ev
  virtual void  v6(); // _ZN7S7599C32v6Ev
  virtual void  v7(); // _ZN7S7599C32v7Ev
  ~S7599C3(); // tgen
  S7599C3(); // tgen
};
//SIG(-1 S7599C3) C1{ v1 v2 v3 v4 FC2{ vd v5 v6 v7 Fs} Fi FD[2] FC3{ VBC4{ vd v12 v13 v14 Fs} vd v8 v9 v10 v11 Fi}}


void  S7599C3 ::v4(){vfunc_called(this, "_ZN7S7599C32v4Ev");}
void  S7599C3 ::v5(){vfunc_called(this, "_ZN7S7599C32v5Ev");}
void  S7599C3 ::v6(){vfunc_called(this, "_ZN7S7599C32v6Ev");}
void  S7599C3 ::v7(){vfunc_called(this, "_ZN7S7599C32v7Ev");}
S7599C3 ::~S7599C3(){ note_dtor("S7599C3", this);} // tgen
S7599C3 ::S7599C3(){ note_ctor("S7599C3", this);} // tgen

static void Test_S7599C3()
{
  extern Class_Descriptor cd_S7599C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7599C3, buf);
    S7599C3 *dp, &lv = *(dp=new (buf) S7599C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7599C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7599C3)");
    check_field_offset(lv, s7599c3f0, ABISELECT(8,4), "S7599C3.s7599c3f0");
    check_field_offset(lv, s7599c3f1, ABISELECT(24,12), "S7599C3.s7599c3f1");
    check_field_offset(lv, s7599c3f2, ABISELECT(32,16), "S7599C3.s7599c3f2");
    check_field_offset(lv, s7599c3f3, ABISELECT(64,40), "S7599C3.s7599c3f3");
    test_class_info(&lv, &cd_S7599C3);
    dp->~S7599C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7599C3(Test_S7599C3, "S7599C3", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7599C3C1Ev();
extern void _ZN7S7599C3D1Ev();
Name_Map name_map_S7599C3[] = {
  NSPAIR(_ZN7S7599C3C1Ev),
  NSPAIR(_ZN7S7599C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7599C3[];
extern void _ZN7S7599C32v4Ev();
extern void _ZN7S7599C32v5Ev();
extern void _ZN7S7599C32v6Ev();
extern void _ZN7S7599C32v7Ev();
static  VTBL_ENTRY vtc_S7599C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7599C3[0]),
  (VTBL_ENTRY)&_ZN7S7599C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S7599C3[];
extern  VTBL_ENTRY _ZTV7S7599C3[];
Class_Descriptor cd_S7599C3 = {  "S7599C3", // class name
  0,0,//no base classes
  &(vtc_S7599C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7599C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7599C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7599C6_nt  {
  void *s7599c6f0;
  virtual void  v8(); // _ZN10S7599C6_nt2v8Ev
  virtual void  v9(); // _ZN10S7599C6_nt2v9Ev
  virtual void  v10(); // _ZN10S7599C6_nt3v10Ev
  virtual void  v11(); // _ZN10S7599C6_nt3v11Ev
  virtual void  v12(); // _ZN10S7599C6_nt3v12Ev
  virtual void  v13(); // _ZN10S7599C6_nt3v13Ev
  ~S7599C6_nt(); // tgen
  S7599C6_nt(); // tgen
};
//SIG(-1 S7599C6_nt) C1{ v1 v2 v3 v4 v5 v6 Fp}


void  S7599C6_nt ::v8(){vfunc_called(this, "_ZN10S7599C6_nt2v8Ev");}
void  S7599C6_nt ::v9(){vfunc_called(this, "_ZN10S7599C6_nt2v9Ev");}
void  S7599C6_nt ::v10(){vfunc_called(this, "_ZN10S7599C6_nt3v10Ev");}
void  S7599C6_nt ::v11(){vfunc_called(this, "_ZN10S7599C6_nt3v11Ev");}
void  S7599C6_nt ::v12(){vfunc_called(this, "_ZN10S7599C6_nt3v12Ev");}
void  S7599C6_nt ::v13(){vfunc_called(this, "_ZN10S7599C6_nt3v13Ev");}
S7599C6_nt ::~S7599C6_nt(){ note_dtor("S7599C6_nt", this);} // tgen
S7599C6_nt ::S7599C6_nt(){ note_ctor("S7599C6_nt", this);} // tgen

//skip512 S7599C6_nt

#else // __cplusplus

extern void _ZN10S7599C6_ntC1Ev();
extern void _ZN10S7599C6_ntD1Ev();
Name_Map name_map_S7599C6_nt[] = {
  NSPAIR(_ZN10S7599C6_ntC1Ev),
  NSPAIR(_ZN10S7599C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7599C6_nt[];
extern void _ZN10S7599C6_nt2v8Ev();
extern void _ZN10S7599C6_nt2v9Ev();
extern void _ZN10S7599C6_nt3v10Ev();
extern void _ZN10S7599C6_nt3v11Ev();
extern void _ZN10S7599C6_nt3v12Ev();
extern void _ZN10S7599C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S7599C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7599C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S7599C6_nt[];
VTBL_ENTRY *P__ZTI10S7599C6_nt = _ZTI10S7599C6_nt; 
extern  VTBL_ENTRY _ZTV10S7599C6_nt[];
Class_Descriptor cd_S7599C6_nt = {  "S7599C6_nt", // class name
  0,0,//no base classes
  &(vtc_S7599C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7599C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7599C6_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  S7599C2  : virtual S7599C3 , S7599C6_nt {
  virtual  ~S7599C2(); // _ZN7S7599C2D2Ev
  virtual void  v14(); // _ZN7S7599C23v14Ev
  virtual void  v15(); // _ZN7S7599C23v15Ev
  S7599C2(); // tgen
};
//SIG(-1 S7599C2) C1{ VBC2{ v3 v4 v5 v6 FC3{ vd v13 v14 v15 Fs} Fi FD[2] FC4{ VBC5{ vd v20 v21 v22 Fs} vd v16 v17 v18 v19 Fi}} BC6{ v7 v8 v9 v10 v11 v12 Fp} vd v1 v2}


 S7599C2 ::~S7599C2(){ note_dtor("S7599C2", this);}
void  S7599C2 ::v14(){vfunc_called(this, "_ZN7S7599C23v14Ev");}
void  S7599C2 ::v15(){vfunc_called(this, "_ZN7S7599C23v15Ev");}
S7599C2 ::S7599C2(){ note_ctor("S7599C2", this);} // tgen

static void Test_S7599C2()
{
  extern Class_Descriptor cd_S7599C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S7599C2, buf);
    S7599C2 *dp, &lv = *(dp=new (buf) S7599C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S7599C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7599C2)");
    check_base_class_offset(lv, (S7599C3*), ABISELECT(16,8), "S7599C2");
    check_base_class_offset(lv, (S7599C6_nt*), 0, "S7599C2");
    test_class_info(&lv, &cd_S7599C2);
    dp->~S7599C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7599C2(Test_S7599C2, "S7599C2", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S7599C2C1Ev();
extern void _ZN7S7599C2D2Ev();
Name_Map name_map_S7599C2[] = {
  NSPAIR(_ZN7S7599C2C1Ev),
  NSPAIR(_ZN7S7599C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7599C3;
extern VTBL_ENTRY _ZTI7S7599C3[];
extern  VTBL_ENTRY _ZTV7S7599C3[];
extern Class_Descriptor cd_S7599C6_nt;
extern VTBL_ENTRY _ZTI10S7599C6_nt[];
extern  VTBL_ENTRY _ZTV10S7599C6_nt[];
static Base_Class bases_S7599C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7599C3,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7599C6_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 _ZTI7S7599C2[];
extern void _ZN10S7599C6_nt2v8Ev();
extern void _ZN10S7599C6_nt2v9Ev();
extern void _ZN10S7599C6_nt3v10Ev();
extern void _ZN10S7599C6_nt3v11Ev();
extern void _ZN10S7599C6_nt3v12Ev();
extern void _ZN10S7599C6_nt3v13Ev();
extern void _ZN7S7599C2D1Ev();
extern void _ZN7S7599C2D0Ev();
extern void _ZN7S7599C23v14Ev();
extern void _ZN7S7599C23v15Ev();
extern void _ZN7S7599C32v4Ev();
extern void _ZN7S7599C32v5Ev();
extern void _ZN7S7599C32v6Ev();
extern void _ZN7S7599C32v7Ev();
static  VTBL_ENTRY vtc_S7599C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7599C2[0]),
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S7599C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7599C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7599C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7599C23v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7599C2[0]),
  (VTBL_ENTRY)&_ZN7S7599C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v7Ev,
};
extern VTBL_ENTRY _ZTV7S7599C2[];
static  VTT_ENTRY vtt_S7599C2[] = {
  {&(_ZTV7S7599C2[3]),  3,23},
  {&(_ZTV7S7599C2[19]),  19,23},
};
extern VTBL_ENTRY _ZTI7S7599C2[];
extern  VTBL_ENTRY _ZTV7S7599C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7599C2[];
Class_Descriptor cd_S7599C2 = {  "S7599C2", // class name
  bases_S7599C2, 2,
  &(vtc_S7599C2[0]), // expected_vtbl_contents
  &(vtt_S7599C2[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S7599C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7599C2),23, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7599C2),2, //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  S7599C7  {
  virtual void  v16(); // _ZN7S7599C73v16Ev
  virtual void  v17(); // _ZN7S7599C73v17Ev
  virtual void  v18(); // _ZN7S7599C73v18Ev
  ~S7599C7(); // tgen
  S7599C7(); // tgen
};
//SIG(-1 S7599C7) C1{ v1 v2 v3}


void  S7599C7 ::v16(){vfunc_called(this, "_ZN7S7599C73v16Ev");}
void  S7599C7 ::v17(){vfunc_called(this, "_ZN7S7599C73v17Ev");}
void  S7599C7 ::v18(){vfunc_called(this, "_ZN7S7599C73v18Ev");}
S7599C7 ::~S7599C7(){ note_dtor("S7599C7", this);} // tgen
S7599C7 ::S7599C7(){ note_ctor("S7599C7", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7599C7C1Ev();
extern void _ZN7S7599C7D1Ev();
Name_Map name_map_S7599C7[] = {
  NSPAIR(_ZN7S7599C7C1Ev),
  NSPAIR(_ZN7S7599C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7599C7[];
extern void _ZN7S7599C73v16Ev();
extern void _ZN7S7599C73v17Ev();
extern void _ZN7S7599C73v18Ev();
static  VTBL_ENTRY vtc_S7599C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7599C7[0]),
  (VTBL_ENTRY)&_ZN7S7599C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7599C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7599C73v18Ev,
};
extern VTBL_ENTRY _ZTI7S7599C7[];
extern  VTBL_ENTRY _ZTV7S7599C7[];
Class_Descriptor cd_S7599C7 = {  "S7599C7", // class name
  0,0,//no base classes
  &(vtc_S7599C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7599C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7599C7),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  S7599C1  : S7599C2 , S7599C7 {
  short s7599c1f0;
  virtual void  v1(); // _ZN7S7599C12v1Ev
  virtual void  v2(); // _ZN7S7599C12v2Ev
  virtual void  v3(); // _ZN7S7599C12v3Ev
  ~S7599C1(); // tgen
  S7599C1(); // tgen
};
//SIG(1 S7599C1) C1{ BC2{ VBC3{ v4 v5 v6 v7 FC4{ vd v19 v20 v21 Fs} Fi FD[2] FC5{ VBC6{ vd v26 v27 v28 Fs} vd v22 v23 v24 v25 Fi}} BC7{ v8 v9 v10 v11 v12 v13 Fp} vd v14 v15} BC8{ v16 v17 v18} v1 v2 v3 Fs}


void  S7599C1 ::v1(){vfunc_called(this, "_ZN7S7599C12v1Ev");}
void  S7599C1 ::v2(){vfunc_called(this, "_ZN7S7599C12v2Ev");}
void  S7599C1 ::v3(){vfunc_called(this, "_ZN7S7599C12v3Ev");}
S7599C1 ::~S7599C1(){ note_dtor("S7599C1", this);} // tgen
S7599C1 ::S7599C1(){ note_ctor("S7599C1", this);} // tgen

static void Test_S7599C1()
{
  extern Class_Descriptor cd_S7599C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,19)];
    init_test(&cd_S7599C1, buf);
    S7599C1 *dp, &lv = *(dp=new (buf) S7599C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S7599C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7599C1)");
    check_base_class_offset(lv, (S7599C3*)(S7599C2*), ABISELECT(32,16), "S7599C1");
    check_base_class_offset(lv, (S7599C6_nt*)(S7599C2*), 0, "S7599C1");
    check_base_class_offset(lv, (S7599C2*), 0, "S7599C1");
    check_base_class_offset(lv, (S7599C7*), ABISELECT(16,8), "S7599C1");
    check_field_offset(lv, s7599c1f0, ABISELECT(24,12), "S7599C1.s7599c1f0");
    test_class_info(&lv, &cd_S7599C1);
    dp->~S7599C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7599C1(Test_S7599C1, "S7599C1", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN7S7599C1C1Ev();
extern void _ZN7S7599C1D1Ev();
Name_Map name_map_S7599C1[] = {
  NSPAIR(_ZN7S7599C1C1Ev),
  NSPAIR(_ZN7S7599C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7599C3;
extern VTBL_ENTRY _ZTI7S7599C3[];
extern  VTBL_ENTRY _ZTV7S7599C3[];
extern Class_Descriptor cd_S7599C6_nt;
extern VTBL_ENTRY _ZTI10S7599C6_nt[];
extern  VTBL_ENTRY _ZTV10S7599C6_nt[];
extern Class_Descriptor cd_S7599C2;
extern VTBL_ENTRY _ZTI7S7599C2[];
extern  VTBL_ENTRY _ZTV7S7599C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7599C2[];
extern Class_Descriptor cd_S7599C7;
extern VTBL_ENTRY _ZTI7S7599C7[];
extern  VTBL_ENTRY _ZTV7S7599C7[];
static Base_Class bases_S7599C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7599C3,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7599C6_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_S7599C2,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7599C7,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7599C1[];
extern void _ZN10S7599C6_nt2v8Ev();
extern void _ZN10S7599C6_nt2v9Ev();
extern void _ZN10S7599C6_nt3v10Ev();
extern void _ZN10S7599C6_nt3v11Ev();
extern void _ZN10S7599C6_nt3v12Ev();
extern void _ZN10S7599C6_nt3v13Ev();
extern void _ZN7S7599C1D1Ev();
extern void _ZN7S7599C1D0Ev();
extern void _ZN7S7599C23v14Ev();
extern void _ZN7S7599C23v15Ev();
extern void _ZN7S7599C12v1Ev();
extern void _ZN7S7599C12v2Ev();
extern void _ZN7S7599C12v3Ev();
extern void _ZN7S7599C73v16Ev();
extern void _ZN7S7599C73v17Ev();
extern void _ZN7S7599C73v18Ev();
extern void _ZN7S7599C32v4Ev();
extern void _ZN7S7599C32v5Ev();
extern void _ZN7S7599C32v6Ev();
extern void _ZN7S7599C32v7Ev();
static  VTBL_ENTRY vtc_S7599C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7599C1[0]),
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S7599C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7599C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7599C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7599C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7599C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7599C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7599C12v3Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7599C1[0]),
  (VTBL_ENTRY)&_ZN7S7599C73v16Ev,
  (VTBL_ENTRY)&_ZN7S7599C73v17Ev,
  (VTBL_ENTRY)&_ZN7S7599C73v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7599C1[0]),
  (VTBL_ENTRY)&_ZN7S7599C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v7Ev,
};
extern VTBL_ENTRY _ZTV7S7599C1[];
extern void _ZN10S7599C6_nt2v8Ev();
extern void _ZN10S7599C6_nt2v9Ev();
extern void _ZN10S7599C6_nt3v10Ev();
extern void _ZN10S7599C6_nt3v11Ev();
extern void _ZN10S7599C6_nt3v12Ev();
extern void _ZN10S7599C6_nt3v13Ev();
extern void _ZN7S7599C2D1Ev();
extern void _ZN7S7599C2D0Ev();
extern void _ZN7S7599C23v14Ev();
extern void _ZN7S7599C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7599C2__7S7599C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7599C2[0]),
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7599C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S7599C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7599C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7599C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7599C23v15Ev,
};
extern void _ZN7S7599C32v4Ev();
extern void _ZN7S7599C32v5Ev();
extern void _ZN7S7599C32v6Ev();
extern void _ZN7S7599C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7599C3__7S7599C2__7S7599C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7599C2[0]),
  (VTBL_ENTRY)&_ZN7S7599C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7599C32v7Ev,
};
static  VTT_ENTRY vtt_S7599C1[] = {
  {&(_ZTV7S7599C1[3]),  3,31},
  {&(_tg__ZTV7S7599C2__7S7599C1[3]),  3,13},
  {&(_tg__ZTV7S7599C3__7S7599C2__7S7599C1[6]),  6,10},
  {&(_ZTV7S7599C1[27]),  27,31},
};
extern VTBL_ENTRY _ZTI7S7599C1[];
extern  VTBL_ENTRY _ZTV7S7599C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7599C1[];
Class_Descriptor cd_S7599C1 = {  "S7599C1", // class name
  bases_S7599C1, 4,
  &(vtc_S7599C1[0]), // expected_vtbl_contents
  &(vtt_S7599C1[0]), // expected_vtt_contents
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI7S7599C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7599C1),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7599C1),4, //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  S7001C4  {
  void *s7001c4f0;
  char s7001c4f1[2];
  virtual void  v11(); // _ZN7S7001C43v11Ev
  virtual void  v12(); // _ZN7S7001C43v12Ev
  virtual void  v13(); // _ZN7S7001C43v13Ev
  virtual void  v14(); // _ZN7S7001C43v14Ev
  ~S7001C4(); // tgen
  S7001C4(); // tgen
};
//SIG(-1 S7001C4) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S7001C4 ::v11(){vfunc_called(this, "_ZN7S7001C43v11Ev");}
void  S7001C4 ::v12(){vfunc_called(this, "_ZN7S7001C43v12Ev");}
void  S7001C4 ::v13(){vfunc_called(this, "_ZN7S7001C43v13Ev");}
void  S7001C4 ::v14(){vfunc_called(this, "_ZN7S7001C43v14Ev");}
S7001C4 ::~S7001C4(){ note_dtor("S7001C4", this);} // tgen
S7001C4 ::S7001C4(){ note_ctor("S7001C4", this);} // tgen

static void Test_S7001C4()
{
  extern Class_Descriptor cd_S7001C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7001C4, buf);
    S7001C4 *dp, &lv = *(dp=new (buf) S7001C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7001C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7001C4)");
    check_field_offset(lv, s7001c4f0, ABISELECT(8,4), "S7001C4.s7001c4f0");
    check_field_offset(lv, s7001c4f1, ABISELECT(16,8), "S7001C4.s7001c4f1");
    test_class_info(&lv, &cd_S7001C4);
    dp->~S7001C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7001C4(Test_S7001C4, "S7001C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7001C4C1Ev();
extern void _ZN7S7001C4D1Ev();
Name_Map name_map_S7001C4[] = {
  NSPAIR(_ZN7S7001C4C1Ev),
  NSPAIR(_ZN7S7001C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7001C4[];
extern void _ZN7S7001C43v11Ev();
extern void _ZN7S7001C43v12Ev();
extern void _ZN7S7001C43v13Ev();
extern void _ZN7S7001C43v14Ev();
static  VTBL_ENTRY vtc_S7001C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7001C4[0]),
  (VTBL_ENTRY)&_ZN7S7001C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7001C4[];
extern  VTBL_ENTRY _ZTV7S7001C4[];
Class_Descriptor cd_S7001C4 = {  "S7001C4", // class name
  0,0,//no base classes
  &(vtc_S7001C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7001C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7001C4),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  S7001C3  : S7001C4 {
  void *s7001c3f0[4];
  ~S7001C3(); // tgen
  S7001C3(); // tgen
};
//SIG(-1 S7001C3) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S7001C3()
{
  extern Class_Descriptor cd_S7001C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7001C3, buf);
    S7001C3 *dp, &lv = *(dp=new (buf) S7001C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7001C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7001C3)");
    check_base_class_offset(lv, (S7001C4*), 0, "S7001C3");
    check_field_offset(lv, s7001c3f0, ABISELECT(24,12), "S7001C3.s7001c3f0");
    test_class_info(&lv, &cd_S7001C3);
    dp->~S7001C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7001C3(Test_S7001C3, "S7001C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7001C3C1Ev();
extern void _ZN7S7001C3D1Ev();
Name_Map name_map_S7001C3[] = {
  NSPAIR(_ZN7S7001C3C1Ev),
  NSPAIR(_ZN7S7001C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7001C4;
extern VTBL_ENTRY _ZTI7S7001C4[];
extern  VTBL_ENTRY _ZTV7S7001C4[];
static Base_Class bases_S7001C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7001C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7001C3[];
extern void _ZN7S7001C43v11Ev();
extern void _ZN7S7001C43v12Ev();
extern void _ZN7S7001C43v13Ev();
extern void _ZN7S7001C43v14Ev();
static  VTBL_ENTRY vtc_S7001C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7001C3[0]),
  (VTBL_ENTRY)&_ZN7S7001C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7001C3[];
extern  VTBL_ENTRY _ZTV7S7001C3[];
Class_Descriptor cd_S7001C3 = {  "S7001C3", // class name
  bases_S7001C3, 1,
  &(vtc_S7001C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7001C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7001C3),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  S7001C2  {
  ::S7001C3 s7001c2f0;
  virtual void  v6(); // _ZN7S7001C22v6Ev
  virtual void  v7(); // _ZN7S7001C22v7Ev
  virtual void  v8(); // _ZN7S7001C22v8Ev
  virtual void  v9(); // _ZN7S7001C22v9Ev
  virtual void  v10(); // _ZN7S7001C23v10Ev
  ~S7001C2(); // tgen
  S7001C2(); // tgen
};
//SIG(-1 S7001C2) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v6 v7 v8 v9 Fp Fc[2]} Fp[4]}}


void  S7001C2 ::v6(){vfunc_called(this, "_ZN7S7001C22v6Ev");}
void  S7001C2 ::v7(){vfunc_called(this, "_ZN7S7001C22v7Ev");}
void  S7001C2 ::v8(){vfunc_called(this, "_ZN7S7001C22v8Ev");}
void  S7001C2 ::v9(){vfunc_called(this, "_ZN7S7001C22v9Ev");}
void  S7001C2 ::v10(){vfunc_called(this, "_ZN7S7001C23v10Ev");}
S7001C2 ::~S7001C2(){ note_dtor("S7001C2", this);} // tgen
S7001C2 ::S7001C2(){ note_ctor("S7001C2", this);} // tgen

static void Test_S7001C2()
{
  extern Class_Descriptor cd_S7001C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7001C2, buf);
    S7001C2 *dp, &lv = *(dp=new (buf) S7001C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7001C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7001C2)");
    check_field_offset(lv, s7001c2f0, ABISELECT(8,4), "S7001C2.s7001c2f0");
    test_class_info(&lv, &cd_S7001C2);
    dp->~S7001C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7001C2(Test_S7001C2, "S7001C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7001C2C1Ev();
extern void _ZN7S7001C2D1Ev();
Name_Map name_map_S7001C2[] = {
  NSPAIR(_ZN7S7001C2C1Ev),
  NSPAIR(_ZN7S7001C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7001C2[];
extern void _ZN7S7001C22v6Ev();
extern void _ZN7S7001C22v7Ev();
extern void _ZN7S7001C22v8Ev();
extern void _ZN7S7001C22v9Ev();
extern void _ZN7S7001C23v10Ev();
static  VTBL_ENTRY vtc_S7001C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7001C2[0]),
  (VTBL_ENTRY)&_ZN7S7001C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7001C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7001C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7001C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7001C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7001C2[];
extern  VTBL_ENTRY _ZTV7S7001C2[];
Class_Descriptor cd_S7001C2 = {  "S7001C2", // class name
  0,0,//no base classes
  &(vtc_S7001C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7001C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7001C2),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  S7001C6  {
  __tsi64 s7001c6f0[5];
  void *s7001c6f1;
  virtual void  v21(); // _ZN7S7001C63v21Ev
  virtual void  v22(); // _ZN7S7001C63v22Ev
  virtual void  v23(); // _ZN7S7001C63v23Ev
  virtual void  v24(); // _ZN7S7001C63v24Ev
  ~S7001C6(); // tgen
  S7001C6(); // tgen
};
//SIG(-1 S7001C6) C1{ v1 v2 v3 v4 FL[5] Fp}


void  S7001C6 ::v21(){vfunc_called(this, "_ZN7S7001C63v21Ev");}
void  S7001C6 ::v22(){vfunc_called(this, "_ZN7S7001C63v22Ev");}
void  S7001C6 ::v23(){vfunc_called(this, "_ZN7S7001C63v23Ev");}
void  S7001C6 ::v24(){vfunc_called(this, "_ZN7S7001C63v24Ev");}
S7001C6 ::~S7001C6(){ note_dtor("S7001C6", this);} // tgen
S7001C6 ::S7001C6(){ note_ctor("S7001C6", this);} // tgen

static void Test_S7001C6()
{
  extern Class_Descriptor cd_S7001C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S7001C6, buf);
    S7001C6 *dp, &lv = *(dp=new (buf) S7001C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S7001C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7001C6)");
    check_field_offset(lv, s7001c6f0, ABISELECT(8,4), "S7001C6.s7001c6f0");
    check_field_offset(lv, s7001c6f1, ABISELECT(48,44), "S7001C6.s7001c6f1");
    test_class_info(&lv, &cd_S7001C6);
    dp->~S7001C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7001C6(Test_S7001C6, "S7001C6", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S7001C6C1Ev();
extern void _ZN7S7001C6D1Ev();
Name_Map name_map_S7001C6[] = {
  NSPAIR(_ZN7S7001C6C1Ev),
  NSPAIR(_ZN7S7001C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7001C6[];
extern void _ZN7S7001C63v21Ev();
extern void _ZN7S7001C63v22Ev();
extern void _ZN7S7001C63v23Ev();
extern void _ZN7S7001C63v24Ev();
static  VTBL_ENTRY vtc_S7001C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7001C6[0]),
  (VTBL_ENTRY)&_ZN7S7001C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7001C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7001C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7001C63v24Ev,
};
extern VTBL_ENTRY _ZTI7S7001C6[];
extern  VTBL_ENTRY _ZTV7S7001C6[];
Class_Descriptor cd_S7001C6 = {  "S7001C6", // class name
  0,0,//no base classes
  &(vtc_S7001C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S7001C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7001C6),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  S7001C5  : S7001C6 , virtual S7001C3 {
  void *s7001c5f0;
  long s7001c5f1;
  virtual void  v15(); // _ZN7S7001C53v15Ev
  virtual void  v16(); // _ZN7S7001C53v16Ev
  virtual void  v17(); // _ZN7S7001C53v17Ev
  virtual void  v18(); // _ZN7S7001C53v18Ev
  virtual void  v19(); // _ZN7S7001C53v19Ev
  virtual void  v20(); // _ZN7S7001C53v20Ev
  ~S7001C5(); // tgen
  S7001C5(); // tgen
};
//SIG(1 S7001C5) C1{ BC2{ v7 v8 v9 v10 FL[5] Fp} VBC3{ BC4{ v11 v12 v13 v14 Fp Fc[2]} Fp[4]} v1 v2 v3 v4 v5 v6 Fp Fl}


void  S7001C5 ::v15(){vfunc_called(this, "_ZN7S7001C53v15Ev");}
void  S7001C5 ::v16(){vfunc_called(this, "_ZN7S7001C53v16Ev");}
void  S7001C5 ::v17(){vfunc_called(this, "_ZN7S7001C53v17Ev");}
void  S7001C5 ::v18(){vfunc_called(this, "_ZN7S7001C53v18Ev");}
void  S7001C5 ::v19(){vfunc_called(this, "_ZN7S7001C53v19Ev");}
void  S7001C5 ::v20(){vfunc_called(this, "_ZN7S7001C53v20Ev");}
S7001C5 ::~S7001C5(){ note_dtor("S7001C5", this);} // tgen
S7001C5 ::S7001C5(){ note_ctor("S7001C5", this);} // tgen

static void Test_S7001C5()
{
  extern Class_Descriptor cd_S7001C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S7001C5, buf);
    S7001C5 *dp, &lv = *(dp=new (buf) S7001C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S7001C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7001C5)");
    check_base_class_offset(lv, (S7001C6*), 0, "S7001C5");
    check_base_class_offset(lv, (S7001C4*)(S7001C3*), ABISELECT(72,56), "S7001C5");
    check_base_class_offset(lv, (S7001C3*), ABISELECT(72,56), "S7001C5");
    check_field_offset(lv, s7001c5f0, ABISELECT(56,48), "S7001C5.s7001c5f0");
    check_field_offset(lv, s7001c5f1, ABISELECT(64,52), "S7001C5.s7001c5f1");
    test_class_info(&lv, &cd_S7001C5);
    dp->~S7001C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7001C5(Test_S7001C5, "S7001C5", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S7001C5C1Ev();
extern void _ZN7S7001C5D1Ev();
Name_Map name_map_S7001C5[] = {
  NSPAIR(_ZN7S7001C5C1Ev),
  NSPAIR(_ZN7S7001C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7001C6;
extern VTBL_ENTRY _ZTI7S7001C6[];
extern  VTBL_ENTRY _ZTV7S7001C6[];
extern Class_Descriptor cd_S7001C4;
extern VTBL_ENTRY _ZTI7S7001C4[];
extern  VTBL_ENTRY _ZTV7S7001C4[];
extern Class_Descriptor cd_S7001C3;
extern VTBL_ENTRY _ZTI7S7001C3[];
extern  VTBL_ENTRY _ZTV7S7001C3[];
static Base_Class bases_S7001C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7001C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7001C4,    ABISELECT(72,56), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_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_S7001C3,    ABISELECT(72,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7001C5[];
extern void _ZN7S7001C63v21Ev();
extern void _ZN7S7001C63v22Ev();
extern void _ZN7S7001C63v23Ev();
extern void _ZN7S7001C63v24Ev();
extern void _ZN7S7001C53v15Ev();
extern void _ZN7S7001C53v16Ev();
extern void _ZN7S7001C53v17Ev();
extern void _ZN7S7001C53v18Ev();
extern void _ZN7S7001C53v19Ev();
extern void _ZN7S7001C53v20Ev();
extern void _ZN7S7001C43v11Ev();
extern void _ZN7S7001C43v12Ev();
extern void _ZN7S7001C43v13Ev();
extern void _ZN7S7001C43v14Ev();
static  VTBL_ENTRY vtc_S7001C5[] = {
  ABISELECT(72,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7001C5[0]),
  (VTBL_ENTRY)&_ZN7S7001C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7001C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7001C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7001C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7001C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7001C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7001C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7001C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7001C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7001C53v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7001C5[0]),
  (VTBL_ENTRY)&_ZN7S7001C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7001C43v14Ev,
};
extern VTBL_ENTRY _ZTV7S7001C5[];
static  VTT_ENTRY vtt_S7001C5[] = {
  {&(_ZTV7S7001C5[3]),  3,23},
  {&(_ZTV7S7001C5[19]),  19,23},
};
extern VTBL_ENTRY _ZTI7S7001C5[];
extern  VTBL_ENTRY _ZTV7S7001C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7001C5[];
Class_Descriptor cd_S7001C5 = {  "S7001C5", // class name
  bases_S7001C5, 3,
  &(vtc_S7001C5[0]), // expected_vtbl_contents
  &(vtt_S7001C5[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S7001C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7001C5),23, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7001C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7001C1  : S7001C2 {
  long double s7001c1f0;
  ::S7001C5 s7001c1f1[10];
  virtual void  v1(); // _ZN7S7001C12v1Ev
  virtual void  v2(); // _ZN7S7001C12v2Ev
  virtual void  v3(); // _ZN7S7001C12v3Ev
  virtual void  v4(); // _ZN7S7001C12v4Ev
  virtual void  v5(); // _ZN7S7001C12v5Ev
  ~S7001C1(); // tgen
  S7001C1(); // tgen
};
//SIG(1 S7001C1) C1{ BC2{ v6 v7 v8 v9 v10 FC3{ BC4{ v11 v12 v13 v14 Fp Fc[2]} Fp[4]}} v1 v2 v3 v4 v5 FD FC5{ BC6{ v21 v22 v23 v24 FL[5] Fp} VBC3 v15 v16 v17 v18 v19 v20 Fp Fl}[10]}


void  S7001C1 ::v1(){vfunc_called(this, "_ZN7S7001C12v1Ev");}
void  S7001C1 ::v2(){vfunc_called(this, "_ZN7S7001C12v2Ev");}
void  S7001C1 ::v3(){vfunc_called(this, "_ZN7S7001C12v3Ev");}
void  S7001C1 ::v4(){vfunc_called(this, "_ZN7S7001C12v4Ev");}
void  S7001C1 ::v5(){vfunc_called(this, "_ZN7S7001C12v5Ev");}
S7001C1 ::~S7001C1(){ note_dtor("S7001C1", this);} // tgen
S7001C1 ::S7001C1(){ note_ctor("S7001C1", this);} // tgen

static void Test_S7001C1()
{
  extern Class_Descriptor cd_S7001C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(86,222)];
    init_test(&cd_S7001C1, buf);
    S7001C1 *dp, &lv = *(dp=new (buf) S7001C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,884), "sizeof(S7001C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7001C1)");
    check_base_class_offset(lv, (S7001C2*), 0, "S7001C1");
    check_field_offset(lv, s7001c1f0, ABISELECT(64,32), "S7001C1.s7001c1f0");
    check_field_offset(lv, s7001c1f1, ABISELECT(80,44), "S7001C1.s7001c1f1");
    test_class_info(&lv, &cd_S7001C1);
    dp->~S7001C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7001C1(Test_S7001C1, "S7001C1", ABISELECT(1360,884));

#else // __cplusplus

extern void _ZN7S7001C1C1Ev();
extern void _ZN7S7001C1D1Ev();
Name_Map name_map_S7001C1[] = {
  NSPAIR(_ZN7S7001C1C1Ev),
  NSPAIR(_ZN7S7001C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7001C2;
extern VTBL_ENTRY _ZTI7S7001C2[];
extern  VTBL_ENTRY _ZTV7S7001C2[];
static Base_Class bases_S7001C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7001C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7001C1[];
extern void _ZN7S7001C22v6Ev();
extern void _ZN7S7001C22v7Ev();
extern void _ZN7S7001C22v8Ev();
extern void _ZN7S7001C22v9Ev();
extern void _ZN7S7001C23v10Ev();
extern void _ZN7S7001C12v1Ev();
extern void _ZN7S7001C12v2Ev();
extern void _ZN7S7001C12v3Ev();
extern void _ZN7S7001C12v4Ev();
extern void _ZN7S7001C12v5Ev();
static  VTBL_ENTRY vtc_S7001C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7001C1[0]),
  (VTBL_ENTRY)&_ZN7S7001C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7001C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7001C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7001C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7001C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7001C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7001C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7001C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7001C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7001C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7001C1[];
extern  VTBL_ENTRY _ZTV7S7001C1[];
Class_Descriptor cd_S7001C1 = {  "S7001C1", // class name
  bases_S7001C1, 1,
  &(vtc_S7001C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1360,884), // object size
  NSPAIRA(_ZTI7S7001C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7001C1),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  S7000C4  {
  void *s7000c4f0;
  char s7000c4f1[2];
  virtual void  v11(); // _ZN7S7000C43v11Ev
  virtual void  v12(); // _ZN7S7000C43v12Ev
  virtual void  v13(); // _ZN7S7000C43v13Ev
  virtual void  v14(); // _ZN7S7000C43v14Ev
  ~S7000C4(); // tgen
  S7000C4(); // tgen
};
//SIG(-1 S7000C4) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S7000C4 ::v11(){vfunc_called(this, "_ZN7S7000C43v11Ev");}
void  S7000C4 ::v12(){vfunc_called(this, "_ZN7S7000C43v12Ev");}
void  S7000C4 ::v13(){vfunc_called(this, "_ZN7S7000C43v13Ev");}
void  S7000C4 ::v14(){vfunc_called(this, "_ZN7S7000C43v14Ev");}
S7000C4 ::~S7000C4(){ note_dtor("S7000C4", this);} // tgen
S7000C4 ::S7000C4(){ note_ctor("S7000C4", this);} // tgen

static void Test_S7000C4()
{
  extern Class_Descriptor cd_S7000C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7000C4, buf);
    S7000C4 *dp, &lv = *(dp=new (buf) S7000C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7000C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7000C4)");
    check_field_offset(lv, s7000c4f0, ABISELECT(8,4), "S7000C4.s7000c4f0");
    check_field_offset(lv, s7000c4f1, ABISELECT(16,8), "S7000C4.s7000c4f1");
    test_class_info(&lv, &cd_S7000C4);
    dp->~S7000C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7000C4(Test_S7000C4, "S7000C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7000C4C1Ev();
extern void _ZN7S7000C4D1Ev();
Name_Map name_map_S7000C4[] = {
  NSPAIR(_ZN7S7000C4C1Ev),
  NSPAIR(_ZN7S7000C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7000C4[];
extern void _ZN7S7000C43v11Ev();
extern void _ZN7S7000C43v12Ev();
extern void _ZN7S7000C43v13Ev();
extern void _ZN7S7000C43v14Ev();
static  VTBL_ENTRY vtc_S7000C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7000C4[0]),
  (VTBL_ENTRY)&_ZN7S7000C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7000C4[];
extern  VTBL_ENTRY _ZTV7S7000C4[];
Class_Descriptor cd_S7000C4 = {  "S7000C4", // class name
  0,0,//no base classes
  &(vtc_S7000C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7000C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7000C4),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  S7000C3  : S7000C4 {
  void *s7000c3f0[4];
  ~S7000C3(); // tgen
  S7000C3(); // tgen
};
//SIG(-1 S7000C3) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S7000C3()
{
  extern Class_Descriptor cd_S7000C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7000C3, buf);
    S7000C3 *dp, &lv = *(dp=new (buf) S7000C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7000C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7000C3)");
    check_base_class_offset(lv, (S7000C4*), 0, "S7000C3");
    check_field_offset(lv, s7000c3f0, ABISELECT(24,12), "S7000C3.s7000c3f0");
    test_class_info(&lv, &cd_S7000C3);
    dp->~S7000C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7000C3(Test_S7000C3, "S7000C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7000C3C1Ev();
extern void _ZN7S7000C3D1Ev();
Name_Map name_map_S7000C3[] = {
  NSPAIR(_ZN7S7000C3C1Ev),
  NSPAIR(_ZN7S7000C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7000C4;
extern VTBL_ENTRY _ZTI7S7000C4[];
extern  VTBL_ENTRY _ZTV7S7000C4[];
static Base_Class bases_S7000C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7000C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7000C3[];
extern void _ZN7S7000C43v11Ev();
extern void _ZN7S7000C43v12Ev();
extern void _ZN7S7000C43v13Ev();
extern void _ZN7S7000C43v14Ev();
static  VTBL_ENTRY vtc_S7000C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7000C3[0]),
  (VTBL_ENTRY)&_ZN7S7000C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S7000C3[];
extern  VTBL_ENTRY _ZTV7S7000C3[];
Class_Descriptor cd_S7000C3 = {  "S7000C3", // class name
  bases_S7000C3, 1,
  &(vtc_S7000C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7000C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7000C3),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  S7000C2  {
  ::S7000C3 s7000c2f0;
  virtual void  v6(); // _ZN7S7000C22v6Ev
  virtual void  v7(); // _ZN7S7000C22v7Ev
  virtual void  v8(); // _ZN7S7000C22v8Ev
  virtual void  v9(); // _ZN7S7000C22v9Ev
  virtual void  v10(); // _ZN7S7000C23v10Ev
  ~S7000C2(); // tgen
  S7000C2(); // tgen
};
//SIG(-1 S7000C2) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v6 v7 v8 v9 Fp Fc[2]} Fp[4]}}


void  S7000C2 ::v6(){vfunc_called(this, "_ZN7S7000C22v6Ev");}
void  S7000C2 ::v7(){vfunc_called(this, "_ZN7S7000C22v7Ev");}
void  S7000C2 ::v8(){vfunc_called(this, "_ZN7S7000C22v8Ev");}
void  S7000C2 ::v9(){vfunc_called(this, "_ZN7S7000C22v9Ev");}
void  S7000C2 ::v10(){vfunc_called(this, "_ZN7S7000C23v10Ev");}
S7000C2 ::~S7000C2(){ note_dtor("S7000C2", this);} // tgen
S7000C2 ::S7000C2(){ note_ctor("S7000C2", this);} // tgen

static void Test_S7000C2()
{
  extern Class_Descriptor cd_S7000C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7000C2, buf);
    S7000C2 *dp, &lv = *(dp=new (buf) S7000C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7000C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7000C2)");
    check_field_offset(lv, s7000c2f0, ABISELECT(8,4), "S7000C2.s7000c2f0");
    test_class_info(&lv, &cd_S7000C2);
    dp->~S7000C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7000C2(Test_S7000C2, "S7000C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7000C2C1Ev();
extern void _ZN7S7000C2D1Ev();
Name_Map name_map_S7000C2[] = {
  NSPAIR(_ZN7S7000C2C1Ev),
  NSPAIR(_ZN7S7000C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7000C2[];
extern void _ZN7S7000C22v6Ev();
extern void _ZN7S7000C22v7Ev();
extern void _ZN7S7000C22v8Ev();
extern void _ZN7S7000C22v9Ev();
extern void _ZN7S7000C23v10Ev();
static  VTBL_ENTRY vtc_S7000C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7000C2[0]),
  (VTBL_ENTRY)&_ZN7S7000C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7000C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7000C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7000C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7000C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7000C2[];
extern  VTBL_ENTRY _ZTV7S7000C2[];
Class_Descriptor cd_S7000C2 = {  "S7000C2", // class name
  0,0,//no base classes
  &(vtc_S7000C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7000C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7000C2),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  S7000C6  {
  long s7000c6f0[5];
  void *s7000c6f1;
  virtual void  v21(); // _ZN7S7000C63v21Ev
  virtual void  v22(); // _ZN7S7000C63v22Ev
  virtual void  v23(); // _ZN7S7000C63v23Ev
  virtual void  v24(); // _ZN7S7000C63v24Ev
  ~S7000C6(); // tgen
  S7000C6(); // tgen
};
//SIG(-1 S7000C6) C1{ v1 v2 v3 v4 Fl[5] Fp}


void  S7000C6 ::v21(){vfunc_called(this, "_ZN7S7000C63v21Ev");}
void  S7000C6 ::v22(){vfunc_called(this, "_ZN7S7000C63v22Ev");}
void  S7000C6 ::v23(){vfunc_called(this, "_ZN7S7000C63v23Ev");}
void  S7000C6 ::v24(){vfunc_called(this, "_ZN7S7000C63v24Ev");}
S7000C6 ::~S7000C6(){ note_dtor("S7000C6", this);} // tgen
S7000C6 ::S7000C6(){ note_ctor("S7000C6", this);} // tgen

static void Test_S7000C6()
{
  extern Class_Descriptor cd_S7000C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7000C6, buf);
    S7000C6 *dp, &lv = *(dp=new (buf) S7000C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7000C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7000C6)");
    check_field_offset(lv, s7000c6f0, ABISELECT(8,4), "S7000C6.s7000c6f0");
    check_field_offset(lv, s7000c6f1, ABISELECT(48,24), "S7000C6.s7000c6f1");
    test_class_info(&lv, &cd_S7000C6);
    dp->~S7000C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7000C6(Test_S7000C6, "S7000C6", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7000C6C1Ev();
extern void _ZN7S7000C6D1Ev();
Name_Map name_map_S7000C6[] = {
  NSPAIR(_ZN7S7000C6C1Ev),
  NSPAIR(_ZN7S7000C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7000C6[];
extern void _ZN7S7000C63v21Ev();
extern void _ZN7S7000C63v22Ev();
extern void _ZN7S7000C63v23Ev();
extern void _ZN7S7000C63v24Ev();
static  VTBL_ENTRY vtc_S7000C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7000C6[0]),
  (VTBL_ENTRY)&_ZN7S7000C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7000C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7000C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7000C63v24Ev,
};
extern VTBL_ENTRY _ZTI7S7000C6[];
extern  VTBL_ENTRY _ZTV7S7000C6[];
Class_Descriptor cd_S7000C6 = {  "S7000C6", // class name
  0,0,//no base classes
  &(vtc_S7000C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7000C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7000C6),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  S7000C5  : S7000C6 , virtual S7000C3 {
  void *s7000c5f0;
  long s7000c5f1;
  virtual void  v15(); // _ZN7S7000C53v15Ev
  virtual void  v16(); // _ZN7S7000C53v16Ev
  virtual void  v17(); // _ZN7S7000C53v17Ev
  virtual void  v18(); // _ZN7S7000C53v18Ev
  virtual void  v19(); // _ZN7S7000C53v19Ev
  virtual void  v20(); // _ZN7S7000C53v20Ev
  ~S7000C5(); // tgen
  S7000C5(); // tgen
};
//SIG(1 S7000C5) C1{ BC2{ v7 v8 v9 v10 Fl[5] Fp} VBC3{ BC4{ v11 v12 v13 v14 Fp Fc[2]} Fp[4]} v1 v2 v3 v4 v5 v6 Fp Fl}


void  S7000C5 ::v15(){vfunc_called(this, "_ZN7S7000C53v15Ev");}
void  S7000C5 ::v16(){vfunc_called(this, "_ZN7S7000C53v16Ev");}
void  S7000C5 ::v17(){vfunc_called(this, "_ZN7S7000C53v17Ev");}
void  S7000C5 ::v18(){vfunc_called(this, "_ZN7S7000C53v18Ev");}
void  S7000C5 ::v19(){vfunc_called(this, "_ZN7S7000C53v19Ev");}
void  S7000C5 ::v20(){vfunc_called(this, "_ZN7S7000C53v20Ev");}
S7000C5 ::~S7000C5(){ note_dtor("S7000C5", this);} // tgen
S7000C5 ::S7000C5(){ note_ctor("S7000C5", this);} // tgen

static void Test_S7000C5()
{
  extern Class_Descriptor cd_S7000C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S7000C5, buf);
    S7000C5 *dp, &lv = *(dp=new (buf) S7000C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S7000C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7000C5)");
    check_base_class_offset(lv, (S7000C6*), 0, "S7000C5");
    check_base_class_offset(lv, (S7000C4*)(S7000C3*), ABISELECT(72,36), "S7000C5");
    check_base_class_offset(lv, (S7000C3*), ABISELECT(72,36), "S7000C5");
    check_field_offset(lv, s7000c5f0, ABISELECT(56,28), "S7000C5.s7000c5f0");
    check_field_offset(lv, s7000c5f1, ABISELECT(64,32), "S7000C5.s7000c5f1");
    test_class_info(&lv, &cd_S7000C5);
    dp->~S7000C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7000C5(Test_S7000C5, "S7000C5", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S7000C5C1Ev();
extern void _ZN7S7000C5D1Ev();
Name_Map name_map_S7000C5[] = {
  NSPAIR(_ZN7S7000C5C1Ev),
  NSPAIR(_ZN7S7000C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7000C6;
extern VTBL_ENTRY _ZTI7S7000C6[];
extern  VTBL_ENTRY _ZTV7S7000C6[];
extern Class_Descriptor cd_S7000C4;
extern VTBL_ENTRY _ZTI7S7000C4[];
extern  VTBL_ENTRY _ZTV7S7000C4[];
extern Class_Descriptor cd_S7000C3;
extern VTBL_ENTRY _ZTI7S7000C3[];
extern  VTBL_ENTRY _ZTV7S7000C3[];
static Base_Class bases_S7000C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7000C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7000C4,    ABISELECT(72,36), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_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_S7000C3,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7000C5[];
extern void _ZN7S7000C63v21Ev();
extern void _ZN7S7000C63v22Ev();
extern void _ZN7S7000C63v23Ev();
extern void _ZN7S7000C63v24Ev();
extern void _ZN7S7000C53v15Ev();
extern void _ZN7S7000C53v16Ev();
extern void _ZN7S7000C53v17Ev();
extern void _ZN7S7000C53v18Ev();
extern void _ZN7S7000C53v19Ev();
extern void _ZN7S7000C53v20Ev();
extern void _ZN7S7000C43v11Ev();
extern void _ZN7S7000C43v12Ev();
extern void _ZN7S7000C43v13Ev();
extern void _ZN7S7000C43v14Ev();
static  VTBL_ENTRY vtc_S7000C5[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7000C5[0]),
  (VTBL_ENTRY)&_ZN7S7000C63v21Ev,
  (VTBL_ENTRY)&_ZN7S7000C63v22Ev,
  (VTBL_ENTRY)&_ZN7S7000C63v23Ev,
  (VTBL_ENTRY)&_ZN7S7000C63v24Ev,
  (VTBL_ENTRY)&_ZN7S7000C53v15Ev,
  (VTBL_ENTRY)&_ZN7S7000C53v16Ev,
  (VTBL_ENTRY)&_ZN7S7000C53v17Ev,
  (VTBL_ENTRY)&_ZN7S7000C53v18Ev,
  (VTBL_ENTRY)&_ZN7S7000C53v19Ev,
  (VTBL_ENTRY)&_ZN7S7000C53v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7000C5[0]),
  (VTBL_ENTRY)&_ZN7S7000C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7000C43v14Ev,
};
extern VTBL_ENTRY _ZTV7S7000C5[];
static  VTT_ENTRY vtt_S7000C5[] = {
  {&(_ZTV7S7000C5[3]),  3,23},
  {&(_ZTV7S7000C5[19]),  19,23},
};
extern VTBL_ENTRY _ZTI7S7000C5[];
extern  VTBL_ENTRY _ZTV7S7000C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7000C5[];
Class_Descriptor cd_S7000C5 = {  "S7000C5", // class name
  bases_S7000C5, 3,
  &(vtc_S7000C5[0]), // expected_vtbl_contents
  &(vtt_S7000C5[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S7000C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7000C5),23, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7000C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7000C1  : S7000C2 {
  long double s7000c1f0;
  ::S7000C5 s7000c1f1[10];
  virtual void  v1(); // _ZN7S7000C12v1Ev
  virtual void  v2(); // _ZN7S7000C12v2Ev
  virtual void  v3(); // _ZN7S7000C12v3Ev
  virtual void  v4(); // _ZN7S7000C12v4Ev
  virtual void  v5(); // _ZN7S7000C12v5Ev
  ~S7000C1(); // tgen
  S7000C1(); // tgen
};
//SIG(1 S7000C1) C1{ BC2{ v6 v7 v8 v9 v10 FC3{ BC4{ v11 v12 v13 v14 Fp Fc[2]} Fp[4]}} v1 v2 v3 v4 v5 FD FC5{ BC6{ v21 v22 v23 v24 Fl[5] Fp} VBC3 v15 v16 v17 v18 v19 v20 Fp Fl}[10]}


void  S7000C1 ::v1(){vfunc_called(this, "_ZN7S7000C12v1Ev");}
void  S7000C1 ::v2(){vfunc_called(this, "_ZN7S7000C12v2Ev");}
void  S7000C1 ::v3(){vfunc_called(this, "_ZN7S7000C12v3Ev");}
void  S7000C1 ::v4(){vfunc_called(this, "_ZN7S7000C12v4Ev");}
void  S7000C1 ::v5(){vfunc_called(this, "_ZN7S7000C12v5Ev");}
S7000C1 ::~S7000C1(){ note_dtor("S7000C1", this);} // tgen
S7000C1 ::S7000C1(){ note_ctor("S7000C1", this);} // tgen

static void Test_S7000C1()
{
  extern Class_Descriptor cd_S7000C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(86,172)];
    init_test(&cd_S7000C1, buf);
    S7000C1 *dp, &lv = *(dp=new (buf) S7000C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,684), "sizeof(S7000C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7000C1)");
    check_base_class_offset(lv, (S7000C2*), 0, "S7000C1");
    check_field_offset(lv, s7000c1f0, ABISELECT(64,32), "S7000C1.s7000c1f0");
    check_field_offset(lv, s7000c1f1, ABISELECT(80,44), "S7000C1.s7000c1f1");
    test_class_info(&lv, &cd_S7000C1);
    dp->~S7000C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7000C1(Test_S7000C1, "S7000C1", ABISELECT(1360,684));

#else // __cplusplus

extern void _ZN7S7000C1C1Ev();
extern void _ZN7S7000C1D1Ev();
Name_Map name_map_S7000C1[] = {
  NSPAIR(_ZN7S7000C1C1Ev),
  NSPAIR(_ZN7S7000C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7000C2;
extern VTBL_ENTRY _ZTI7S7000C2[];
extern  VTBL_ENTRY _ZTV7S7000C2[];
static Base_Class bases_S7000C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7000C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7000C1[];
extern void _ZN7S7000C22v6Ev();
extern void _ZN7S7000C22v7Ev();
extern void _ZN7S7000C22v8Ev();
extern void _ZN7S7000C22v9Ev();
extern void _ZN7S7000C23v10Ev();
extern void _ZN7S7000C12v1Ev();
extern void _ZN7S7000C12v2Ev();
extern void _ZN7S7000C12v3Ev();
extern void _ZN7S7000C12v4Ev();
extern void _ZN7S7000C12v5Ev();
static  VTBL_ENTRY vtc_S7000C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7000C1[0]),
  (VTBL_ENTRY)&_ZN7S7000C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7000C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7000C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7000C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7000C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7000C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7000C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7000C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7000C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7000C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7000C1[];
extern  VTBL_ENTRY _ZTV7S7000C1[];
Class_Descriptor cd_S7000C1 = {  "S7000C1", // class name
  bases_S7000C1, 1,
  &(vtc_S7000C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1360,684), // object size
  NSPAIRA(_ZTI7S7000C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7000C1),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  S9991C2  {
  int s9991c2f0[129];
  char s9991c2f1[2];
  void *s9991c2f2[2];
  ::S22028C11_nt s9991c2f3;
  void *s9991c2f4;
  virtual  ~S9991C2(); // _ZN7S9991C2D1Ev
  virtual void  v6(); // _ZN7S9991C22v6Ev
  virtual void  v7(); // _ZN7S9991C22v7Ev
  virtual void  v8(); // _ZN7S9991C22v8Ev
  virtual void  v9(); // _ZN7S9991C22v9Ev
  S9991C2(); // tgen
};
//SIG(-1 S9991C2) C1{ vd v1 v2 v3 v4 Fi[129] Fc[2] Fp[2] FC2{ m Fp Fi FC3{ m}} Fp}


 S9991C2 ::~S9991C2(){ note_dtor("S9991C2", this);}
void  S9991C2 ::v6(){vfunc_called(this, "_ZN7S9991C22v6Ev");}
void  S9991C2 ::v7(){vfunc_called(this, "_ZN7S9991C22v7Ev");}
void  S9991C2 ::v8(){vfunc_called(this, "_ZN7S9991C22v8Ev");}
void  S9991C2 ::v9(){vfunc_called(this, "_ZN7S9991C22v9Ev");}
S9991C2 ::S9991C2(){ note_ctor("S9991C2", this);} // tgen

static void Test_S9991C2()
{
  extern Class_Descriptor cd_S9991C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(72,138)];
    init_test(&cd_S9991C2, buf);
    S9991C2 *dp, &lv = *(dp=new (buf) S9991C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(568,548), "sizeof(S9991C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9991C2)");
    check_field_offset(lv, s9991c2f0, ABISELECT(8,4), "S9991C2.s9991c2f0");
    check_field_offset(lv, s9991c2f1, ABISELECT(524,520), "S9991C2.s9991c2f1");
    check_field_offset(lv, s9991c2f2, ABISELECT(528,524), "S9991C2.s9991c2f2");
    check_field_offset(lv, s9991c2f3, ABISELECT(544,532), "S9991C2.s9991c2f3");
    check_field_offset(lv, s9991c2f4, ABISELECT(560,544), "S9991C2.s9991c2f4");
    test_class_info(&lv, &cd_S9991C2);
    dp->~S9991C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9991C2(Test_S9991C2, "S9991C2", ABISELECT(568,548));

#else // __cplusplus

extern void _ZN7S9991C2C1Ev();
extern void _ZN7S9991C2D1Ev();
Name_Map name_map_S9991C2[] = {
  NSPAIR(_ZN7S9991C2C1Ev),
  NSPAIR(_ZN7S9991C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9991C2[];
extern void _ZN7S9991C2D1Ev();
extern void _ZN7S9991C2D0Ev();
extern void _ZN7S9991C22v6Ev();
extern void _ZN7S9991C22v7Ev();
extern void _ZN7S9991C22v8Ev();
extern void _ZN7S9991C22v9Ev();
static  VTBL_ENTRY vtc_S9991C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9991C2[0]),
  (VTBL_ENTRY)&_ZN7S9991C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9991C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9991C2[];
extern  VTBL_ENTRY _ZTV7S9991C2[];
Class_Descriptor cd_S9991C2 = {  "S9991C2", // class name
  0,0,//no base classes
  &(vtc_S9991C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,548), // object size
  NSPAIRA(_ZTI7S9991C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9991C2),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  S9991C1  : S9991C2 {
  ::S22028C11_nt s9991c1f0;
  __tsi64 s9991c1f1;
  void *s9991c1f2;
  char s9991c1f3[3];
  ::S22028C26_nt s9991c1f4;
  ::S22028C26_nt s9991c1f5;
  void *s9991c1f6[2];
  int s9991c1f7;
  void *s9991c1f8;
  __tsi64 s9991c1f9[2];
  virtual  ~S9991C1(); // _ZN7S9991C1D1Ev
  virtual void  v1(); // _ZN7S9991C12v1Ev
  virtual void  v2(); // _ZN7S9991C12v2Ev
  virtual void  v3(); // _ZN7S9991C12v3Ev
  virtual void  v4(); // _ZN7S9991C12v4Ev
  virtual void  v5(); // _ZN7S9991C12v5Ev
  S9991C1(); // tgen
};
//SIG(1 S9991C1) C1{ BC2{ vd v6 v7 v8 v9 Fi[129] Fc[2] Fp[2] FC3{ m Fp Fi FC4{ m}} Fp} vd v1 v2 v3 v4 v5 FC3 FL Fp Fc[3] FC5{ m Fp Fi[2] FC6{ m}} FC5 Fp[2] Fi Fp FL[2]}


 S9991C1 ::~S9991C1(){ note_dtor("S9991C1", this);}
void  S9991C1 ::v1(){vfunc_called(this, "_ZN7S9991C12v1Ev");}
void  S9991C1 ::v2(){vfunc_called(this, "_ZN7S9991C12v2Ev");}
void  S9991C1 ::v3(){vfunc_called(this, "_ZN7S9991C12v3Ev");}
void  S9991C1 ::v4(){vfunc_called(this, "_ZN7S9991C12v4Ev");}
void  S9991C1 ::v5(){vfunc_called(this, "_ZN7S9991C12v5Ev");}
S9991C1 ::S9991C1(){ note_ctor("S9991C1", this);} // tgen

static void Test_S9991C1()
{
  extern Class_Descriptor cd_S9991C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(89,161)];
    init_test(&cd_S9991C1, buf);
    S9991C1 *dp, &lv = *(dp=new (buf) S9991C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,640), "sizeof(S9991C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9991C1)");
    check_base_class_offset(lv, (S9991C2*), 0, "S9991C1");
    check_field_offset(lv, s9991c1f0, ABISELECT(568,548), "S9991C1.s9991c1f0");
    check_field_offset(lv, s9991c1f1, ABISELECT(584,560), "S9991C1.s9991c1f1");
    check_field_offset(lv, s9991c1f2, ABISELECT(592,568), "S9991C1.s9991c1f2");
    check_field_offset(lv, s9991c1f3, ABISELECT(600,572), "S9991C1.s9991c1f3");
    check_field_offset(lv, s9991c1f4, ABISELECT(608,576), "S9991C1.s9991c1f4");
    check_field_offset(lv, s9991c1f5, ABISELECT(632,592), "S9991C1.s9991c1f5");
    check_field_offset(lv, s9991c1f6, ABISELECT(656,608), "S9991C1.s9991c1f6");
    check_field_offset(lv, s9991c1f7, ABISELECT(672,616), "S9991C1.s9991c1f7");
    check_field_offset(lv, s9991c1f8, ABISELECT(680,620), "S9991C1.s9991c1f8");
    check_field_offset(lv, s9991c1f9, ABISELECT(688,624), "S9991C1.s9991c1f9");
    test_class_info(&lv, &cd_S9991C1);
    dp->~S9991C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9991C1(Test_S9991C1, "S9991C1", ABISELECT(704,640));

#else // __cplusplus

extern void _ZN7S9991C1C1Ev();
extern void _ZN7S9991C1D1Ev();
Name_Map name_map_S9991C1[] = {
  NSPAIR(_ZN7S9991C1C1Ev),
  NSPAIR(_ZN7S9991C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9991C2;
extern VTBL_ENTRY _ZTI7S9991C2[];
extern  VTBL_ENTRY _ZTV7S9991C2[];
static Base_Class bases_S9991C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9991C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9991C1[];
extern void _ZN7S9991C1D1Ev();
extern void _ZN7S9991C1D0Ev();
extern void _ZN7S9991C22v6Ev();
extern void _ZN7S9991C22v7Ev();
extern void _ZN7S9991C22v8Ev();
extern void _ZN7S9991C22v9Ev();
extern void _ZN7S9991C12v1Ev();
extern void _ZN7S9991C12v2Ev();
extern void _ZN7S9991C12v3Ev();
extern void _ZN7S9991C12v4Ev();
extern void _ZN7S9991C12v5Ev();
static  VTBL_ENTRY vtc_S9991C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9991C1[0]),
  (VTBL_ENTRY)&_ZN7S9991C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9991C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9991C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9991C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9991C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9991C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9991C12v4Ev,
  (VTBL_ENTRY)&_ZN7S9991C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S9991C1[];
extern  VTBL_ENTRY _ZTV7S9991C1[];
Class_Descriptor cd_S9991C1 = {  "S9991C1", // class name
  bases_S9991C1, 1,
  &(vtc_S9991C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(704,640), // object size
  NSPAIRA(_ZTI7S9991C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9991C1),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  S1198C3_nt  : S22028C16 {
  virtual  ~S1198C3_nt(); // _ZN10S1198C3_ntD1Ev
  virtual void  v13(); // _ZN10S1198C3_nt3v13Ev
  S1198C3_nt(); // tgen
};
//SIG(-1 S1198C3_nt) C1{ BC2{ m} vd v1}


 S1198C3_nt ::~S1198C3_nt(){ note_dtor("S1198C3_nt", this);}
void  S1198C3_nt ::v13(){vfunc_called(this, "_ZN10S1198C3_nt3v13Ev");}
S1198C3_nt ::S1198C3_nt(){ note_ctor("S1198C3_nt", this);} // tgen

//skip512 S1198C3_nt

#else // __cplusplus

extern void _ZN10S1198C3_ntC1Ev();
extern void _ZN10S1198C3_ntD1Ev();
Name_Map name_map_S1198C3_nt[] = {
  NSPAIR(_ZN10S1198C3_ntC1Ev),
  NSPAIR(_ZN10S1198C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S1198C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1198C3_nt[];
extern void _ZN10S1198C3_ntD1Ev();
extern void _ZN10S1198C3_ntD0Ev();
extern void _ZN10S1198C3_nt3v13Ev();
static  VTBL_ENTRY vtc_S1198C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1198C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1198C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1198C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1198C3_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S1198C3_nt[];
VTBL_ENTRY *P__ZTI10S1198C3_nt = _ZTI10S1198C3_nt; 
extern  VTBL_ENTRY _ZTV10S1198C3_nt[];
Class_Descriptor cd_S1198C3_nt = {  "S1198C3_nt", // class name
  bases_S1198C3_nt, 1,
  &(vtc_S1198C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1198C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1198C3_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  S1198C2  : S1198C3_nt {
  int s1198c2f0;
  void *s1198c2f1[2];
  virtual  ~S1198C2(); // _ZN7S1198C2D1Ev
  virtual void  v14(); // _ZN7S1198C23v14Ev
  virtual void  v15(); // _ZN7S1198C23v15Ev
  virtual void  v16(); // _ZN7S1198C23v16Ev
  virtual void  v17(); // _ZN7S1198C23v17Ev
  virtual void  v18(); // _ZN7S1198C23v18Ev
  virtual void  v19(); // _ZN7S1198C23v19Ev
  virtual void  v20(); // _ZN7S1198C23v20Ev
  virtual void  v21(); // _ZN7S1198C23v21Ev
  virtual void  v22(); // _ZN7S1198C23v22Ev
  virtual void  v23(); // _ZN7S1198C23v23Ev
  virtual void  v24(); // _ZN7S1198C23v24Ev
  virtual void  v25(); // _ZN7S1198C23v25Ev
  virtual void  v26(); // _ZN7S1198C23v26Ev
  virtual void  v27(); // _ZN7S1198C23v27Ev
  S1198C2(); // tgen
};
//SIG(-1 S1198C2) C1{ BC2{ BC3{ m} vd v15} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp[2]}


 S1198C2 ::~S1198C2(){ note_dtor("S1198C2", this);}
void  S1198C2 ::v14(){vfunc_called(this, "_ZN7S1198C23v14Ev");}
void  S1198C2 ::v15(){vfunc_called(this, "_ZN7S1198C23v15Ev");}
void  S1198C2 ::v16(){vfunc_called(this, "_ZN7S1198C23v16Ev");}
void  S1198C2 ::v17(){vfunc_called(this, "_ZN7S1198C23v17Ev");}
void  S1198C2 ::v18(){vfunc_called(this, "_ZN7S1198C23v18Ev");}
void  S1198C2 ::v19(){vfunc_called(this, "_ZN7S1198C23v19Ev");}
void  S1198C2 ::v20(){vfunc_called(this, "_ZN7S1198C23v20Ev");}
void  S1198C2 ::v21(){vfunc_called(this, "_ZN7S1198C23v21Ev");}
void  S1198C2 ::v22(){vfunc_called(this, "_ZN7S1198C23v22Ev");}
void  S1198C2 ::v23(){vfunc_called(this, "_ZN7S1198C23v23Ev");}
void  S1198C2 ::v24(){vfunc_called(this, "_ZN7S1198C23v24Ev");}
void  S1198C2 ::v25(){vfunc_called(this, "_ZN7S1198C23v25Ev");}
void  S1198C2 ::v26(){vfunc_called(this, "_ZN7S1198C23v26Ev");}
void  S1198C2 ::v27(){vfunc_called(this, "_ZN7S1198C23v27Ev");}
S1198C2 ::S1198C2(){ note_ctor("S1198C2", this);} // tgen

static void Test_S1198C2()
{
  extern Class_Descriptor cd_S1198C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1198C2, buf);
    S1198C2 *dp, &lv = *(dp=new (buf) S1198C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1198C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1198C2)");
    check_base_class_offset(lv, (S22028C16*)(S1198C3_nt*), 0, "S1198C2");
    check_base_class_offset(lv, (S1198C3_nt*), 0, "S1198C2");
    check_field_offset(lv, s1198c2f0, ABISELECT(8,4), "S1198C2.s1198c2f0");
    check_field_offset(lv, s1198c2f1, ABISELECT(16,8), "S1198C2.s1198c2f1");
    test_class_info(&lv, &cd_S1198C2);
    dp->~S1198C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1198C2(Test_S1198C2, "S1198C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1198C2C1Ev();
extern void _ZN7S1198C2D1Ev();
Name_Map name_map_S1198C2[] = {
  NSPAIR(_ZN7S1198C2C1Ev),
  NSPAIR(_ZN7S1198C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1198C3_nt;
extern VTBL_ENTRY _ZTI10S1198C3_nt[];
extern  VTBL_ENTRY _ZTV10S1198C3_nt[];
static Base_Class bases_S1198C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1198C3_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 _ZTI7S1198C2[];
extern void _ZN7S1198C2D1Ev();
extern void _ZN7S1198C2D0Ev();
extern void _ZN10S1198C3_nt3v13Ev();
extern void _ZN7S1198C23v14Ev();
extern void _ZN7S1198C23v15Ev();
extern void _ZN7S1198C23v16Ev();
extern void _ZN7S1198C23v17Ev();
extern void _ZN7S1198C23v18Ev();
extern void _ZN7S1198C23v19Ev();
extern void _ZN7S1198C23v20Ev();
extern void _ZN7S1198C23v21Ev();
extern void _ZN7S1198C23v22Ev();
extern void _ZN7S1198C23v23Ev();
extern void _ZN7S1198C23v24Ev();
extern void _ZN7S1198C23v25Ev();
extern void _ZN7S1198C23v26Ev();
extern void _ZN7S1198C23v27Ev();
static  VTBL_ENTRY vtc_S1198C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1198C2[0]),
  (VTBL_ENTRY)&_ZN7S1198C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1198C2D0Ev,
  (VTBL_ENTRY)&_ZN10S1198C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v27Ev,
};
extern VTBL_ENTRY _ZTI7S1198C2[];
extern  VTBL_ENTRY _ZTV7S1198C2[];
Class_Descriptor cd_S1198C2 = {  "S1198C2", // class name
  bases_S1198C2, 2,
  &(vtc_S1198C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1198C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1198C2),19, //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  S1198C1  : S1198C2 {
  __tsi64 s1198c1f0[2];
  void *s1198c1f1;
  virtual void  v1(); // _ZN7S1198C12v1Ev
  virtual void  v2(); // _ZN7S1198C12v2Ev
  virtual void  v3(); // _ZN7S1198C12v3Ev
  virtual void  v4(); // _ZN7S1198C12v4Ev
  virtual void  v5(); // _ZN7S1198C12v5Ev
  virtual void  v6(); // _ZN7S1198C12v6Ev
  virtual void  v7(); // _ZN7S1198C12v7Ev
  virtual void  v8(); // _ZN7S1198C12v8Ev
  virtual void  v9(); // _ZN7S1198C12v9Ev
  virtual void  v10(); // _ZN7S1198C13v10Ev
  virtual void  v11(); // _ZN7S1198C13v11Ev
  virtual void  v12(); // _ZN7S1198C13v12Ev
  ~S1198C1(); // tgen
  S1198C1(); // tgen
};
//SIG(1 S1198C1) C1{ BC2{ BC3{ BC4{ m} vd v13} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 Fi Fp[2]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FL[2] Fp}


void  S1198C1 ::v1(){vfunc_called(this, "_ZN7S1198C12v1Ev");}
void  S1198C1 ::v2(){vfunc_called(this, "_ZN7S1198C12v2Ev");}
void  S1198C1 ::v3(){vfunc_called(this, "_ZN7S1198C12v3Ev");}
void  S1198C1 ::v4(){vfunc_called(this, "_ZN7S1198C12v4Ev");}
void  S1198C1 ::v5(){vfunc_called(this, "_ZN7S1198C12v5Ev");}
void  S1198C1 ::v6(){vfunc_called(this, "_ZN7S1198C12v6Ev");}
void  S1198C1 ::v7(){vfunc_called(this, "_ZN7S1198C12v7Ev");}
void  S1198C1 ::v8(){vfunc_called(this, "_ZN7S1198C12v8Ev");}
void  S1198C1 ::v9(){vfunc_called(this, "_ZN7S1198C12v9Ev");}
void  S1198C1 ::v10(){vfunc_called(this, "_ZN7S1198C13v10Ev");}
void  S1198C1 ::v11(){vfunc_called(this, "_ZN7S1198C13v11Ev");}
void  S1198C1 ::v12(){vfunc_called(this, "_ZN7S1198C13v12Ev");}
S1198C1 ::~S1198C1(){ note_dtor("S1198C1", this);} // tgen
S1198C1 ::S1198C1(){ note_ctor("S1198C1", this);} // tgen

static void Test_S1198C1()
{
  extern Class_Descriptor cd_S1198C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S1198C1, buf);
    S1198C1 *dp, &lv = *(dp=new (buf) S1198C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S1198C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1198C1)");
    check_base_class_offset(lv, (S22028C16*)(S1198C3_nt*)(S1198C2*), 0, "S1198C1");
    check_base_class_offset(lv, (S1198C3_nt*)(S1198C2*), 0, "S1198C1");
    check_base_class_offset(lv, (S1198C2*), 0, "S1198C1");
    check_field_offset(lv, s1198c1f0, ABISELECT(32,16), "S1198C1.s1198c1f0");
    check_field_offset(lv, s1198c1f1, ABISELECT(48,32), "S1198C1.s1198c1f1");
    test_class_info(&lv, &cd_S1198C1);
    dp->~S1198C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1198C1(Test_S1198C1, "S1198C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S1198C1C1Ev();
extern void _ZN7S1198C1D1Ev();
Name_Map name_map_S1198C1[] = {
  NSPAIR(_ZN7S1198C1C1Ev),
  NSPAIR(_ZN7S1198C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1198C3_nt;
extern VTBL_ENTRY _ZTI10S1198C3_nt[];
extern  VTBL_ENTRY _ZTV10S1198C3_nt[];
extern Class_Descriptor cd_S1198C2;
extern VTBL_ENTRY _ZTI7S1198C2[];
extern  VTBL_ENTRY _ZTV7S1198C2[];
static Base_Class bases_S1198C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1198C3_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_S1198C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1198C1[];
extern void _ZN7S1198C1D1Ev();
extern void _ZN7S1198C1D0Ev();
extern void _ZN10S1198C3_nt3v13Ev();
extern void _ZN7S1198C23v14Ev();
extern void _ZN7S1198C23v15Ev();
extern void _ZN7S1198C23v16Ev();
extern void _ZN7S1198C23v17Ev();
extern void _ZN7S1198C23v18Ev();
extern void _ZN7S1198C23v19Ev();
extern void _ZN7S1198C23v20Ev();
extern void _ZN7S1198C23v21Ev();
extern void _ZN7S1198C23v22Ev();
extern void _ZN7S1198C23v23Ev();
extern void _ZN7S1198C23v24Ev();
extern void _ZN7S1198C23v25Ev();
extern void _ZN7S1198C23v26Ev();
extern void _ZN7S1198C23v27Ev();
extern void _ZN7S1198C12v1Ev();
extern void _ZN7S1198C12v2Ev();
extern void _ZN7S1198C12v3Ev();
extern void _ZN7S1198C12v4Ev();
extern void _ZN7S1198C12v5Ev();
extern void _ZN7S1198C12v6Ev();
extern void _ZN7S1198C12v7Ev();
extern void _ZN7S1198C12v8Ev();
extern void _ZN7S1198C12v9Ev();
extern void _ZN7S1198C13v10Ev();
extern void _ZN7S1198C13v11Ev();
extern void _ZN7S1198C13v12Ev();
static  VTBL_ENTRY vtc_S1198C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1198C1[0]),
  (VTBL_ENTRY)&_ZN7S1198C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1198C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1198C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1198C23v27Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1198C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1198C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1198C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1198C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S1198C1[];
extern  VTBL_ENTRY _ZTV7S1198C1[];
Class_Descriptor cd_S1198C1 = {  "S1198C1", // class name
  bases_S1198C1, 3,
  &(vtc_S1198C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S1198C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1198C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7598C4  {
  short s7598c4f0;
  virtual  ~S7598C4(); // _ZN7S7598C4D1Ev
  virtual void  v16(); // _ZN7S7598C43v16Ev
  virtual void  v17(); // _ZN7S7598C43v17Ev
  virtual void  v18(); // _ZN7S7598C43v18Ev
  S7598C4(); // tgen
};
//SIG(-1 S7598C4) C1{ vd v1 v2 v3 Fs}


 S7598C4 ::~S7598C4(){ note_dtor("S7598C4", this);}
void  S7598C4 ::v16(){vfunc_called(this, "_ZN7S7598C43v16Ev");}
void  S7598C4 ::v17(){vfunc_called(this, "_ZN7S7598C43v17Ev");}
void  S7598C4 ::v18(){vfunc_called(this, "_ZN7S7598C43v18Ev");}
S7598C4 ::S7598C4(){ note_ctor("S7598C4", this);} // tgen

static void Test_S7598C4()
{
  extern Class_Descriptor cd_S7598C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7598C4, buf);
    S7598C4 *dp, &lv = *(dp=new (buf) S7598C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7598C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7598C4)");
    check_field_offset(lv, s7598c4f0, ABISELECT(8,4), "S7598C4.s7598c4f0");
    test_class_info(&lv, &cd_S7598C4);
    dp->~S7598C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7598C4(Test_S7598C4, "S7598C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7598C4C1Ev();
extern void _ZN7S7598C4D1Ev();
Name_Map name_map_S7598C4[] = {
  NSPAIR(_ZN7S7598C4C1Ev),
  NSPAIR(_ZN7S7598C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7598C4[];
extern void _ZN7S7598C4D1Ev();
extern void _ZN7S7598C4D0Ev();
extern void _ZN7S7598C43v16Ev();
extern void _ZN7S7598C43v17Ev();
extern void _ZN7S7598C43v18Ev();
static  VTBL_ENTRY vtc_S7598C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7598C4[0]),
  (VTBL_ENTRY)&_ZN7S7598C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7598C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7598C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7598C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7598C43v18Ev,
};
extern VTBL_ENTRY _ZTI7S7598C4[];
extern  VTBL_ENTRY _ZTV7S7598C4[];
Class_Descriptor cd_S7598C4 = {  "S7598C4", // class name
  0,0,//no base classes
  &(vtc_S7598C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7598C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7598C4),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  S7598C3  {
  ::S7598C4 s7598c3f0;
  int s7598c3f1;
  long double s7598c3f2[2];
  ::S7589C7 s7598c3f3;
  virtual void  v4(); // _ZN7S7598C32v4Ev
  virtual void  v5(); // _ZN7S7598C32v5Ev
  virtual void  v6(); // _ZN7S7598C32v6Ev
  virtual void  v7(); // _ZN7S7598C32v7Ev
  ~S7598C3(); // tgen
  S7598C3(); // tgen
};
//SIG(-1 S7598C3) C1{ v1 v2 v3 v4 FC2{ vd v5 v6 v7 Fs} Fi FD[2] FC3{ VBC4{ vd v12 v13 v14 Fs} vd v8 v9 v10 v11 Fi}}


void  S7598C3 ::v4(){vfunc_called(this, "_ZN7S7598C32v4Ev");}
void  S7598C3 ::v5(){vfunc_called(this, "_ZN7S7598C32v5Ev");}
void  S7598C3 ::v6(){vfunc_called(this, "_ZN7S7598C32v6Ev");}
void  S7598C3 ::v7(){vfunc_called(this, "_ZN7S7598C32v7Ev");}
S7598C3 ::~S7598C3(){ note_dtor("S7598C3", this);} // tgen
S7598C3 ::S7598C3(){ note_ctor("S7598C3", this);} // tgen

static void Test_S7598C3()
{
  extern Class_Descriptor cd_S7598C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S7598C3, buf);
    S7598C3 *dp, &lv = *(dp=new (buf) S7598C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S7598C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7598C3)");
    check_field_offset(lv, s7598c3f0, ABISELECT(8,4), "S7598C3.s7598c3f0");
    check_field_offset(lv, s7598c3f1, ABISELECT(24,12), "S7598C3.s7598c3f1");
    check_field_offset(lv, s7598c3f2, ABISELECT(32,16), "S7598C3.s7598c3f2");
    check_field_offset(lv, s7598c3f3, ABISELECT(64,40), "S7598C3.s7598c3f3");
    test_class_info(&lv, &cd_S7598C3);
    dp->~S7598C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7598C3(Test_S7598C3, "S7598C3", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN7S7598C3C1Ev();
extern void _ZN7S7598C3D1Ev();
Name_Map name_map_S7598C3[] = {
  NSPAIR(_ZN7S7598C3C1Ev),
  NSPAIR(_ZN7S7598C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7598C3[];
extern void _ZN7S7598C32v4Ev();
extern void _ZN7S7598C32v5Ev();
extern void _ZN7S7598C32v6Ev();
extern void _ZN7S7598C32v7Ev();
static  VTBL_ENTRY vtc_S7598C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7598C3[0]),
  (VTBL_ENTRY)&_ZN7S7598C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S7598C3[];
extern  VTBL_ENTRY _ZTV7S7598C3[];
Class_Descriptor cd_S7598C3 = {  "S7598C3", // class name
  0,0,//no base classes
  &(vtc_S7598C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI7S7598C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7598C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7598C6  {
  void *s7598c6f0;
  virtual void  v8(); // _ZN7S7598C62v8Ev
  virtual void  v9(); // _ZN7S7598C62v9Ev
  virtual void  v10(); // _ZN7S7598C63v10Ev
  virtual void  v11(); // _ZN7S7598C63v11Ev
  virtual void  v12(); // _ZN7S7598C63v12Ev
  virtual void  v13(); // _ZN7S7598C63v13Ev
  ~S7598C6(); // tgen
  S7598C6(); // tgen
};
//SIG(-1 S7598C6) C1{ v1 v2 v3 v4 v5 v6 Fp}


void  S7598C6 ::v8(){vfunc_called(this, "_ZN7S7598C62v8Ev");}
void  S7598C6 ::v9(){vfunc_called(this, "_ZN7S7598C62v9Ev");}
void  S7598C6 ::v10(){vfunc_called(this, "_ZN7S7598C63v10Ev");}
void  S7598C6 ::v11(){vfunc_called(this, "_ZN7S7598C63v11Ev");}
void  S7598C6 ::v12(){vfunc_called(this, "_ZN7S7598C63v12Ev");}
void  S7598C6 ::v13(){vfunc_called(this, "_ZN7S7598C63v13Ev");}
S7598C6 ::~S7598C6(){ note_dtor("S7598C6", this);} // tgen
S7598C6 ::S7598C6(){ note_ctor("S7598C6", this);} // tgen

static void Test_S7598C6()
{
  extern Class_Descriptor cd_S7598C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7598C6, buf);
    S7598C6 *dp, &lv = *(dp=new (buf) S7598C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7598C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7598C6)");
    check_field_offset(lv, s7598c6f0, ABISELECT(8,4), "S7598C6.s7598c6f0");
    test_class_info(&lv, &cd_S7598C6);
    dp->~S7598C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7598C6(Test_S7598C6, "S7598C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7598C6C1Ev();
extern void _ZN7S7598C6D1Ev();
Name_Map name_map_S7598C6[] = {
  NSPAIR(_ZN7S7598C6C1Ev),
  NSPAIR(_ZN7S7598C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7598C6[];
extern void _ZN7S7598C62v8Ev();
extern void _ZN7S7598C62v9Ev();
extern void _ZN7S7598C63v10Ev();
extern void _ZN7S7598C63v11Ev();
extern void _ZN7S7598C63v12Ev();
extern void _ZN7S7598C63v13Ev();
static  VTBL_ENTRY vtc_S7598C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7598C6[0]),
  (VTBL_ENTRY)&_ZN7S7598C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7598C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v13Ev,
};
extern VTBL_ENTRY _ZTI7S7598C6[];
extern  VTBL_ENTRY _ZTV7S7598C6[];
Class_Descriptor cd_S7598C6 = {  "S7598C6", // class name
  0,0,//no base classes
  &(vtc_S7598C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7598C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7598C6),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  S7598C2  : virtual S7598C3 , S7598C6 {
  virtual  ~S7598C2(); // _ZN7S7598C2D2Ev
  virtual void  v14(); // _ZN7S7598C23v14Ev
  virtual void  v15(); // _ZN7S7598C23v15Ev
  S7598C2(); // tgen
};
//SIG(-1 S7598C2) C1{ VBC2{ v3 v4 v5 v6 FC3{ vd v13 v14 v15 Fs} Fi FD[2] FC4{ VBC5{ vd v20 v21 v22 Fs} vd v16 v17 v18 v19 Fi}} BC6{ v7 v8 v9 v10 v11 v12 Fp} vd v1 v2}


 S7598C2 ::~S7598C2(){ note_dtor("S7598C2", this);}
void  S7598C2 ::v14(){vfunc_called(this, "_ZN7S7598C23v14Ev");}
void  S7598C2 ::v15(){vfunc_called(this, "_ZN7S7598C23v15Ev");}
S7598C2 ::S7598C2(){ note_ctor("S7598C2", this);} // tgen

static void Test_S7598C2()
{
  extern Class_Descriptor cd_S7598C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S7598C2, buf);
    S7598C2 *dp, &lv = *(dp=new (buf) S7598C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S7598C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7598C2)");
    check_base_class_offset(lv, (S7598C3*), ABISELECT(16,8), "S7598C2");
    check_base_class_offset(lv, (S7598C6*), 0, "S7598C2");
    test_class_info(&lv, &cd_S7598C2);
    dp->~S7598C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7598C2(Test_S7598C2, "S7598C2", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S7598C2C1Ev();
extern void _ZN7S7598C2D2Ev();
Name_Map name_map_S7598C2[] = {
  NSPAIR(_ZN7S7598C2C1Ev),
  NSPAIR(_ZN7S7598C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7598C3;
extern VTBL_ENTRY _ZTI7S7598C3[];
extern  VTBL_ENTRY _ZTV7S7598C3[];
extern Class_Descriptor cd_S7598C6;
extern VTBL_ENTRY _ZTI7S7598C6[];
extern  VTBL_ENTRY _ZTV7S7598C6[];
static Base_Class bases_S7598C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7598C3,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7598C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S7598C2[];
extern void _ZN7S7598C62v8Ev();
extern void _ZN7S7598C62v9Ev();
extern void _ZN7S7598C63v10Ev();
extern void _ZN7S7598C63v11Ev();
extern void _ZN7S7598C63v12Ev();
extern void _ZN7S7598C63v13Ev();
extern void _ZN7S7598C2D1Ev();
extern void _ZN7S7598C2D0Ev();
extern void _ZN7S7598C23v14Ev();
extern void _ZN7S7598C23v15Ev();
extern void _ZN7S7598C32v4Ev();
extern void _ZN7S7598C32v5Ev();
extern void _ZN7S7598C32v6Ev();
extern void _ZN7S7598C32v7Ev();
static  VTBL_ENTRY vtc_S7598C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7598C2[0]),
  (VTBL_ENTRY)&_ZN7S7598C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7598C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7598C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7598C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7598C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7598C23v15Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7598C2[0]),
  (VTBL_ENTRY)&_ZN7S7598C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v7Ev,
};
extern VTBL_ENTRY _ZTV7S7598C2[];
static  VTT_ENTRY vtt_S7598C2[] = {
  {&(_ZTV7S7598C2[3]),  3,23},
  {&(_ZTV7S7598C2[19]),  19,23},
};
extern VTBL_ENTRY _ZTI7S7598C2[];
extern  VTBL_ENTRY _ZTV7S7598C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7598C2[];
Class_Descriptor cd_S7598C2 = {  "S7598C2", // class name
  bases_S7598C2, 2,
  &(vtc_S7598C2[0]), // expected_vtbl_contents
  &(vtt_S7598C2[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S7598C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7598C2),23, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7598C2),2, //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  S7598C1  : S7598C2 {
  virtual  ~S7598C1(); // _ZN7S7598C1D2Ev
  virtual void  v1(); // _ZN7S7598C12v1Ev
  virtual void  v2(); // _ZN7S7598C12v2Ev
  virtual void  v3(); // _ZN7S7598C12v3Ev
  S7598C1(); // tgen
};
//SIG(1 S7598C1) C1{ BC2{ VBC3{ v4 v5 v6 v7 FC4{ vd v16 v17 v18 Fs} Fi FD[2] FC5{ VBC6{ vd v23 v24 v25 Fs} vd v19 v20 v21 v22 Fi}} BC7{ v8 v9 v10 v11 v12 v13 Fp} vd v14 v15} vd v1 v2 v3}


 S7598C1 ::~S7598C1(){ note_dtor("S7598C1", this);}
void  S7598C1 ::v1(){vfunc_called(this, "_ZN7S7598C12v1Ev");}
void  S7598C1 ::v2(){vfunc_called(this, "_ZN7S7598C12v2Ev");}
void  S7598C1 ::v3(){vfunc_called(this, "_ZN7S7598C12v3Ev");}
S7598C1 ::S7598C1(){ note_ctor("S7598C1", this);} // tgen

static void Test_S7598C1()
{
  extern Class_Descriptor cd_S7598C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,17)];
    init_test(&cd_S7598C1, buf);
    S7598C1 *dp, &lv = *(dp=new (buf) S7598C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S7598C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7598C1)");
    check_base_class_offset(lv, (S7598C3*)(S7598C2*), ABISELECT(16,8), "S7598C1");
    check_base_class_offset(lv, (S7598C6*)(S7598C2*), 0, "S7598C1");
    check_base_class_offset(lv, (S7598C2*), 0, "S7598C1");
    test_class_info(&lv, &cd_S7598C1);
    dp->~S7598C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7598C1(Test_S7598C1, "S7598C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S7598C1C1Ev();
extern void _ZN7S7598C1D2Ev();
Name_Map name_map_S7598C1[] = {
  NSPAIR(_ZN7S7598C1C1Ev),
  NSPAIR(_ZN7S7598C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7598C3;
extern VTBL_ENTRY _ZTI7S7598C3[];
extern  VTBL_ENTRY _ZTV7S7598C3[];
extern Class_Descriptor cd_S7598C6;
extern VTBL_ENTRY _ZTI7S7598C6[];
extern  VTBL_ENTRY _ZTV7S7598C6[];
extern Class_Descriptor cd_S7598C2;
extern VTBL_ENTRY _ZTI7S7598C2[];
extern  VTBL_ENTRY _ZTV7S7598C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7598C2[];
static Base_Class bases_S7598C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7598C3,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7598C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7598C2,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7598C1[];
extern void _ZN7S7598C62v8Ev();
extern void _ZN7S7598C62v9Ev();
extern void _ZN7S7598C63v10Ev();
extern void _ZN7S7598C63v11Ev();
extern void _ZN7S7598C63v12Ev();
extern void _ZN7S7598C63v13Ev();
extern void _ZN7S7598C1D1Ev();
extern void _ZN7S7598C1D0Ev();
extern void _ZN7S7598C23v14Ev();
extern void _ZN7S7598C23v15Ev();
extern void _ZN7S7598C12v1Ev();
extern void _ZN7S7598C12v2Ev();
extern void _ZN7S7598C12v3Ev();
extern void _ZN7S7598C32v4Ev();
extern void _ZN7S7598C32v5Ev();
extern void _ZN7S7598C32v6Ev();
extern void _ZN7S7598C32v7Ev();
static  VTBL_ENTRY vtc_S7598C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7598C1[0]),
  (VTBL_ENTRY)&_ZN7S7598C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7598C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7598C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7598C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7598C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7598C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7598C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7598C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7598C12v3Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7598C1[0]),
  (VTBL_ENTRY)&_ZN7S7598C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v7Ev,
};
extern VTBL_ENTRY _ZTV7S7598C1[];
extern void _ZN7S7598C62v8Ev();
extern void _ZN7S7598C62v9Ev();
extern void _ZN7S7598C63v10Ev();
extern void _ZN7S7598C63v11Ev();
extern void _ZN7S7598C63v12Ev();
extern void _ZN7S7598C63v13Ev();
extern void _ZN7S7598C2D1Ev();
extern void _ZN7S7598C2D0Ev();
extern void _ZN7S7598C23v14Ev();
extern void _ZN7S7598C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7598C2__7S7598C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7598C2[0]),
  (VTBL_ENTRY)&_ZN7S7598C62v8Ev,
  (VTBL_ENTRY)&_ZN7S7598C62v9Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v10Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v11Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v12Ev,
  (VTBL_ENTRY)&_ZN7S7598C63v13Ev,
  (VTBL_ENTRY)&_ZN7S7598C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7598C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7598C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7598C23v15Ev,
};
extern void _ZN7S7598C32v4Ev();
extern void _ZN7S7598C32v5Ev();
extern void _ZN7S7598C32v6Ev();
extern void _ZN7S7598C32v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7598C3__7S7598C2__7S7598C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7598C2[0]),
  (VTBL_ENTRY)&_ZN7S7598C32v4Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v5Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7598C32v7Ev,
};
static  VTT_ENTRY vtt_S7598C1[] = {
  {&(_ZTV7S7598C1[3]),  3,26},
  {&(_tg__ZTV7S7598C2__7S7598C1[3]),  3,13},
  {&(_tg__ZTV7S7598C3__7S7598C2__7S7598C1[6]),  6,10},
  {&(_ZTV7S7598C1[22]),  22,26},
};
extern VTBL_ENTRY _ZTI7S7598C1[];
extern  VTBL_ENTRY _ZTV7S7598C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7598C1[];
Class_Descriptor cd_S7598C1 = {  "S7598C1", // class name
  bases_S7598C1, 3,
  &(vtc_S7598C1[0]), // expected_vtbl_contents
  &(vtt_S7598C1[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S7598C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7598C1),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7598C1),4, //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  S6578C2  {
  void *s6578c2f0;
  virtual  ~S6578C2(); // _ZN7S6578C2D1Ev
  virtual void  v2(); // _ZN7S6578C22v2Ev
  virtual void  v3(); // _ZN7S6578C22v3Ev
  S6578C2(); // tgen
};
//SIG(-1 S6578C2) C1{ vd v1 v2 Fp}


 S6578C2 ::~S6578C2(){ note_dtor("S6578C2", this);}
void  S6578C2 ::v2(){vfunc_called(this, "_ZN7S6578C22v2Ev");}
void  S6578C2 ::v3(){vfunc_called(this, "_ZN7S6578C22v3Ev");}
S6578C2 ::S6578C2(){ note_ctor("S6578C2", this);} // tgen

static void Test_S6578C2()
{
  extern Class_Descriptor cd_S6578C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6578C2, buf);
    S6578C2 *dp, &lv = *(dp=new (buf) S6578C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6578C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6578C2)");
    check_field_offset(lv, s6578c2f0, ABISELECT(8,4), "S6578C2.s6578c2f0");
    test_class_info(&lv, &cd_S6578C2);
    dp->~S6578C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6578C2(Test_S6578C2, "S6578C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6578C2C1Ev();
extern void _ZN7S6578C2D1Ev();
Name_Map name_map_S6578C2[] = {
  NSPAIR(_ZN7S6578C2C1Ev),
  NSPAIR(_ZN7S6578C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6578C2[];
extern void _ZN7S6578C2D1Ev();
extern void _ZN7S6578C2D0Ev();
extern void _ZN7S6578C22v2Ev();
extern void _ZN7S6578C22v3Ev();
static  VTBL_ENTRY vtc_S6578C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6578C2[0]),
  (VTBL_ENTRY)&_ZN7S6578C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6578C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6578C2[];
extern  VTBL_ENTRY _ZTV7S6578C2[];
Class_Descriptor cd_S6578C2 = {  "S6578C2", // class name
  0,0,//no base classes
  &(vtc_S6578C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6578C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6578C2),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  S6578C5  {
  int s6578c5f0[10];
  virtual void  v4(); // _ZN7S6578C52v4Ev
  virtual void  v5(); // _ZN7S6578C52v5Ev
  virtual void  v6(); // _ZN7S6578C52v6Ev
  virtual void  v7(); // _ZN7S6578C52v7Ev
  ~S6578C5(); // tgen
  S6578C5(); // tgen
};
//SIG(-1 S6578C5) C1{ v1 v2 v3 v4 Fi[10]}


void  S6578C5 ::v4(){vfunc_called(this, "_ZN7S6578C52v4Ev");}
void  S6578C5 ::v5(){vfunc_called(this, "_ZN7S6578C52v5Ev");}
void  S6578C5 ::v6(){vfunc_called(this, "_ZN7S6578C52v6Ev");}
void  S6578C5 ::v7(){vfunc_called(this, "_ZN7S6578C52v7Ev");}
S6578C5 ::~S6578C5(){ note_dtor("S6578C5", this);} // tgen
S6578C5 ::S6578C5(){ note_ctor("S6578C5", this);} // tgen

static void Test_S6578C5()
{
  extern Class_Descriptor cd_S6578C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S6578C5, buf);
    S6578C5 *dp, &lv = *(dp=new (buf) S6578C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S6578C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6578C5)");
    check_field_offset(lv, s6578c5f0, ABISELECT(8,4), "S6578C5.s6578c5f0");
    test_class_info(&lv, &cd_S6578C5);
    dp->~S6578C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6578C5(Test_S6578C5, "S6578C5", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN7S6578C5C1Ev();
extern void _ZN7S6578C5D1Ev();
Name_Map name_map_S6578C5[] = {
  NSPAIR(_ZN7S6578C5C1Ev),
  NSPAIR(_ZN7S6578C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6578C5[];
extern void _ZN7S6578C52v4Ev();
extern void _ZN7S6578C52v5Ev();
extern void _ZN7S6578C52v6Ev();
extern void _ZN7S6578C52v7Ev();
static  VTBL_ENTRY vtc_S6578C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6578C5[0]),
  (VTBL_ENTRY)&_ZN7S6578C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v7Ev,
};
extern VTBL_ENTRY _ZTI7S6578C5[];
extern  VTBL_ENTRY _ZTV7S6578C5[];
Class_Descriptor cd_S6578C5 = {  "S6578C5", // class name
  0,0,//no base classes
  &(vtc_S6578C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI7S6578C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6578C5),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  S6578C4  : S6578C5 , S6578C2 {
  int s6578c4f0:4;
  char s6578c4f1;
  virtual void  v8(); // _ZN7S6578C42v8Ev
  virtual void  v9(); // _ZN7S6578C42v9Ev
  virtual void  v10(); // _ZN7S6578C43v10Ev
  virtual void  v11(); // _ZN7S6578C43v11Ev
  virtual void  v12(); // _ZN7S6578C43v12Ev
  virtual void  v13(); // _ZN7S6578C43v13Ev
  ~S6578C4(); // tgen
  S6578C4(); // tgen
};
//SIG(-1 S6578C4) C1{ BC2{ v7 v8 v9 v10 Fi[10]} BC3{ vd v11 v12 Fp} v1 v2 v3 v4 v5 v6 Fi:4 Fc}


void  S6578C4 ::v8(){vfunc_called(this, "_ZN7S6578C42v8Ev");}
void  S6578C4 ::v9(){vfunc_called(this, "_ZN7S6578C42v9Ev");}
void  S6578C4 ::v10(){vfunc_called(this, "_ZN7S6578C43v10Ev");}
void  S6578C4 ::v11(){vfunc_called(this, "_ZN7S6578C43v11Ev");}
void  S6578C4 ::v12(){vfunc_called(this, "_ZN7S6578C43v12Ev");}
void  S6578C4 ::v13(){vfunc_called(this, "_ZN7S6578C43v13Ev");}
S6578C4 ::~S6578C4(){ note_dtor("S6578C4", this);} // tgen
S6578C4 ::S6578C4(){ note_ctor("S6578C4", this);} // tgen

static void Test_S6578C4()
{
  extern Class_Descriptor cd_S6578C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S6578C4, buf);
    S6578C4 *dp, &lv = *(dp=new (buf) S6578C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S6578C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6578C4)");
    check_base_class_offset(lv, (S6578C5*), 0, "S6578C4");
    check_base_class_offset(lv, (S6578C2*), ABISELECT(48,44), "S6578C4");
    set_bf_and_test(lv, s6578c4f0, ABISELECT(64,52), 0, 4, 1, "S6578C4");
    set_bf_and_test(lv, s6578c4f0, ABISELECT(64,52), 0, 4, hide_sll(1LL<<3), "S6578C4");
    check_field_offset(lv, s6578c4f1, ABISELECT(65,53), "S6578C4.s6578c4f1");
    test_class_info(&lv, &cd_S6578C4);
    dp->~S6578C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6578C4(Test_S6578C4, "S6578C4", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN7S6578C4C1Ev();
extern void _ZN7S6578C4D1Ev();
Name_Map name_map_S6578C4[] = {
  NSPAIR(_ZN7S6578C4C1Ev),
  NSPAIR(_ZN7S6578C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6578C5;
extern VTBL_ENTRY _ZTI7S6578C5[];
extern  VTBL_ENTRY _ZTV7S6578C5[];
extern Class_Descriptor cd_S6578C2;
extern VTBL_ENTRY _ZTI7S6578C2[];
extern  VTBL_ENTRY _ZTV7S6578C2[];
static Base_Class bases_S6578C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6578C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S6578C2,    ABISELECT(48,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S6578C4[];
extern void _ZN7S6578C52v4Ev();
extern void _ZN7S6578C52v5Ev();
extern void _ZN7S6578C52v6Ev();
extern void _ZN7S6578C52v7Ev();
extern void _ZN7S6578C42v8Ev();
extern void _ZN7S6578C42v9Ev();
extern void _ZN7S6578C43v10Ev();
extern void _ZN7S6578C43v11Ev();
extern void _ZN7S6578C43v12Ev();
extern void _ZN7S6578C43v13Ev();
extern void _ZN7S6578C4D1Ev();
extern void _ZN7S6578C4D0Ev();
extern void ABISELECT(_ZThn48_N7S6578C4D1Ev,_ZThn44_N7S6578C4D1Ev)();
extern void ABISELECT(_ZThn48_N7S6578C4D0Ev,_ZThn44_N7S6578C4D0Ev)();
extern void _ZN7S6578C22v2Ev();
extern void _ZN7S6578C22v3Ev();
static  VTBL_ENTRY vtc_S6578C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6578C4[0]),
  (VTBL_ENTRY)&_ZN7S6578C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6578C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6578C4D0Ev,
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI7S6578C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S6578C4D1Ev,_ZThn44_N7S6578C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S6578C4D0Ev,_ZThn44_N7S6578C4D0Ev),
  (VTBL_ENTRY)&_ZN7S6578C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S6578C4[];
extern  VTBL_ENTRY _ZTV7S6578C4[];
Class_Descriptor cd_S6578C4 = {  "S6578C4", // class name
  bases_S6578C4, 2,
  &(vtc_S6578C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI7S6578C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6578C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6578C3  : virtual S6578C4 {
  long double s6578c3f0;
  char s6578c3f1;
  ::S7809C6_nt s6578c3f2;
  void *s6578c3f3;
  long s6578c3f4;
  virtual void  v14(); // _ZN7S6578C33v14Ev
  virtual void  v15(); // _ZN7S6578C33v15Ev
  virtual void  v16(); // _ZN7S6578C33v16Ev
  virtual void  v17(); // _ZN7S6578C33v17Ev
  virtual void  v18(); // _ZN7S6578C33v18Ev
  ~S6578C3(); // tgen
  S6578C3(); // tgen
};
//SIG(-1 S6578C3) C1{ VBC2{ BC3{ v6 v7 v8 v9 Fi[10]} BC4{ vd v10 v11 Fp} v12 v13 v14 v15 v16 v17 Fi:4 Fc} v1 v2 v3 v4 v5 FD Fc FC5{ v18} Fp Fl}


void  S6578C3 ::v14(){vfunc_called(this, "_ZN7S6578C33v14Ev");}
void  S6578C3 ::v15(){vfunc_called(this, "_ZN7S6578C33v15Ev");}
void  S6578C3 ::v16(){vfunc_called(this, "_ZN7S6578C33v16Ev");}
void  S6578C3 ::v17(){vfunc_called(this, "_ZN7S6578C33v17Ev");}
void  S6578C3 ::v18(){vfunc_called(this, "_ZN7S6578C33v18Ev");}
S6578C3 ::~S6578C3(){ note_dtor("S6578C3", this);} // tgen
S6578C3 ::S6578C3(){ note_ctor("S6578C3", this);} // tgen

static void Test_S6578C3()
{
  extern Class_Descriptor cd_S6578C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S6578C3, buf);
    S6578C3 *dp, &lv = *(dp=new (buf) S6578C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S6578C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6578C3)");
    check_base_class_offset(lv, (S6578C5*)(S6578C4*), ABISELECT(64,32), "S6578C3");
    check_base_class_offset(lv, (S6578C2*)(S6578C4*), ABISELECT(112,76), "S6578C3");
    check_base_class_offset(lv, (S6578C4*), ABISELECT(64,32), "S6578C3");
    check_field_offset(lv, s6578c3f0, ABISELECT(16,4), "S6578C3.s6578c3f0");
    check_field_offset(lv, s6578c3f1, ABISELECT(32,16), "S6578C3.s6578c3f1");
    check_field_offset(lv, s6578c3f2, ABISELECT(40,20), "S6578C3.s6578c3f2");
    check_field_offset(lv, s6578c3f3, ABISELECT(48,24), "S6578C3.s6578c3f3");
    check_field_offset(lv, s6578c3f4, ABISELECT(56,28), "S6578C3.s6578c3f4");
    test_class_info(&lv, &cd_S6578C3);
    dp->~S6578C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6578C3(Test_S6578C3, "S6578C3", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S6578C3C1Ev();
extern void _ZN7S6578C3D1Ev();
Name_Map name_map_S6578C3[] = {
  NSPAIR(_ZN7S6578C3C1Ev),
  NSPAIR(_ZN7S6578C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6578C5;
extern VTBL_ENTRY _ZTI7S6578C5[];
extern  VTBL_ENTRY _ZTV7S6578C5[];
extern Class_Descriptor cd_S6578C2;
extern VTBL_ENTRY _ZTI7S6578C2[];
extern  VTBL_ENTRY _ZTV7S6578C2[];
extern Class_Descriptor cd_S6578C4;
extern VTBL_ENTRY _ZTI7S6578C4[];
extern  VTBL_ENTRY _ZTV7S6578C4[];
static Base_Class bases_S6578C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6578C5,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6578C2,    ABISELECT(112,76), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6578C4,    ABISELECT(64,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S6578C3[];
extern void _ZN7S6578C33v14Ev();
extern void _ZN7S6578C33v15Ev();
extern void _ZN7S6578C33v16Ev();
extern void _ZN7S6578C33v17Ev();
extern void _ZN7S6578C33v18Ev();
extern void _ZN7S6578C3D1Ev();
extern void _ZN7S6578C3D0Ev();
extern void _ZN7S6578C52v4Ev();
extern void _ZN7S6578C52v5Ev();
extern void _ZN7S6578C52v6Ev();
extern void _ZN7S6578C52v7Ev();
extern void _ZN7S6578C42v8Ev();
extern void _ZN7S6578C42v9Ev();
extern void _ZN7S6578C43v10Ev();
extern void _ZN7S6578C43v11Ev();
extern void _ZN7S6578C43v12Ev();
extern void _ZN7S6578C43v13Ev();
extern void ABISELECT(_ZTv0_n104_N7S6578C3D1Ev,_ZTv0_n52_N7S6578C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6578C3D1Ev,_ZThn32_N7S6578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S6578C3D0Ev,_ZTv0_n52_N7S6578C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6578C3D0Ev,_ZThn32_N7S6578C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S6578C3D1Ev,_ZTvn44_n52_N7S6578C3D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S6578C3D0Ev,_ZTvn44_n52_N7S6578C3D0Ev)();
extern void _ZN7S6578C22v2Ev();
extern void _ZN7S6578C22v3Ev();
static  VTBL_ENTRY vtc_S6578C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6578C3[0]),
  (VTBL_ENTRY)&_ZN7S6578C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v18Ev,
  (VTBL_ENTRY)&_ZN7S6578C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6578C3D0Ev,
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-64,-32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6578C3[0]),
  (VTBL_ENTRY)&_ZN7S6578C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6578C3D1Ev,_ZTv0_n52_N7S6578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6578C3D0Ev,_ZTv0_n52_N7S6578C3D0Ev),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S6578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S6578C3D1Ev,_ZTvn44_n52_N7S6578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S6578C3D0Ev,_ZTvn44_n52_N7S6578C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6578C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S6578C3[];
static  VTT_ENTRY vtt_S6578C3[] = {
  {&(_ZTV7S6578C3[3]),  3,43},
  {&(_ZTV7S6578C3[25]),  25,43},
  {&(_ZTV7S6578C3[39]),  39,43},
};
extern VTBL_ENTRY _ZTI7S6578C3[];
extern  VTBL_ENTRY _ZTV7S6578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6578C3[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6578C3D0Ev,_ZTv0_n52_N7S6578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6578C3D0Ev,_ZThn32_N7S6578C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6578C3D1Ev,_ZTv0_n52_N7S6578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6578C3D1Ev,_ZThn32_N7S6578C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6578C3 = {  "S6578C3", // class name
  bases_S6578C3, 3,
  &(vtc_S6578C3[0]), // expected_vtbl_contents
  &(vtt_S6578C3[0]), // expected_vtt_contents
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S6578C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6578C3),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6578C3),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6578C1  : S6578C2 , virtual S6578C3 {
  int s6578c1f0;
  void *s6578c1f1[5];
  virtual void  v1(); // _ZN7S6578C12v1Ev
  ~S6578C1(); // tgen
  S6578C1(); // tgen
};
//SIG(1 S6578C1) C1{ BC2{ vd v2 v3 Fp} VBC3{ VBC4{ BC5{ v4 v5 v6 v7 Fi[10]} BC2 v8 v9 v10 v11 v12 v13 Fi:4 Fc} v14 v15 v16 v17 v18 FD Fc FC6{ v19} Fp Fl} v1 Fi Fp[5]}


void  S6578C1 ::v1(){vfunc_called(this, "_ZN7S6578C12v1Ev");}
S6578C1 ::~S6578C1(){ note_dtor("S6578C1", this);} // tgen
S6578C1 ::S6578C1(){ note_ctor("S6578C1", this);} // tgen

static void Test_S6578C1()
{
  extern Class_Descriptor cd_S6578C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,31)];
    init_test(&cd_S6578C1, buf);
    S6578C1 *dp, &lv = *(dp=new (buf) S6578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,120), "sizeof(S6578C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6578C1)");
    /*is_ambiguous_... S6578C1::S6578C2 */ AMB_check_base_class_offset(lv, (S6578C2*), 0, "S6578C1");
    check_base_class_offset(lv, (S6578C5*)(S6578C4*), ABISELECT(128,64), "S6578C1");
    check_base_class_offset(lv, (S6578C2*)(S6578C4*), ABISELECT(176,108), "S6578C1");
    check_base_class_offset(lv, (S6578C4*)(S6578C3*), ABISELECT(128,64), "S6578C1");
    check_base_class_offset(lv, (S6578C3*), ABISELECT(64,32), "S6578C1");
    check_field_offset(lv, s6578c1f0, ABISELECT(16,8), "S6578C1.s6578c1f0");
    check_field_offset(lv, s6578c1f1, ABISELECT(24,12), "S6578C1.s6578c1f1");
    test_class_info(&lv, &cd_S6578C1);
    dp->~S6578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6578C1(Test_S6578C1, "S6578C1", ABISELECT(208,120));

#else // __cplusplus

extern void _ZN7S6578C1C1Ev();
extern void _ZN7S6578C1D1Ev();
Name_Map name_map_S6578C1[] = {
  NSPAIR(_ZN7S6578C1C1Ev),
  NSPAIR(_ZN7S6578C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6578C2;
extern VTBL_ENTRY _ZTI7S6578C2[];
extern  VTBL_ENTRY _ZTV7S6578C2[];
extern Class_Descriptor cd_S6578C5;
extern VTBL_ENTRY _ZTI7S6578C5[];
extern  VTBL_ENTRY _ZTV7S6578C5[];
extern Class_Descriptor cd_S6578C2;
extern VTBL_ENTRY _ZTI7S6578C2[];
extern  VTBL_ENTRY _ZTV7S6578C2[];
extern Class_Descriptor cd_S6578C4;
extern VTBL_ENTRY _ZTI7S6578C4[];
extern  VTBL_ENTRY _ZTV7S6578C4[];
extern Class_Descriptor cd_S6578C3;
extern VTBL_ENTRY _ZTI7S6578C3[];
extern  VTBL_ENTRY _ZTV7S6578C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6578C3[];
static Base_Class bases_S6578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6578C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6578C5,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6578C2,    ABISELECT(176,108), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6578C4,    ABISELECT(128,64), //bcp->offset
    25, //bcp->virtual_function_table_offset
    15, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6578C3,    ABISELECT(64,32), //bcp->offset
    9, //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 _ZTI7S6578C1[];
extern void _ZN7S6578C1D1Ev();
extern void _ZN7S6578C1D0Ev();
extern void _ZN7S6578C22v2Ev();
extern void _ZN7S6578C22v3Ev();
extern void _ZN7S6578C12v1Ev();
extern void _ZN7S6578C33v14Ev();
extern void _ZN7S6578C33v15Ev();
extern void _ZN7S6578C33v16Ev();
extern void _ZN7S6578C33v17Ev();
extern void _ZN7S6578C33v18Ev();
extern void ABISELECT(_ZTv0_n72_N7S6578C1D1Ev,_ZTv0_n36_N7S6578C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S6578C1D1Ev,_ZThn32_N7S6578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6578C1D0Ev,_ZTv0_n36_N7S6578C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S6578C1D0Ev,_ZThn32_N7S6578C1D0Ev)() __attribute__((weak));
extern void _ZN7S6578C52v4Ev();
extern void _ZN7S6578C52v5Ev();
extern void _ZN7S6578C52v6Ev();
extern void _ZN7S6578C52v7Ev();
extern void _ZN7S6578C42v8Ev();
extern void _ZN7S6578C42v9Ev();
extern void _ZN7S6578C43v10Ev();
extern void _ZN7S6578C43v11Ev();
extern void _ZN7S6578C43v12Ev();
extern void _ZN7S6578C43v13Ev();
extern void ABISELECT(_ZTv0_n104_N7S6578C1D1Ev,_ZTv0_n52_N7S6578C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S6578C1D1Ev,_ZThn64_N7S6578C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S6578C1D0Ev,_ZTv0_n52_N7S6578C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S6578C1D0Ev,_ZThn64_N7S6578C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N7S6578C1D1Ev,_ZTvn44_n52_N7S6578C1D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S6578C1D0Ev,_ZTvn44_n52_N7S6578C1D0Ev)();
extern void _ZN7S6578C22v2Ev();
extern void _ZN7S6578C22v3Ev();
static  VTBL_ENTRY vtc_S6578C1[] = {
  ABISELECT(128,64),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6578C1[0]),
  (VTBL_ENTRY)&_ZN7S6578C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6578C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6578C12v1Ev,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6578C1[0]),
  (VTBL_ENTRY)&_ZN7S6578C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v18Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6578C1D1Ev,_ZTv0_n36_N7S6578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6578C1D0Ev,_ZTv0_n36_N7S6578C1D0Ev),
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-128,-64),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S6578C1[0]),
  (VTBL_ENTRY)&_ZN7S6578C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6578C1D1Ev,_ZTv0_n52_N7S6578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6578C1D0Ev,_ZTv0_n52_N7S6578C1D0Ev),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI7S6578C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S6578C1D1Ev,_ZTvn44_n52_N7S6578C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S6578C1D0Ev,_ZTvn44_n52_N7S6578C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6578C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S6578C1[];
extern void _ZN7S6578C33v14Ev();
extern void _ZN7S6578C33v15Ev();
extern void _ZN7S6578C33v16Ev();
extern void _ZN7S6578C33v17Ev();
extern void _ZN7S6578C33v18Ev();
extern void _ZN7S6578C3D1Ev();
extern void _ZN7S6578C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6578C3__7S6578C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6578C3[0]),
  (VTBL_ENTRY)&_ZN7S6578C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6578C33v18Ev,
  (VTBL_ENTRY)&_ZN7S6578C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6578C3D0Ev,
};
extern void _ZN7S6578C52v4Ev();
extern void _ZN7S6578C52v5Ev();
extern void _ZN7S6578C52v6Ev();
extern void _ZN7S6578C52v7Ev();
extern void _ZN7S6578C42v8Ev();
extern void _ZN7S6578C42v9Ev();
extern void _ZN7S6578C43v10Ev();
extern void _ZN7S6578C43v11Ev();
extern void _ZN7S6578C43v12Ev();
extern void _ZN7S6578C43v13Ev();
extern void ABISELECT(_ZTv0_n104_N7S6578C3D1Ev,_ZTv0_n52_N7S6578C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6578C3D1Ev,_ZThn32_N7S6578C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S6578C3D0Ev,_ZTv0_n52_N7S6578C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6578C3D0Ev,_ZThn32_N7S6578C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6578C4__7S6578C3__7S6578C1[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-64,-32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6578C3[0]),
  (VTBL_ENTRY)&_ZN7S6578C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6578C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6578C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6578C43v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6578C3D1Ev,_ZTv0_n52_N7S6578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6578C3D0Ev,_ZTv0_n52_N7S6578C3D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N7S6578C3D1Ev,_ZTvn44_n52_N7S6578C3D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N7S6578C3D0Ev,_ZTvn44_n52_N7S6578C3D0Ev)();
extern void _ZN7S6578C22v2Ev();
extern void _ZN7S6578C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6578C27S6578C4__7S6578C3__7S6578C1[] = {
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI7S6578C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S6578C3D1Ev,_ZTvn44_n52_N7S6578C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N7S6578C3D0Ev,_ZTvn44_n52_N7S6578C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6578C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6578C22v3Ev,
};
static  VTT_ENTRY vtt_S6578C1[] = {
  {&(_ZTV7S6578C1[4]),  4,58},
  {&(_ZTV7S6578C1[18]),  18,58},
  {&(_ZTV7S6578C1[40]),  40,58},
  {&(_ZTV7S6578C1[54]),  54,58},
  {&(_tg__ZTV7S6578C3__7S6578C1[3]),  3,10},
  {&(_tg__ZTV7S6578C4__7S6578C3__7S6578C1[15]),  15,27},
  {&(_tg__ZTV7S6578C27S6578C4__7S6578C3__7S6578C1[2]),  2,6},
};
extern VTBL_ENTRY _ZTI7S6578C1[];
extern  VTBL_ENTRY _ZTV7S6578C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6578C1[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6578C3D0Ev,_ZTv0_n52_N7S6578C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6578C3D0Ev,_ZThn32_N7S6578C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6578C3D1Ev,_ZTv0_n52_N7S6578C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6578C3D1Ev,_ZThn32_N7S6578C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6578C1D0Ev,_ZTv0_n52_N7S6578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S6578C1D0Ev,_ZThn64_N7S6578C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6578C1D1Ev,_ZTv0_n52_N7S6578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S6578C1D1Ev,_ZThn64_N7S6578C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6578C1D0Ev,_ZTv0_n36_N7S6578C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6578C1D0Ev,_ZThn32_N7S6578C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6578C1D1Ev,_ZTv0_n36_N7S6578C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6578C1D1Ev,_ZThn32_N7S6578C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6578C1 = {  "S6578C1", // class name
  bases_S6578C1, 5,
  &(vtc_S6578C1[0]), // expected_vtbl_contents
  &(vtt_S6578C1[0]), // expected_vtt_contents
  ABISELECT(208,120), // object size
  NSPAIRA(_ZTI7S6578C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6578C1),58, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6578C1),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20540C4  {
  int s20540c4f0[10];
  virtual void  v4(); // _ZN8S20540C42v4Ev
  virtual void  v5(); // _ZN8S20540C42v5Ev
  virtual void  v6(); // _ZN8S20540C42v6Ev
  virtual void  v7(); // _ZN8S20540C42v7Ev
  ~S20540C4(); // tgen
  S20540C4(); // tgen
};
//SIG(-1 S20540C4) C1{ v1 v2 v3 v4 Fi[10]}


void  S20540C4 ::v4(){vfunc_called(this, "_ZN8S20540C42v4Ev");}
void  S20540C4 ::v5(){vfunc_called(this, "_ZN8S20540C42v5Ev");}
void  S20540C4 ::v6(){vfunc_called(this, "_ZN8S20540C42v6Ev");}
void  S20540C4 ::v7(){vfunc_called(this, "_ZN8S20540C42v7Ev");}
S20540C4 ::~S20540C4(){ note_dtor("S20540C4", this);} // tgen
S20540C4 ::S20540C4(){ note_ctor("S20540C4", this);} // tgen

static void Test_S20540C4()
{
  extern Class_Descriptor cd_S20540C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S20540C4, buf);
    S20540C4 *dp, &lv = *(dp=new (buf) S20540C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S20540C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20540C4)");
    check_field_offset(lv, s20540c4f0, ABISELECT(8,4), "S20540C4.s20540c4f0");
    test_class_info(&lv, &cd_S20540C4);
    dp->~S20540C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20540C4(Test_S20540C4, "S20540C4", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S20540C4C1Ev();
extern void _ZN8S20540C4D1Ev();
Name_Map name_map_S20540C4[] = {
  NSPAIR(_ZN8S20540C4C1Ev),
  NSPAIR(_ZN8S20540C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20540C4[];
extern void _ZN8S20540C42v4Ev();
extern void _ZN8S20540C42v5Ev();
extern void _ZN8S20540C42v6Ev();
extern void _ZN8S20540C42v7Ev();
static  VTBL_ENTRY vtc_S20540C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20540C4[0]),
  (VTBL_ENTRY)&_ZN8S20540C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S20540C4[];
extern  VTBL_ENTRY _ZTV8S20540C4[];
Class_Descriptor cd_S20540C4 = {  "S20540C4", // class name
  0,0,//no base classes
  &(vtc_S20540C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S20540C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20540C4),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  S20540C5  {
  void *s20540c5f0;
  virtual  ~S20540C5(); // _ZN8S20540C5D1Ev
  virtual void  v8(); // _ZN8S20540C52v8Ev
  virtual void  v9(); // _ZN8S20540C52v9Ev
  S20540C5(); // tgen
};
//SIG(-1 S20540C5) C1{ vd v1 v2 Fp}


 S20540C5 ::~S20540C5(){ note_dtor("S20540C5", this);}
void  S20540C5 ::v8(){vfunc_called(this, "_ZN8S20540C52v8Ev");}
void  S20540C5 ::v9(){vfunc_called(this, "_ZN8S20540C52v9Ev");}
S20540C5 ::S20540C5(){ note_ctor("S20540C5", this);} // tgen

static void Test_S20540C5()
{
  extern Class_Descriptor cd_S20540C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20540C5, buf);
    S20540C5 *dp, &lv = *(dp=new (buf) S20540C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20540C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20540C5)");
    check_field_offset(lv, s20540c5f0, ABISELECT(8,4), "S20540C5.s20540c5f0");
    test_class_info(&lv, &cd_S20540C5);
    dp->~S20540C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20540C5(Test_S20540C5, "S20540C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20540C5C1Ev();
extern void _ZN8S20540C5D1Ev();
Name_Map name_map_S20540C5[] = {
  NSPAIR(_ZN8S20540C5C1Ev),
  NSPAIR(_ZN8S20540C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20540C5[];
extern void _ZN8S20540C5D1Ev();
extern void _ZN8S20540C5D0Ev();
extern void _ZN8S20540C52v8Ev();
extern void _ZN8S20540C52v9Ev();
static  VTBL_ENTRY vtc_S20540C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20540C5[0]),
  (VTBL_ENTRY)&_ZN8S20540C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20540C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20540C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20540C52v9Ev,
};
extern VTBL_ENTRY _ZTI8S20540C5[];
extern  VTBL_ENTRY _ZTV8S20540C5[];
Class_Descriptor cd_S20540C5 = {  "S20540C5", // class name
  0,0,//no base classes
  &(vtc_S20540C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20540C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20540C5),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  S20540C3  : S20540C4 , S20540C5 {
  int s20540c3f0:4;
  char s20540c3f1;
  virtual void  v10(); // _ZN8S20540C33v10Ev
  virtual void  v11(); // _ZN8S20540C33v11Ev
  virtual void  v12(); // _ZN8S20540C33v12Ev
  virtual void  v13(); // _ZN8S20540C33v13Ev
  virtual void  v14(); // _ZN8S20540C33v14Ev
  virtual void  v15(); // _ZN8S20540C33v15Ev
  ~S20540C3(); // tgen
  S20540C3(); // tgen
};
//SIG(-1 S20540C3) C1{ BC2{ v7 v8 v9 v10 Fi[10]} BC3{ vd v11 v12 Fp} v1 v2 v3 v4 v5 v6 Fi:4 Fc}


void  S20540C3 ::v10(){vfunc_called(this, "_ZN8S20540C33v10Ev");}
void  S20540C3 ::v11(){vfunc_called(this, "_ZN8S20540C33v11Ev");}
void  S20540C3 ::v12(){vfunc_called(this, "_ZN8S20540C33v12Ev");}
void  S20540C3 ::v13(){vfunc_called(this, "_ZN8S20540C33v13Ev");}
void  S20540C3 ::v14(){vfunc_called(this, "_ZN8S20540C33v14Ev");}
void  S20540C3 ::v15(){vfunc_called(this, "_ZN8S20540C33v15Ev");}
S20540C3 ::~S20540C3(){ note_dtor("S20540C3", this);} // tgen
S20540C3 ::S20540C3(){ note_ctor("S20540C3", this);} // tgen

static void Test_S20540C3()
{
  extern Class_Descriptor cd_S20540C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S20540C3, buf);
    S20540C3 *dp, &lv = *(dp=new (buf) S20540C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S20540C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20540C3)");
    check_base_class_offset(lv, (S20540C4*), 0, "S20540C3");
    check_base_class_offset(lv, (S20540C5*), ABISELECT(48,44), "S20540C3");
    set_bf_and_test(lv, s20540c3f0, ABISELECT(64,52), 0, 4, 1, "S20540C3");
    set_bf_and_test(lv, s20540c3f0, ABISELECT(64,52), 0, 4, hide_sll(1LL<<3), "S20540C3");
    check_field_offset(lv, s20540c3f1, ABISELECT(65,53), "S20540C3.s20540c3f1");
    test_class_info(&lv, &cd_S20540C3);
    dp->~S20540C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20540C3(Test_S20540C3, "S20540C3", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S20540C3C1Ev();
extern void _ZN8S20540C3D1Ev();
Name_Map name_map_S20540C3[] = {
  NSPAIR(_ZN8S20540C3C1Ev),
  NSPAIR(_ZN8S20540C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20540C4;
extern VTBL_ENTRY _ZTI8S20540C4[];
extern  VTBL_ENTRY _ZTV8S20540C4[];
extern Class_Descriptor cd_S20540C5;
extern VTBL_ENTRY _ZTI8S20540C5[];
extern  VTBL_ENTRY _ZTV8S20540C5[];
static Base_Class bases_S20540C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20540C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20540C5,    ABISELECT(48,44), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20540C3[];
extern void _ZN8S20540C42v4Ev();
extern void _ZN8S20540C42v5Ev();
extern void _ZN8S20540C42v6Ev();
extern void _ZN8S20540C42v7Ev();
extern void _ZN8S20540C33v10Ev();
extern void _ZN8S20540C33v11Ev();
extern void _ZN8S20540C33v12Ev();
extern void _ZN8S20540C33v13Ev();
extern void _ZN8S20540C33v14Ev();
extern void _ZN8S20540C33v15Ev();
extern void _ZN8S20540C3D1Ev();
extern void _ZN8S20540C3D0Ev();
extern void ABISELECT(_ZThn48_N8S20540C3D1Ev,_ZThn44_N8S20540C3D1Ev)();
extern void ABISELECT(_ZThn48_N8S20540C3D0Ev,_ZThn44_N8S20540C3D0Ev)();
extern void _ZN8S20540C52v8Ev();
extern void _ZN8S20540C52v9Ev();
static  VTBL_ENTRY vtc_S20540C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20540C3[0]),
  (VTBL_ENTRY)&_ZN8S20540C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20540C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20540C3D0Ev,
  ABISELECT(-48,-44),
  (VTBL_ENTRY)&(_ZTI8S20540C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S20540C3D1Ev,_ZThn44_N8S20540C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S20540C3D0Ev,_ZThn44_N8S20540C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20540C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20540C52v9Ev,
};
extern VTBL_ENTRY _ZTI8S20540C3[];
extern  VTBL_ENTRY _ZTV8S20540C3[];
Class_Descriptor cd_S20540C3 = {  "S20540C3", // class name
  bases_S20540C3, 2,
  &(vtc_S20540C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S20540C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20540C3),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20540C2  : virtual S20540C3 {
  long double s20540c2f0;
  char s20540c2f1;
  ::S7809C6_nt s20540c2f2;
  void *s20540c2f3;
  long s20540c2f4;
  virtual void  v16(); // _ZN8S20540C23v16Ev
  virtual void  v17(); // _ZN8S20540C23v17Ev
  virtual void  v18(); // _ZN8S20540C23v18Ev
  virtual void  v19(); // _ZN8S20540C23v19Ev
  virtual void  v20(); // _ZN8S20540C23v20Ev
  ~S20540C2(); // tgen
  S20540C2(); // tgen
};
//SIG(-1 S20540C2) C1{ VBC2{ BC3{ v6 v7 v8 v9 Fi[10]} BC4{ vd v10 v11 Fp} v12 v13 v14 v15 v16 v17 Fi:4 Fc} v1 v2 v3 v4 v5 FD Fc FC5{ v18} Fp Fl}


void  S20540C2 ::v16(){vfunc_called(this, "_ZN8S20540C23v16Ev");}
void  S20540C2 ::v17(){vfunc_called(this, "_ZN8S20540C23v17Ev");}
void  S20540C2 ::v18(){vfunc_called(this, "_ZN8S20540C23v18Ev");}
void  S20540C2 ::v19(){vfunc_called(this, "_ZN8S20540C23v19Ev");}
void  S20540C2 ::v20(){vfunc_called(this, "_ZN8S20540C23v20Ev");}
S20540C2 ::~S20540C2(){ note_dtor("S20540C2", this);} // tgen
S20540C2 ::S20540C2(){ note_ctor("S20540C2", this);} // tgen

static void Test_S20540C2()
{
  extern Class_Descriptor cd_S20540C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,23)];
    init_test(&cd_S20540C2, buf);
    S20540C2 *dp, &lv = *(dp=new (buf) S20540C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S20540C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20540C2)");
    check_base_class_offset(lv, (S20540C4*)(S20540C3*), ABISELECT(64,32), "S20540C2");
    check_base_class_offset(lv, (S20540C5*)(S20540C3*), ABISELECT(112,76), "S20540C2");
    check_base_class_offset(lv, (S20540C3*), ABISELECT(64,32), "S20540C2");
    check_field_offset(lv, s20540c2f0, ABISELECT(16,4), "S20540C2.s20540c2f0");
    check_field_offset(lv, s20540c2f1, ABISELECT(32,16), "S20540C2.s20540c2f1");
    check_field_offset(lv, s20540c2f2, ABISELECT(40,20), "S20540C2.s20540c2f2");
    check_field_offset(lv, s20540c2f3, ABISELECT(48,24), "S20540C2.s20540c2f3");
    check_field_offset(lv, s20540c2f4, ABISELECT(56,28), "S20540C2.s20540c2f4");
    test_class_info(&lv, &cd_S20540C2);
    dp->~S20540C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20540C2(Test_S20540C2, "S20540C2", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN8S20540C2C1Ev();
extern void _ZN8S20540C2D1Ev();
Name_Map name_map_S20540C2[] = {
  NSPAIR(_ZN8S20540C2C1Ev),
  NSPAIR(_ZN8S20540C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20540C4;
extern VTBL_ENTRY _ZTI8S20540C4[];
extern  VTBL_ENTRY _ZTV8S20540C4[];
extern Class_Descriptor cd_S20540C5;
extern VTBL_ENTRY _ZTI8S20540C5[];
extern  VTBL_ENTRY _ZTV8S20540C5[];
extern Class_Descriptor cd_S20540C3;
extern VTBL_ENTRY _ZTI8S20540C3[];
extern  VTBL_ENTRY _ZTV8S20540C3[];
static Base_Class bases_S20540C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20540C4,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20540C5,    ABISELECT(112,76), //bcp->offset
    37, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20540C3,    ABISELECT(64,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20540C2[];
extern void _ZN8S20540C23v16Ev();
extern void _ZN8S20540C23v17Ev();
extern void _ZN8S20540C23v18Ev();
extern void _ZN8S20540C23v19Ev();
extern void _ZN8S20540C23v20Ev();
extern void _ZN8S20540C2D1Ev();
extern void _ZN8S20540C2D0Ev();
extern void _ZN8S20540C42v4Ev();
extern void _ZN8S20540C42v5Ev();
extern void _ZN8S20540C42v6Ev();
extern void _ZN8S20540C42v7Ev();
extern void _ZN8S20540C33v10Ev();
extern void _ZN8S20540C33v11Ev();
extern void _ZN8S20540C33v12Ev();
extern void _ZN8S20540C33v13Ev();
extern void _ZN8S20540C33v14Ev();
extern void _ZN8S20540C33v15Ev();
extern void ABISELECT(_ZTv0_n104_N8S20540C2D1Ev,_ZTv0_n52_N8S20540C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20540C2D1Ev,_ZThn32_N8S20540C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20540C2D0Ev,_ZTv0_n52_N8S20540C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20540C2D0Ev,_ZThn32_N8S20540C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N8S20540C2D1Ev,_ZTvn44_n52_N8S20540C2D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N8S20540C2D0Ev,_ZTvn44_n52_N8S20540C2D0Ev)();
extern void _ZN8S20540C52v8Ev();
extern void _ZN8S20540C52v9Ev();
static  VTBL_ENTRY vtc_S20540C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20540C2[0]),
  (VTBL_ENTRY)&_ZN8S20540C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v20Ev,
  (VTBL_ENTRY)&_ZN8S20540C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20540C2D0Ev,
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-64,-32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20540C2[0]),
  (VTBL_ENTRY)&_ZN8S20540C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20540C2D1Ev,_ZTv0_n52_N8S20540C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20540C2D0Ev,_ZTv0_n52_N8S20540C2D0Ev),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20540C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N8S20540C2D1Ev,_ZTvn44_n52_N8S20540C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N8S20540C2D0Ev,_ZTvn44_n52_N8S20540C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20540C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20540C52v9Ev,
};
extern VTBL_ENTRY _ZTV8S20540C2[];
static  VTT_ENTRY vtt_S20540C2[] = {
  {&(_ZTV8S20540C2[3]),  3,43},
  {&(_ZTV8S20540C2[25]),  25,43},
  {&(_ZTV8S20540C2[39]),  39,43},
};
extern VTBL_ENTRY _ZTI8S20540C2[];
extern  VTBL_ENTRY _ZTV8S20540C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20540C2[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20540C2D0Ev,_ZTv0_n52_N8S20540C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20540C2D0Ev,_ZThn32_N8S20540C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20540C2D1Ev,_ZTv0_n52_N8S20540C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20540C2D1Ev,_ZThn32_N8S20540C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20540C2 = {  "S20540C2", // class name
  bases_S20540C2, 3,
  &(vtc_S20540C2[0]), // expected_vtbl_contents
  &(vtt_S20540C2[0]), // expected_vtt_contents
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI8S20540C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20540C2),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20540C2),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20540C1  : virtual S20540C2 {
  virtual  ~S20540C1(); // _ZN8S20540C1D2Ev
  virtual void  v1(); // _ZN8S20540C12v1Ev
  virtual void  v2(); // _ZN8S20540C12v2Ev
  virtual void  v3(); // _ZN8S20540C12v3Ev
  S20540C1(); // tgen
};
//SIG(1 S20540C1) C1{ VBC2{ VBC3{ BC4{ v4 v5 v6 v7 Fi[10]} BC5{ vd v8 v9 Fp} v10 v11 v12 v13 v14 v15 Fi:4 Fc} v16 v17 v18 v19 v20 FD Fc FC6{ v21} Fp Fl} vd v1 v2 v3}


 S20540C1 ::~S20540C1(){ note_dtor("S20540C1", this);}
void  S20540C1 ::v1(){vfunc_called(this, "_ZN8S20540C12v1Ev");}
void  S20540C1 ::v2(){vfunc_called(this, "_ZN8S20540C12v2Ev");}
void  S20540C1 ::v3(){vfunc_called(this, "_ZN8S20540C12v3Ev");}
S20540C1 ::S20540C1(){ note_ctor("S20540C1", this);} // tgen

static void Test_S20540C1()
{
  extern Class_Descriptor cd_S20540C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,24)];
    init_test(&cd_S20540C1, buf);
    S20540C1 *dp, &lv = *(dp=new (buf) S20540C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S20540C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20540C1)");
    check_base_class_offset(lv, (S20540C4*)(S20540C3*), ABISELECT(80,36), "S20540C1");
    check_base_class_offset(lv, (S20540C5*)(S20540C3*), ABISELECT(128,80), "S20540C1");
    check_base_class_offset(lv, (S20540C3*)(S20540C2*), ABISELECT(80,36), "S20540C1");
    check_base_class_offset(lv, (S20540C2*), ABISELECT(16,4), "S20540C1");
    test_class_info(&lv, &cd_S20540C1);
    dp->~S20540C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20540C1(Test_S20540C1, "S20540C1", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN8S20540C1C1Ev();
extern void _ZN8S20540C1D2Ev();
Name_Map name_map_S20540C1[] = {
  NSPAIR(_ZN8S20540C1C1Ev),
  NSPAIR(_ZN8S20540C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20540C4;
extern VTBL_ENTRY _ZTI8S20540C4[];
extern  VTBL_ENTRY _ZTV8S20540C4[];
extern Class_Descriptor cd_S20540C5;
extern VTBL_ENTRY _ZTI8S20540C5[];
extern  VTBL_ENTRY _ZTV8S20540C5[];
extern Class_Descriptor cd_S20540C3;
extern VTBL_ENTRY _ZTI8S20540C3[];
extern  VTBL_ENTRY _ZTV8S20540C3[];
extern Class_Descriptor cd_S20540C2;
extern VTBL_ENTRY _ZTI8S20540C2[];
extern  VTBL_ENTRY _ZTV8S20540C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20540C2[];
static Base_Class bases_S20540C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20540C4,    ABISELECT(80,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20540C5,    ABISELECT(128,80), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //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
    2, //immediately_derived
  0, 0},
  {&cd_S20540C3,    ABISELECT(80,36), //bcp->offset
    25, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20540C2,    ABISELECT(16,4), //bcp->offset
    9, //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 _ZTI8S20540C1[];
extern void _ZN8S20540C1D1Ev();
extern void _ZN8S20540C1D0Ev();
extern void _ZN8S20540C12v1Ev();
extern void _ZN8S20540C12v2Ev();
extern void _ZN8S20540C12v3Ev();
extern void _ZN8S20540C23v16Ev();
extern void _ZN8S20540C23v17Ev();
extern void _ZN8S20540C23v18Ev();
extern void _ZN8S20540C23v19Ev();
extern void _ZN8S20540C23v20Ev();
extern void ABISELECT(_ZTv0_n72_N8S20540C1D1Ev,_ZTv0_n36_N8S20540C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20540C1D1Ev,_ZThn4_N8S20540C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20540C1D0Ev,_ZTv0_n36_N8S20540C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20540C1D0Ev,_ZThn4_N8S20540C1D0Ev)() __attribute__((weak));
extern void _ZN8S20540C42v4Ev();
extern void _ZN8S20540C42v5Ev();
extern void _ZN8S20540C42v6Ev();
extern void _ZN8S20540C42v7Ev();
extern void _ZN8S20540C33v10Ev();
extern void _ZN8S20540C33v11Ev();
extern void _ZN8S20540C33v12Ev();
extern void _ZN8S20540C33v13Ev();
extern void _ZN8S20540C33v14Ev();
extern void _ZN8S20540C33v15Ev();
extern void ABISELECT(_ZTv0_n104_N8S20540C1D1Ev,_ZTv0_n52_N8S20540C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20540C1D1Ev,_ZThn36_N8S20540C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20540C1D0Ev,_ZTv0_n52_N8S20540C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20540C1D0Ev,_ZThn36_N8S20540C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n104_N8S20540C1D1Ev,_ZTvn44_n52_N8S20540C1D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N8S20540C1D0Ev,_ZTvn44_n52_N8S20540C1D0Ev)();
extern void _ZN8S20540C52v8Ev();
extern void _ZN8S20540C52v9Ev();
static  VTBL_ENTRY vtc_S20540C1[] = {
  ABISELECT(80,36),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20540C1[0]),
  (VTBL_ENTRY)&_ZN8S20540C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20540C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20540C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20540C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20540C12v3Ev,
  ABISELECT(-16,-4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S20540C1[0]),
  (VTBL_ENTRY)&_ZN8S20540C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v20Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20540C1D1Ev,_ZTv0_n36_N8S20540C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20540C1D0Ev,_ZTv0_n36_N8S20540C1D0Ev),
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-80,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S20540C1[0]),
  (VTBL_ENTRY)&_ZN8S20540C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20540C1D1Ev,_ZTv0_n52_N8S20540C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20540C1D0Ev,_ZTv0_n52_N8S20540C1D0Ev),
  ABISELECT(-128,-80),
  (VTBL_ENTRY)&(_ZTI8S20540C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N8S20540C1D1Ev,_ZTvn44_n52_N8S20540C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N8S20540C1D0Ev,_ZTvn44_n52_N8S20540C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20540C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20540C52v9Ev,
};
extern VTBL_ENTRY _ZTV8S20540C1[];
extern void _ZN8S20540C23v16Ev();
extern void _ZN8S20540C23v17Ev();
extern void _ZN8S20540C23v18Ev();
extern void _ZN8S20540C23v19Ev();
extern void _ZN8S20540C23v20Ev();
extern void _ZN8S20540C2D1Ev();
extern void _ZN8S20540C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20540C2__8S20540C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20540C2[0]),
  (VTBL_ENTRY)&_ZN8S20540C23v16Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v17Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v18Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v19Ev,
  (VTBL_ENTRY)&_ZN8S20540C23v20Ev,
  (VTBL_ENTRY)&_ZN8S20540C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20540C2D0Ev,
};
extern void _ZN8S20540C42v4Ev();
extern void _ZN8S20540C42v5Ev();
extern void _ZN8S20540C42v6Ev();
extern void _ZN8S20540C42v7Ev();
extern void _ZN8S20540C33v10Ev();
extern void _ZN8S20540C33v11Ev();
extern void _ZN8S20540C33v12Ev();
extern void _ZN8S20540C33v13Ev();
extern void _ZN8S20540C33v14Ev();
extern void _ZN8S20540C33v15Ev();
extern void ABISELECT(_ZTv0_n104_N8S20540C2D1Ev,_ZTv0_n52_N8S20540C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20540C2D1Ev,_ZThn32_N8S20540C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S20540C2D0Ev,_ZTv0_n52_N8S20540C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20540C2D0Ev,_ZThn32_N8S20540C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20540C3__8S20540C2__8S20540C1[] = {
  ABISELECT(48,44),
  ABISELECT(48,44),
  ABISELECT(-64,-32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20540C2[0]),
  (VTBL_ENTRY)&_ZN8S20540C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20540C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20540C33v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20540C2D1Ev,_ZTv0_n52_N8S20540C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S20540C2D0Ev,_ZTv0_n52_N8S20540C2D0Ev),
};
extern void ABISELECT(_ZTvn48_n104_N8S20540C2D1Ev,_ZTvn44_n52_N8S20540C2D1Ev)();
extern void ABISELECT(_ZTvn48_n104_N8S20540C2D0Ev,_ZTvn44_n52_N8S20540C2D0Ev)();
extern void _ZN8S20540C52v8Ev();
extern void _ZN8S20540C52v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20540C58S20540C3__8S20540C2__8S20540C1[] = {
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20540C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N8S20540C2D1Ev,_ZTvn44_n52_N8S20540C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n104_N8S20540C2D0Ev,_ZTvn44_n52_N8S20540C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20540C52v8Ev,
  (VTBL_ENTRY)&_ZN8S20540C52v9Ev,
};
static  VTT_ENTRY vtt_S20540C1[] = {
  {&(_ZTV8S20540C1[4]),  4,58},
  {&(_ZTV8S20540C1[18]),  18,58},
  {&(_ZTV8S20540C1[40]),  40,58},
  {&(_ZTV8S20540C1[54]),  54,58},
  {&(_tg__ZTV8S20540C2__8S20540C1[3]),  3,10},
  {&(_tg__ZTV8S20540C3__8S20540C2__8S20540C1[15]),  15,27},
  {&(_tg__ZTV8S20540C58S20540C3__8S20540C2__8S20540C1[2]),  2,6},
};
extern VTBL_ENTRY _ZTI8S20540C1[];
extern  VTBL_ENTRY _ZTV8S20540C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20540C1[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20540C2D0Ev,_ZTv0_n52_N8S20540C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20540C2D0Ev,_ZThn32_N8S20540C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20540C2D1Ev,_ZTv0_n52_N8S20540C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20540C2D1Ev,_ZThn32_N8S20540C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20540C1D0Ev,_ZTv0_n52_N8S20540C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20540C1D0Ev,_ZThn36_N8S20540C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S20540C1D1Ev,_ZTv0_n52_N8S20540C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20540C1D1Ev,_ZThn36_N8S20540C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20540C1D0Ev,_ZTv0_n36_N8S20540C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20540C1D0Ev,_ZThn4_N8S20540C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20540C1D1Ev,_ZTv0_n36_N8S20540C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20540C1D1Ev,_ZThn4_N8S20540C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20540C1 = {  "S20540C1", // class name
  bases_S20540C1, 4,
  &(vtc_S20540C1[0]), // expected_vtbl_contents
  &(vtt_S20540C1[0]), // expected_vtt_contents
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI8S20540C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20540C1),58, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20540C1),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20351C2_nt  {
  short s20351c2f0[2];
  virtual void  v7(); // _ZN11S20351C2_nt2v7Ev
  virtual void  v8(); // _ZN11S20351C2_nt2v8Ev
  virtual void  v9(); // _ZN11S20351C2_nt2v9Ev
  virtual void  v10(); // _ZN11S20351C2_nt3v10Ev
  virtual void  v11(); // _ZN11S20351C2_nt3v11Ev
  ~S20351C2_nt(); // tgen
  S20351C2_nt(); // tgen
};
//SIG(-1 S20351C2_nt) C1{ v1 v2 v3 v4 v5 Fs[2]}


void  S20351C2_nt ::v7(){vfunc_called(this, "_ZN11S20351C2_nt2v7Ev");}
void  S20351C2_nt ::v8(){vfunc_called(this, "_ZN11S20351C2_nt2v8Ev");}
void  S20351C2_nt ::v9(){vfunc_called(this, "_ZN11S20351C2_nt2v9Ev");}
void  S20351C2_nt ::v10(){vfunc_called(this, "_ZN11S20351C2_nt3v10Ev");}
void  S20351C2_nt ::v11(){vfunc_called(this, "_ZN11S20351C2_nt3v11Ev");}
S20351C2_nt ::~S20351C2_nt(){ note_dtor("S20351C2_nt", this);} // tgen
S20351C2_nt ::S20351C2_nt(){ note_ctor("S20351C2_nt", this);} // tgen

//skip512 S20351C2_nt

#else // __cplusplus

extern void _ZN11S20351C2_ntC1Ev();
extern void _ZN11S20351C2_ntD1Ev();
Name_Map name_map_S20351C2_nt[] = {
  NSPAIR(_ZN11S20351C2_ntC1Ev),
  NSPAIR(_ZN11S20351C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20351C2_nt[];
extern void _ZN11S20351C2_nt2v7Ev();
extern void _ZN11S20351C2_nt2v8Ev();
extern void _ZN11S20351C2_nt2v9Ev();
extern void _ZN11S20351C2_nt3v10Ev();
extern void _ZN11S20351C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S20351C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20351C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20351C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI11S20351C2_nt[];
VTBL_ENTRY *P__ZTI11S20351C2_nt = _ZTI11S20351C2_nt; 
extern  VTBL_ENTRY _ZTV11S20351C2_nt[];
Class_Descriptor cd_S20351C2_nt = {  "S20351C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20351C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S20351C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20351C2_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  S20351C4  {
  short s20351c4f0;
  virtual  ~S20351C4(); // _ZN8S20351C4D1Ev
  virtual void  v16(); // _ZN8S20351C43v16Ev
  virtual void  v17(); // _ZN8S20351C43v17Ev
  virtual void  v18(); // _ZN8S20351C43v18Ev
  S20351C4(); // tgen
};
//SIG(-1 S20351C4) C1{ vd v1 v2 v3 Fs}


 S20351C4 ::~S20351C4(){ note_dtor("S20351C4", this);}
void  S20351C4 ::v16(){vfunc_called(this, "_ZN8S20351C43v16Ev");}
void  S20351C4 ::v17(){vfunc_called(this, "_ZN8S20351C43v17Ev");}
void  S20351C4 ::v18(){vfunc_called(this, "_ZN8S20351C43v18Ev");}
S20351C4 ::S20351C4(){ note_ctor("S20351C4", this);} // tgen

static void Test_S20351C4()
{
  extern Class_Descriptor cd_S20351C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20351C4, buf);
    S20351C4 *dp, &lv = *(dp=new (buf) S20351C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20351C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20351C4)");
    check_field_offset(lv, s20351c4f0, ABISELECT(8,4), "S20351C4.s20351c4f0");
    test_class_info(&lv, &cd_S20351C4);
    dp->~S20351C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20351C4(Test_S20351C4, "S20351C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20351C4C1Ev();
extern void _ZN8S20351C4D1Ev();
Name_Map name_map_S20351C4[] = {
  NSPAIR(_ZN8S20351C4C1Ev),
  NSPAIR(_ZN8S20351C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20351C4[];
extern void _ZN8S20351C4D1Ev();
extern void _ZN8S20351C4D0Ev();
extern void _ZN8S20351C43v16Ev();
extern void _ZN8S20351C43v17Ev();
extern void _ZN8S20351C43v18Ev();
static  VTBL_ENTRY vtc_S20351C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20351C4[0]),
  (VTBL_ENTRY)&_ZN8S20351C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20351C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20351C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20351C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20351C43v18Ev,
};
extern VTBL_ENTRY _ZTI8S20351C4[];
extern  VTBL_ENTRY _ZTV8S20351C4[];
Class_Descriptor cd_S20351C4 = {  "S20351C4", // class name
  0,0,//no base classes
  &(vtc_S20351C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20351C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20351C4),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  S20351C3  {
  ::S20351C4 s20351c3f0;
  int s20351c3f1;
  long double s20351c3f2[2];
  ::S7589C7 s20351c3f3;
  virtual void  v12(); // _ZN8S20351C33v12Ev
  virtual void  v13(); // _ZN8S20351C33v13Ev
  virtual void  v14(); // _ZN8S20351C33v14Ev
  virtual void  v15(); // _ZN8S20351C33v15Ev
  ~S20351C3(); // tgen
  S20351C3(); // tgen
};
//SIG(-1 S20351C3) C1{ v1 v2 v3 v4 FC2{ vd v5 v6 v7 Fs} Fi FD[2] FC3{ VBC4{ vd v12 v13 v14 Fs} vd v8 v9 v10 v11 Fi}}


void  S20351C3 ::v12(){vfunc_called(this, "_ZN8S20351C33v12Ev");}
void  S20351C3 ::v13(){vfunc_called(this, "_ZN8S20351C33v13Ev");}
void  S20351C3 ::v14(){vfunc_called(this, "_ZN8S20351C33v14Ev");}
void  S20351C3 ::v15(){vfunc_called(this, "_ZN8S20351C33v15Ev");}
S20351C3 ::~S20351C3(){ note_dtor("S20351C3", this);} // tgen
S20351C3 ::S20351C3(){ note_ctor("S20351C3", this);} // tgen

static void Test_S20351C3()
{
  extern Class_Descriptor cd_S20351C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,15)];
    init_test(&cd_S20351C3, buf);
    S20351C3 *dp, &lv = *(dp=new (buf) S20351C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S20351C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20351C3)");
    check_field_offset(lv, s20351c3f0, ABISELECT(8,4), "S20351C3.s20351c3f0");
    check_field_offset(lv, s20351c3f1, ABISELECT(24,12), "S20351C3.s20351c3f1");
    check_field_offset(lv, s20351c3f2, ABISELECT(32,16), "S20351C3.s20351c3f2");
    check_field_offset(lv, s20351c3f3, ABISELECT(64,40), "S20351C3.s20351c3f3");
    test_class_info(&lv, &cd_S20351C3);
    dp->~S20351C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20351C3(Test_S20351C3, "S20351C3", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S20351C3C1Ev();
extern void _ZN8S20351C3D1Ev();
Name_Map name_map_S20351C3[] = {
  NSPAIR(_ZN8S20351C3C1Ev),
  NSPAIR(_ZN8S20351C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20351C3[];
extern void _ZN8S20351C33v12Ev();
extern void _ZN8S20351C33v13Ev();
extern void _ZN8S20351C33v14Ev();
extern void _ZN8S20351C33v15Ev();
static  VTBL_ENTRY vtc_S20351C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20351C3[0]),
  (VTBL_ENTRY)&_ZN8S20351C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20351C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20351C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20351C33v15Ev,
};
extern VTBL_ENTRY _ZTI8S20351C3[];
extern  VTBL_ENTRY _ZTV8S20351C3[];
Class_Descriptor cd_S20351C3 = {  "S20351C3", // class name
  0,0,//no base classes
  &(vtc_S20351C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S20351C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20351C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20351C1  : virtual S20351C2_nt , virtual S20351C3 {
  virtual void  v1(); // _ZN8S20351C12v1Ev
  virtual void  v2(); // _ZN8S20351C12v2Ev
  virtual void  v3(); // _ZN8S20351C12v3Ev
  virtual void  v4(); // _ZN8S20351C12v4Ev
  virtual void  v5(); // _ZN8S20351C12v5Ev
  virtual void  v6(); // _ZN8S20351C12v6Ev
  ~S20351C1(); // tgen
  S20351C1(); // tgen
};
//SIG(1 S20351C1) C1{ VBC2{ v7 v8 v9 v10 v11 Fs[2]} VBC3{ v12 v13 v14 v15 FC4{ vd v16 v17 v18 Fs} Fi FD[2] FC5{ VBC6{ vd v23 v24 v25 Fs} vd v19 v20 v21 v22 Fi}} v1 v2 v3 v4 v5 v6}


void  S20351C1 ::v1(){vfunc_called(this, "_ZN8S20351C12v1Ev");}
void  S20351C1 ::v2(){vfunc_called(this, "_ZN8S20351C12v2Ev");}
void  S20351C1 ::v3(){vfunc_called(this, "_ZN8S20351C12v3Ev");}
void  S20351C1 ::v4(){vfunc_called(this, "_ZN8S20351C12v4Ev");}
void  S20351C1 ::v5(){vfunc_called(this, "_ZN8S20351C12v5Ev");}
void  S20351C1 ::v6(){vfunc_called(this, "_ZN8S20351C12v6Ev");}
S20351C1 ::~S20351C1(){ note_dtor("S20351C1", this);} // tgen
S20351C1 ::S20351C1(){ note_ctor("S20351C1", this);} // tgen

static void Test_S20351C1()
{
  extern Class_Descriptor cd_S20351C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S20351C1, buf);
    S20351C1 *dp, &lv = *(dp=new (buf) S20351C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S20351C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20351C1)");
    check_base_class_offset(lv, (S20351C2_nt*), ABISELECT(8,4), "S20351C1");
    check_base_class_offset(lv, (S20351C3*), ABISELECT(32,12), "S20351C1");
    test_class_info(&lv, &cd_S20351C1);
    dp->~S20351C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20351C1(Test_S20351C1, "S20351C1", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S20351C1C1Ev();
extern void _ZN8S20351C1D1Ev();
Name_Map name_map_S20351C1[] = {
  NSPAIR(_ZN8S20351C1C1Ev),
  NSPAIR(_ZN8S20351C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20351C2_nt;
extern VTBL_ENTRY _ZTI11S20351C2_nt[];
extern  VTBL_ENTRY _ZTV11S20351C2_nt[];
extern Class_Descriptor cd_S20351C3;
extern VTBL_ENTRY _ZTI8S20351C3[];
extern  VTBL_ENTRY _ZTV8S20351C3[];
static Base_Class bases_S20351C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20351C2_nt,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //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_S20351C3,    ABISELECT(32,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20351C1[];
extern void _ZN8S20351C12v1Ev();
extern void _ZN8S20351C12v2Ev();
extern void _ZN8S20351C12v3Ev();
extern void _ZN8S20351C12v4Ev();
extern void _ZN8S20351C12v5Ev();
extern void _ZN8S20351C12v6Ev();
extern void _ZN11S20351C2_nt2v7Ev();
extern void _ZN11S20351C2_nt2v8Ev();
extern void _ZN11S20351C2_nt2v9Ev();
extern void _ZN11S20351C2_nt3v10Ev();
extern void _ZN11S20351C2_nt3v11Ev();
extern void _ZN8S20351C33v12Ev();
extern void _ZN8S20351C33v13Ev();
extern void _ZN8S20351C33v14Ev();
extern void _ZN8S20351C33v15Ev();
static  VTBL_ENTRY vtc_S20351C1[] = {
  ABISELECT(32,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20351C1[0]),
  (VTBL_ENTRY)&_ZN8S20351C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20351C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20351C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20351C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20351C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20351C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20351C1[0]),
  (VTBL_ENTRY)&_ZN11S20351C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20351C2_nt3v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S20351C1[0]),
  (VTBL_ENTRY)&_ZN8S20351C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20351C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20351C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20351C33v15Ev,
};
extern VTBL_ENTRY _ZTV8S20351C1[];
static  VTT_ENTRY vtt_S20351C1[] = {
  {&(_ZTV8S20351C1[4]),  4,32},
  {&(_ZTV8S20351C1[17]),  17,32},
  {&(_ZTV8S20351C1[28]),  28,32},
};
extern VTBL_ENTRY _ZTI8S20351C1[];
extern  VTBL_ENTRY _ZTV8S20351C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20351C1[];
Class_Descriptor cd_S20351C1 = {  "S20351C1", // class name
  bases_S20351C1, 2,
  &(vtc_S20351C1[0]), // expected_vtbl_contents
  &(vtt_S20351C1[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S20351C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20351C1),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20351C1),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  S1196C3  : S22028C16 {
  virtual  ~S1196C3(); // _ZN7S1196C3D1Ev
  virtual void  v11(); // _ZN7S1196C33v11Ev
  S1196C3(); // tgen
};
//SIG(-1 S1196C3) C1{ BC2{ m} vd v1}


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

static void Test_S1196C3()
{
  extern Class_Descriptor cd_S1196C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1196C3, buf);
    S1196C3 *dp, &lv = *(dp=new (buf) S1196C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1196C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1196C3)");
    check_base_class_offset(lv, (S22028C16*), 0, "S1196C3");
    test_class_info(&lv, &cd_S1196C3);
    dp->~S1196C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1196C3(Test_S1196C3, "S1196C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1196C3C1Ev();
extern void _ZN7S1196C3D1Ev();
Name_Map name_map_S1196C3[] = {
  NSPAIR(_ZN7S1196C3C1Ev),
  NSPAIR(_ZN7S1196C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S1196C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1196C3[];
extern void _ZN7S1196C3D1Ev();
extern void _ZN7S1196C3D0Ev();
extern void _ZN7S1196C33v11Ev();
static  VTBL_ENTRY vtc_S1196C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1196C3[0]),
  (VTBL_ENTRY)&_ZN7S1196C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1196C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1196C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1196C3[];
extern  VTBL_ENTRY _ZTV7S1196C3[];
Class_Descriptor cd_S1196C3 = {  "S1196C3", // class name
  bases_S1196C3, 1,
  &(vtc_S1196C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1196C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1196C3),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  S1196C2  : S1196C3 {
  int s1196c2f0;
  void *s1196c2f1[2];
  virtual  ~S1196C2(); // _ZN7S1196C2D1Ev
  virtual void  v12(); // _ZN7S1196C23v12Ev
  virtual void  v13(); // _ZN7S1196C23v13Ev
  virtual void  v14(); // _ZN7S1196C23v14Ev
  virtual void  v15(); // _ZN7S1196C23v15Ev
  virtual void  v16(); // _ZN7S1196C23v16Ev
  virtual void  v17(); // _ZN7S1196C23v17Ev
  virtual void  v18(); // _ZN7S1196C23v18Ev
  virtual void  v19(); // _ZN7S1196C23v19Ev
  virtual void  v20(); // _ZN7S1196C23v20Ev
  virtual void  v21(); // _ZN7S1196C23v21Ev
  virtual void  v22(); // _ZN7S1196C23v22Ev
  virtual void  v23(); // _ZN7S1196C23v23Ev
  virtual void  v24(); // _ZN7S1196C23v24Ev
  virtual void  v25(); // _ZN7S1196C23v25Ev
  S1196C2(); // tgen
};
//SIG(-1 S1196C2) C1{ BC2{ BC3{ m} vd v15} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp[2]}


 S1196C2 ::~S1196C2(){ note_dtor("S1196C2", this);}
void  S1196C2 ::v12(){vfunc_called(this, "_ZN7S1196C23v12Ev");}
void  S1196C2 ::v13(){vfunc_called(this, "_ZN7S1196C23v13Ev");}
void  S1196C2 ::v14(){vfunc_called(this, "_ZN7S1196C23v14Ev");}
void  S1196C2 ::v15(){vfunc_called(this, "_ZN7S1196C23v15Ev");}
void  S1196C2 ::v16(){vfunc_called(this, "_ZN7S1196C23v16Ev");}
void  S1196C2 ::v17(){vfunc_called(this, "_ZN7S1196C23v17Ev");}
void  S1196C2 ::v18(){vfunc_called(this, "_ZN7S1196C23v18Ev");}
void  S1196C2 ::v19(){vfunc_called(this, "_ZN7S1196C23v19Ev");}
void  S1196C2 ::v20(){vfunc_called(this, "_ZN7S1196C23v20Ev");}
void  S1196C2 ::v21(){vfunc_called(this, "_ZN7S1196C23v21Ev");}
void  S1196C2 ::v22(){vfunc_called(this, "_ZN7S1196C23v22Ev");}
void  S1196C2 ::v23(){vfunc_called(this, "_ZN7S1196C23v23Ev");}
void  S1196C2 ::v24(){vfunc_called(this, "_ZN7S1196C23v24Ev");}
void  S1196C2 ::v25(){vfunc_called(this, "_ZN7S1196C23v25Ev");}
S1196C2 ::S1196C2(){ note_ctor("S1196C2", this);} // tgen

static void Test_S1196C2()
{
  extern Class_Descriptor cd_S1196C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1196C2, buf);
    S1196C2 *dp, &lv = *(dp=new (buf) S1196C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1196C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1196C2)");
    check_base_class_offset(lv, (S22028C16*)(S1196C3*), 0, "S1196C2");
    check_base_class_offset(lv, (S1196C3*), 0, "S1196C2");
    check_field_offset(lv, s1196c2f0, ABISELECT(8,4), "S1196C2.s1196c2f0");
    check_field_offset(lv, s1196c2f1, ABISELECT(16,8), "S1196C2.s1196c2f1");
    test_class_info(&lv, &cd_S1196C2);
    dp->~S1196C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1196C2(Test_S1196C2, "S1196C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1196C2C1Ev();
extern void _ZN7S1196C2D1Ev();
Name_Map name_map_S1196C2[] = {
  NSPAIR(_ZN7S1196C2C1Ev),
  NSPAIR(_ZN7S1196C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1196C3;
extern VTBL_ENTRY _ZTI7S1196C3[];
extern  VTBL_ENTRY _ZTV7S1196C3[];
static Base_Class bases_S1196C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1196C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1196C2[];
extern void _ZN7S1196C2D1Ev();
extern void _ZN7S1196C2D0Ev();
extern void _ZN7S1196C33v11Ev();
extern void _ZN7S1196C23v12Ev();
extern void _ZN7S1196C23v13Ev();
extern void _ZN7S1196C23v14Ev();
extern void _ZN7S1196C23v15Ev();
extern void _ZN7S1196C23v16Ev();
extern void _ZN7S1196C23v17Ev();
extern void _ZN7S1196C23v18Ev();
extern void _ZN7S1196C23v19Ev();
extern void _ZN7S1196C23v20Ev();
extern void _ZN7S1196C23v21Ev();
extern void _ZN7S1196C23v22Ev();
extern void _ZN7S1196C23v23Ev();
extern void _ZN7S1196C23v24Ev();
extern void _ZN7S1196C23v25Ev();
static  VTBL_ENTRY vtc_S1196C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1196C2[0]),
  (VTBL_ENTRY)&_ZN7S1196C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1196C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1196C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S1196C2[];
extern  VTBL_ENTRY _ZTV7S1196C2[];
Class_Descriptor cd_S1196C2 = {  "S1196C2", // class name
  bases_S1196C2, 2,
  &(vtc_S1196C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1196C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1196C2),19, //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  S1196C1  : S1196C2 {
  __tsi64 s1196c1f0[2];
  char s1196c1f1;
  virtual void  v1(); // _ZN7S1196C12v1Ev
  virtual void  v2(); // _ZN7S1196C12v2Ev
  virtual void  v3(); // _ZN7S1196C12v3Ev
  virtual void  v4(); // _ZN7S1196C12v4Ev
  virtual void  v5(); // _ZN7S1196C12v5Ev
  virtual void  v6(); // _ZN7S1196C12v6Ev
  virtual void  v7(); // _ZN7S1196C12v7Ev
  virtual void  v8(); // _ZN7S1196C12v8Ev
  virtual void  v9(); // _ZN7S1196C12v9Ev
  virtual void  v10(); // _ZN7S1196C13v10Ev
  ~S1196C1(); // tgen
  S1196C1(); // tgen
};
//SIG(1 S1196C1) C1{ BC2{ BC3{ BC4{ m} vd v11} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fi Fp[2]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FL[2] Fc}


void  S1196C1 ::v1(){vfunc_called(this, "_ZN7S1196C12v1Ev");}
void  S1196C1 ::v2(){vfunc_called(this, "_ZN7S1196C12v2Ev");}
void  S1196C1 ::v3(){vfunc_called(this, "_ZN7S1196C12v3Ev");}
void  S1196C1 ::v4(){vfunc_called(this, "_ZN7S1196C12v4Ev");}
void  S1196C1 ::v5(){vfunc_called(this, "_ZN7S1196C12v5Ev");}
void  S1196C1 ::v6(){vfunc_called(this, "_ZN7S1196C12v6Ev");}
void  S1196C1 ::v7(){vfunc_called(this, "_ZN7S1196C12v7Ev");}
void  S1196C1 ::v8(){vfunc_called(this, "_ZN7S1196C12v8Ev");}
void  S1196C1 ::v9(){vfunc_called(this, "_ZN7S1196C12v9Ev");}
void  S1196C1 ::v10(){vfunc_called(this, "_ZN7S1196C13v10Ev");}
S1196C1 ::~S1196C1(){ note_dtor("S1196C1", this);} // tgen
S1196C1 ::S1196C1(){ note_ctor("S1196C1", this);} // tgen

static void Test_S1196C1()
{
  extern Class_Descriptor cd_S1196C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S1196C1, buf);
    S1196C1 *dp, &lv = *(dp=new (buf) S1196C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S1196C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1196C1)");
    check_base_class_offset(lv, (S22028C16*)(S1196C3*)(S1196C2*), 0, "S1196C1");
    check_base_class_offset(lv, (S1196C3*)(S1196C2*), 0, "S1196C1");
    check_base_class_offset(lv, (S1196C2*), 0, "S1196C1");
    check_field_offset(lv, s1196c1f0, ABISELECT(32,16), "S1196C1.s1196c1f0");
    check_field_offset(lv, s1196c1f1, ABISELECT(48,32), "S1196C1.s1196c1f1");
    test_class_info(&lv, &cd_S1196C1);
    dp->~S1196C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1196C1(Test_S1196C1, "S1196C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S1196C1C1Ev();
extern void _ZN7S1196C1D1Ev();
Name_Map name_map_S1196C1[] = {
  NSPAIR(_ZN7S1196C1C1Ev),
  NSPAIR(_ZN7S1196C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1196C3;
extern VTBL_ENTRY _ZTI7S1196C3[];
extern  VTBL_ENTRY _ZTV7S1196C3[];
extern Class_Descriptor cd_S1196C2;
extern VTBL_ENTRY _ZTI7S1196C2[];
extern  VTBL_ENTRY _ZTV7S1196C2[];
static Base_Class bases_S1196C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1196C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1196C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1196C1[];
extern void _ZN7S1196C1D1Ev();
extern void _ZN7S1196C1D0Ev();
extern void _ZN7S1196C33v11Ev();
extern void _ZN7S1196C23v12Ev();
extern void _ZN7S1196C23v13Ev();
extern void _ZN7S1196C23v14Ev();
extern void _ZN7S1196C23v15Ev();
extern void _ZN7S1196C23v16Ev();
extern void _ZN7S1196C23v17Ev();
extern void _ZN7S1196C23v18Ev();
extern void _ZN7S1196C23v19Ev();
extern void _ZN7S1196C23v20Ev();
extern void _ZN7S1196C23v21Ev();
extern void _ZN7S1196C23v22Ev();
extern void _ZN7S1196C23v23Ev();
extern void _ZN7S1196C23v24Ev();
extern void _ZN7S1196C23v25Ev();
extern void _ZN7S1196C12v1Ev();
extern void _ZN7S1196C12v2Ev();
extern void _ZN7S1196C12v3Ev();
extern void _ZN7S1196C12v4Ev();
extern void _ZN7S1196C12v5Ev();
extern void _ZN7S1196C12v6Ev();
extern void _ZN7S1196C12v7Ev();
extern void _ZN7S1196C12v8Ev();
extern void _ZN7S1196C12v9Ev();
extern void _ZN7S1196C13v10Ev();
static  VTBL_ENTRY vtc_S1196C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1196C1[0]),
  (VTBL_ENTRY)&_ZN7S1196C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1196C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1196C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1196C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1196C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1196C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1196C1[];
extern  VTBL_ENTRY _ZTV7S1196C1[];
Class_Descriptor cd_S1196C1 = {  "S1196C1", // class name
  bases_S1196C1, 3,
  &(vtc_S1196C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S1196C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1196C1),29, //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  S6820C2  {
  virtual void  v4(); // _ZN7S6820C22v4Ev
  virtual void  v5(); // _ZN7S6820C22v5Ev
  virtual void  v6(); // _ZN7S6820C22v6Ev
  virtual void  v7(); // _ZN7S6820C22v7Ev
  virtual void  v8(); // _ZN7S6820C22v8Ev
  virtual void  v9(); // _ZN7S6820C22v9Ev
  virtual void  v10(); // _ZN7S6820C23v10Ev
  virtual void  v11(); // _ZN7S6820C23v11Ev
  ~S6820C2(); // tgen
  S6820C2(); // tgen
};
//SIG(-1 S6820C2) C1{ v1 v2 v3 v4 v5 v6 v7 v8}


void  S6820C2 ::v4(){vfunc_called(this, "_ZN7S6820C22v4Ev");}
void  S6820C2 ::v5(){vfunc_called(this, "_ZN7S6820C22v5Ev");}
void  S6820C2 ::v6(){vfunc_called(this, "_ZN7S6820C22v6Ev");}
void  S6820C2 ::v7(){vfunc_called(this, "_ZN7S6820C22v7Ev");}
void  S6820C2 ::v8(){vfunc_called(this, "_ZN7S6820C22v8Ev");}
void  S6820C2 ::v9(){vfunc_called(this, "_ZN7S6820C22v9Ev");}
void  S6820C2 ::v10(){vfunc_called(this, "_ZN7S6820C23v10Ev");}
void  S6820C2 ::v11(){vfunc_called(this, "_ZN7S6820C23v11Ev");}
S6820C2 ::~S6820C2(){ note_dtor("S6820C2", this);} // tgen
S6820C2 ::S6820C2(){ note_ctor("S6820C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6820C2C1Ev();
extern void _ZN7S6820C2D1Ev();
Name_Map name_map_S6820C2[] = {
  NSPAIR(_ZN7S6820C2C1Ev),
  NSPAIR(_ZN7S6820C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6820C2[];
extern void _ZN7S6820C22v4Ev();
extern void _ZN7S6820C22v5Ev();
extern void _ZN7S6820C22v6Ev();
extern void _ZN7S6820C22v7Ev();
extern void _ZN7S6820C22v8Ev();
extern void _ZN7S6820C22v9Ev();
extern void _ZN7S6820C23v10Ev();
extern void _ZN7S6820C23v11Ev();
static  VTBL_ENTRY vtc_S6820C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6820C2[0]),
  (VTBL_ENTRY)&_ZN7S6820C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6820C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6820C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S6820C2[];
extern  VTBL_ENTRY _ZTV7S6820C2[];
Class_Descriptor cd_S6820C2 = {  "S6820C2", // class name
  0,0,//no base classes
  &(vtc_S6820C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6820C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6820C2),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  S6820C4  {
  void *s6820c4f0[2];
  int s6820c4f1;
  virtual void  v12(); // _ZN7S6820C43v12Ev
  virtual void  v13(); // _ZN7S6820C43v13Ev
  ~S6820C4(); // tgen
  S6820C4(); // tgen
};
//SIG(-1 S6820C4) C1{ v1 v2 Fp[2] Fi}


void  S6820C4 ::v12(){vfunc_called(this, "_ZN7S6820C43v12Ev");}
void  S6820C4 ::v13(){vfunc_called(this, "_ZN7S6820C43v13Ev");}
S6820C4 ::~S6820C4(){ note_dtor("S6820C4", this);} // tgen
S6820C4 ::S6820C4(){ note_ctor("S6820C4", this);} // tgen

static void Test_S6820C4()
{
  extern Class_Descriptor cd_S6820C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6820C4, buf);
    S6820C4 *dp, &lv = *(dp=new (buf) S6820C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6820C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6820C4)");
    check_field_offset(lv, s6820c4f0, ABISELECT(8,4), "S6820C4.s6820c4f0");
    check_field_offset(lv, s6820c4f1, ABISELECT(24,12), "S6820C4.s6820c4f1");
    test_class_info(&lv, &cd_S6820C4);
    dp->~S6820C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6820C4(Test_S6820C4, "S6820C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6820C4C1Ev();
extern void _ZN7S6820C4D1Ev();
Name_Map name_map_S6820C4[] = {
  NSPAIR(_ZN7S6820C4C1Ev),
  NSPAIR(_ZN7S6820C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6820C4[];
extern void _ZN7S6820C43v12Ev();
extern void _ZN7S6820C43v13Ev();
static  VTBL_ENTRY vtc_S6820C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6820C4[0]),
  (VTBL_ENTRY)&_ZN7S6820C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6820C43v13Ev,
};
extern VTBL_ENTRY _ZTI7S6820C4[];
extern  VTBL_ENTRY _ZTV7S6820C4[];
Class_Descriptor cd_S6820C4 = {  "S6820C4", // class name
  0,0,//no base classes
  &(vtc_S6820C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6820C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6820C4),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  S6820C3  : S6820C4 {
  virtual void  v14(); // _ZN7S6820C33v14Ev
  virtual void  v15(); // _ZN7S6820C33v15Ev
  virtual void  v16(); // _ZN7S6820C33v16Ev
  virtual void  v17(); // _ZN7S6820C33v17Ev
  virtual void  v18(); // _ZN7S6820C33v18Ev
  virtual void  v19(); // _ZN7S6820C33v19Ev
  virtual void  v20(); // _ZN7S6820C33v20Ev
  ~S6820C3(); // tgen
  S6820C3(); // tgen
};
//SIG(-1 S6820C3) C1{ BC2{ v8 v9 Fp[2] Fi} v1 v2 v3 v4 v5 v6 v7}


void  S6820C3 ::v14(){vfunc_called(this, "_ZN7S6820C33v14Ev");}
void  S6820C3 ::v15(){vfunc_called(this, "_ZN7S6820C33v15Ev");}
void  S6820C3 ::v16(){vfunc_called(this, "_ZN7S6820C33v16Ev");}
void  S6820C3 ::v17(){vfunc_called(this, "_ZN7S6820C33v17Ev");}
void  S6820C3 ::v18(){vfunc_called(this, "_ZN7S6820C33v18Ev");}
void  S6820C3 ::v19(){vfunc_called(this, "_ZN7S6820C33v19Ev");}
void  S6820C3 ::v20(){vfunc_called(this, "_ZN7S6820C33v20Ev");}
S6820C3 ::~S6820C3(){ note_dtor("S6820C3", this);} // tgen
S6820C3 ::S6820C3(){ note_ctor("S6820C3", this);} // tgen

static void Test_S6820C3()
{
  extern Class_Descriptor cd_S6820C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6820C3, buf);
    S6820C3 *dp, &lv = *(dp=new (buf) S6820C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6820C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6820C3)");
    check_base_class_offset(lv, (S6820C4*), 0, "S6820C3");
    test_class_info(&lv, &cd_S6820C3);
    dp->~S6820C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6820C3(Test_S6820C3, "S6820C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6820C3C1Ev();
extern void _ZN7S6820C3D1Ev();
Name_Map name_map_S6820C3[] = {
  NSPAIR(_ZN7S6820C3C1Ev),
  NSPAIR(_ZN7S6820C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6820C4;
extern VTBL_ENTRY _ZTI7S6820C4[];
extern  VTBL_ENTRY _ZTV7S6820C4[];
static Base_Class bases_S6820C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6820C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6820C3[];
extern void _ZN7S6820C43v12Ev();
extern void _ZN7S6820C43v13Ev();
extern void _ZN7S6820C33v14Ev();
extern void _ZN7S6820C33v15Ev();
extern void _ZN7S6820C33v16Ev();
extern void _ZN7S6820C33v17Ev();
extern void _ZN7S6820C33v18Ev();
extern void _ZN7S6820C33v19Ev();
extern void _ZN7S6820C33v20Ev();
static  VTBL_ENTRY vtc_S6820C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6820C3[0]),
  (VTBL_ENTRY)&_ZN7S6820C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6820C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v18Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v19Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S6820C3[];
extern  VTBL_ENTRY _ZTV7S6820C3[];
Class_Descriptor cd_S6820C3 = {  "S6820C3", // class name
  bases_S6820C3, 1,
  &(vtc_S6820C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6820C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6820C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6820C5  : virtual S6820C4 {
  virtual void  v21(); // _ZN7S6820C53v21Ev
  virtual void  v22(); // _ZN7S6820C53v22Ev
  virtual void  v23(); // _ZN7S6820C53v23Ev
  virtual void  v24(); // _ZN7S6820C53v24Ev
  virtual void  v25(); // _ZN7S6820C53v25Ev
  virtual void  v26(); // _ZN7S6820C53v26Ev
  ~S6820C5(); // tgen
  S6820C5(); // tgen
};
//SIG(-1 S6820C5) C1{ VBC2{ v7 v8 Fp[2] Fi} v1 v2 v3 v4 v5 v6}


void  S6820C5 ::v21(){vfunc_called(this, "_ZN7S6820C53v21Ev");}
void  S6820C5 ::v22(){vfunc_called(this, "_ZN7S6820C53v22Ev");}
void  S6820C5 ::v23(){vfunc_called(this, "_ZN7S6820C53v23Ev");}
void  S6820C5 ::v24(){vfunc_called(this, "_ZN7S6820C53v24Ev");}
void  S6820C5 ::v25(){vfunc_called(this, "_ZN7S6820C53v25Ev");}
void  S6820C5 ::v26(){vfunc_called(this, "_ZN7S6820C53v26Ev");}
S6820C5 ::~S6820C5(){ note_dtor("S6820C5", this);} // tgen
S6820C5 ::S6820C5(){ note_ctor("S6820C5", this);} // tgen

static void Test_S6820C5()
{
  extern Class_Descriptor cd_S6820C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6820C5, buf);
    S6820C5 *dp, &lv = *(dp=new (buf) S6820C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6820C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6820C5)");
    check_base_class_offset(lv, (S6820C4*), ABISELECT(8,4), "S6820C5");
    test_class_info(&lv, &cd_S6820C5);
    dp->~S6820C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6820C5(Test_S6820C5, "S6820C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6820C5C1Ev();
extern void _ZN7S6820C5D1Ev();
Name_Map name_map_S6820C5[] = {
  NSPAIR(_ZN7S6820C5C1Ev),
  NSPAIR(_ZN7S6820C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6820C4;
extern VTBL_ENTRY _ZTI7S6820C4[];
extern  VTBL_ENTRY _ZTV7S6820C4[];
static Base_Class bases_S6820C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6820C4,    ABISELECT(8,4), //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},
  {0}};
extern VTBL_ENTRY _ZTI7S6820C5[];
extern void _ZN7S6820C53v21Ev();
extern void _ZN7S6820C53v22Ev();
extern void _ZN7S6820C53v23Ev();
extern void _ZN7S6820C53v24Ev();
extern void _ZN7S6820C53v25Ev();
extern void _ZN7S6820C53v26Ev();
extern void _ZN7S6820C43v12Ev();
extern void _ZN7S6820C43v13Ev();
static  VTBL_ENTRY vtc_S6820C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6820C5[0]),
  (VTBL_ENTRY)&_ZN7S6820C53v21Ev,
  (VTBL_ENTRY)&_ZN7S6820C53v22Ev,
  (VTBL_ENTRY)&_ZN7S6820C53v23Ev,
  (VTBL_ENTRY)&_ZN7S6820C53v24Ev,
  (VTBL_ENTRY)&_ZN7S6820C53v25Ev,
  (VTBL_ENTRY)&_ZN7S6820C53v26Ev,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6820C5[0]),
  (VTBL_ENTRY)&_ZN7S6820C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6820C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S6820C5[];
static  VTT_ENTRY vtt_S6820C5[] = {
  {&(_ZTV7S6820C5[3]),  3,15},
  {&(_ZTV7S6820C5[13]),  13,15},
};
extern VTBL_ENTRY _ZTI7S6820C5[];
extern  VTBL_ENTRY _ZTV7S6820C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6820C5[];
Class_Descriptor cd_S6820C5 = {  "S6820C5", // class name
  bases_S6820C5, 1,
  &(vtc_S6820C5[0]), // expected_vtbl_contents
  &(vtt_S6820C5[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6820C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6820C5),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6820C5),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  S6820C1  : S6820C2 , virtual S6820C3 {
  ::S6820C5 s6820c1f0;
  virtual void  v1(); // _ZN7S6820C12v1Ev
  virtual void  v2(); // _ZN7S6820C12v2Ev
  virtual void  v3(); // _ZN7S6820C12v3Ev
  ~S6820C1(); // tgen
  S6820C1(); // tgen
};
//SIG(1 S6820C1) C1{ BC2{ v4 v5 v6 v7 v8 v9 v10 v11} VBC3{ BC4{ v12 v13 Fp[2] Fi} v14 v15 v16 v17 v18 v19 v20} v1 v2 v3 FC5{ VBC4 v21 v22 v23 v24 v25 v26}}


void  S6820C1 ::v1(){vfunc_called(this, "_ZN7S6820C12v1Ev");}
void  S6820C1 ::v2(){vfunc_called(this, "_ZN7S6820C12v2Ev");}
void  S6820C1 ::v3(){vfunc_called(this, "_ZN7S6820C12v3Ev");}
S6820C1 ::~S6820C1(){ note_dtor("S6820C1", this);} // tgen
S6820C1 ::S6820C1(){ note_ctor("S6820C1", this);} // tgen

static void Test_S6820C1()
{
  extern Class_Descriptor cd_S6820C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S6820C1, buf);
    S6820C1 *dp, &lv = *(dp=new (buf) S6820C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S6820C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6820C1)");
    check_base_class_offset(lv, (S6820C2*), 0, "S6820C1");
    check_base_class_offset(lv, (S6820C4*)(S6820C3*), ABISELECT(48,24), "S6820C1");
    check_base_class_offset(lv, (S6820C3*), ABISELECT(48,24), "S6820C1");
    check_field_offset(lv, s6820c1f0, ABISELECT(8,4), "S6820C1.s6820c1f0");
    test_class_info(&lv, &cd_S6820C1);
    dp->~S6820C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6820C1(Test_S6820C1, "S6820C1", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S6820C1C1Ev();
extern void _ZN7S6820C1D1Ev();
Name_Map name_map_S6820C1[] = {
  NSPAIR(_ZN7S6820C1C1Ev),
  NSPAIR(_ZN7S6820C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6820C2;
extern VTBL_ENTRY _ZTI7S6820C2[];
extern  VTBL_ENTRY _ZTV7S6820C2[];
extern Class_Descriptor cd_S6820C4;
extern VTBL_ENTRY _ZTI7S6820C4[];
extern  VTBL_ENTRY _ZTV7S6820C4[];
extern Class_Descriptor cd_S6820C3;
extern VTBL_ENTRY _ZTI7S6820C3[];
extern  VTBL_ENTRY _ZTV7S6820C3[];
static Base_Class bases_S6820C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6820C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6820C4,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6820C3,    ABISELECT(48,24), //bcp->offset
    14, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6820C1[];
extern void _ZN7S6820C22v4Ev();
extern void _ZN7S6820C22v5Ev();
extern void _ZN7S6820C22v6Ev();
extern void _ZN7S6820C22v7Ev();
extern void _ZN7S6820C22v8Ev();
extern void _ZN7S6820C22v9Ev();
extern void _ZN7S6820C23v10Ev();
extern void _ZN7S6820C23v11Ev();
extern void _ZN7S6820C12v1Ev();
extern void _ZN7S6820C12v2Ev();
extern void _ZN7S6820C12v3Ev();
extern void _ZN7S6820C43v12Ev();
extern void _ZN7S6820C43v13Ev();
extern void _ZN7S6820C33v14Ev();
extern void _ZN7S6820C33v15Ev();
extern void _ZN7S6820C33v16Ev();
extern void _ZN7S6820C33v17Ev();
extern void _ZN7S6820C33v18Ev();
extern void _ZN7S6820C33v19Ev();
extern void _ZN7S6820C33v20Ev();
static  VTBL_ENTRY vtc_S6820C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6820C1[0]),
  (VTBL_ENTRY)&_ZN7S6820C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6820C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6820C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6820C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6820C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6820C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6820C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6820C1[0]),
  (VTBL_ENTRY)&_ZN7S6820C43v12Ev,
  (VTBL_ENTRY)&_ZN7S6820C43v13Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v16Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v17Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v18Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v19Ev,
  (VTBL_ENTRY)&_ZN7S6820C33v20Ev,
};
extern VTBL_ENTRY _ZTV7S6820C1[];
static  VTT_ENTRY vtt_S6820C1[] = {
  {&(_ZTV7S6820C1[3]),  3,34},
  {&(_ZTV7S6820C1[25]),  25,34},
};
extern VTBL_ENTRY _ZTI7S6820C1[];
extern  VTBL_ENTRY _ZTV7S6820C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6820C1[];
Class_Descriptor cd_S6820C1 = {  "S6820C1", // class name
  bases_S6820C1, 3,
  &(vtc_S6820C1[0]), // expected_vtbl_contents
  &(vtt_S6820C1[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S6820C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6820C1),34, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6820C1),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1195C3  : S22028C16 {
  virtual  ~S1195C3(); // _ZN7S1195C3D1Ev
  virtual void  v11(); // _ZN7S1195C33v11Ev
  S1195C3(); // tgen
};
//SIG(-1 S1195C3) C1{ BC2{ m} vd v1}


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

static void Test_S1195C3()
{
  extern Class_Descriptor cd_S1195C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1195C3, buf);
    S1195C3 *dp, &lv = *(dp=new (buf) S1195C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1195C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1195C3)");
    check_base_class_offset(lv, (S22028C16*), 0, "S1195C3");
    test_class_info(&lv, &cd_S1195C3);
    dp->~S1195C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1195C3(Test_S1195C3, "S1195C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1195C3C1Ev();
extern void _ZN7S1195C3D1Ev();
Name_Map name_map_S1195C3[] = {
  NSPAIR(_ZN7S1195C3C1Ev),
  NSPAIR(_ZN7S1195C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S1195C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1195C3[];
extern void _ZN7S1195C3D1Ev();
extern void _ZN7S1195C3D0Ev();
extern void _ZN7S1195C33v11Ev();
static  VTBL_ENTRY vtc_S1195C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1195C3[0]),
  (VTBL_ENTRY)&_ZN7S1195C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1195C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1195C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S1195C3[];
extern  VTBL_ENTRY _ZTV7S1195C3[];
Class_Descriptor cd_S1195C3 = {  "S1195C3", // class name
  bases_S1195C3, 1,
  &(vtc_S1195C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1195C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1195C3),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  S1195C2  : S1195C3 {
  int s1195c2f0;
  void *s1195c2f1[2];
  virtual  ~S1195C2(); // _ZN7S1195C2D1Ev
  virtual void  v12(); // _ZN7S1195C23v12Ev
  virtual void  v13(); // _ZN7S1195C23v13Ev
  virtual void  v14(); // _ZN7S1195C23v14Ev
  virtual void  v15(); // _ZN7S1195C23v15Ev
  virtual void  v16(); // _ZN7S1195C23v16Ev
  virtual void  v17(); // _ZN7S1195C23v17Ev
  virtual void  v18(); // _ZN7S1195C23v18Ev
  virtual void  v19(); // _ZN7S1195C23v19Ev
  virtual void  v20(); // _ZN7S1195C23v20Ev
  virtual void  v21(); // _ZN7S1195C23v21Ev
  virtual void  v22(); // _ZN7S1195C23v22Ev
  virtual void  v23(); // _ZN7S1195C23v23Ev
  virtual void  v24(); // _ZN7S1195C23v24Ev
  virtual void  v25(); // _ZN7S1195C23v25Ev
  S1195C2(); // tgen
};
//SIG(-1 S1195C2) C1{ BC2{ BC3{ m} vd v15} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp[2]}


 S1195C2 ::~S1195C2(){ note_dtor("S1195C2", this);}
void  S1195C2 ::v12(){vfunc_called(this, "_ZN7S1195C23v12Ev");}
void  S1195C2 ::v13(){vfunc_called(this, "_ZN7S1195C23v13Ev");}
void  S1195C2 ::v14(){vfunc_called(this, "_ZN7S1195C23v14Ev");}
void  S1195C2 ::v15(){vfunc_called(this, "_ZN7S1195C23v15Ev");}
void  S1195C2 ::v16(){vfunc_called(this, "_ZN7S1195C23v16Ev");}
void  S1195C2 ::v17(){vfunc_called(this, "_ZN7S1195C23v17Ev");}
void  S1195C2 ::v18(){vfunc_called(this, "_ZN7S1195C23v18Ev");}
void  S1195C2 ::v19(){vfunc_called(this, "_ZN7S1195C23v19Ev");}
void  S1195C2 ::v20(){vfunc_called(this, "_ZN7S1195C23v20Ev");}
void  S1195C2 ::v21(){vfunc_called(this, "_ZN7S1195C23v21Ev");}
void  S1195C2 ::v22(){vfunc_called(this, "_ZN7S1195C23v22Ev");}
void  S1195C2 ::v23(){vfunc_called(this, "_ZN7S1195C23v23Ev");}
void  S1195C2 ::v24(){vfunc_called(this, "_ZN7S1195C23v24Ev");}
void  S1195C2 ::v25(){vfunc_called(this, "_ZN7S1195C23v25Ev");}
S1195C2 ::S1195C2(){ note_ctor("S1195C2", this);} // tgen

static void Test_S1195C2()
{
  extern Class_Descriptor cd_S1195C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1195C2, buf);
    S1195C2 *dp, &lv = *(dp=new (buf) S1195C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1195C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1195C2)");
    check_base_class_offset(lv, (S22028C16*)(S1195C3*), 0, "S1195C2");
    check_base_class_offset(lv, (S1195C3*), 0, "S1195C2");
    check_field_offset(lv, s1195c2f0, ABISELECT(8,4), "S1195C2.s1195c2f0");
    check_field_offset(lv, s1195c2f1, ABISELECT(16,8), "S1195C2.s1195c2f1");
    test_class_info(&lv, &cd_S1195C2);
    dp->~S1195C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1195C2(Test_S1195C2, "S1195C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1195C2C1Ev();
extern void _ZN7S1195C2D1Ev();
Name_Map name_map_S1195C2[] = {
  NSPAIR(_ZN7S1195C2C1Ev),
  NSPAIR(_ZN7S1195C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1195C3;
extern VTBL_ENTRY _ZTI7S1195C3[];
extern  VTBL_ENTRY _ZTV7S1195C3[];
static Base_Class bases_S1195C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1195C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1195C2[];
extern void _ZN7S1195C2D1Ev();
extern void _ZN7S1195C2D0Ev();
extern void _ZN7S1195C33v11Ev();
extern void _ZN7S1195C23v12Ev();
extern void _ZN7S1195C23v13Ev();
extern void _ZN7S1195C23v14Ev();
extern void _ZN7S1195C23v15Ev();
extern void _ZN7S1195C23v16Ev();
extern void _ZN7S1195C23v17Ev();
extern void _ZN7S1195C23v18Ev();
extern void _ZN7S1195C23v19Ev();
extern void _ZN7S1195C23v20Ev();
extern void _ZN7S1195C23v21Ev();
extern void _ZN7S1195C23v22Ev();
extern void _ZN7S1195C23v23Ev();
extern void _ZN7S1195C23v24Ev();
extern void _ZN7S1195C23v25Ev();
static  VTBL_ENTRY vtc_S1195C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1195C2[0]),
  (VTBL_ENTRY)&_ZN7S1195C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1195C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1195C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v25Ev,
};
extern VTBL_ENTRY _ZTI7S1195C2[];
extern  VTBL_ENTRY _ZTV7S1195C2[];
Class_Descriptor cd_S1195C2 = {  "S1195C2", // class name
  bases_S1195C2, 2,
  &(vtc_S1195C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1195C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1195C2),19, //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  S1195C1  : S1195C2 {
  char s1195c1f0[2];
  virtual void  v1(); // _ZN7S1195C12v1Ev
  virtual void  v2(); // _ZN7S1195C12v2Ev
  virtual void  v3(); // _ZN7S1195C12v3Ev
  virtual void  v4(); // _ZN7S1195C12v4Ev
  virtual void  v5(); // _ZN7S1195C12v5Ev
  virtual void  v6(); // _ZN7S1195C12v6Ev
  virtual void  v7(); // _ZN7S1195C12v7Ev
  virtual void  v8(); // _ZN7S1195C12v8Ev
  virtual void  v9(); // _ZN7S1195C12v9Ev
  virtual void  v10(); // _ZN7S1195C13v10Ev
  ~S1195C1(); // tgen
  S1195C1(); // tgen
};
//SIG(1 S1195C1) C1{ BC2{ BC3{ BC4{ m} vd v11} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 Fi Fp[2]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fc[2]}


void  S1195C1 ::v1(){vfunc_called(this, "_ZN7S1195C12v1Ev");}
void  S1195C1 ::v2(){vfunc_called(this, "_ZN7S1195C12v2Ev");}
void  S1195C1 ::v3(){vfunc_called(this, "_ZN7S1195C12v3Ev");}
void  S1195C1 ::v4(){vfunc_called(this, "_ZN7S1195C12v4Ev");}
void  S1195C1 ::v5(){vfunc_called(this, "_ZN7S1195C12v5Ev");}
void  S1195C1 ::v6(){vfunc_called(this, "_ZN7S1195C12v6Ev");}
void  S1195C1 ::v7(){vfunc_called(this, "_ZN7S1195C12v7Ev");}
void  S1195C1 ::v8(){vfunc_called(this, "_ZN7S1195C12v8Ev");}
void  S1195C1 ::v9(){vfunc_called(this, "_ZN7S1195C12v9Ev");}
void  S1195C1 ::v10(){vfunc_called(this, "_ZN7S1195C13v10Ev");}
S1195C1 ::~S1195C1(){ note_dtor("S1195C1", this);} // tgen
S1195C1 ::S1195C1(){ note_ctor("S1195C1", this);} // tgen

static void Test_S1195C1()
{
  extern Class_Descriptor cd_S1195C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1195C1, buf);
    S1195C1 *dp, &lv = *(dp=new (buf) S1195C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1195C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1195C1)");
    check_base_class_offset(lv, (S22028C16*)(S1195C3*)(S1195C2*), 0, "S1195C1");
    check_base_class_offset(lv, (S1195C3*)(S1195C2*), 0, "S1195C1");
    check_base_class_offset(lv, (S1195C2*), 0, "S1195C1");
    check_field_offset(lv, s1195c1f0, ABISELECT(32,16), "S1195C1.s1195c1f0");
    test_class_info(&lv, &cd_S1195C1);
    dp->~S1195C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1195C1(Test_S1195C1, "S1195C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1195C1C1Ev();
extern void _ZN7S1195C1D1Ev();
Name_Map name_map_S1195C1[] = {
  NSPAIR(_ZN7S1195C1C1Ev),
  NSPAIR(_ZN7S1195C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1195C3;
extern VTBL_ENTRY _ZTI7S1195C3[];
extern  VTBL_ENTRY _ZTV7S1195C3[];
extern Class_Descriptor cd_S1195C2;
extern VTBL_ENTRY _ZTI7S1195C2[];
extern  VTBL_ENTRY _ZTV7S1195C2[];
static Base_Class bases_S1195C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1195C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1195C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1195C1[];
extern void _ZN7S1195C1D1Ev();
extern void _ZN7S1195C1D0Ev();
extern void _ZN7S1195C33v11Ev();
extern void _ZN7S1195C23v12Ev();
extern void _ZN7S1195C23v13Ev();
extern void _ZN7S1195C23v14Ev();
extern void _ZN7S1195C23v15Ev();
extern void _ZN7S1195C23v16Ev();
extern void _ZN7S1195C23v17Ev();
extern void _ZN7S1195C23v18Ev();
extern void _ZN7S1195C23v19Ev();
extern void _ZN7S1195C23v20Ev();
extern void _ZN7S1195C23v21Ev();
extern void _ZN7S1195C23v22Ev();
extern void _ZN7S1195C23v23Ev();
extern void _ZN7S1195C23v24Ev();
extern void _ZN7S1195C23v25Ev();
extern void _ZN7S1195C12v1Ev();
extern void _ZN7S1195C12v2Ev();
extern void _ZN7S1195C12v3Ev();
extern void _ZN7S1195C12v4Ev();
extern void _ZN7S1195C12v5Ev();
extern void _ZN7S1195C12v6Ev();
extern void _ZN7S1195C12v7Ev();
extern void _ZN7S1195C12v8Ev();
extern void _ZN7S1195C12v9Ev();
extern void _ZN7S1195C13v10Ev();
static  VTBL_ENTRY vtc_S1195C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1195C1[0]),
  (VTBL_ENTRY)&_ZN7S1195C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1195C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1195C33v11Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1195C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1195C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1195C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1195C1[];
extern  VTBL_ENTRY _ZTV7S1195C1[];
Class_Descriptor cd_S1195C1 = {  "S1195C1", // class name
  bases_S1195C1, 3,
  &(vtc_S1195C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1195C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1195C1),29, //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  S1197C3  : S22028C16 {
  virtual  ~S1197C3(); // _ZN7S1197C3D1Ev
  virtual void  v12(); // _ZN7S1197C33v12Ev
  S1197C3(); // tgen
};
//SIG(-1 S1197C3) C1{ BC2{ m} vd v1}


 S1197C3 ::~S1197C3(){ note_dtor("S1197C3", this);}
void  S1197C3 ::v12(){vfunc_called(this, "_ZN7S1197C33v12Ev");}
S1197C3 ::S1197C3(){ note_ctor("S1197C3", this);} // tgen

static void Test_S1197C3()
{
  extern Class_Descriptor cd_S1197C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1197C3, buf);
    S1197C3 *dp, &lv = *(dp=new (buf) S1197C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1197C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1197C3)");
    check_base_class_offset(lv, (S22028C16*), 0, "S1197C3");
    test_class_info(&lv, &cd_S1197C3);
    dp->~S1197C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1197C3(Test_S1197C3, "S1197C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1197C3C1Ev();
extern void _ZN7S1197C3D1Ev();
Name_Map name_map_S1197C3[] = {
  NSPAIR(_ZN7S1197C3C1Ev),
  NSPAIR(_ZN7S1197C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S1197C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1197C3[];
extern void _ZN7S1197C3D1Ev();
extern void _ZN7S1197C3D0Ev();
extern void _ZN7S1197C33v12Ev();
static  VTBL_ENTRY vtc_S1197C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1197C3[0]),
  (VTBL_ENTRY)&_ZN7S1197C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1197C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1197C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S1197C3[];
extern  VTBL_ENTRY _ZTV7S1197C3[];
Class_Descriptor cd_S1197C3 = {  "S1197C3", // class name
  bases_S1197C3, 1,
  &(vtc_S1197C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1197C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1197C3),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  S1197C2  : S1197C3 {
  int s1197c2f0;
  void *s1197c2f1[2];
  virtual  ~S1197C2(); // _ZN7S1197C2D1Ev
  virtual void  v13(); // _ZN7S1197C23v13Ev
  virtual void  v14(); // _ZN7S1197C23v14Ev
  virtual void  v15(); // _ZN7S1197C23v15Ev
  virtual void  v16(); // _ZN7S1197C23v16Ev
  virtual void  v17(); // _ZN7S1197C23v17Ev
  virtual void  v18(); // _ZN7S1197C23v18Ev
  virtual void  v19(); // _ZN7S1197C23v19Ev
  virtual void  v20(); // _ZN7S1197C23v20Ev
  virtual void  v21(); // _ZN7S1197C23v21Ev
  virtual void  v22(); // _ZN7S1197C23v22Ev
  virtual void  v23(); // _ZN7S1197C23v23Ev
  virtual void  v24(); // _ZN7S1197C23v24Ev
  virtual void  v25(); // _ZN7S1197C23v25Ev
  virtual void  v26(); // _ZN7S1197C23v26Ev
  S1197C2(); // tgen
};
//SIG(-1 S1197C2) C1{ BC2{ BC3{ m} vd v15} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp[2]}


 S1197C2 ::~S1197C2(){ note_dtor("S1197C2", this);}
void  S1197C2 ::v13(){vfunc_called(this, "_ZN7S1197C23v13Ev");}
void  S1197C2 ::v14(){vfunc_called(this, "_ZN7S1197C23v14Ev");}
void  S1197C2 ::v15(){vfunc_called(this, "_ZN7S1197C23v15Ev");}
void  S1197C2 ::v16(){vfunc_called(this, "_ZN7S1197C23v16Ev");}
void  S1197C2 ::v17(){vfunc_called(this, "_ZN7S1197C23v17Ev");}
void  S1197C2 ::v18(){vfunc_called(this, "_ZN7S1197C23v18Ev");}
void  S1197C2 ::v19(){vfunc_called(this, "_ZN7S1197C23v19Ev");}
void  S1197C2 ::v20(){vfunc_called(this, "_ZN7S1197C23v20Ev");}
void  S1197C2 ::v21(){vfunc_called(this, "_ZN7S1197C23v21Ev");}
void  S1197C2 ::v22(){vfunc_called(this, "_ZN7S1197C23v22Ev");}
void  S1197C2 ::v23(){vfunc_called(this, "_ZN7S1197C23v23Ev");}
void  S1197C2 ::v24(){vfunc_called(this, "_ZN7S1197C23v24Ev");}
void  S1197C2 ::v25(){vfunc_called(this, "_ZN7S1197C23v25Ev");}
void  S1197C2 ::v26(){vfunc_called(this, "_ZN7S1197C23v26Ev");}
S1197C2 ::S1197C2(){ note_ctor("S1197C2", this);} // tgen

static void Test_S1197C2()
{
  extern Class_Descriptor cd_S1197C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1197C2, buf);
    S1197C2 *dp, &lv = *(dp=new (buf) S1197C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1197C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1197C2)");
    check_base_class_offset(lv, (S22028C16*)(S1197C3*), 0, "S1197C2");
    check_base_class_offset(lv, (S1197C3*), 0, "S1197C2");
    check_field_offset(lv, s1197c2f0, ABISELECT(8,4), "S1197C2.s1197c2f0");
    check_field_offset(lv, s1197c2f1, ABISELECT(16,8), "S1197C2.s1197c2f1");
    test_class_info(&lv, &cd_S1197C2);
    dp->~S1197C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1197C2(Test_S1197C2, "S1197C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1197C2C1Ev();
extern void _ZN7S1197C2D1Ev();
Name_Map name_map_S1197C2[] = {
  NSPAIR(_ZN7S1197C2C1Ev),
  NSPAIR(_ZN7S1197C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1197C3;
extern VTBL_ENTRY _ZTI7S1197C3[];
extern  VTBL_ENTRY _ZTV7S1197C3[];
static Base_Class bases_S1197C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1197C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1197C2[];
extern void _ZN7S1197C2D1Ev();
extern void _ZN7S1197C2D0Ev();
extern void _ZN7S1197C33v12Ev();
extern void _ZN7S1197C23v13Ev();
extern void _ZN7S1197C23v14Ev();
extern void _ZN7S1197C23v15Ev();
extern void _ZN7S1197C23v16Ev();
extern void _ZN7S1197C23v17Ev();
extern void _ZN7S1197C23v18Ev();
extern void _ZN7S1197C23v19Ev();
extern void _ZN7S1197C23v20Ev();
extern void _ZN7S1197C23v21Ev();
extern void _ZN7S1197C23v22Ev();
extern void _ZN7S1197C23v23Ev();
extern void _ZN7S1197C23v24Ev();
extern void _ZN7S1197C23v25Ev();
extern void _ZN7S1197C23v26Ev();
static  VTBL_ENTRY vtc_S1197C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1197C2[0]),
  (VTBL_ENTRY)&_ZN7S1197C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1197C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1197C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S1197C2[];
extern  VTBL_ENTRY _ZTV7S1197C2[];
Class_Descriptor cd_S1197C2 = {  "S1197C2", // class name
  bases_S1197C2, 2,
  &(vtc_S1197C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1197C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1197C2),19, //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  S1197C1  : S1197C2 {
  virtual void  v1(); // _ZN7S1197C12v1Ev
  virtual void  v2(); // _ZN7S1197C12v2Ev
  virtual void  v3(); // _ZN7S1197C12v3Ev
  virtual void  v4(); // _ZN7S1197C12v4Ev
  virtual void  v5(); // _ZN7S1197C12v5Ev
  virtual void  v6(); // _ZN7S1197C12v6Ev
  virtual void  v7(); // _ZN7S1197C12v7Ev
  virtual void  v8(); // _ZN7S1197C12v8Ev
  virtual void  v9(); // _ZN7S1197C12v9Ev
  virtual void  v10(); // _ZN7S1197C13v10Ev
  virtual void  v11(); // _ZN7S1197C13v11Ev
  ~S1197C1(); // tgen
  S1197C1(); // tgen
};
//SIG(1 S1197C1) C1{ BC2{ BC3{ BC4{ m} vd v12} vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 Fi Fp[2]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11}


void  S1197C1 ::v1(){vfunc_called(this, "_ZN7S1197C12v1Ev");}
void  S1197C1 ::v2(){vfunc_called(this, "_ZN7S1197C12v2Ev");}
void  S1197C1 ::v3(){vfunc_called(this, "_ZN7S1197C12v3Ev");}
void  S1197C1 ::v4(){vfunc_called(this, "_ZN7S1197C12v4Ev");}
void  S1197C1 ::v5(){vfunc_called(this, "_ZN7S1197C12v5Ev");}
void  S1197C1 ::v6(){vfunc_called(this, "_ZN7S1197C12v6Ev");}
void  S1197C1 ::v7(){vfunc_called(this, "_ZN7S1197C12v7Ev");}
void  S1197C1 ::v8(){vfunc_called(this, "_ZN7S1197C12v8Ev");}
void  S1197C1 ::v9(){vfunc_called(this, "_ZN7S1197C12v9Ev");}
void  S1197C1 ::v10(){vfunc_called(this, "_ZN7S1197C13v10Ev");}
void  S1197C1 ::v11(){vfunc_called(this, "_ZN7S1197C13v11Ev");}
S1197C1 ::~S1197C1(){ note_dtor("S1197C1", this);} // tgen
S1197C1 ::S1197C1(){ note_ctor("S1197C1", this);} // tgen

static void Test_S1197C1()
{
  extern Class_Descriptor cd_S1197C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1197C1, buf);
    S1197C1 *dp, &lv = *(dp=new (buf) S1197C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1197C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1197C1)");
    check_base_class_offset(lv, (S22028C16*)(S1197C3*)(S1197C2*), 0, "S1197C1");
    check_base_class_offset(lv, (S1197C3*)(S1197C2*), 0, "S1197C1");
    check_base_class_offset(lv, (S1197C2*), 0, "S1197C1");
    test_class_info(&lv, &cd_S1197C1);
    dp->~S1197C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1197C1(Test_S1197C1, "S1197C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1197C1C1Ev();
extern void _ZN7S1197C1D1Ev();
Name_Map name_map_S1197C1[] = {
  NSPAIR(_ZN7S1197C1C1Ev),
  NSPAIR(_ZN7S1197C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1197C3;
extern VTBL_ENTRY _ZTI7S1197C3[];
extern  VTBL_ENTRY _ZTV7S1197C3[];
extern Class_Descriptor cd_S1197C2;
extern VTBL_ENTRY _ZTI7S1197C2[];
extern  VTBL_ENTRY _ZTV7S1197C2[];
static Base_Class bases_S1197C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1197C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1197C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1197C1[];
extern void _ZN7S1197C1D1Ev();
extern void _ZN7S1197C1D0Ev();
extern void _ZN7S1197C33v12Ev();
extern void _ZN7S1197C23v13Ev();
extern void _ZN7S1197C23v14Ev();
extern void _ZN7S1197C23v15Ev();
extern void _ZN7S1197C23v16Ev();
extern void _ZN7S1197C23v17Ev();
extern void _ZN7S1197C23v18Ev();
extern void _ZN7S1197C23v19Ev();
extern void _ZN7S1197C23v20Ev();
extern void _ZN7S1197C23v21Ev();
extern void _ZN7S1197C23v22Ev();
extern void _ZN7S1197C23v23Ev();
extern void _ZN7S1197C23v24Ev();
extern void _ZN7S1197C23v25Ev();
extern void _ZN7S1197C23v26Ev();
extern void _ZN7S1197C12v1Ev();
extern void _ZN7S1197C12v2Ev();
extern void _ZN7S1197C12v3Ev();
extern void _ZN7S1197C12v4Ev();
extern void _ZN7S1197C12v5Ev();
extern void _ZN7S1197C12v6Ev();
extern void _ZN7S1197C12v7Ev();
extern void _ZN7S1197C12v8Ev();
extern void _ZN7S1197C12v9Ev();
extern void _ZN7S1197C13v10Ev();
extern void _ZN7S1197C13v11Ev();
static  VTBL_ENTRY vtc_S1197C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1197C1[0]),
  (VTBL_ENTRY)&_ZN7S1197C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1197C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1197C33v12Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1197C23v26Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1197C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1197C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1197C13v11Ev,
};
extern VTBL_ENTRY _ZTI7S1197C1[];
extern  VTBL_ENTRY _ZTV7S1197C1[];
Class_Descriptor cd_S1197C1 = {  "S1197C1", // class name
  bases_S1197C1, 3,
  &(vtc_S1197C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1197C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1197C1),30, //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  S1273C3  : S22028C16 {
  virtual  ~S1273C3(); // _ZN7S1273C3D1Ev
  virtual void  v9(); // _ZN7S1273C32v9Ev
  S1273C3(); // tgen
};
//SIG(-1 S1273C3) C1{ BC2{ m} vd v1}


 S1273C3 ::~S1273C3(){ note_dtor("S1273C3", this);}
void  S1273C3 ::v9(){vfunc_called(this, "_ZN7S1273C32v9Ev");}
S1273C3 ::S1273C3(){ note_ctor("S1273C3", this);} // tgen

static void Test_S1273C3()
{
  extern Class_Descriptor cd_S1273C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1273C3, buf);
    S1273C3 *dp, &lv = *(dp=new (buf) S1273C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1273C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1273C3)");
    check_base_class_offset(lv, (S22028C16*), 0, "S1273C3");
    test_class_info(&lv, &cd_S1273C3);
    dp->~S1273C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1273C3(Test_S1273C3, "S1273C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1273C3C1Ev();
extern void _ZN7S1273C3D1Ev();
Name_Map name_map_S1273C3[] = {
  NSPAIR(_ZN7S1273C3C1Ev),
  NSPAIR(_ZN7S1273C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S1273C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1273C3[];
extern void _ZN7S1273C3D1Ev();
extern void _ZN7S1273C3D0Ev();
extern void _ZN7S1273C32v9Ev();
static  VTBL_ENTRY vtc_S1273C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1273C3[0]),
  (VTBL_ENTRY)&_ZN7S1273C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1273C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1273C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S1273C3[];
extern  VTBL_ENTRY _ZTV7S1273C3[];
Class_Descriptor cd_S1273C3 = {  "S1273C3", // class name
  bases_S1273C3, 1,
  &(vtc_S1273C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1273C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1273C3),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  S1273C2  : S1273C3 {
  int s1273c2f0;
  void *s1273c2f1[2];
  virtual  ~S1273C2(); // _ZN7S1273C2D1Ev
  virtual void  v10(); // _ZN7S1273C23v10Ev
  virtual void  v11(); // _ZN7S1273C23v11Ev
  virtual void  v12(); // _ZN7S1273C23v12Ev
  virtual void  v13(); // _ZN7S1273C23v13Ev
  virtual void  v14(); // _ZN7S1273C23v14Ev
  virtual void  v15(); // _ZN7S1273C23v15Ev
  virtual void  v16(); // _ZN7S1273C23v16Ev
  virtual void  v17(); // _ZN7S1273C23v17Ev
  virtual void  v18(); // _ZN7S1273C23v18Ev
  virtual void  v19(); // _ZN7S1273C23v19Ev
  virtual void  v20(); // _ZN7S1273C23v20Ev
  virtual void  v21(); // _ZN7S1273C23v21Ev
  virtual void  v22(); // _ZN7S1273C23v22Ev
  virtual void  v23(); // _ZN7S1273C23v23Ev
  S1273C2(); // tgen
};
//SIG(-1 S1273C2) C1{ BC2{ BC3{ m} vd v15} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp[2]}


 S1273C2 ::~S1273C2(){ note_dtor("S1273C2", this);}
void  S1273C2 ::v10(){vfunc_called(this, "_ZN7S1273C23v10Ev");}
void  S1273C2 ::v11(){vfunc_called(this, "_ZN7S1273C23v11Ev");}
void  S1273C2 ::v12(){vfunc_called(this, "_ZN7S1273C23v12Ev");}
void  S1273C2 ::v13(){vfunc_called(this, "_ZN7S1273C23v13Ev");}
void  S1273C2 ::v14(){vfunc_called(this, "_ZN7S1273C23v14Ev");}
void  S1273C2 ::v15(){vfunc_called(this, "_ZN7S1273C23v15Ev");}
void  S1273C2 ::v16(){vfunc_called(this, "_ZN7S1273C23v16Ev");}
void  S1273C2 ::v17(){vfunc_called(this, "_ZN7S1273C23v17Ev");}
void  S1273C2 ::v18(){vfunc_called(this, "_ZN7S1273C23v18Ev");}
void  S1273C2 ::v19(){vfunc_called(this, "_ZN7S1273C23v19Ev");}
void  S1273C2 ::v20(){vfunc_called(this, "_ZN7S1273C23v20Ev");}
void  S1273C2 ::v21(){vfunc_called(this, "_ZN7S1273C23v21Ev");}
void  S1273C2 ::v22(){vfunc_called(this, "_ZN7S1273C23v22Ev");}
void  S1273C2 ::v23(){vfunc_called(this, "_ZN7S1273C23v23Ev");}
S1273C2 ::S1273C2(){ note_ctor("S1273C2", this);} // tgen

static void Test_S1273C2()
{
  extern Class_Descriptor cd_S1273C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1273C2, buf);
    S1273C2 *dp, &lv = *(dp=new (buf) S1273C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1273C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1273C2)");
    check_base_class_offset(lv, (S22028C16*)(S1273C3*), 0, "S1273C2");
    check_base_class_offset(lv, (S1273C3*), 0, "S1273C2");
    check_field_offset(lv, s1273c2f0, ABISELECT(8,4), "S1273C2.s1273c2f0");
    check_field_offset(lv, s1273c2f1, ABISELECT(16,8), "S1273C2.s1273c2f1");
    test_class_info(&lv, &cd_S1273C2);
    dp->~S1273C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1273C2(Test_S1273C2, "S1273C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1273C2C1Ev();
extern void _ZN7S1273C2D1Ev();
Name_Map name_map_S1273C2[] = {
  NSPAIR(_ZN7S1273C2C1Ev),
  NSPAIR(_ZN7S1273C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1273C3;
extern VTBL_ENTRY _ZTI7S1273C3[];
extern  VTBL_ENTRY _ZTV7S1273C3[];
static Base_Class bases_S1273C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1273C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1273C2[];
extern void _ZN7S1273C2D1Ev();
extern void _ZN7S1273C2D0Ev();
extern void _ZN7S1273C32v9Ev();
extern void _ZN7S1273C23v10Ev();
extern void _ZN7S1273C23v11Ev();
extern void _ZN7S1273C23v12Ev();
extern void _ZN7S1273C23v13Ev();
extern void _ZN7S1273C23v14Ev();
extern void _ZN7S1273C23v15Ev();
extern void _ZN7S1273C23v16Ev();
extern void _ZN7S1273C23v17Ev();
extern void _ZN7S1273C23v18Ev();
extern void _ZN7S1273C23v19Ev();
extern void _ZN7S1273C23v20Ev();
extern void _ZN7S1273C23v21Ev();
extern void _ZN7S1273C23v22Ev();
extern void _ZN7S1273C23v23Ev();
static  VTBL_ENTRY vtc_S1273C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1273C2[0]),
  (VTBL_ENTRY)&_ZN7S1273C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1273C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1273C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S1273C2[];
extern  VTBL_ENTRY _ZTV7S1273C2[];
Class_Descriptor cd_S1273C2 = {  "S1273C2", // class name
  bases_S1273C2, 2,
  &(vtc_S1273C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1273C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1273C2),19, //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  S1273C1  : S1273C2 {
  __tsi64 s1273c1f0[2];
  virtual void  v1(); // _ZN7S1273C12v1Ev
  virtual void  v2(); // _ZN7S1273C12v2Ev
  virtual void  v3(); // _ZN7S1273C12v3Ev
  virtual void  v4(); // _ZN7S1273C12v4Ev
  virtual void  v5(); // _ZN7S1273C12v5Ev
  virtual void  v6(); // _ZN7S1273C12v6Ev
  virtual void  v7(); // _ZN7S1273C12v7Ev
  virtual void  v8(); // _ZN7S1273C12v8Ev
  ~S1273C1(); // tgen
  S1273C1(); // tgen
};
//SIG(1 S1273C1) C1{ BC2{ BC3{ BC4{ m} vd v9} vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fi Fp[2]} v1 v2 v3 v4 v5 v6 v7 v8 FL[2]}


void  S1273C1 ::v1(){vfunc_called(this, "_ZN7S1273C12v1Ev");}
void  S1273C1 ::v2(){vfunc_called(this, "_ZN7S1273C12v2Ev");}
void  S1273C1 ::v3(){vfunc_called(this, "_ZN7S1273C12v3Ev");}
void  S1273C1 ::v4(){vfunc_called(this, "_ZN7S1273C12v4Ev");}
void  S1273C1 ::v5(){vfunc_called(this, "_ZN7S1273C12v5Ev");}
void  S1273C1 ::v6(){vfunc_called(this, "_ZN7S1273C12v6Ev");}
void  S1273C1 ::v7(){vfunc_called(this, "_ZN7S1273C12v7Ev");}
void  S1273C1 ::v8(){vfunc_called(this, "_ZN7S1273C12v8Ev");}
S1273C1 ::~S1273C1(){ note_dtor("S1273C1", this);} // tgen
S1273C1 ::S1273C1(){ note_ctor("S1273C1", this);} // tgen

static void Test_S1273C1()
{
  extern Class_Descriptor cd_S1273C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1273C1, buf);
    S1273C1 *dp, &lv = *(dp=new (buf) S1273C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1273C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1273C1)");
    check_base_class_offset(lv, (S22028C16*)(S1273C3*)(S1273C2*), 0, "S1273C1");
    check_base_class_offset(lv, (S1273C3*)(S1273C2*), 0, "S1273C1");
    check_base_class_offset(lv, (S1273C2*), 0, "S1273C1");
    check_field_offset(lv, s1273c1f0, ABISELECT(32,16), "S1273C1.s1273c1f0");
    test_class_info(&lv, &cd_S1273C1);
    dp->~S1273C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1273C1(Test_S1273C1, "S1273C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1273C1C1Ev();
extern void _ZN7S1273C1D1Ev();
Name_Map name_map_S1273C1[] = {
  NSPAIR(_ZN7S1273C1C1Ev),
  NSPAIR(_ZN7S1273C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1273C3;
extern VTBL_ENTRY _ZTI7S1273C3[];
extern  VTBL_ENTRY _ZTV7S1273C3[];
extern Class_Descriptor cd_S1273C2;
extern VTBL_ENTRY _ZTI7S1273C2[];
extern  VTBL_ENTRY _ZTV7S1273C2[];
static Base_Class bases_S1273C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1273C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1273C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1273C1[];
extern void _ZN7S1273C1D1Ev();
extern void _ZN7S1273C1D0Ev();
extern void _ZN7S1273C32v9Ev();
extern void _ZN7S1273C23v10Ev();
extern void _ZN7S1273C23v11Ev();
extern void _ZN7S1273C23v12Ev();
extern void _ZN7S1273C23v13Ev();
extern void _ZN7S1273C23v14Ev();
extern void _ZN7S1273C23v15Ev();
extern void _ZN7S1273C23v16Ev();
extern void _ZN7S1273C23v17Ev();
extern void _ZN7S1273C23v18Ev();
extern void _ZN7S1273C23v19Ev();
extern void _ZN7S1273C23v20Ev();
extern void _ZN7S1273C23v21Ev();
extern void _ZN7S1273C23v22Ev();
extern void _ZN7S1273C23v23Ev();
extern void _ZN7S1273C12v1Ev();
extern void _ZN7S1273C12v2Ev();
extern void _ZN7S1273C12v3Ev();
extern void _ZN7S1273C12v4Ev();
extern void _ZN7S1273C12v5Ev();
extern void _ZN7S1273C12v6Ev();
extern void _ZN7S1273C12v7Ev();
extern void _ZN7S1273C12v8Ev();
static  VTBL_ENTRY vtc_S1273C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1273C1[0]),
  (VTBL_ENTRY)&_ZN7S1273C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1273C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1273C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1273C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1273C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S1273C1[];
extern  VTBL_ENTRY _ZTV7S1273C1[];
Class_Descriptor cd_S1273C1 = {  "S1273C1", // class name
  bases_S1273C1, 3,
  &(vtc_S1273C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1273C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1273C1),27, //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  S9299C2  {
  ::S22028C11_nt s9299c2f0;
  int s9299c2f1[2];
  char s9299c2f2;
  virtual  ~S9299C2(); // _ZN7S9299C2D1Ev
  virtual void  v3(); // _ZN7S9299C22v3Ev
  virtual void  v4(); // _ZN7S9299C22v4Ev
  virtual void  v5(); // _ZN7S9299C22v5Ev
  S9299C2(); // tgen
};
//SIG(-1 S9299C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9299C2 ::~S9299C2(){ note_dtor("S9299C2", this);}
void  S9299C2 ::v3(){vfunc_called(this, "_ZN7S9299C22v3Ev");}
void  S9299C2 ::v4(){vfunc_called(this, "_ZN7S9299C22v4Ev");}
void  S9299C2 ::v5(){vfunc_called(this, "_ZN7S9299C22v5Ev");}
S9299C2 ::S9299C2(){ note_ctor("S9299C2", this);} // tgen

static void Test_S9299C2()
{
  extern Class_Descriptor cd_S9299C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9299C2, buf);
    S9299C2 *dp, &lv = *(dp=new (buf) S9299C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9299C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9299C2)");
    check_field_offset(lv, s9299c2f0, ABISELECT(8,4), "S9299C2.s9299c2f0");
    check_field_offset(lv, s9299c2f1, ABISELECT(24,16), "S9299C2.s9299c2f1");
    check_field_offset(lv, s9299c2f2, ABISELECT(32,24), "S9299C2.s9299c2f2");
    test_class_info(&lv, &cd_S9299C2);
    dp->~S9299C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9299C2(Test_S9299C2, "S9299C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9299C2C1Ev();
extern void _ZN7S9299C2D1Ev();
Name_Map name_map_S9299C2[] = {
  NSPAIR(_ZN7S9299C2C1Ev),
  NSPAIR(_ZN7S9299C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9299C2[];
extern void _ZN7S9299C2D1Ev();
extern void _ZN7S9299C2D0Ev();
extern void _ZN7S9299C22v3Ev();
extern void _ZN7S9299C22v4Ev();
extern void _ZN7S9299C22v5Ev();
static  VTBL_ENTRY vtc_S9299C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9299C2[0]),
  (VTBL_ENTRY)&_ZN7S9299C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9299C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9299C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9299C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9299C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9299C2[];
extern  VTBL_ENTRY _ZTV7S9299C2[];
Class_Descriptor cd_S9299C2 = {  "S9299C2", // class name
  0,0,//no base classes
  &(vtc_S9299C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9299C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9299C2),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  S9299C6  {
  int s9299c6f0;
  char s9299c6f1;
  ::S22028C11_nt s9299c6f2;
  ::S22028C11_nt s9299c6f3;
  ::S22028C11_nt s9299c6f4;
  ::S22028C11_nt s9299c6f5;
  void  mf9299c6(); // _ZN7S9299C68mf9299c6Ev
};
//SIG(-1 S9299C6) C1{ m Fi Fc FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2}


void  S9299C6 ::mf9299c6(){}

static void Test_S9299C6()
{
  {
    init_simple_test("S9299C6");
    S9299C6 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S9299C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9299C6)");
    check_field_offset(lv, s9299c6f0, 0, "S9299C6.s9299c6f0");
    check_field_offset(lv, s9299c6f1, 4, "S9299C6.s9299c6f1");
    check_field_offset(lv, s9299c6f2, 8, "S9299C6.s9299c6f2");
    check_field_offset(lv, s9299c6f3, ABISELECT(24,20), "S9299C6.s9299c6f3");
    check_field_offset(lv, s9299c6f4, ABISELECT(40,32), "S9299C6.s9299c6f4");
    check_field_offset(lv, s9299c6f5, ABISELECT(56,44), "S9299C6.s9299c6f5");
  }
}
static Arrange_To_Call_Me vS9299C6(Test_S9299C6, "S9299C6", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9299C1  : S9299C2 {
  ::S22028C73 s9299c1f0;
  char s9299c1f1;
  int s9299c1f2;
  void *s9299c1f3[2];
  char s9299c1f4;
  ::S22028C11_nt s9299c1f5;
  ::S9299C6 s9299c1f6;
  char s9299c1f7;
  virtual  ~S9299C1(); // _ZN7S9299C1D1Ev
  virtual void  v1(); // _ZN7S9299C12v1Ev
  virtual void  v2(); // _ZN7S9299C12v2Ev
  S9299C1(); // tgen
};
//SIG(1 S9299C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC5{ m Fp[2]} Fc Fi Fp[2] Fc FC3 FC6{ m Fi Fc FC3 FC3 FC3 FC3} Fc}


 S9299C1 ::~S9299C1(){ note_dtor("S9299C1", this);}
void  S9299C1 ::v1(){vfunc_called(this, "_ZN7S9299C12v1Ev");}
void  S9299C1 ::v2(){vfunc_called(this, "_ZN7S9299C12v2Ev");}
S9299C1 ::S9299C1(){ note_ctor("S9299C1", this);} // tgen

static void Test_S9299C1()
{
  extern Class_Descriptor cd_S9299C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,33)];
    init_test(&cd_S9299C1, buf);
    S9299C1 *dp, &lv = *(dp=new (buf) S9299C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,128), "sizeof(S9299C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9299C1)");
    check_base_class_offset(lv, (S9299C2*), 0, "S9299C1");
    check_field_offset(lv, s9299c1f0, ABISELECT(40,28), "S9299C1.s9299c1f0");
    check_field_offset(lv, s9299c1f1, ABISELECT(56,36), "S9299C1.s9299c1f1");
    check_field_offset(lv, s9299c1f2, ABISELECT(60,40), "S9299C1.s9299c1f2");
    check_field_offset(lv, s9299c1f3, ABISELECT(64,44), "S9299C1.s9299c1f3");
    check_field_offset(lv, s9299c1f4, ABISELECT(80,52), "S9299C1.s9299c1f4");
    check_field_offset(lv, s9299c1f5, ABISELECT(88,56), "S9299C1.s9299c1f5");
    check_field_offset(lv, s9299c1f6, ABISELECT(104,68), "S9299C1.s9299c1f6");
    check_field_offset(lv, s9299c1f7, ABISELECT(176,124), "S9299C1.s9299c1f7");
    test_class_info(&lv, &cd_S9299C1);
    dp->~S9299C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9299C1(Test_S9299C1, "S9299C1", ABISELECT(184,128));

#else // __cplusplus

extern void _ZN7S9299C1C1Ev();
extern void _ZN7S9299C1D1Ev();
Name_Map name_map_S9299C1[] = {
  NSPAIR(_ZN7S9299C1C1Ev),
  NSPAIR(_ZN7S9299C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9299C2;
extern VTBL_ENTRY _ZTI7S9299C2[];
extern  VTBL_ENTRY _ZTV7S9299C2[];
static Base_Class bases_S9299C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9299C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9299C1[];
extern void _ZN7S9299C1D1Ev();
extern void _ZN7S9299C1D0Ev();
extern void _ZN7S9299C22v3Ev();
extern void _ZN7S9299C22v4Ev();
extern void _ZN7S9299C22v5Ev();
extern void _ZN7S9299C12v1Ev();
extern void _ZN7S9299C12v2Ev();
static  VTBL_ENTRY vtc_S9299C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9299C1[0]),
  (VTBL_ENTRY)&_ZN7S9299C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9299C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9299C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9299C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9299C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9299C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9299C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9299C1[];
extern  VTBL_ENTRY _ZTV7S9299C1[];
Class_Descriptor cd_S9299C1 = {  "S9299C1", // class name
  bases_S9299C1, 1,
  &(vtc_S9299C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,128), // object size
  NSPAIRA(_ZTI7S9299C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9299C1),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  S7086C2  {
  void *s7086c2f0;
  char s7086c2f1[2];
  virtual void  v7(); // _ZN7S7086C22v7Ev
  virtual void  v8(); // _ZN7S7086C22v8Ev
  virtual void  v9(); // _ZN7S7086C22v9Ev
  virtual void  v10(); // _ZN7S7086C23v10Ev
  ~S7086C2(); // tgen
  S7086C2(); // tgen
};
//SIG(-1 S7086C2) C1{ v1 v2 v3 v4 Fp Fc[2]}


void  S7086C2 ::v7(){vfunc_called(this, "_ZN7S7086C22v7Ev");}
void  S7086C2 ::v8(){vfunc_called(this, "_ZN7S7086C22v8Ev");}
void  S7086C2 ::v9(){vfunc_called(this, "_ZN7S7086C22v9Ev");}
void  S7086C2 ::v10(){vfunc_called(this, "_ZN7S7086C23v10Ev");}
S7086C2 ::~S7086C2(){ note_dtor("S7086C2", this);} // tgen
S7086C2 ::S7086C2(){ note_ctor("S7086C2", this);} // tgen

static void Test_S7086C2()
{
  extern Class_Descriptor cd_S7086C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7086C2, buf);
    S7086C2 *dp, &lv = *(dp=new (buf) S7086C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7086C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7086C2)");
    check_field_offset(lv, s7086c2f0, ABISELECT(8,4), "S7086C2.s7086c2f0");
    check_field_offset(lv, s7086c2f1, ABISELECT(16,8), "S7086C2.s7086c2f1");
    test_class_info(&lv, &cd_S7086C2);
    dp->~S7086C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7086C2(Test_S7086C2, "S7086C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7086C2C1Ev();
extern void _ZN7S7086C2D1Ev();
Name_Map name_map_S7086C2[] = {
  NSPAIR(_ZN7S7086C2C1Ev),
  NSPAIR(_ZN7S7086C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7086C2[];
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
static  VTBL_ENTRY vtc_S7086C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7086C2[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7086C2[];
extern  VTBL_ENTRY _ZTV7S7086C2[];
Class_Descriptor cd_S7086C2 = {  "S7086C2", // class name
  0,0,//no base classes
  &(vtc_S7086C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7086C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7086C2),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  S7086C4  : S7086C2 {
  void *s7086c4f0[4];
  ~S7086C4(); // tgen
  S7086C4(); // tgen
};
//SIG(-1 S7086C4) C1{ BC2{ v1 v2 v3 v4 Fp Fc[2]} Fp[4]}


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

static void Test_S7086C4()
{
  extern Class_Descriptor cd_S7086C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S7086C4, buf);
    S7086C4 *dp, &lv = *(dp=new (buf) S7086C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S7086C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7086C4)");
    check_base_class_offset(lv, (S7086C2*), 0, "S7086C4");
    check_field_offset(lv, s7086c4f0, ABISELECT(24,12), "S7086C4.s7086c4f0");
    test_class_info(&lv, &cd_S7086C4);
    dp->~S7086C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7086C4(Test_S7086C4, "S7086C4", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S7086C4C1Ev();
extern void _ZN7S7086C4D1Ev();
Name_Map name_map_S7086C4[] = {
  NSPAIR(_ZN7S7086C4C1Ev),
  NSPAIR(_ZN7S7086C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7086C2;
extern VTBL_ENTRY _ZTI7S7086C2[];
extern  VTBL_ENTRY _ZTV7S7086C2[];
static Base_Class bases_S7086C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7086C2,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7086C4[];
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
static  VTBL_ENTRY vtc_S7086C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7086C4[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7086C4[];
extern  VTBL_ENTRY _ZTV7S7086C4[];
Class_Descriptor cd_S7086C4 = {  "S7086C4", // class name
  bases_S7086C4, 1,
  &(vtc_S7086C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S7086C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7086C4),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  S7086C3  : S7086C4 , virtual S7086C2 {
  int s7086c3f0;
  virtual  ~S7086C3(); // _ZN7S7086C3D2Ev
  virtual void  v11(); // _ZN7S7086C33v11Ev
  virtual void  v12(); // _ZN7S7086C33v12Ev
  virtual void  v13(); // _ZN7S7086C33v13Ev
  virtual void  v14(); // _ZN7S7086C33v14Ev
  virtual void  v15(); // _ZN7S7086C33v15Ev
  virtual void  v16(); // _ZN7S7086C33v16Ev
  virtual void  v17(); // _ZN7S7086C33v17Ev
  S7086C3(); // tgen
};
//SIG(-1 S7086C3) C1{ BC2{ BC3{ v8 v9 v10 v11 Fp Fc[2]} Fp[4]} VBC3 vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S7086C3 ::~S7086C3(){ note_dtor("S7086C3", this);}
void  S7086C3 ::v11(){vfunc_called(this, "_ZN7S7086C33v11Ev");}
void  S7086C3 ::v12(){vfunc_called(this, "_ZN7S7086C33v12Ev");}
void  S7086C3 ::v13(){vfunc_called(this, "_ZN7S7086C33v13Ev");}
void  S7086C3 ::v14(){vfunc_called(this, "_ZN7S7086C33v14Ev");}
void  S7086C3 ::v15(){vfunc_called(this, "_ZN7S7086C33v15Ev");}
void  S7086C3 ::v16(){vfunc_called(this, "_ZN7S7086C33v16Ev");}
void  S7086C3 ::v17(){vfunc_called(this, "_ZN7S7086C33v17Ev");}
S7086C3 ::S7086C3(){ note_ctor("S7086C3", this);} // tgen

static void Test_S7086C3()
{
  extern Class_Descriptor cd_S7086C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[12];
    init_test(&cd_S7086C3, buf);
    S7086C3 *dp, &lv = *(dp=new (buf) S7086C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,44), "sizeof(S7086C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7086C3)");
    check_base_class_offset(lv, (S7086C2*)(S7086C4*), 0, "S7086C3");
    check_base_class_offset(lv, (S7086C4*), 0, "S7086C3");
    /*is_ambiguous_... S7086C3::S7086C2 */ AMB_check_base_class_offset(lv, (S7086C2*), ABISELECT(64,32), "S7086C3");
    check_field_offset(lv, s7086c3f0, ABISELECT(56,28), "S7086C3.s7086c3f0");
    test_class_info(&lv, &cd_S7086C3);
    dp->~S7086C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7086C3(Test_S7086C3, "S7086C3", ABISELECT(88,44));

#else // __cplusplus

extern void _ZN7S7086C3C1Ev();
extern void _ZN7S7086C3D2Ev();
Name_Map name_map_S7086C3[] = {
  NSPAIR(_ZN7S7086C3C1Ev),
  NSPAIR(_ZN7S7086C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7086C2;
extern VTBL_ENTRY _ZTI7S7086C2[];
extern  VTBL_ENTRY _ZTV7S7086C2[];
extern Class_Descriptor cd_S7086C4;
extern VTBL_ENTRY _ZTI7S7086C4[];
extern  VTBL_ENTRY _ZTV7S7086C4[];
extern Class_Descriptor cd_S7086C2;
extern VTBL_ENTRY _ZTI7S7086C2[];
extern  VTBL_ENTRY _ZTV7S7086C2[];
static Base_Class bases_S7086C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7086C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7086C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7086C2,    ABISELECT(64,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7086C3[];
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
extern void _ZN7S7086C3D1Ev();
extern void _ZN7S7086C3D0Ev();
extern void _ZN7S7086C33v11Ev();
extern void _ZN7S7086C33v12Ev();
extern void _ZN7S7086C33v13Ev();
extern void _ZN7S7086C33v14Ev();
extern void _ZN7S7086C33v15Ev();
extern void _ZN7S7086C33v16Ev();
extern void _ZN7S7086C33v17Ev();
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
static  VTBL_ENTRY vtc_S7086C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7086C3[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7086C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7086C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7086C3[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
};
extern VTBL_ENTRY _ZTV7S7086C3[];
static  VTT_ENTRY vtt_S7086C3[] = {
  {&(_ZTV7S7086C3[3]),  3,26},
  {&(_ZTV7S7086C3[22]),  22,26},
};
extern VTBL_ENTRY _ZTI7S7086C3[];
extern  VTBL_ENTRY _ZTV7S7086C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7086C3[];
Class_Descriptor cd_S7086C3 = {  "S7086C3", // class name
  bases_S7086C3, 3,
  &(vtc_S7086C3[0]), // expected_vtbl_contents
  &(vtt_S7086C3[0]), // expected_vtt_contents
  ABISELECT(88,44), // object size
  NSPAIRA(_ZTI7S7086C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7086C3),26, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7086C3),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S7086C5_nt  {
  void  mf7086c5(); // _ZN10S7086C5_nt8mf7086c5Ev
};
//SIG(1 S7086C5_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7086C1  : S7086C2 , S7086C3 {
  ::S7086C5_nt s7086c1f0;
  int s7086c1f1;
  virtual  ~S7086C1(); // _ZN7S7086C1D2Ev
  virtual void  v1(); // _ZN7S7086C12v1Ev
  virtual void  v2(); // _ZN7S7086C12v2Ev
  virtual void  v3(); // _ZN7S7086C12v3Ev
  virtual void  v4(); // _ZN7S7086C12v4Ev
  virtual void  v5(); // _ZN7S7086C12v5Ev
  virtual void  v6(); // _ZN7S7086C12v6Ev
  S7086C1(); // tgen
};
//SIG(1 S7086C1) C1{ BC2{ v7 v8 v9 v10 Fp Fc[2]} BC3{ BC4{ BC2 Fp[4]} VBC2 vd v11 v12 v13 v14 v15 v16 v17 Fi} vd v1 v2 v3 v4 v5 v6 FU5{ m} Fi}


 S7086C1 ::~S7086C1(){ note_dtor("S7086C1", this);}
void  S7086C1 ::v1(){vfunc_called(this, "_ZN7S7086C12v1Ev");}
void  S7086C1 ::v2(){vfunc_called(this, "_ZN7S7086C12v2Ev");}
void  S7086C1 ::v3(){vfunc_called(this, "_ZN7S7086C12v3Ev");}
void  S7086C1 ::v4(){vfunc_called(this, "_ZN7S7086C12v4Ev");}
void  S7086C1 ::v5(){vfunc_called(this, "_ZN7S7086C12v5Ev");}
void  S7086C1 ::v6(){vfunc_called(this, "_ZN7S7086C12v6Ev");}
S7086C1 ::S7086C1(){ note_ctor("S7086C1", this);} // tgen

static void Test_S7086C1()
{
  extern Class_Descriptor cd_S7086C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,17)];
    init_test(&cd_S7086C1, buf);
    S7086C1 *dp, &lv = *(dp=new (buf) S7086C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S7086C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7086C1)");
    /*is_ambiguous_... S7086C1::S7086C2 */ AMB_check_base_class_offset(lv, (S7086C2*), 0, "S7086C1");
    check_base_class_offset(lv, (S7086C2*)(S7086C4*)(S7086C3*), ABISELECT(24,12), "S7086C1");
    check_base_class_offset(lv, (S7086C4*)(S7086C3*), ABISELECT(24,12), "S7086C1");
    /*is_ambiguous_... S7086C3::S7086C2 */ AMB_check_base_class_offset(lv, (S7086C2*)(S7086C3*), ABISELECT(96,52), "S7086C1");
    check_base_class_offset(lv, (S7086C3*), ABISELECT(24,12), "S7086C1");
    check_field_offset(lv, s7086c1f0, ABISELECT(84,44), "S7086C1.s7086c1f0");
    check_field_offset(lv, s7086c1f1, ABISELECT(88,48), "S7086C1.s7086c1f1");
    test_class_info(&lv, &cd_S7086C1);
    dp->~S7086C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7086C1(Test_S7086C1, "S7086C1", ABISELECT(120,64));

#else // __cplusplus

extern void _ZN7S7086C1C1Ev();
extern void _ZN7S7086C1D2Ev();
Name_Map name_map_S7086C1[] = {
  NSPAIR(_ZN7S7086C1C1Ev),
  NSPAIR(_ZN7S7086C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7086C2;
extern VTBL_ENTRY _ZTI7S7086C2[];
extern  VTBL_ENTRY _ZTV7S7086C2[];
extern Class_Descriptor cd_S7086C2;
extern VTBL_ENTRY _ZTI7S7086C2[];
extern  VTBL_ENTRY _ZTV7S7086C2[];
extern Class_Descriptor cd_S7086C4;
extern VTBL_ENTRY _ZTI7S7086C4[];
extern  VTBL_ENTRY _ZTV7S7086C4[];
extern Class_Descriptor cd_S7086C2;
extern VTBL_ENTRY _ZTI7S7086C2[];
extern  VTBL_ENTRY _ZTV7S7086C2[];
extern Class_Descriptor cd_S7086C3;
extern VTBL_ENTRY _ZTI7S7086C3[];
extern  VTBL_ENTRY _ZTV7S7086C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7086C3[];
static Base_Class bases_S7086C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7086C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7086C2,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7086C4,    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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7086C2,    ABISELECT(96,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7086C3,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7086C1[];
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
extern void _ZN7S7086C1D1Ev();
extern void _ZN7S7086C1D0Ev();
extern void _ZN7S7086C12v1Ev();
extern void _ZN7S7086C12v2Ev();
extern void _ZN7S7086C12v3Ev();
extern void _ZN7S7086C12v4Ev();
extern void _ZN7S7086C12v5Ev();
extern void _ZN7S7086C12v6Ev();
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
extern void ABISELECT(_ZThn24_N7S7086C1D1Ev,_ZThn12_N7S7086C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7086C1D0Ev,_ZThn12_N7S7086C1D0Ev)();
extern void _ZN7S7086C33v11Ev();
extern void _ZN7S7086C33v12Ev();
extern void _ZN7S7086C33v13Ev();
extern void _ZN7S7086C33v14Ev();
extern void _ZN7S7086C33v15Ev();
extern void _ZN7S7086C33v16Ev();
extern void _ZN7S7086C33v17Ev();
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
static  VTBL_ENTRY vtc_S7086C1[] = {
  ABISELECT(96,52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7086C1[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7086C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7086C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7086C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7086C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7086C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7086C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7086C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7086C12v6Ev,
  ABISELECT(72,40),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7086C1[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7086C1D1Ev,_ZThn12_N7S7086C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7086C1D0Ev,_ZThn12_N7S7086C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7086C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7086C1[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
};
extern VTBL_ENTRY _ZTV7S7086C1[];
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
extern void _ZN7S7086C3D1Ev();
extern void _ZN7S7086C3D0Ev();
extern void _ZN7S7086C33v11Ev();
extern void _ZN7S7086C33v12Ev();
extern void _ZN7S7086C33v13Ev();
extern void _ZN7S7086C33v14Ev();
extern void _ZN7S7086C33v15Ev();
extern void _ZN7S7086C33v16Ev();
extern void _ZN7S7086C33v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7086C3__7S7086C1[] = {
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7086C3[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7086C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7086C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7086C33v17Ev,
};
extern void _ZN7S7086C22v7Ev();
extern void _ZN7S7086C22v8Ev();
extern void _ZN7S7086C22v9Ev();
extern void _ZN7S7086C23v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7086C2__A1__7S7086C3__7S7086C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7086C3[0]),
  (VTBL_ENTRY)&_ZN7S7086C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7086C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7086C23v10Ev,
};
static  VTT_ENTRY vtt_S7086C1[] = {
  {&(_ZTV7S7086C1[3]),  3,41},
  {&(_tg__ZTV7S7086C3__7S7086C1[3]),  3,16},
  {&(_tg__ZTV7S7086C2__A1__7S7086C3__7S7086C1[6]),  6,10},
  {&(_ZTV7S7086C1[18]),  18,41},
  {&(_ZTV7S7086C1[37]),  37,41},
};
extern VTBL_ENTRY _ZTI7S7086C1[];
extern  VTBL_ENTRY _ZTV7S7086C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7086C1[];
Class_Descriptor cd_S7086C1 = {  "S7086C1", // class name
  bases_S7086C1, 5,
  &(vtc_S7086C1[0]), // expected_vtbl_contents
  &(vtt_S7086C1[0]), // expected_vtt_contents
  ABISELECT(120,64), // object size
  NSPAIRA(_ZTI7S7086C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7086C1),41, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7086C1),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4059C3_nt  {
  void  mf4059c3(); // _ZN10S4059C3_nt8mf4059c3Ev
  virtual  ~S4059C3_nt(); // _ZN10S4059C3_ntD1Ev
  S4059C3_nt(); // tgen
};
//SIG(-1 S4059C3_nt) C1{ vd m}


void  S4059C3_nt ::mf4059c3(){}
 S4059C3_nt ::~S4059C3_nt(){ note_dtor("S4059C3_nt", this);}
S4059C3_nt ::S4059C3_nt(){ note_ctor("S4059C3_nt", this);} // tgen

//skip512 S4059C3_nt

#else // __cplusplus

extern void _ZN10S4059C3_ntC1Ev();
extern void _ZN10S4059C3_ntD1Ev();
Name_Map name_map_S4059C3_nt[] = {
  NSPAIR(_ZN10S4059C3_ntC1Ev),
  NSPAIR(_ZN10S4059C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4059C3_nt[];
extern void _ZN10S4059C3_ntD1Ev();
extern void _ZN10S4059C3_ntD0Ev();
static  VTBL_ENTRY vtc_S4059C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4059C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4059C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4059C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4059C3_nt[];
VTBL_ENTRY *P__ZTI10S4059C3_nt = _ZTI10S4059C3_nt; 
extern  VTBL_ENTRY _ZTV10S4059C3_nt[];
Class_Descriptor cd_S4059C3_nt = {  "S4059C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4059C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4059C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4059C3_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  S4059C2_nt  : S4059C3_nt {
  short s4059c2f0[2];
  virtual  ~S4059C2_nt(); // _ZN10S4059C2_ntD1Ev
  virtual void  v19(); // _ZN10S4059C2_nt3v19Ev
  S4059C2_nt(); // tgen
};
//SIG(-1 S4059C2_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


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

//skip512 S4059C2_nt

#else // __cplusplus

extern void _ZN10S4059C2_ntC1Ev();
extern void _ZN10S4059C2_ntD1Ev();
Name_Map name_map_S4059C2_nt[] = {
  NSPAIR(_ZN10S4059C2_ntC1Ev),
  NSPAIR(_ZN10S4059C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4059C3_nt;
extern VTBL_ENTRY _ZTI10S4059C3_nt[];
extern  VTBL_ENTRY _ZTV10S4059C3_nt[];
static Base_Class bases_S4059C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4059C3_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 _ZTI10S4059C2_nt[];
extern void _ZN10S4059C2_ntD1Ev();
extern void _ZN10S4059C2_ntD0Ev();
extern void _ZN10S4059C2_nt3v19Ev();
static  VTBL_ENTRY vtc_S4059C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4059C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4059C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4059C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4059C2_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S4059C2_nt[];
VTBL_ENTRY *P__ZTI10S4059C2_nt = _ZTI10S4059C2_nt; 
extern  VTBL_ENTRY _ZTV10S4059C2_nt[];
Class_Descriptor cd_S4059C2_nt = {  "S4059C2_nt", // class name
  bases_S4059C2_nt, 1,
  &(vtc_S4059C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4059C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4059C2_nt),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  S4059C4_nt  {
  int s4059c4f0;
  short s4059c4f1[2];
  void  mf4059c4(); // _ZN10S4059C4_nt8mf4059c4Ev
};
//SIG(-1 S4059C4_nt) C1{ m Fi Fs[2]}


void  S4059C4_nt ::mf4059c4(){}

//skip512 S4059C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4059C1  : S4059C2_nt {
  ::S4059C4_nt s4059c1f0;
  void *s4059c1f1;
  virtual  ~S4059C1(); // _ZN7S4059C1D1Ev
  virtual void  v1(); // _ZN7S4059C12v1Ev
  virtual void  v2(); // _ZN7S4059C12v2Ev
  virtual void  v3(); // _ZN7S4059C12v3Ev
  virtual void  v4(); // _ZN7S4059C12v4Ev
  virtual void  v5(); // _ZN7S4059C12v5Ev
  virtual void  v6(); // _ZN7S4059C12v6Ev
  virtual void  v7(); // _ZN7S4059C12v7Ev
  virtual void  v8(); // _ZN7S4059C12v8Ev
  virtual void  v9(); // _ZN7S4059C12v9Ev
  virtual void  v10(); // _ZN7S4059C13v10Ev
  virtual void  v11(); // _ZN7S4059C13v11Ev
  virtual void  v12(); // _ZN7S4059C13v12Ev
  virtual void  v13(); // _ZN7S4059C13v13Ev
  virtual void  v14(); // _ZN7S4059C13v14Ev
  virtual void  v15(); // _ZN7S4059C13v15Ev
  virtual void  v16(); // _ZN7S4059C13v16Ev
  virtual void  v17(); // _ZN7S4059C13v17Ev
  virtual void  v18(); // _ZN7S4059C13v18Ev
  S4059C1(); // tgen
};
//SIG(1 S4059C1) C1{ BC2{ BC3{ vd m} vd v19 Fs[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m Fi Fs[2]} Fp}


 S4059C1 ::~S4059C1(){ note_dtor("S4059C1", this);}
void  S4059C1 ::v1(){vfunc_called(this, "_ZN7S4059C12v1Ev");}
void  S4059C1 ::v2(){vfunc_called(this, "_ZN7S4059C12v2Ev");}
void  S4059C1 ::v3(){vfunc_called(this, "_ZN7S4059C12v3Ev");}
void  S4059C1 ::v4(){vfunc_called(this, "_ZN7S4059C12v4Ev");}
void  S4059C1 ::v5(){vfunc_called(this, "_ZN7S4059C12v5Ev");}
void  S4059C1 ::v6(){vfunc_called(this, "_ZN7S4059C12v6Ev");}
void  S4059C1 ::v7(){vfunc_called(this, "_ZN7S4059C12v7Ev");}
void  S4059C1 ::v8(){vfunc_called(this, "_ZN7S4059C12v8Ev");}
void  S4059C1 ::v9(){vfunc_called(this, "_ZN7S4059C12v9Ev");}
void  S4059C1 ::v10(){vfunc_called(this, "_ZN7S4059C13v10Ev");}
void  S4059C1 ::v11(){vfunc_called(this, "_ZN7S4059C13v11Ev");}
void  S4059C1 ::v12(){vfunc_called(this, "_ZN7S4059C13v12Ev");}
void  S4059C1 ::v13(){vfunc_called(this, "_ZN7S4059C13v13Ev");}
void  S4059C1 ::v14(){vfunc_called(this, "_ZN7S4059C13v14Ev");}
void  S4059C1 ::v15(){vfunc_called(this, "_ZN7S4059C13v15Ev");}
void  S4059C1 ::v16(){vfunc_called(this, "_ZN7S4059C13v16Ev");}
void  S4059C1 ::v17(){vfunc_called(this, "_ZN7S4059C13v17Ev");}
void  S4059C1 ::v18(){vfunc_called(this, "_ZN7S4059C13v18Ev");}
S4059C1 ::S4059C1(){ note_ctor("S4059C1", this);} // tgen

static void Test_S4059C1()
{
  extern Class_Descriptor cd_S4059C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S4059C1, buf);
    S4059C1 *dp, &lv = *(dp=new (buf) S4059C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S4059C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4059C1)");
    check_base_class_offset(lv, (S4059C3_nt*)(S4059C2_nt*), 0, "S4059C1");
    check_base_class_offset(lv, (S4059C2_nt*), 0, "S4059C1");
    check_field_offset(lv, s4059c1f0, ABISELECT(12,8), "S4059C1.s4059c1f0");
    check_field_offset(lv, s4059c1f1, ABISELECT(24,16), "S4059C1.s4059c1f1");
    test_class_info(&lv, &cd_S4059C1);
    dp->~S4059C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4059C1(Test_S4059C1, "S4059C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S4059C1C1Ev();
extern void _ZN7S4059C1D1Ev();
Name_Map name_map_S4059C1[] = {
  NSPAIR(_ZN7S4059C1C1Ev),
  NSPAIR(_ZN7S4059C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4059C3_nt;
extern VTBL_ENTRY _ZTI10S4059C3_nt[];
extern  VTBL_ENTRY _ZTV10S4059C3_nt[];
extern Class_Descriptor cd_S4059C2_nt;
extern VTBL_ENTRY _ZTI10S4059C2_nt[];
extern  VTBL_ENTRY _ZTV10S4059C2_nt[];
static Base_Class bases_S4059C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4059C3_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_S4059C2_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 _ZTI7S4059C1[];
extern void _ZN7S4059C1D1Ev();
extern void _ZN7S4059C1D0Ev();
extern void _ZN10S4059C2_nt3v19Ev();
extern void _ZN7S4059C12v1Ev();
extern void _ZN7S4059C12v2Ev();
extern void _ZN7S4059C12v3Ev();
extern void _ZN7S4059C12v4Ev();
extern void _ZN7S4059C12v5Ev();
extern void _ZN7S4059C12v6Ev();
extern void _ZN7S4059C12v7Ev();
extern void _ZN7S4059C12v8Ev();
extern void _ZN7S4059C12v9Ev();
extern void _ZN7S4059C13v10Ev();
extern void _ZN7S4059C13v11Ev();
extern void _ZN7S4059C13v12Ev();
extern void _ZN7S4059C13v13Ev();
extern void _ZN7S4059C13v14Ev();
extern void _ZN7S4059C13v15Ev();
extern void _ZN7S4059C13v16Ev();
extern void _ZN7S4059C13v17Ev();
extern void _ZN7S4059C13v18Ev();
static  VTBL_ENTRY vtc_S4059C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4059C1[0]),
  (VTBL_ENTRY)&_ZN7S4059C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4059C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4059C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4059C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v13Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v14Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v15Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v16Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v17Ev,
  (VTBL_ENTRY)&_ZN7S4059C13v18Ev,
};
extern VTBL_ENTRY _ZTI7S4059C1[];
extern  VTBL_ENTRY _ZTV7S4059C1[];
Class_Descriptor cd_S4059C1 = {  "S4059C1", // class name
  bases_S4059C1, 2,
  &(vtc_S4059C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S4059C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4059C1),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  S6224C1  : S22028C16 {
  void *s6224c1f0;
  ::S1707C5_nt s6224c1f1;
  ::S22028C13_nt s6224c1f2;
  ::S4252C10_nt s6224c1f3;
};
//SIG(1 S6224C1) C1{ BC2{ m} Fp FC3{ m FC4{ m Fp Fi[2] FC2} Fp[2]} FC5{ BC6{ m Fp Fi FC7{ m} FC2}} FC8{ BC6}}



static void Test_S6224C1()
{
  extern Class_Descriptor cd_S6224C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S6224C1, buf);
    S6224C1 &lv = *(new (buf) S6224C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S6224C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6224C1)");
    check_base_class_offset(lv, (S22028C16*), 0, "S6224C1");
    check_field_offset(lv, s6224c1f0, 0, "S6224C1.s6224c1f0");
    check_field_offset(lv, s6224c1f1, ABISELECT(8,4), "S6224C1.s6224c1f1");
    check_field_offset(lv, s6224c1f2, ABISELECT(48,28), "S6224C1.s6224c1f2");
    check_field_offset(lv, s6224c1f3, ABISELECT(64,40), "S6224C1.s6224c1f3");
    test_class_info(&lv, &cd_S6224C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6224C1(Test_S6224C1, "S6224C1", ABISELECT(80,52));

#else // __cplusplus

extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S6224C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6224C1 = {  "S6224C1", // class name
  bases_S6224C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,52), // 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  S17650C7_nt  {
  ::S16253C12_nt s17650c7f0;
  void  mf17650c7(); // _ZN11S17650C7_nt9mf17650c7Ev
};
//SIG(-1 S17650C7_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S17650C7_nt ::mf17650c7(){}

//skip512 S17650C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17650C1  {
  void *s17650c1f0;
  ::S22028C73 s17650c1f1;
  ::S22028C11_nt s17650c1f2;
  int s17650c1f3[2];
  ::S22028C33_nt s17650c1f4;
  ::S22028C33_nt s17650c1f5;
  ::S17650C7_nt s17650c1f6;
  ::S22028C33_nt s17650c1f7;
  ::S22028C33_nt s17650c1f8;
  ::S17650C7_nt s17650c1f9;
  int s17650c1f10;
  void  mf17650c1(); // _ZN8S17650C19mf17650c1Ev
};
//SIG(1 S17650C1) C1{ m Fp FC2{ m Fp[2]} FC3{ m Fp Fi FC4{ m}} Fi[2] FC5{ m FC6{ m FL[2]}} FC5 FC7{ m FC8{ m FC6}} FC5 FC5 FC7 Fi}


void  S17650C1 ::mf17650c1(){}

static void Test_S17650C1()
{
  {
    init_simple_test("S17650C1");
    S17650C1 lv;
    check2(sizeof(lv), ABISELECT(152,132), "sizeof(S17650C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17650C1)");
    check_field_offset(lv, s17650c1f0, 0, "S17650C1.s17650c1f0");
    check_field_offset(lv, s17650c1f1, ABISELECT(8,4), "S17650C1.s17650c1f1");
    check_field_offset(lv, s17650c1f2, ABISELECT(24,12), "S17650C1.s17650c1f2");
    check_field_offset(lv, s17650c1f3, ABISELECT(40,24), "S17650C1.s17650c1f3");
    check_field_offset(lv, s17650c1f4, ABISELECT(48,32), "S17650C1.s17650c1f4");
    check_field_offset(lv, s17650c1f5, ABISELECT(64,48), "S17650C1.s17650c1f5");
    check_field_offset(lv, s17650c1f6, ABISELECT(80,64), "S17650C1.s17650c1f6");
    check_field_offset(lv, s17650c1f7, ABISELECT(96,80), "S17650C1.s17650c1f7");
    check_field_offset(lv, s17650c1f8, ABISELECT(112,96), "S17650C1.s17650c1f8");
    check_field_offset(lv, s17650c1f9, ABISELECT(128,112), "S17650C1.s17650c1f9");
    check_field_offset(lv, s17650c1f10, ABISELECT(144,128), "S17650C1.s17650c1f10");
  }
}
static Arrange_To_Call_Me vS17650C1(Test_S17650C1, "S17650C1", ABISELECT(152,132));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14925C2_nt  {
  char s14925c2f0[16];
};
//SIG(-1 S14925C2_nt) C1{ Fc[16]}



//skip512 S14925C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14925C3_nt  {
  char s14925c3f0[32];
};
//SIG(-1 S14925C3_nt) C1{ Fc[32]}



//skip512 S14925C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14925C4  {
  short s14925c4f0;
  char s14925c4f1[2];
  int s14925c4f2;
};
//SIG(1 S14925C4) C1{ Fs Fc[2] Fi}



static void Test_S14925C4()
{
  {
    init_simple_test("S14925C4");
    S14925C4 lv;
    check2(sizeof(lv), 8, "sizeof(S14925C4)");
    check2(__alignof__(lv), 4, "__alignof__(S14925C4)");
    check_field_offset(lv, s14925c4f0, 0, "S14925C4.s14925c4f0");
    check_field_offset(lv, s14925c4f1, 2, "S14925C4.s14925c4f1");
    check_field_offset(lv, s14925c4f2, 4, "S14925C4.s14925c4f2");
  }
}
static Arrange_To_Call_Me vS14925C4(Test_S14925C4, "S14925C4", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14925C5_nt  {
  short s14925c5f0;
  char s14925c5f1[2];
  void *s14925c5f2;
  int s14925c5f3;
};
//SIG(-1 S14925C5_nt) C1{ Fs Fc[2] Fp Fi}



//skip512 S14925C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14925C6_nt  {
  int s14925c6f0;
  char s14925c6f1[64];
};
//SIG(-1 S14925C6_nt) C1{ Fi Fc[64]}



//skip512 S14925C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14925C1  {
  short s14925c1f0[3];
  int s14925c1f1;
  short s14925c1f2;
  ::S14925C2_nt s14925c1f3;
  ::S14925C3_nt s14925c1f4;
  __tsi64 s14925c1f5;
  ::S14925C4 s14925c1f6[8];
  ::S14925C5_nt s14925c1f7;
  ::S14925C5_nt s14925c1f8[2];
  void *s14925c1f9[3];
  ::S14925C6_nt s14925c1f10;
};
//SIG(1 S14925C1) C1{ Fs[3] Fi Fs FC2{ Fc[16]} FC3{ Fc[32]} FL FC4{ Fs Fc[2] Fi}[8] FC5{ Fs Fc[2] Fp Fi} FC5[2] Fp[3] FC6{ Fi Fc[64]}}



static void Test_S14925C1()
{
  {
    init_simple_test("S14925C1");
    S14925C1 lv;
    check2(sizeof(lv), ABISELECT(304,252), "sizeof(S14925C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14925C1)");
    check_field_offset(lv, s14925c1f0, 0, "S14925C1.s14925c1f0");
    check_field_offset(lv, s14925c1f1, 8, "S14925C1.s14925c1f1");
    check_field_offset(lv, s14925c1f2, 12, "S14925C1.s14925c1f2");
    check_field_offset(lv, s14925c1f3, 14, "S14925C1.s14925c1f3");
    check_field_offset(lv, s14925c1f4, 30, "S14925C1.s14925c1f4");
    check_field_offset(lv, s14925c1f5, 64, "S14925C1.s14925c1f5");
    check_field_offset(lv, s14925c1f6, 72, "S14925C1.s14925c1f6");
    check_field_offset(lv, s14925c1f7, 136, "S14925C1.s14925c1f7");
    check_field_offset(lv, s14925c1f8, ABISELECT(160,148), "S14925C1.s14925c1f8");
    check_field_offset(lv, s14925c1f9, ABISELECT(208,172), "S14925C1.s14925c1f9");
    check_field_offset(lv, s14925c1f10, ABISELECT(232,184), "S14925C1.s14925c1f10");
  }
}
static Arrange_To_Call_Me vS14925C1(Test_S14925C1, "S14925C1", ABISELECT(304,252));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1260C3  : S22028C16 {
  virtual  ~S1260C3(); // _ZN7S1260C3D1Ev
  virtual void  v7(); // _ZN7S1260C32v7Ev
  S1260C3(); // tgen
};
//SIG(-1 S1260C3) C1{ BC2{ m} vd v1}


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

static void Test_S1260C3()
{
  extern Class_Descriptor cd_S1260C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1260C3, buf);
    S1260C3 *dp, &lv = *(dp=new (buf) S1260C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1260C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1260C3)");
    check_base_class_offset(lv, (S22028C16*), 0, "S1260C3");
    test_class_info(&lv, &cd_S1260C3);
    dp->~S1260C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1260C3(Test_S1260C3, "S1260C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1260C3C1Ev();
extern void _ZN7S1260C3D1Ev();
Name_Map name_map_S1260C3[] = {
  NSPAIR(_ZN7S1260C3C1Ev),
  NSPAIR(_ZN7S1260C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S1260C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1260C3[];
extern void _ZN7S1260C3D1Ev();
extern void _ZN7S1260C3D0Ev();
extern void _ZN7S1260C32v7Ev();
static  VTBL_ENTRY vtc_S1260C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1260C3[0]),
  (VTBL_ENTRY)&_ZN7S1260C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1260C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1260C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S1260C3[];
extern  VTBL_ENTRY _ZTV7S1260C3[];
Class_Descriptor cd_S1260C3 = {  "S1260C3", // class name
  bases_S1260C3, 1,
  &(vtc_S1260C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1260C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1260C3),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  S1260C2  : S1260C3 {
  int s1260c2f0;
  void *s1260c2f1[2];
  virtual  ~S1260C2(); // _ZN7S1260C2D1Ev
  virtual void  v8(); // _ZN7S1260C22v8Ev
  virtual void  v9(); // _ZN7S1260C22v9Ev
  virtual void  v10(); // _ZN7S1260C23v10Ev
  virtual void  v11(); // _ZN7S1260C23v11Ev
  virtual void  v12(); // _ZN7S1260C23v12Ev
  virtual void  v13(); // _ZN7S1260C23v13Ev
  virtual void  v14(); // _ZN7S1260C23v14Ev
  virtual void  v15(); // _ZN7S1260C23v15Ev
  virtual void  v16(); // _ZN7S1260C23v16Ev
  virtual void  v17(); // _ZN7S1260C23v17Ev
  virtual void  v18(); // _ZN7S1260C23v18Ev
  virtual void  v19(); // _ZN7S1260C23v19Ev
  virtual void  v20(); // _ZN7S1260C23v20Ev
  virtual void  v21(); // _ZN7S1260C23v21Ev
  S1260C2(); // tgen
};
//SIG(-1 S1260C2) C1{ BC2{ BC3{ m} vd v15} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fi Fp[2]}


 S1260C2 ::~S1260C2(){ note_dtor("S1260C2", this);}
void  S1260C2 ::v8(){vfunc_called(this, "_ZN7S1260C22v8Ev");}
void  S1260C2 ::v9(){vfunc_called(this, "_ZN7S1260C22v9Ev");}
void  S1260C2 ::v10(){vfunc_called(this, "_ZN7S1260C23v10Ev");}
void  S1260C2 ::v11(){vfunc_called(this, "_ZN7S1260C23v11Ev");}
void  S1260C2 ::v12(){vfunc_called(this, "_ZN7S1260C23v12Ev");}
void  S1260C2 ::v13(){vfunc_called(this, "_ZN7S1260C23v13Ev");}
void  S1260C2 ::v14(){vfunc_called(this, "_ZN7S1260C23v14Ev");}
void  S1260C2 ::v15(){vfunc_called(this, "_ZN7S1260C23v15Ev");}
void  S1260C2 ::v16(){vfunc_called(this, "_ZN7S1260C23v16Ev");}
void  S1260C2 ::v17(){vfunc_called(this, "_ZN7S1260C23v17Ev");}
void  S1260C2 ::v18(){vfunc_called(this, "_ZN7S1260C23v18Ev");}
void  S1260C2 ::v19(){vfunc_called(this, "_ZN7S1260C23v19Ev");}
void  S1260C2 ::v20(){vfunc_called(this, "_ZN7S1260C23v20Ev");}
void  S1260C2 ::v21(){vfunc_called(this, "_ZN7S1260C23v21Ev");}
S1260C2 ::S1260C2(){ note_ctor("S1260C2", this);} // tgen

static void Test_S1260C2()
{
  extern Class_Descriptor cd_S1260C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1260C2, buf);
    S1260C2 *dp, &lv = *(dp=new (buf) S1260C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1260C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1260C2)");
    check_base_class_offset(lv, (S22028C16*)(S1260C3*), 0, "S1260C2");
    check_base_class_offset(lv, (S1260C3*), 0, "S1260C2");
    check_field_offset(lv, s1260c2f0, ABISELECT(8,4), "S1260C2.s1260c2f0");
    check_field_offset(lv, s1260c2f1, ABISELECT(16,8), "S1260C2.s1260c2f1");
    test_class_info(&lv, &cd_S1260C2);
    dp->~S1260C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1260C2(Test_S1260C2, "S1260C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1260C2C1Ev();
extern void _ZN7S1260C2D1Ev();
Name_Map name_map_S1260C2[] = {
  NSPAIR(_ZN7S1260C2C1Ev),
  NSPAIR(_ZN7S1260C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1260C3;
extern VTBL_ENTRY _ZTI7S1260C3[];
extern  VTBL_ENTRY _ZTV7S1260C3[];
static Base_Class bases_S1260C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1260C2[];
extern void _ZN7S1260C2D1Ev();
extern void _ZN7S1260C2D0Ev();
extern void _ZN7S1260C32v7Ev();
extern void _ZN7S1260C22v8Ev();
extern void _ZN7S1260C22v9Ev();
extern void _ZN7S1260C23v10Ev();
extern void _ZN7S1260C23v11Ev();
extern void _ZN7S1260C23v12Ev();
extern void _ZN7S1260C23v13Ev();
extern void _ZN7S1260C23v14Ev();
extern void _ZN7S1260C23v15Ev();
extern void _ZN7S1260C23v16Ev();
extern void _ZN7S1260C23v17Ev();
extern void _ZN7S1260C23v18Ev();
extern void _ZN7S1260C23v19Ev();
extern void _ZN7S1260C23v20Ev();
extern void _ZN7S1260C23v21Ev();
static  VTBL_ENTRY vtc_S1260C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1260C2[0]),
  (VTBL_ENTRY)&_ZN7S1260C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1260C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1260C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1260C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1260C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S1260C2[];
extern  VTBL_ENTRY _ZTV7S1260C2[];
Class_Descriptor cd_S1260C2 = {  "S1260C2", // class name
  bases_S1260C2, 2,
  &(vtc_S1260C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1260C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1260C2),19, //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  S1260C1  : S1260C2 {
  virtual void  v1(); // _ZN7S1260C12v1Ev
  virtual void  v2(); // _ZN7S1260C12v2Ev
  virtual void  v3(); // _ZN7S1260C12v3Ev
  virtual void  v4(); // _ZN7S1260C12v4Ev
  virtual void  v5(); // _ZN7S1260C12v5Ev
  virtual void  v6(); // _ZN7S1260C12v6Ev
  ~S1260C1(); // tgen
  S1260C1(); // tgen
};
//SIG(1 S1260C1) C1{ BC2{ BC3{ BC4{ m} vd v7} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 Fi Fp[2]} v1 v2 v3 v4 v5 v6}


void  S1260C1 ::v1(){vfunc_called(this, "_ZN7S1260C12v1Ev");}
void  S1260C1 ::v2(){vfunc_called(this, "_ZN7S1260C12v2Ev");}
void  S1260C1 ::v3(){vfunc_called(this, "_ZN7S1260C12v3Ev");}
void  S1260C1 ::v4(){vfunc_called(this, "_ZN7S1260C12v4Ev");}
void  S1260C1 ::v5(){vfunc_called(this, "_ZN7S1260C12v5Ev");}
void  S1260C1 ::v6(){vfunc_called(this, "_ZN7S1260C12v6Ev");}
S1260C1 ::~S1260C1(){ note_dtor("S1260C1", this);} // tgen
S1260C1 ::S1260C1(){ note_ctor("S1260C1", this);} // tgen

static void Test_S1260C1()
{
  extern Class_Descriptor cd_S1260C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1260C1, buf);
    S1260C1 *dp, &lv = *(dp=new (buf) S1260C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1260C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1260C1)");
    check_base_class_offset(lv, (S22028C16*)(S1260C3*)(S1260C2*), 0, "S1260C1");
    check_base_class_offset(lv, (S1260C3*)(S1260C2*), 0, "S1260C1");
    check_base_class_offset(lv, (S1260C2*), 0, "S1260C1");
    test_class_info(&lv, &cd_S1260C1);
    dp->~S1260C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1260C1(Test_S1260C1, "S1260C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1260C1C1Ev();
extern void _ZN7S1260C1D1Ev();
Name_Map name_map_S1260C1[] = {
  NSPAIR(_ZN7S1260C1C1Ev),
  NSPAIR(_ZN7S1260C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S1260C3;
extern VTBL_ENTRY _ZTI7S1260C3[];
extern  VTBL_ENTRY _ZTV7S1260C3[];
extern Class_Descriptor cd_S1260C2;
extern VTBL_ENTRY _ZTI7S1260C2[];
extern  VTBL_ENTRY _ZTV7S1260C2[];
static Base_Class bases_S1260C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1260C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1260C1[];
extern void _ZN7S1260C1D1Ev();
extern void _ZN7S1260C1D0Ev();
extern void _ZN7S1260C32v7Ev();
extern void _ZN7S1260C22v8Ev();
extern void _ZN7S1260C22v9Ev();
extern void _ZN7S1260C23v10Ev();
extern void _ZN7S1260C23v11Ev();
extern void _ZN7S1260C23v12Ev();
extern void _ZN7S1260C23v13Ev();
extern void _ZN7S1260C23v14Ev();
extern void _ZN7S1260C23v15Ev();
extern void _ZN7S1260C23v16Ev();
extern void _ZN7S1260C23v17Ev();
extern void _ZN7S1260C23v18Ev();
extern void _ZN7S1260C23v19Ev();
extern void _ZN7S1260C23v20Ev();
extern void _ZN7S1260C23v21Ev();
extern void _ZN7S1260C12v1Ev();
extern void _ZN7S1260C12v2Ev();
extern void _ZN7S1260C12v3Ev();
extern void _ZN7S1260C12v4Ev();
extern void _ZN7S1260C12v5Ev();
extern void _ZN7S1260C12v6Ev();
static  VTBL_ENTRY vtc_S1260C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1260C1[0]),
  (VTBL_ENTRY)&_ZN7S1260C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1260C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1260C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1260C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1260C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1260C23v21Ev,
  (VTBL_ENTRY)&_ZN7S1260C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1260C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1260C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1260C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1260C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1260C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1260C1[];
extern  VTBL_ENTRY _ZTV7S1260C1[];
Class_Descriptor cd_S1260C1 = {  "S1260C1", // class name
  bases_S1260C1, 3,
  &(vtc_S1260C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1260C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1260C1),25, //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  S20248C2  {
  ::S20347C6 s20248c2f0;
  virtual void  v5(); // _ZN8S20248C22v5Ev
  virtual void  v6(); // _ZN8S20248C22v6Ev
  virtual void  v7(); // _ZN8S20248C22v7Ev
  virtual void  v8(); // _ZN8S20248C22v8Ev
  virtual void  v9(); // _ZN8S20248C22v9Ev
  ~S20248C2(); // tgen
  S20248C2(); // tgen
};
//SIG(-1 S20248C2) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v6 v7 v8 v9 Fp Fc[2]} Fp[4]}}


void  S20248C2 ::v5(){vfunc_called(this, "_ZN8S20248C22v5Ev");}
void  S20248C2 ::v6(){vfunc_called(this, "_ZN8S20248C22v6Ev");}
void  S20248C2 ::v7(){vfunc_called(this, "_ZN8S20248C22v7Ev");}
void  S20248C2 ::v8(){vfunc_called(this, "_ZN8S20248C22v8Ev");}
void  S20248C2 ::v9(){vfunc_called(this, "_ZN8S20248C22v9Ev");}
S20248C2 ::~S20248C2(){ note_dtor("S20248C2", this);} // tgen
S20248C2 ::S20248C2(){ note_ctor("S20248C2", this);} // tgen

static void Test_S20248C2()
{
  extern Class_Descriptor cd_S20248C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20248C2, buf);
    S20248C2 *dp, &lv = *(dp=new (buf) S20248C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20248C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20248C2)");
    check_field_offset(lv, s20248c2f0, ABISELECT(8,4), "S20248C2.s20248c2f0");
    test_class_info(&lv, &cd_S20248C2);
    dp->~S20248C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20248C2(Test_S20248C2, "S20248C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20248C2C1Ev();
extern void _ZN8S20248C2D1Ev();
Name_Map name_map_S20248C2[] = {
  NSPAIR(_ZN8S20248C2C1Ev),
  NSPAIR(_ZN8S20248C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20248C2[];
extern void _ZN8S20248C22v5Ev();
extern void _ZN8S20248C22v6Ev();
extern void _ZN8S20248C22v7Ev();
extern void _ZN8S20248C22v8Ev();
extern void _ZN8S20248C22v9Ev();
static  VTBL_ENTRY vtc_S20248C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20248C2[0]),
  (VTBL_ENTRY)&_ZN8S20248C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20248C2[];
extern  VTBL_ENTRY _ZTV8S20248C2[];
Class_Descriptor cd_S20248C2 = {  "S20248C2", // class name
  0,0,//no base classes
  &(vtc_S20248C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20248C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20248C2),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  S20248C5  {
  __tsi64 s20248c5f0[5];
  void *s20248c5f1;
  virtual void  v10(); // _ZN8S20248C53v10Ev
  virtual void  v11(); // _ZN8S20248C53v11Ev
  virtual void  v12(); // _ZN8S20248C53v12Ev
  virtual void  v13(); // _ZN8S20248C53v13Ev
  ~S20248C5(); // tgen
  S20248C5(); // tgen
};
//SIG(-1 S20248C5) C1{ v1 v2 v3 v4 FL[5] Fp}


void  S20248C5 ::v10(){vfunc_called(this, "_ZN8S20248C53v10Ev");}
void  S20248C5 ::v11(){vfunc_called(this, "_ZN8S20248C53v11Ev");}
void  S20248C5 ::v12(){vfunc_called(this, "_ZN8S20248C53v12Ev");}
void  S20248C5 ::v13(){vfunc_called(this, "_ZN8S20248C53v13Ev");}
S20248C5 ::~S20248C5(){ note_dtor("S20248C5", this);} // tgen
S20248C5 ::S20248C5(){ note_ctor("S20248C5", this);} // tgen

static void Test_S20248C5()
{
  extern Class_Descriptor cd_S20248C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S20248C5, buf);
    S20248C5 *dp, &lv = *(dp=new (buf) S20248C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S20248C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20248C5)");
    check_field_offset(lv, s20248c5f0, ABISELECT(8,4), "S20248C5.s20248c5f0");
    check_field_offset(lv, s20248c5f1, ABISELECT(48,44), "S20248C5.s20248c5f1");
    test_class_info(&lv, &cd_S20248C5);
    dp->~S20248C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20248C5(Test_S20248C5, "S20248C5", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN8S20248C5C1Ev();
extern void _ZN8S20248C5D1Ev();
Name_Map name_map_S20248C5[] = {
  NSPAIR(_ZN8S20248C5C1Ev),
  NSPAIR(_ZN8S20248C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20248C5[];
extern void _ZN8S20248C53v10Ev();
extern void _ZN8S20248C53v11Ev();
extern void _ZN8S20248C53v12Ev();
extern void _ZN8S20248C53v13Ev();
static  VTBL_ENTRY vtc_S20248C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20248C5[0]),
  (VTBL_ENTRY)&_ZN8S20248C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20248C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20248C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20248C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S20248C5[];
extern  VTBL_ENTRY _ZTV8S20248C5[];
Class_Descriptor cd_S20248C5 = {  "S20248C5", // class name
  0,0,//no base classes
  &(vtc_S20248C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI8S20248C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20248C5),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  S20248C1  : virtual S20248C2 , virtual S20248C5 {
  virtual void  v1(); // _ZN8S20248C12v1Ev
  virtual void  v2(); // _ZN8S20248C12v2Ev
  virtual void  v3(); // _ZN8S20248C12v3Ev
  virtual void  v4(); // _ZN8S20248C12v4Ev
  ~S20248C1(); // tgen
  S20248C1(); // tgen
};
//SIG(1 S20248C1) C1{ VBC2{ v5 v6 v7 v8 v9 FC3{ BC4{ v14 v15 v16 v17 Fp Fc[2]} Fp[4]}} VBC5{ v10 v11 v12 v13 FL[5] Fp} v1 v2 v3 v4}


void  S20248C1 ::v1(){vfunc_called(this, "_ZN8S20248C12v1Ev");}
void  S20248C1 ::v2(){vfunc_called(this, "_ZN8S20248C12v2Ev");}
void  S20248C1 ::v3(){vfunc_called(this, "_ZN8S20248C12v3Ev");}
void  S20248C1 ::v4(){vfunc_called(this, "_ZN8S20248C12v4Ev");}
S20248C1 ::~S20248C1(){ note_dtor("S20248C1", this);} // tgen
S20248C1 ::S20248C1(){ note_ctor("S20248C1", this);} // tgen

static void Test_S20248C1()
{
  extern Class_Descriptor cd_S20248C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S20248C1, buf);
    S20248C1 *dp, &lv = *(dp=new (buf) S20248C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S20248C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20248C1)");
    check_base_class_offset(lv, (S20248C2*), ABISELECT(8,4), "S20248C1");
    check_base_class_offset(lv, (S20248C5*), ABISELECT(72,36), "S20248C1");
    test_class_info(&lv, &cd_S20248C1);
    dp->~S20248C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20248C1(Test_S20248C1, "S20248C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN8S20248C1C1Ev();
extern void _ZN8S20248C1D1Ev();
Name_Map name_map_S20248C1[] = {
  NSPAIR(_ZN8S20248C1C1Ev),
  NSPAIR(_ZN8S20248C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20248C2;
extern VTBL_ENTRY _ZTI8S20248C2[];
extern  VTBL_ENTRY _ZTV8S20248C2[];
extern Class_Descriptor cd_S20248C5;
extern VTBL_ENTRY _ZTI8S20248C5[];
extern  VTBL_ENTRY _ZTV8S20248C5[];
static Base_Class bases_S20248C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20248C2,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //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_S20248C5,    ABISELECT(72,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20248C1[];
extern void _ZN8S20248C12v1Ev();
extern void _ZN8S20248C12v2Ev();
extern void _ZN8S20248C12v3Ev();
extern void _ZN8S20248C12v4Ev();
extern void _ZN8S20248C22v5Ev();
extern void _ZN8S20248C22v6Ev();
extern void _ZN8S20248C22v7Ev();
extern void _ZN8S20248C22v8Ev();
extern void _ZN8S20248C22v9Ev();
extern void _ZN8S20248C53v10Ev();
extern void _ZN8S20248C53v11Ev();
extern void _ZN8S20248C53v12Ev();
extern void _ZN8S20248C53v13Ev();
static  VTBL_ENTRY vtc_S20248C1[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20248C1[0]),
  (VTBL_ENTRY)&_ZN8S20248C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20248C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20248C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20248C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20248C1[0]),
  (VTBL_ENTRY)&_ZN8S20248C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20248C22v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20248C1[0]),
  (VTBL_ENTRY)&_ZN8S20248C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20248C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20248C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20248C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20248C1[];
static  VTT_ENTRY vtt_S20248C1[] = {
  {&(_ZTV8S20248C1[4]),  4,30},
  {&(_ZTV8S20248C1[15]),  15,30},
  {&(_ZTV8S20248C1[26]),  26,30},
};
extern VTBL_ENTRY _ZTI8S20248C1[];
extern  VTBL_ENTRY _ZTV8S20248C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20248C1[];
Class_Descriptor cd_S20248C1 = {  "S20248C1", // class name
  bases_S20248C1, 2,
  &(vtc_S20248C1[0]), // expected_vtbl_contents
  &(vtt_S20248C1[0]), // expected_vtt_contents
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI8S20248C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20248C1),30, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20248C1),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  S20247C2  {
  ::S20347C6 s20247c2f0;
  virtual void  v5(); // _ZN8S20247C22v5Ev
  virtual void  v6(); // _ZN8S20247C22v6Ev
  virtual void  v7(); // _ZN8S20247C22v7Ev
  virtual void  v8(); // _ZN8S20247C22v8Ev
  virtual void  v9(); // _ZN8S20247C22v9Ev
  ~S20247C2(); // tgen
  S20247C2(); // tgen
};
//SIG(-1 S20247C2) C1{ v1 v2 v3 v4 v5 FC2{ BC3{ v6 v7 v8 v9 Fp Fc[2]} Fp[4]}}


void  S20247C2 ::v5(){vfunc_called(this, "_ZN8S20247C22v5Ev");}
void  S20247C2 ::v6(){vfunc_called(this, "_ZN8S20247C22v6Ev");}
void  S20247C2 ::v7(){vfunc_called(this, "_ZN8S20247C22v7Ev");}
void  S20247C2 ::v8(){vfunc_called(this, "_ZN8S20247C22v8Ev");}
void  S20247C2 ::v9(){vfunc_called(this, "_ZN8S20247C22v9Ev");}
S20247C2 ::~S20247C2(){ note_dtor("S20247C2", this);} // tgen
S20247C2 ::S20247C2(){ note_ctor("S20247C2", this);} // tgen

static void Test_S20247C2()
{
  extern Class_Descriptor cd_S20247C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20247C2, buf);
    S20247C2 *dp, &lv = *(dp=new (buf) S20247C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20247C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20247C2)");
    check_field_offset(lv, s20247c2f0, ABISELECT(8,4), "S20247C2.s20247c2f0");
    test_class_info(&lv, &cd_S20247C2);
    dp->~S20247C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20247C2(Test_S20247C2, "S20247C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20247C2C1Ev();
extern void _ZN8S20247C2D1Ev();
Name_Map name_map_S20247C2[] = {
  NSPAIR(_ZN8S20247C2C1Ev),
  NSPAIR(_ZN8S20247C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20247C2[];
extern void _ZN8S20247C22v5Ev();
extern void _ZN8S20247C22v6Ev();
extern void _ZN8S20247C22v7Ev();
extern void _ZN8S20247C22v8Ev();
extern void _ZN8S20247C22v9Ev();
static  VTBL_ENTRY vtc_S20247C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20247C2[0]),
  (VTBL_ENTRY)&_ZN8S20247C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20247C2[];
extern  VTBL_ENTRY _ZTV8S20247C2[];
Class_Descriptor cd_S20247C2 = {  "S20247C2", // class name
  0,0,//no base classes
  &(vtc_S20247C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20247C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20247C2),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  S20247C5  {
  long s20247c5f0[5];
  void *s20247c5f1;
  virtual void  v10(); // _ZN8S20247C53v10Ev
  virtual void  v11(); // _ZN8S20247C53v11Ev
  virtual void  v12(); // _ZN8S20247C53v12Ev
  virtual void  v13(); // _ZN8S20247C53v13Ev
  ~S20247C5(); // tgen
  S20247C5(); // tgen
};
//SIG(-1 S20247C5) C1{ v1 v2 v3 v4 Fl[5] Fp}


void  S20247C5 ::v10(){vfunc_called(this, "_ZN8S20247C53v10Ev");}
void  S20247C5 ::v11(){vfunc_called(this, "_ZN8S20247C53v11Ev");}
void  S20247C5 ::v12(){vfunc_called(this, "_ZN8S20247C53v12Ev");}
void  S20247C5 ::v13(){vfunc_called(this, "_ZN8S20247C53v13Ev");}
S20247C5 ::~S20247C5(){ note_dtor("S20247C5", this);} // tgen
S20247C5 ::S20247C5(){ note_ctor("S20247C5", this);} // tgen

static void Test_S20247C5()
{
  extern Class_Descriptor cd_S20247C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20247C5, buf);
    S20247C5 *dp, &lv = *(dp=new (buf) S20247C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20247C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20247C5)");
    check_field_offset(lv, s20247c5f0, ABISELECT(8,4), "S20247C5.s20247c5f0");
    check_field_offset(lv, s20247c5f1, ABISELECT(48,24), "S20247C5.s20247c5f1");
    test_class_info(&lv, &cd_S20247C5);
    dp->~S20247C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20247C5(Test_S20247C5, "S20247C5", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S20247C5C1Ev();
extern void _ZN8S20247C5D1Ev();
Name_Map name_map_S20247C5[] = {
  NSPAIR(_ZN8S20247C5C1Ev),
  NSPAIR(_ZN8S20247C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20247C5[];
extern void _ZN8S20247C53v10Ev();
extern void _ZN8S20247C53v11Ev();
extern void _ZN8S20247C53v12Ev();
extern void _ZN8S20247C53v13Ev();
static  VTBL_ENTRY vtc_S20247C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20247C5[0]),
  (VTBL_ENTRY)&_ZN8S20247C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20247C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20247C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20247C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S20247C5[];
extern  VTBL_ENTRY _ZTV8S20247C5[];
Class_Descriptor cd_S20247C5 = {  "S20247C5", // class name
  0,0,//no base classes
  &(vtc_S20247C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20247C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20247C5),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  S20247C1  : virtual S20247C2 , virtual S20247C5 {
  virtual void  v1(); // _ZN8S20247C12v1Ev
  virtual void  v2(); // _ZN8S20247C12v2Ev
  virtual void  v3(); // _ZN8S20247C12v3Ev
  virtual void  v4(); // _ZN8S20247C12v4Ev
  ~S20247C1(); // tgen
  S20247C1(); // tgen
};
//SIG(1 S20247C1) C1{ VBC2{ v5 v6 v7 v8 v9 FC3{ BC4{ v14 v15 v16 v17 Fp Fc[2]} Fp[4]}} VBC5{ v10 v11 v12 v13 Fl[5] Fp} v1 v2 v3 v4}


void  S20247C1 ::v1(){vfunc_called(this, "_ZN8S20247C12v1Ev");}
void  S20247C1 ::v2(){vfunc_called(this, "_ZN8S20247C12v2Ev");}
void  S20247C1 ::v3(){vfunc_called(this, "_ZN8S20247C12v3Ev");}
void  S20247C1 ::v4(){vfunc_called(this, "_ZN8S20247C12v4Ev");}
S20247C1 ::~S20247C1(){ note_dtor("S20247C1", this);} // tgen
S20247C1 ::S20247C1(){ note_ctor("S20247C1", this);} // tgen

static void Test_S20247C1()
{
  extern Class_Descriptor cd_S20247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S20247C1, buf);
    S20247C1 *dp, &lv = *(dp=new (buf) S20247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S20247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20247C1)");
    check_base_class_offset(lv, (S20247C2*), ABISELECT(8,4), "S20247C1");
    check_base_class_offset(lv, (S20247C5*), ABISELECT(72,36), "S20247C1");
    test_class_info(&lv, &cd_S20247C1);
    dp->~S20247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20247C1(Test_S20247C1, "S20247C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S20247C1C1Ev();
extern void _ZN8S20247C1D1Ev();
Name_Map name_map_S20247C1[] = {
  NSPAIR(_ZN8S20247C1C1Ev),
  NSPAIR(_ZN8S20247C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20247C2;
extern VTBL_ENTRY _ZTI8S20247C2[];
extern  VTBL_ENTRY _ZTV8S20247C2[];
extern Class_Descriptor cd_S20247C5;
extern VTBL_ENTRY _ZTI8S20247C5[];
extern  VTBL_ENTRY _ZTV8S20247C5[];
static Base_Class bases_S20247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20247C2,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    7, //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_S20247C5,    ABISELECT(72,36), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20247C1[];
extern void _ZN8S20247C12v1Ev();
extern void _ZN8S20247C12v2Ev();
extern void _ZN8S20247C12v3Ev();
extern void _ZN8S20247C12v4Ev();
extern void _ZN8S20247C22v5Ev();
extern void _ZN8S20247C22v6Ev();
extern void _ZN8S20247C22v7Ev();
extern void _ZN8S20247C22v8Ev();
extern void _ZN8S20247C22v9Ev();
extern void _ZN8S20247C53v10Ev();
extern void _ZN8S20247C53v11Ev();
extern void _ZN8S20247C53v12Ev();
extern void _ZN8S20247C53v13Ev();
static  VTBL_ENTRY vtc_S20247C1[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20247C1[0]),
  (VTBL_ENTRY)&_ZN8S20247C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20247C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20247C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20247C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20247C1[0]),
  (VTBL_ENTRY)&_ZN8S20247C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20247C22v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20247C1[0]),
  (VTBL_ENTRY)&_ZN8S20247C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20247C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20247C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20247C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S20247C1[];
static  VTT_ENTRY vtt_S20247C1[] = {
  {&(_ZTV8S20247C1[4]),  4,30},
  {&(_ZTV8S20247C1[15]),  15,30},
  {&(_ZTV8S20247C1[26]),  26,30},
};
extern VTBL_ENTRY _ZTI8S20247C1[];
extern  VTBL_ENTRY _ZTV8S20247C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20247C1[];
Class_Descriptor cd_S20247C1 = {  "S20247C1", // class name
  bases_S20247C1, 2,
  &(vtc_S20247C1[0]), // expected_vtbl_contents
  &(vtt_S20247C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S20247C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20247C1),30, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20247C1),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  S20541C4  {
  int s20541c4f0[10];
  virtual void  v4(); // _ZN8S20541C42v4Ev
  virtual void  v5(); // _ZN8S20541C42v5Ev
  virtual void  v6(); // _ZN8S20541C42v6Ev
  virtual void  v7(); // _ZN8S20541C42v7Ev
  ~S20541C4(); // tgen
  S20541C4(); // tgen
};
//SIG(-1 S20541C4) C1{ v1 v2 v3 v4 Fi[10]}


void  S20541C4 ::v4(){vfunc_called(this, "_ZN8S20541C42v4Ev");}
void  S20541C4 ::v5(){vfunc_called(this, "_ZN8S20541C42v5Ev");}
void  S20541C4 ::v6(){vfunc_called(this, "_ZN8S20541C42v6Ev");}
void  S20541C4 ::v7(){vfunc_called(this, "_ZN8S20541C42v7Ev");}
S20541C4 ::~S20541C4(){ note_dtor("S20541C4", this);} // tgen
S20541C4 ::S20541C4(){ note_ctor("S20541C4", this);} // tgen

static void Test_S20541C4()
{
  extern Class_Descriptor cd_S20541C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S20541C4, buf);
    S20541C4 *dp, &lv = *(dp=new (buf) S20541C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S20541C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20541C4)");
    check_field_offset(lv, s20541c4f0, ABISELECT(8,4), "S20541C4.s20541c4f0");
    test_class_info(&lv, &cd_S20541C4);
    dp->~S20541C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20541C4(Test_S20541C4, "S20541C4", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S20541C4C1Ev();
extern void _ZN8S20541C4D1Ev();
Name_Map name_map_S20541C4[] = {
  NSPAIR(_ZN8S20541C4C1Ev),
  NSPAIR(_ZN8S20541C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20541C4[];
extern void _ZN8S20541C42v4Ev();
extern void _ZN8S20541C42v5Ev();
extern void _ZN8S20541C42v6Ev();
extern void _ZN8S20541C42v7Ev();
static  VTBL_ENTRY vtc_S20541C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20541C4[0]),
  (VTBL_ENTRY)&_ZN8S20541C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v7Ev,
};
extern VTBL_ENTRY _ZTI8S20541C4[];
extern  VTBL_ENTRY _ZTV8S20541C4[];
Class_Descriptor cd_S20541C4 = {  "S20541C4", // class name
  0,0,//no base classes
  &(vtc_S20541C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S20541C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20541C4),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  S20541C3  : S20541C4 {
  void *s20541c3f0;
  virtual void  v8(); // _ZN8S20541C32v8Ev
  virtual void  v9(); // _ZN8S20541C32v9Ev
  ~S20541C3(); // tgen
  S20541C3(); // tgen
};
//SIG(-1 S20541C3) C1{ BC2{ v3 v4 v5 v6 Fi[10]} v1 v2 Fp}


void  S20541C3 ::v8(){vfunc_called(this, "_ZN8S20541C32v8Ev");}
void  S20541C3 ::v9(){vfunc_called(this, "_ZN8S20541C32v9Ev");}
S20541C3 ::~S20541C3(){ note_dtor("S20541C3", this);} // tgen
S20541C3 ::S20541C3(){ note_ctor("S20541C3", this);} // tgen

static void Test_S20541C3()
{
  extern Class_Descriptor cd_S20541C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S20541C3, buf);
    S20541C3 *dp, &lv = *(dp=new (buf) S20541C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S20541C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20541C3)");
    check_base_class_offset(lv, (S20541C4*), 0, "S20541C3");
    check_field_offset(lv, s20541c3f0, ABISELECT(48,44), "S20541C3.s20541c3f0");
    test_class_info(&lv, &cd_S20541C3);
    dp->~S20541C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20541C3(Test_S20541C3, "S20541C3", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN8S20541C3C1Ev();
extern void _ZN8S20541C3D1Ev();
Name_Map name_map_S20541C3[] = {
  NSPAIR(_ZN8S20541C3C1Ev),
  NSPAIR(_ZN8S20541C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20541C4;
extern VTBL_ENTRY _ZTI8S20541C4[];
extern  VTBL_ENTRY _ZTV8S20541C4[];
static Base_Class bases_S20541C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20541C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20541C3[];
extern void _ZN8S20541C42v4Ev();
extern void _ZN8S20541C42v5Ev();
extern void _ZN8S20541C42v6Ev();
extern void _ZN8S20541C42v7Ev();
extern void _ZN8S20541C32v8Ev();
extern void _ZN8S20541C32v9Ev();
static  VTBL_ENTRY vtc_S20541C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20541C3[0]),
  (VTBL_ENTRY)&_ZN8S20541C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v9Ev,
};
extern VTBL_ENTRY _ZTI8S20541C3[];
extern  VTBL_ENTRY _ZTV8S20541C3[];
Class_Descriptor cd_S20541C3 = {  "S20541C3", // class name
  bases_S20541C3, 1,
  &(vtc_S20541C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI8S20541C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20541C3),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  S20541C2  : virtual S20541C3 {
  void *s20541c2f0;
  int s20541c2f1;
  virtual void  v10(); // _ZN8S20541C23v10Ev
  virtual void  v11(); // _ZN8S20541C23v11Ev
  virtual void  v12(); // _ZN8S20541C23v12Ev
  virtual void  v13(); // _ZN8S20541C23v13Ev
  virtual void  v14(); // _ZN8S20541C23v14Ev
  virtual void  v15(); // _ZN8S20541C23v15Ev
  ~S20541C2(); // tgen
  S20541C2(); // tgen
};
//SIG(-1 S20541C2) C1{ VBC2{ BC3{ v7 v8 v9 v10 Fi[10]} v11 v12 Fp} v1 v2 v3 v4 v5 v6 Fp Fi}


void  S20541C2 ::v10(){vfunc_called(this, "_ZN8S20541C23v10Ev");}
void  S20541C2 ::v11(){vfunc_called(this, "_ZN8S20541C23v11Ev");}
void  S20541C2 ::v12(){vfunc_called(this, "_ZN8S20541C23v12Ev");}
void  S20541C2 ::v13(){vfunc_called(this, "_ZN8S20541C23v13Ev");}
void  S20541C2 ::v14(){vfunc_called(this, "_ZN8S20541C23v14Ev");}
void  S20541C2 ::v15(){vfunc_called(this, "_ZN8S20541C23v15Ev");}
S20541C2 ::~S20541C2(){ note_dtor("S20541C2", this);} // tgen
S20541C2 ::S20541C2(){ note_ctor("S20541C2", this);} // tgen

static void Test_S20541C2()
{
  extern Class_Descriptor cd_S20541C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S20541C2, buf);
    S20541C2 *dp, &lv = *(dp=new (buf) S20541C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S20541C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20541C2)");
    check_base_class_offset(lv, (S20541C4*)(S20541C3*), ABISELECT(24,12), "S20541C2");
    check_base_class_offset(lv, (S20541C3*), ABISELECT(24,12), "S20541C2");
    check_field_offset(lv, s20541c2f0, ABISELECT(8,4), "S20541C2.s20541c2f0");
    check_field_offset(lv, s20541c2f1, ABISELECT(16,8), "S20541C2.s20541c2f1");
    test_class_info(&lv, &cd_S20541C2);
    dp->~S20541C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20541C2(Test_S20541C2, "S20541C2", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN8S20541C2C1Ev();
extern void _ZN8S20541C2D1Ev();
Name_Map name_map_S20541C2[] = {
  NSPAIR(_ZN8S20541C2C1Ev),
  NSPAIR(_ZN8S20541C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20541C4;
extern VTBL_ENTRY _ZTI8S20541C4[];
extern  VTBL_ENTRY _ZTV8S20541C4[];
extern Class_Descriptor cd_S20541C3;
extern VTBL_ENTRY _ZTI8S20541C3[];
extern  VTBL_ENTRY _ZTV8S20541C3[];
static Base_Class bases_S20541C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20541C4,    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_S20541C3,    ABISELECT(24,12), //bcp->offset
    9, //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 _ZTI8S20541C2[];
extern void _ZN8S20541C23v10Ev();
extern void _ZN8S20541C23v11Ev();
extern void _ZN8S20541C23v12Ev();
extern void _ZN8S20541C23v13Ev();
extern void _ZN8S20541C23v14Ev();
extern void _ZN8S20541C23v15Ev();
extern void _ZN8S20541C42v4Ev();
extern void _ZN8S20541C42v5Ev();
extern void _ZN8S20541C42v6Ev();
extern void _ZN8S20541C42v7Ev();
extern void _ZN8S20541C32v8Ev();
extern void _ZN8S20541C32v9Ev();
static  VTBL_ENTRY vtc_S20541C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20541C2[0]),
  (VTBL_ENTRY)&_ZN8S20541C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20541C2[0]),
  (VTBL_ENTRY)&_ZN8S20541C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v9Ev,
};
extern VTBL_ENTRY _ZTV8S20541C2[];
static  VTT_ENTRY vtt_S20541C2[] = {
  {&(_ZTV8S20541C2[3]),  3,23},
  {&(_ZTV8S20541C2[17]),  17,23},
};
extern VTBL_ENTRY _ZTI8S20541C2[];
extern  VTBL_ENTRY _ZTV8S20541C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20541C2[];
Class_Descriptor cd_S20541C2 = {  "S20541C2", // class name
  bases_S20541C2, 2,
  &(vtc_S20541C2[0]), // expected_vtbl_contents
  &(vtt_S20541C2[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI8S20541C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20541C2),23, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20541C2),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  S20541C5  {
  void *s20541c5f0;
  long s20541c5f1;
  virtual void  v16(); // _ZN8S20541C53v16Ev
  virtual void  v17(); // _ZN8S20541C53v17Ev
  ~S20541C5(); // tgen
  S20541C5(); // tgen
};
//SIG(-1 S20541C5) C1{ v1 v2 Fp Fl}


void  S20541C5 ::v16(){vfunc_called(this, "_ZN8S20541C53v16Ev");}
void  S20541C5 ::v17(){vfunc_called(this, "_ZN8S20541C53v17Ev");}
S20541C5 ::~S20541C5(){ note_dtor("S20541C5", this);} // tgen
S20541C5 ::S20541C5(){ note_ctor("S20541C5", this);} // tgen

static void Test_S20541C5()
{
  extern Class_Descriptor cd_S20541C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20541C5, buf);
    S20541C5 *dp, &lv = *(dp=new (buf) S20541C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20541C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20541C5)");
    check_field_offset(lv, s20541c5f0, ABISELECT(8,4), "S20541C5.s20541c5f0");
    check_field_offset(lv, s20541c5f1, ABISELECT(16,8), "S20541C5.s20541c5f1");
    test_class_info(&lv, &cd_S20541C5);
    dp->~S20541C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20541C5(Test_S20541C5, "S20541C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20541C5C1Ev();
extern void _ZN8S20541C5D1Ev();
Name_Map name_map_S20541C5[] = {
  NSPAIR(_ZN8S20541C5C1Ev),
  NSPAIR(_ZN8S20541C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20541C5[];
extern void _ZN8S20541C53v16Ev();
extern void _ZN8S20541C53v17Ev();
static  VTBL_ENTRY vtc_S20541C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20541C5[0]),
  (VTBL_ENTRY)&_ZN8S20541C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20541C53v17Ev,
};
extern VTBL_ENTRY _ZTI8S20541C5[];
extern  VTBL_ENTRY _ZTV8S20541C5[];
Class_Descriptor cd_S20541C5 = {  "S20541C5", // class name
  0,0,//no base classes
  &(vtc_S20541C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20541C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20541C5),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  S20541C1  : virtual S20541C2 , S20541C5 {
  virtual void  v1(); // _ZN8S20541C12v1Ev
  virtual void  v2(); // _ZN8S20541C12v2Ev
  virtual void  v3(); // _ZN8S20541C12v3Ev
  ~S20541C1(); // tgen
  S20541C1(); // tgen
};
//SIG(1 S20541C1) C1{ VBC2{ VBC3{ BC4{ v4 v5 v6 v7 Fi[10]} v8 v9 Fp} v10 v11 v12 v13 v14 v15 Fp Fi} BC5{ v16 v17 Fp Fl} v1 v2 v3}


void  S20541C1 ::v1(){vfunc_called(this, "_ZN8S20541C12v1Ev");}
void  S20541C1 ::v2(){vfunc_called(this, "_ZN8S20541C12v2Ev");}
void  S20541C1 ::v3(){vfunc_called(this, "_ZN8S20541C12v3Ev");}
S20541C1 ::~S20541C1(){ note_dtor("S20541C1", this);} // tgen
S20541C1 ::S20541C1(){ note_ctor("S20541C1", this);} // tgen

static void Test_S20541C1()
{
  extern Class_Descriptor cd_S20541C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S20541C1, buf);
    S20541C1 *dp, &lv = *(dp=new (buf) S20541C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S20541C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20541C1)");
    check_base_class_offset(lv, (S20541C4*)(S20541C3*), ABISELECT(48,24), "S20541C1");
    check_base_class_offset(lv, (S20541C3*)(S20541C2*), ABISELECT(48,24), "S20541C1");
    check_base_class_offset(lv, (S20541C2*), ABISELECT(24,12), "S20541C1");
    check_base_class_offset(lv, (S20541C5*), 0, "S20541C1");
    test_class_info(&lv, &cd_S20541C1);
    dp->~S20541C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20541C1(Test_S20541C1, "S20541C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN8S20541C1C1Ev();
extern void _ZN8S20541C1D1Ev();
Name_Map name_map_S20541C1[] = {
  NSPAIR(_ZN8S20541C1C1Ev),
  NSPAIR(_ZN8S20541C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20541C4;
extern VTBL_ENTRY _ZTI8S20541C4[];
extern  VTBL_ENTRY _ZTV8S20541C4[];
extern Class_Descriptor cd_S20541C3;
extern VTBL_ENTRY _ZTI8S20541C3[];
extern  VTBL_ENTRY _ZTV8S20541C3[];
extern Class_Descriptor cd_S20541C2;
extern VTBL_ENTRY _ZTI8S20541C2[];
extern  VTBL_ENTRY _ZTV8S20541C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20541C2[];
extern Class_Descriptor cd_S20541C5;
extern VTBL_ENTRY _ZTI8S20541C5[];
extern  VTBL_ENTRY _ZTV8S20541C5[];
static Base_Class bases_S20541C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20541C4,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20541C3,    ABISELECT(48,24), //bcp->offset
    24, //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
    2, //immediately_derived
  0, 1},
  {&cd_S20541C2,    ABISELECT(24,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20541C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20541C1[];
extern void _ZN8S20541C53v16Ev();
extern void _ZN8S20541C53v17Ev();
extern void _ZN8S20541C12v1Ev();
extern void _ZN8S20541C12v2Ev();
extern void _ZN8S20541C12v3Ev();
extern void _ZN8S20541C23v10Ev();
extern void _ZN8S20541C23v11Ev();
extern void _ZN8S20541C23v12Ev();
extern void _ZN8S20541C23v13Ev();
extern void _ZN8S20541C23v14Ev();
extern void _ZN8S20541C23v15Ev();
extern void _ZN8S20541C42v4Ev();
extern void _ZN8S20541C42v5Ev();
extern void _ZN8S20541C42v6Ev();
extern void _ZN8S20541C42v7Ev();
extern void _ZN8S20541C32v8Ev();
extern void _ZN8S20541C32v9Ev();
static  VTBL_ENTRY vtc_S20541C1[] = {
  ABISELECT(48,24),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20541C1[0]),
  (VTBL_ENTRY)&_ZN8S20541C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20541C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20541C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20541C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20541C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20541C1[0]),
  (VTBL_ENTRY)&_ZN8S20541C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20541C1[0]),
  (VTBL_ENTRY)&_ZN8S20541C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v9Ev,
};
extern VTBL_ENTRY _ZTV8S20541C1[];
extern void _ZN8S20541C23v10Ev();
extern void _ZN8S20541C23v11Ev();
extern void _ZN8S20541C23v12Ev();
extern void _ZN8S20541C23v13Ev();
extern void _ZN8S20541C23v14Ev();
extern void _ZN8S20541C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20541C2__8S20541C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20541C2[0]),
  (VTBL_ENTRY)&_ZN8S20541C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20541C23v15Ev,
};
extern void _ZN8S20541C42v4Ev();
extern void _ZN8S20541C42v5Ev();
extern void _ZN8S20541C42v6Ev();
extern void _ZN8S20541C42v7Ev();
extern void _ZN8S20541C32v8Ev();
extern void _ZN8S20541C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20541C3__8S20541C2__8S20541C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20541C2[0]),
  (VTBL_ENTRY)&_ZN8S20541C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20541C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20541C32v9Ev,
};
static  VTT_ENTRY vtt_S20541C1[] = {
  {&(_ZTV8S20541C1[4]),  4,38},
  {&(_ZTV8S20541C1[18]),  18,38},
  {&(_ZTV8S20541C1[32]),  32,38},
  {&(_tg__ZTV8S20541C2__8S20541C1[3]),  3,9},
  {&(_tg__ZTV8S20541C3__8S20541C2__8S20541C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20541C1[];
extern  VTBL_ENTRY _ZTV8S20541C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20541C1[];
Class_Descriptor cd_S20541C1 = {  "S20541C1", // class name
  bases_S20541C1, 4,
  &(vtc_S20541C1[0]), // expected_vtbl_contents
  &(vtt_S20541C1[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI8S20541C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20541C1),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20541C1),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9318C2  {
  ::S22028C11_nt s9318c2f0;
  int s9318c2f1[2];
  char s9318c2f2;
  virtual  ~S9318C2(); // _ZN7S9318C2D1Ev
  virtual void  v3(); // _ZN7S9318C22v3Ev
  virtual void  v4(); // _ZN7S9318C22v4Ev
  virtual void  v5(); // _ZN7S9318C22v5Ev
  S9318C2(); // tgen
};
//SIG(-1 S9318C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9318C2 ::~S9318C2(){ note_dtor("S9318C2", this);}
void  S9318C2 ::v3(){vfunc_called(this, "_ZN7S9318C22v3Ev");}
void  S9318C2 ::v4(){vfunc_called(this, "_ZN7S9318C22v4Ev");}
void  S9318C2 ::v5(){vfunc_called(this, "_ZN7S9318C22v5Ev");}
S9318C2 ::S9318C2(){ note_ctor("S9318C2", this);} // tgen

static void Test_S9318C2()
{
  extern Class_Descriptor cd_S9318C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9318C2, buf);
    S9318C2 *dp, &lv = *(dp=new (buf) S9318C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9318C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9318C2)");
    check_field_offset(lv, s9318c2f0, ABISELECT(8,4), "S9318C2.s9318c2f0");
    check_field_offset(lv, s9318c2f1, ABISELECT(24,16), "S9318C2.s9318c2f1");
    check_field_offset(lv, s9318c2f2, ABISELECT(32,24), "S9318C2.s9318c2f2");
    test_class_info(&lv, &cd_S9318C2);
    dp->~S9318C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9318C2(Test_S9318C2, "S9318C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9318C2C1Ev();
extern void _ZN7S9318C2D1Ev();
Name_Map name_map_S9318C2[] = {
  NSPAIR(_ZN7S9318C2C1Ev),
  NSPAIR(_ZN7S9318C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9318C2[];
extern void _ZN7S9318C2D1Ev();
extern void _ZN7S9318C2D0Ev();
extern void _ZN7S9318C22v3Ev();
extern void _ZN7S9318C22v4Ev();
extern void _ZN7S9318C22v5Ev();
static  VTBL_ENTRY vtc_S9318C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9318C2[0]),
  (VTBL_ENTRY)&_ZN7S9318C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9318C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9318C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9318C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9318C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9318C2[];
extern  VTBL_ENTRY _ZTV7S9318C2[];
Class_Descriptor cd_S9318C2 = {  "S9318C2", // class name
  0,0,//no base classes
  &(vtc_S9318C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9318C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9318C2),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  S9318C1  : S9318C2 {
  int s9318c1f0;
  ::S22028C11_nt s9318c1f1;
  ::S22028C11_nt s9318c1f2;
  int s9318c1f3[3];
  ::S9299C6 s9318c1f4;
  virtual  ~S9318C1(); // _ZN7S9318C1D1Ev
  virtual void  v1(); // _ZN7S9318C12v1Ev
  virtual void  v2(); // _ZN7S9318C12v2Ev
  S9318C1(); // tgen
};
//SIG(1 S9318C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi FC3 FC3 Fi[3] FC5{ m Fi Fc FC3 FC3 FC3 FC3}}


 S9318C1 ::~S9318C1(){ note_dtor("S9318C1", this);}
void  S9318C1 ::v1(){vfunc_called(this, "_ZN7S9318C12v1Ev");}
void  S9318C1 ::v2(){vfunc_called(this, "_ZN7S9318C12v2Ev");}
S9318C1 ::S9318C1(){ note_ctor("S9318C1", this);} // tgen

static void Test_S9318C1()
{
  extern Class_Descriptor cd_S9318C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,32)];
    init_test(&cd_S9318C1, buf);
    S9318C1 *dp, &lv = *(dp=new (buf) S9318C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,124), "sizeof(S9318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9318C1)");
    check_base_class_offset(lv, (S9318C2*), 0, "S9318C1");
    check_field_offset(lv, s9318c1f0, ABISELECT(36,28), "S9318C1.s9318c1f0");
    check_field_offset(lv, s9318c1f1, ABISELECT(40,32), "S9318C1.s9318c1f1");
    check_field_offset(lv, s9318c1f2, ABISELECT(56,44), "S9318C1.s9318c1f2");
    check_field_offset(lv, s9318c1f3, ABISELECT(72,56), "S9318C1.s9318c1f3");
    check_field_offset(lv, s9318c1f4, ABISELECT(88,68), "S9318C1.s9318c1f4");
    test_class_info(&lv, &cd_S9318C1);
    dp->~S9318C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9318C1(Test_S9318C1, "S9318C1", ABISELECT(160,124));

#else // __cplusplus

extern void _ZN7S9318C1C1Ev();
extern void _ZN7S9318C1D1Ev();
Name_Map name_map_S9318C1[] = {
  NSPAIR(_ZN7S9318C1C1Ev),
  NSPAIR(_ZN7S9318C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9318C2;
extern VTBL_ENTRY _ZTI7S9318C2[];
extern  VTBL_ENTRY _ZTV7S9318C2[];
static Base_Class bases_S9318C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9318C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9318C1[];
extern void _ZN7S9318C1D1Ev();
extern void _ZN7S9318C1D0Ev();
extern void _ZN7S9318C22v3Ev();
extern void _ZN7S9318C22v4Ev();
extern void _ZN7S9318C22v5Ev();
extern void _ZN7S9318C12v1Ev();
extern void _ZN7S9318C12v2Ev();
static  VTBL_ENTRY vtc_S9318C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9318C1[0]),
  (VTBL_ENTRY)&_ZN7S9318C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9318C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9318C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9318C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9318C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9318C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9318C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9318C1[];
extern  VTBL_ENTRY _ZTV7S9318C1[];
Class_Descriptor cd_S9318C1 = {  "S9318C1", // class name
  bases_S9318C1, 1,
  &(vtc_S9318C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,124), // object size
  NSPAIRA(_ZTI7S9318C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9318C1),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  S6679C2_nt  {
  void *s6679c2f0[9];
  short s6679c2f1;
  __tsi64 s6679c2f2;
  virtual void  v3(); // _ZN10S6679C2_nt2v3Ev
  virtual void  v4(); // _ZN10S6679C2_nt2v4Ev
  virtual void  v5(); // _ZN10S6679C2_nt2v5Ev
  ~S6679C2_nt(); // tgen
  S6679C2_nt(); // tgen
};
//SIG(-1 S6679C2_nt) C1{ v1 v2 v3 Fp[9] Fs FL}


void  S6679C2_nt ::v3(){vfunc_called(this, "_ZN10S6679C2_nt2v3Ev");}
void  S6679C2_nt ::v4(){vfunc_called(this, "_ZN10S6679C2_nt2v4Ev");}
void  S6679C2_nt ::v5(){vfunc_called(this, "_ZN10S6679C2_nt2v5Ev");}
S6679C2_nt ::~S6679C2_nt(){ note_dtor("S6679C2_nt", this);} // tgen
S6679C2_nt ::S6679C2_nt(){ note_ctor("S6679C2_nt", this);} // tgen

//skip512 S6679C2_nt

#else // __cplusplus

extern void _ZN10S6679C2_ntC1Ev();
extern void _ZN10S6679C2_ntD1Ev();
Name_Map name_map_S6679C2_nt[] = {
  NSPAIR(_ZN10S6679C2_ntC1Ev),
  NSPAIR(_ZN10S6679C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6679C2_nt[];
extern void _ZN10S6679C2_nt2v3Ev();
extern void _ZN10S6679C2_nt2v4Ev();
extern void _ZN10S6679C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S6679C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6679C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6679C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6679C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S6679C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S6679C2_nt[];
VTBL_ENTRY *P__ZTI10S6679C2_nt = _ZTI10S6679C2_nt; 
extern  VTBL_ENTRY _ZTV10S6679C2_nt[];
Class_Descriptor cd_S6679C2_nt = {  "S6679C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6679C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI10S6679C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6679C2_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  S6679C4  {
  __tsi64 s6679c4f0:56;
  virtual  ~S6679C4(); // _ZN7S6679C4D1Ev
  virtual void  v6(); // _ZN7S6679C42v6Ev
  S6679C4(); // tgen
};
//SIG(-1 S6679C4) C1{ vd v1 FL:56}


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

static void Test_S6679C4()
{
  extern Class_Descriptor cd_S6679C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6679C4, buf);
    S6679C4 *dp, &lv = *(dp=new (buf) S6679C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6679C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6679C4)");
    set_bf_and_test(lv, s6679c4f0, ABISELECT(8,4), 0, 56, 1, "S6679C4");
    set_bf_and_test(lv, s6679c4f0, ABISELECT(8,4), 0, 56, hide_sll(1LL<<55), "S6679C4");
    test_class_info(&lv, &cd_S6679C4);
    dp->~S6679C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6679C4(Test_S6679C4, "S6679C4", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S6679C4C1Ev();
extern void _ZN7S6679C4D1Ev();
Name_Map name_map_S6679C4[] = {
  NSPAIR(_ZN7S6679C4C1Ev),
  NSPAIR(_ZN7S6679C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6679C4[];
extern void _ZN7S6679C4D1Ev();
extern void _ZN7S6679C4D0Ev();
extern void _ZN7S6679C42v6Ev();
static  VTBL_ENTRY vtc_S6679C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6679C4[0]),
  (VTBL_ENTRY)&_ZN7S6679C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6679C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6679C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S6679C4[];
extern  VTBL_ENTRY _ZTV7S6679C4[];
Class_Descriptor cd_S6679C4 = {  "S6679C4", // class name
  0,0,//no base classes
  &(vtc_S6679C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6679C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6679C4),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  S6679C5_nt  {
  virtual void  v7(); // _ZN10S6679C5_nt2v7Ev
  virtual void  v8(); // _ZN10S6679C5_nt2v8Ev
  ~S6679C5_nt(); // tgen
  S6679C5_nt(); // tgen
};
//SIG(-1 S6679C5_nt) C1{ v1 v2}


void  S6679C5_nt ::v7(){vfunc_called(this, "_ZN10S6679C5_nt2v7Ev");}
void  S6679C5_nt ::v8(){vfunc_called(this, "_ZN10S6679C5_nt2v8Ev");}
S6679C5_nt ::~S6679C5_nt(){ note_dtor("S6679C5_nt", this);} // tgen
S6679C5_nt ::S6679C5_nt(){ note_ctor("S6679C5_nt", this);} // tgen

//skip512 S6679C5_nt

#else // __cplusplus

extern void _ZN10S6679C5_ntC1Ev();
extern void _ZN10S6679C5_ntD1Ev();
Name_Map name_map_S6679C5_nt[] = {
  NSPAIR(_ZN10S6679C5_ntC1Ev),
  NSPAIR(_ZN10S6679C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6679C5_nt[];
extern void _ZN10S6679C5_nt2v7Ev();
extern void _ZN10S6679C5_nt2v8Ev();
static  VTBL_ENTRY vtc_S6679C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6679C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S6679C5_nt[];
VTBL_ENTRY *P__ZTI10S6679C5_nt = _ZTI10S6679C5_nt; 
extern  VTBL_ENTRY _ZTV10S6679C5_nt[];
Class_Descriptor cd_S6679C5_nt = {  "S6679C5_nt", // class name
  0,0,//no base classes
  &(vtc_S6679C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6679C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6679C5_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  S6679C3  : virtual S6679C4 , virtual S6679C5_nt {
  virtual  ~S6679C3(); // _ZN7S6679C3D2Ev
  virtual void  v9(); // _ZN7S6679C32v9Ev
  virtual void  v10(); // _ZN7S6679C33v10Ev
  virtual void  v11(); // _ZN7S6679C33v11Ev
  virtual void  v12(); // _ZN7S6679C33v12Ev
  virtual void  v13(); // _ZN7S6679C33v13Ev
  virtual void  v14(); // _ZN7S6679C33v14Ev
  S6679C3(); // tgen
};
//SIG(-1 S6679C3) C1{ VBC2{ vd v7 FL:56} VBC3{ v8 v9} vd v1 v2 v3 v4 v5 v6}


 S6679C3 ::~S6679C3(){ note_dtor("S6679C3", this);}
void  S6679C3 ::v9(){vfunc_called(this, "_ZN7S6679C32v9Ev");}
void  S6679C3 ::v10(){vfunc_called(this, "_ZN7S6679C33v10Ev");}
void  S6679C3 ::v11(){vfunc_called(this, "_ZN7S6679C33v11Ev");}
void  S6679C3 ::v12(){vfunc_called(this, "_ZN7S6679C33v12Ev");}
void  S6679C3 ::v13(){vfunc_called(this, "_ZN7S6679C33v13Ev");}
void  S6679C3 ::v14(){vfunc_called(this, "_ZN7S6679C33v14Ev");}
S6679C3 ::S6679C3(){ note_ctor("S6679C3", this);} // tgen

static void Test_S6679C3()
{
  extern Class_Descriptor cd_S6679C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6679C3, buf);
    S6679C3 *dp, &lv = *(dp=new (buf) S6679C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6679C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6679C3)");
    check_base_class_offset(lv, (S6679C4*), ABISELECT(8,4), "S6679C3");
    check_base_class_offset(lv, (S6679C5_nt*), 0, "S6679C3");
    test_class_info(&lv, &cd_S6679C3);
    dp->~S6679C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6679C3(Test_S6679C3, "S6679C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6679C3C1Ev();
extern void _ZN7S6679C3D2Ev();
Name_Map name_map_S6679C3[] = {
  NSPAIR(_ZN7S6679C3C1Ev),
  NSPAIR(_ZN7S6679C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6679C4;
extern VTBL_ENTRY _ZTI7S6679C4[];
extern  VTBL_ENTRY _ZTV7S6679C4[];
extern Class_Descriptor cd_S6679C5_nt;
extern VTBL_ENTRY _ZTI10S6679C5_nt[];
extern  VTBL_ENTRY _ZTV10S6679C5_nt[];
static Base_Class bases_S6679C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6679C4,    ABISELECT(8,4), //bcp->offset
    16, //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_S6679C5_nt,    0, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6679C3[];
extern void _ZN10S6679C5_nt2v7Ev();
extern void _ZN10S6679C5_nt2v8Ev();
extern void _ZN7S6679C3D1Ev();
extern void _ZN7S6679C3D0Ev();
extern void _ZN7S6679C32v9Ev();
extern void _ZN7S6679C33v10Ev();
extern void _ZN7S6679C33v11Ev();
extern void _ZN7S6679C33v12Ev();
extern void _ZN7S6679C33v13Ev();
extern void _ZN7S6679C33v14Ev();
extern void ABISELECT(_ZTv0_n24_N7S6679C3D1Ev,_ZTv0_n12_N7S6679C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S6679C3D1Ev,_ZThn4_N7S6679C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6679C3D0Ev,_ZTv0_n12_N7S6679C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S6679C3D0Ev,_ZThn4_N7S6679C3D0Ev)() __attribute__((weak));
extern void _ZN7S6679C42v6Ev();
static  VTBL_ENTRY vtc_S6679C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6679C3[0]),
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S6679C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6679C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6679C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v14Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6679C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6679C3D1Ev,_ZTv0_n12_N7S6679C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6679C3D0Ev,_ZTv0_n12_N7S6679C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6679C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S6679C3[];
static  VTT_ENTRY vtt_S6679C3[] = {
  {&(_ZTV7S6679C3[6]),  6,23},
  {&(_ZTV7S6679C3[20]),  20,23},
  {&(_ZTV7S6679C3[6]),  6,23},
};
extern VTBL_ENTRY _ZTI7S6679C3[];
extern  VTBL_ENTRY _ZTV7S6679C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6679C3[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6679C3D0Ev,_ZTv0_n12_N7S6679C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S6679C3D0Ev,_ZThn4_N7S6679C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6679C3D1Ev,_ZTv0_n12_N7S6679C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S6679C3D1Ev,_ZThn4_N7S6679C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6679C3 = {  "S6679C3", // class name
  bases_S6679C3, 2,
  &(vtc_S6679C3[0]), // expected_vtbl_contents
  &(vtt_S6679C3[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6679C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6679C3),23, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6679C3),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6679C1  : S6679C2_nt , S6679C3 {
  int s6679c1f0;
  void *s6679c1f1;
  virtual void  v1(); // _ZN7S6679C12v1Ev
  virtual void  v2(); // _ZN7S6679C12v2Ev
  ~S6679C1(); // tgen
  S6679C1(); // tgen
};
//SIG(1 S6679C1) C1{ BC2{ v3 v4 v5 Fp[9] Fs FL} BC3{ VBC4{ vd v6 FL:56} VBC5{ v7 v8} vd v9 v10 v11 v12 v13 v14} v1 v2 Fi Fp}


void  S6679C1 ::v1(){vfunc_called(this, "_ZN7S6679C12v1Ev");}
void  S6679C1 ::v2(){vfunc_called(this, "_ZN7S6679C12v2Ev");}
S6679C1 ::~S6679C1(){ note_dtor("S6679C1", this);} // tgen
S6679C1 ::S6679C1(){ note_ctor("S6679C1", this);} // tgen

static void Test_S6679C1()
{
  extern Class_Descriptor cd_S6679C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,20)];
    init_test(&cd_S6679C1, buf);
    S6679C1 *dp, &lv = *(dp=new (buf) S6679C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,76), "sizeof(S6679C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6679C1)");
    check_base_class_offset(lv, (S6679C2_nt*), 0, "S6679C1");
    check_base_class_offset(lv, (S6679C4*)(S6679C3*), ABISELECT(120,64), "S6679C1");
    check_base_class_offset(lv, (S6679C5_nt*)(S6679C3*), ABISELECT(96,52), "S6679C1");
    check_base_class_offset(lv, (S6679C3*), ABISELECT(96,52), "S6679C1");
    check_field_offset(lv, s6679c1f0, ABISELECT(104,56), "S6679C1.s6679c1f0");
    check_field_offset(lv, s6679c1f1, ABISELECT(112,60), "S6679C1.s6679c1f1");
    test_class_info(&lv, &cd_S6679C1);
    dp->~S6679C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6679C1(Test_S6679C1, "S6679C1", ABISELECT(136,76));

#else // __cplusplus

extern void _ZN7S6679C1C1Ev();
extern void _ZN7S6679C1D1Ev();
Name_Map name_map_S6679C1[] = {
  NSPAIR(_ZN7S6679C1C1Ev),
  NSPAIR(_ZN7S6679C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6679C2_nt;
extern VTBL_ENTRY _ZTI10S6679C2_nt[];
extern  VTBL_ENTRY _ZTV10S6679C2_nt[];
extern Class_Descriptor cd_S6679C4;
extern VTBL_ENTRY _ZTI7S6679C4[];
extern  VTBL_ENTRY _ZTV7S6679C4[];
extern Class_Descriptor cd_S6679C5_nt;
extern VTBL_ENTRY _ZTI10S6679C5_nt[];
extern  VTBL_ENTRY _ZTV10S6679C5_nt[];
extern Class_Descriptor cd_S6679C3;
extern VTBL_ENTRY _ZTI7S6679C3[];
extern  VTBL_ENTRY _ZTV7S6679C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6679C3[];
static Base_Class bases_S6679C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6679C2_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_S6679C4,    ABISELECT(120,64), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6679C5_nt,    ABISELECT(96,52), //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6679C3,    ABISELECT(96,52), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6679C1[];
extern void _ZN10S6679C2_nt2v3Ev();
extern void _ZN10S6679C2_nt2v4Ev();
extern void _ZN10S6679C2_nt2v5Ev();
extern void _ZN7S6679C12v1Ev();
extern void _ZN7S6679C12v2Ev();
extern void _ZN7S6679C1D1Ev();
extern void _ZN7S6679C1D0Ev();
extern void _ZN10S6679C5_nt2v7Ev();
extern void _ZN10S6679C5_nt2v8Ev();
extern void ABISELECT(_ZThn96_N7S6679C1D1Ev,_ZThn52_N7S6679C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S6679C1D0Ev,_ZThn52_N7S6679C1D0Ev)();
extern void _ZN7S6679C32v9Ev();
extern void _ZN7S6679C33v10Ev();
extern void _ZN7S6679C33v11Ev();
extern void _ZN7S6679C33v12Ev();
extern void _ZN7S6679C33v13Ev();
extern void _ZN7S6679C33v14Ev();
extern void ABISELECT(_ZTv0_n24_N7S6679C1D1Ev,_ZTv0_n12_N7S6679C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S6679C1D1Ev,_ZThn64_N7S6679C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6679C1D0Ev,_ZTv0_n12_N7S6679C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S6679C1D0Ev,_ZThn64_N7S6679C1D0Ev)() __attribute__((weak));
extern void _ZN7S6679C42v6Ev();
static  VTBL_ENTRY vtc_S6679C1[] = {
  ABISELECT(96,52),
  ABISELECT(120,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S6679C1[0]),
  (VTBL_ENTRY)&_ZN10S6679C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S6679C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S6679C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S6679C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6679C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6679C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6679C1D0Ev,
  0,
  ABISELECT(24,12),
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S6679C1[0]),
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S6679C1D1Ev,_ZThn52_N7S6679C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S6679C1D0Ev,_ZThn52_N7S6679C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6679C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v14Ev,
  0,
  ABISELECT(-120,-64),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S6679C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6679C1D1Ev,_ZTv0_n12_N7S6679C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6679C1D0Ev,_ZTv0_n12_N7S6679C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6679C42v6Ev,
};
extern VTBL_ENTRY _ZTV7S6679C1[];
extern void _ZN10S6679C5_nt2v7Ev();
extern void _ZN10S6679C5_nt2v8Ev();
extern void _ZN7S6679C3D1Ev();
extern void _ZN7S6679C3D0Ev();
extern void _ZN7S6679C32v9Ev();
extern void _ZN7S6679C33v10Ev();
extern void _ZN7S6679C33v11Ev();
extern void _ZN7S6679C33v12Ev();
extern void _ZN7S6679C33v13Ev();
extern void _ZN7S6679C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S6679C3__7S6679C1[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6679C3[0]),
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S6679C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S6679C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6679C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6679C32v9Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6679C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6679C3D1Ev,_ZTv0_n12_N7S6679C3D1Ev)();
extern void ABISELECT(_ZThn24_N7S6679C3D1Ev,_ZThn12_N7S6679C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6679C3D0Ev,_ZTv0_n12_N7S6679C3D0Ev)();
extern void ABISELECT(_ZThn24_N7S6679C3D0Ev,_ZThn12_N7S6679C3D0Ev)() __attribute__((weak));
extern void _ZN7S6679C42v6Ev();
static  VTBL_ENTRY _tg__ZTV7S6679C4__7S6679C3__7S6679C1[] = {
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6679C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6679C3D1Ev,_ZTv0_n12_N7S6679C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6679C3D0Ev,_ZTv0_n12_N7S6679C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6679C42v6Ev,
};
static  VTT_ENTRY vtt_S6679C1[] = {
  {&(_ZTV7S6679C1[4]),  4,34},
  {&(_tg__ZTV7S6679C3__7S6679C1[6]),  6,16},
  {&(_tg__ZTV7S6679C4__7S6679C3__7S6679C1[4]),  4,7},
  {&(_tg__ZTV7S6679C3__7S6679C1[6]),  6,16},
  {&(_ZTV7S6679C1[17]),  17,34},
  {&(_ZTV7S6679C1[31]),  31,34},
  {&(_ZTV7S6679C1[17]),  17,34},
};
extern VTBL_ENTRY _ZTI7S6679C1[];
extern  VTBL_ENTRY _ZTV7S6679C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6679C1[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6679C3D0Ev,_ZTv0_n12_N7S6679C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6679C3D0Ev,_ZThn12_N7S6679C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6679C3D1Ev,_ZTv0_n12_N7S6679C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S6679C3D1Ev,_ZThn12_N7S6679C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6679C1D0Ev,_ZTv0_n12_N7S6679C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S6679C1D0Ev,_ZThn64_N7S6679C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6679C1D1Ev,_ZTv0_n12_N7S6679C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S6679C1D1Ev,_ZThn64_N7S6679C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6679C1 = {  "S6679C1", // class name
  bases_S6679C1, 4,
  &(vtc_S6679C1[0]), // expected_vtbl_contents
  &(vtt_S6679C1[0]), // expected_vtt_contents
  ABISELECT(136,76), // object size
  NSPAIRA(_ZTI7S6679C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6679C1),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6679C1),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5567C5  {
  long double s5567c5f0;
  __tsi64 s5567c5f1;
  virtual void  v3(); // _ZN7S5567C52v3Ev
  virtual void  v4(); // _ZN7S5567C52v4Ev
  virtual void  v5(); // _ZN7S5567C52v5Ev
  ~S5567C5(); // tgen
  S5567C5(); // tgen
};
//SIG(-1 S5567C5) C1{ v1 v2 v3 FD FL}


void  S5567C5 ::v3(){vfunc_called(this, "_ZN7S5567C52v3Ev");}
void  S5567C5 ::v4(){vfunc_called(this, "_ZN7S5567C52v4Ev");}
void  S5567C5 ::v5(){vfunc_called(this, "_ZN7S5567C52v5Ev");}
S5567C5 ::~S5567C5(){ note_dtor("S5567C5", this);} // tgen
S5567C5 ::S5567C5(){ note_ctor("S5567C5", this);} // tgen

static void Test_S5567C5()
{
  extern Class_Descriptor cd_S5567C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S5567C5, buf);
    S5567C5 *dp, &lv = *(dp=new (buf) S5567C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S5567C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5567C5)");
    check_field_offset(lv, s5567c5f0, ABISELECT(16,4), "S5567C5.s5567c5f0");
    check_field_offset(lv, s5567c5f1, ABISELECT(32,16), "S5567C5.s5567c5f1");
    test_class_info(&lv, &cd_S5567C5);
    dp->~S5567C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5567C5(Test_S5567C5, "S5567C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S5567C5C1Ev();
extern void _ZN7S5567C5D1Ev();
Name_Map name_map_S5567C5[] = {
  NSPAIR(_ZN7S5567C5C1Ev),
  NSPAIR(_ZN7S5567C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5567C5[];
extern void _ZN7S5567C52v3Ev();
extern void _ZN7S5567C52v4Ev();
extern void _ZN7S5567C52v5Ev();
static  VTBL_ENTRY vtc_S5567C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5567C5[0]),
  (VTBL_ENTRY)&_ZN7S5567C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v5Ev,
};
extern VTBL_ENTRY _ZTI7S5567C5[];
extern  VTBL_ENTRY _ZTV7S5567C5[];
Class_Descriptor cd_S5567C5 = {  "S5567C5", // class name
  0,0,//no base classes
  &(vtc_S5567C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S5567C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5567C5),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  S5567C6  : virtual S5567C5 , virtual S20605C3 {
  int s5567c6f0;
  ~S5567C6(); // tgen
  S5567C6(); // tgen
};
//SIG(-1 S5567C6) C1{ VBC2{ v1 v2 v3 FD FL} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S5567C6()
{
  extern Class_Descriptor cd_S5567C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,70)];
    init_test(&cd_S5567C6, buf);
    S5567C6 *dp, &lv = *(dp=new (buf) S5567C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,276), "sizeof(S5567C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5567C6)");
    check_base_class_offset(lv, (S5567C5*), ABISELECT(16,8), "S5567C6");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,32), "S5567C6");
    check_field_offset(lv, s5567c6f0, ABISELECT(8,4), "S5567C6.s5567c6f0");
    test_class_info(&lv, &cd_S5567C6);
    dp->~S5567C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5567C6(Test_S5567C6, "S5567C6", ABISELECT(384,276));

#else // __cplusplus

extern void _ZN7S5567C6C1Ev();
extern void _ZN7S5567C6D1Ev();
Name_Map name_map_S5567C6[] = {
  NSPAIR(_ZN7S5567C6C1Ev),
  NSPAIR(_ZN7S5567C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5567C5;
extern VTBL_ENTRY _ZTI7S5567C5[];
extern  VTBL_ENTRY _ZTV7S5567C5[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S5567C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5567C5,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5567C6[];
extern void _ZN7S5567C52v3Ev();
extern void _ZN7S5567C52v4Ev();
extern void _ZN7S5567C52v5Ev();
static  VTBL_ENTRY vtc_S5567C6[] = {
  ABISELECT(56,32),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5567C6[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5567C6[0]),
  (VTBL_ENTRY)&_ZN7S5567C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v5Ev,
};
extern VTBL_ENTRY _ZTV7S5567C6[];
static  VTT_ENTRY vtt_S5567C6[] = {
  {&(_ZTV7S5567C6[4]),  4,12},
  {&(_ZTV7S5567C6[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S5567C6[];
extern  VTBL_ENTRY _ZTV7S5567C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5567C6[];
Class_Descriptor cd_S5567C6 = {  "S5567C6", // class name
  bases_S5567C6, 2,
  &(vtc_S5567C6[0]), // expected_vtbl_contents
  &(vtt_S5567C6[0]), // expected_vtt_contents
  ABISELECT(384,276), // object size
  NSPAIRA(_ZTI7S5567C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5567C6),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5567C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5567C1  : S20605C3 , virtual S5567C5 , virtual S5567C6 {
  int s5567c1f0;
  long double s5567c1f1;
  virtual void  v1(); // _ZN7S5567C12v1Ev
  virtual void  v2(); // _ZN7S5567C12v2Ev
  ~S5567C1(); // tgen
  S5567C1(); // tgen
};
//SIG(1 S5567C1) C1{ BC2{ m Fc FC3{ VBC4{ m Fs[2]} FC4 Fs Fi Fc}[10]} VBC5{ v3 v4 v5 FD FL} VBC6{ VBC5 VBC2 Fi} v1 v2 Fi FD}


void  S5567C1 ::v1(){vfunc_called(this, "_ZN7S5567C12v1Ev");}
void  S5567C1 ::v2(){vfunc_called(this, "_ZN7S5567C12v2Ev");}
S5567C1 ::~S5567C1(){ note_dtor("S5567C1", this);} // tgen
S5567C1 ::S5567C1(){ note_ctor("S5567C1", this);} // tgen

static void Test_S5567C1()
{
  extern Class_Descriptor cd_S5567C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(48,136)];
    init_test(&cd_S5567C1, buf);
    S5567C1 *dp, &lv = *(dp=new (buf) S5567C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(752,540), "sizeof(S5567C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5567C1)");
    /*is_ambiguous_... S5567C1::S20605C3 */ AMB_check_base_class_offset(lv, (S20605C3*), ABISELECT(8,4), "S5567C1");
    check_base_class_offset(lv, (S5567C5*), ABISELECT(368,264), "S5567C1");
    check_base_class_offset(lv, (S5567C5*)(S5567C6*), ABISELECT(368,264), "S5567C1");
    check_base_class_offset(lv, (S20605C3*)(S5567C6*), ABISELECT(424,296), "S5567C1");
    check_base_class_offset(lv, (S5567C6*), ABISELECT(408,288), "S5567C1");
    check_field_offset(lv, s5567c1f0, ABISELECT(336,248), "S5567C1.s5567c1f0");
    check_field_offset(lv, s5567c1f1, ABISELECT(352,252), "S5567C1.s5567c1f1");
    test_class_info(&lv, &cd_S5567C1);
    dp->~S5567C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5567C1(Test_S5567C1, "S5567C1", ABISELECT(752,540));

#else // __cplusplus

extern void _ZN7S5567C1C1Ev();
extern void _ZN7S5567C1D1Ev();
Name_Map name_map_S5567C1[] = {
  NSPAIR(_ZN7S5567C1C1Ev),
  NSPAIR(_ZN7S5567C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S5567C5;
extern VTBL_ENTRY _ZTI7S5567C5[];
extern  VTBL_ENTRY _ZTV7S5567C5[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S5567C6;
extern VTBL_ENTRY _ZTI7S5567C6[];
extern  VTBL_ENTRY _ZTV7S5567C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5567C6[];
static Base_Class bases_S5567C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5567C5,    ABISELECT(368,264), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(424,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5567C6,    ABISELECT(408,288), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5567C1[];
extern void _ZN7S5567C12v1Ev();
extern void _ZN7S5567C12v2Ev();
extern void _ZN7S5567C52v3Ev();
extern void _ZN7S5567C52v4Ev();
extern void _ZN7S5567C52v5Ev();
static  VTBL_ENTRY vtc_S5567C1[] = {
  ABISELECT(424,296),
  ABISELECT(408,288),
  ABISELECT(368,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S5567C1[0]),
  (VTBL_ENTRY)&_ZN7S5567C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5567C12v2Ev,
  0,
  0,
  0,
  ABISELECT(-368,-264),
  (VTBL_ENTRY)&(_ZTI7S5567C1[0]),
  (VTBL_ENTRY)&_ZN7S5567C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v5Ev,
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  ABISELECT(-408,-288),
  (VTBL_ENTRY)&(_ZTI7S5567C1[0]),
};
extern VTBL_ENTRY _ZTV7S5567C1[];
static  VTBL_ENTRY _tg__ZTV7S5567C6__7S5567C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S5567C6[0]),
};
extern void _ZN7S5567C52v3Ev();
extern void _ZN7S5567C52v4Ev();
extern void _ZN7S5567C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S5567C5__7S5567C6__7S5567C1[] = {
  0,
  0,
  0,
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S5567C6[0]),
  (VTBL_ENTRY)&_ZN7S5567C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5567C52v5Ev,
};
static  VTT_ENTRY vtt_S5567C1[] = {
  {&(_ZTV7S5567C1[5]),  5,19},
  {&(_ZTV7S5567C1[12]),  12,19},
  {&(_ZTV7S5567C1[19]),  19,19},
  {&(_tg__ZTV7S5567C6__7S5567C1[4]),  4,4},
  {&(_tg__ZTV7S5567C5__7S5567C6__7S5567C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S5567C1[];
extern  VTBL_ENTRY _ZTV7S5567C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5567C1[];
Class_Descriptor cd_S5567C1 = {  "S5567C1", // class name
  bases_S5567C1, 4,
  &(vtc_S5567C1[0]), // expected_vtbl_contents
  &(vtt_S5567C1[0]), // expected_vtt_contents
  ABISELECT(752,540), // object size
  NSPAIRA(_ZTI7S5567C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5567C1),19, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5567C1),5, //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  S5566C5  {
  long double s5566c5f0;
  long s5566c5f1;
  virtual void  v3(); // _ZN7S5566C52v3Ev
  virtual void  v4(); // _ZN7S5566C52v4Ev
  virtual void  v5(); // _ZN7S5566C52v5Ev
  ~S5566C5(); // tgen
  S5566C5(); // tgen
};
//SIG(-1 S5566C5) C1{ v1 v2 v3 FD Fl}


void  S5566C5 ::v3(){vfunc_called(this, "_ZN7S5566C52v3Ev");}
void  S5566C5 ::v4(){vfunc_called(this, "_ZN7S5566C52v4Ev");}
void  S5566C5 ::v5(){vfunc_called(this, "_ZN7S5566C52v5Ev");}
S5566C5 ::~S5566C5(){ note_dtor("S5566C5", this);} // tgen
S5566C5 ::S5566C5(){ note_ctor("S5566C5", this);} // tgen

static void Test_S5566C5()
{
  extern Class_Descriptor cd_S5566C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S5566C5, buf);
    S5566C5 *dp, &lv = *(dp=new (buf) S5566C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S5566C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5566C5)");
    check_field_offset(lv, s5566c5f0, ABISELECT(16,4), "S5566C5.s5566c5f0");
    check_field_offset(lv, s5566c5f1, ABISELECT(32,16), "S5566C5.s5566c5f1");
    test_class_info(&lv, &cd_S5566C5);
    dp->~S5566C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5566C5(Test_S5566C5, "S5566C5", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN7S5566C5C1Ev();
extern void _ZN7S5566C5D1Ev();
Name_Map name_map_S5566C5[] = {
  NSPAIR(_ZN7S5566C5C1Ev),
  NSPAIR(_ZN7S5566C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5566C5[];
extern void _ZN7S5566C52v3Ev();
extern void _ZN7S5566C52v4Ev();
extern void _ZN7S5566C52v5Ev();
static  VTBL_ENTRY vtc_S5566C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5566C5[0]),
  (VTBL_ENTRY)&_ZN7S5566C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v5Ev,
};
extern VTBL_ENTRY _ZTI7S5566C5[];
extern  VTBL_ENTRY _ZTV7S5566C5[];
Class_Descriptor cd_S5566C5 = {  "S5566C5", // class name
  0,0,//no base classes
  &(vtc_S5566C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI7S5566C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5566C5),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  S5566C6  : virtual S5566C5 , virtual S20605C3 {
  int s5566c6f0;
  ~S5566C6(); // tgen
  S5566C6(); // tgen
};
//SIG(-1 S5566C6) C1{ VBC2{ v1 v2 v3 FD Fl} VBC3{ m Fc FC4{ VBC5{ m Fs[2]} FC5 Fs Fi Fc}[10]} Fi}


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

static void Test_S5566C6()
{
  extern Class_Descriptor cd_S5566C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,69)];
    init_test(&cd_S5566C6, buf);
    S5566C6 *dp, &lv = *(dp=new (buf) S5566C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,272), "sizeof(S5566C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5566C6)");
    check_base_class_offset(lv, (S5566C5*), ABISELECT(16,8), "S5566C6");
    check_base_class_offset(lv, (S20605C3*), ABISELECT(56,28), "S5566C6");
    check_field_offset(lv, s5566c6f0, ABISELECT(8,4), "S5566C6.s5566c6f0");
    test_class_info(&lv, &cd_S5566C6);
    dp->~S5566C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5566C6(Test_S5566C6, "S5566C6", ABISELECT(384,272));

#else // __cplusplus

extern void _ZN7S5566C6C1Ev();
extern void _ZN7S5566C6D1Ev();
Name_Map name_map_S5566C6[] = {
  NSPAIR(_ZN7S5566C6C1Ev),
  NSPAIR(_ZN7S5566C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5566C5;
extern VTBL_ENTRY _ZTI7S5566C5[];
extern  VTBL_ENTRY _ZTV7S5566C5[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
static Base_Class bases_S5566C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5566C5,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5566C6[];
extern void _ZN7S5566C52v3Ev();
extern void _ZN7S5566C52v4Ev();
extern void _ZN7S5566C52v5Ev();
static  VTBL_ENTRY vtc_S5566C6[] = {
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5566C6[0]),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5566C6[0]),
  (VTBL_ENTRY)&_ZN7S5566C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v5Ev,
};
extern VTBL_ENTRY _ZTV7S5566C6[];
static  VTT_ENTRY vtt_S5566C6[] = {
  {&(_ZTV7S5566C6[4]),  4,12},
  {&(_ZTV7S5566C6[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S5566C6[];
extern  VTBL_ENTRY _ZTV7S5566C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5566C6[];
Class_Descriptor cd_S5566C6 = {  "S5566C6", // class name
  bases_S5566C6, 2,
  &(vtc_S5566C6[0]), // expected_vtbl_contents
  &(vtt_S5566C6[0]), // expected_vtt_contents
  ABISELECT(384,272), // object size
  NSPAIRA(_ZTI7S5566C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5566C6),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5566C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5566C1  : S20605C3 , virtual S5566C5 , virtual S5566C6 {
  int s5566c1f0;
  long double s5566c1f1;
  virtual void  v1(); // _ZN7S5566C12v1Ev
  virtual void  v2(); // _ZN7S5566C12v2Ev
  ~S5566C1(); // tgen
  S5566C1(); // tgen
};
//SIG(1 S5566C1) C1{ BC2{ m Fc FC3{ VBC4{ m Fs[2]} FC4 Fs Fi Fc}[10]} VBC5{ v3 v4 v5 FD Fl} VBC6{ VBC5 VBC2 Fi} v1 v2 Fi FD}


void  S5566C1 ::v1(){vfunc_called(this, "_ZN7S5566C12v1Ev");}
void  S5566C1 ::v2(){vfunc_called(this, "_ZN7S5566C12v2Ev");}
S5566C1 ::~S5566C1(){ note_dtor("S5566C1", this);} // tgen
S5566C1 ::S5566C1(){ note_ctor("S5566C1", this);} // tgen

static void Test_S5566C1()
{
  extern Class_Descriptor cd_S5566C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(48,135)];
    init_test(&cd_S5566C1, buf);
    S5566C1 *dp, &lv = *(dp=new (buf) S5566C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(752,536), "sizeof(S5566C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S5566C1)");
    /*is_ambiguous_... S5566C1::S20605C3 */ AMB_check_base_class_offset(lv, (S20605C3*), ABISELECT(8,4), "S5566C1");
    check_base_class_offset(lv, (S5566C5*), ABISELECT(368,264), "S5566C1");
    check_base_class_offset(lv, (S5566C5*)(S5566C6*), ABISELECT(368,264), "S5566C1");
    check_base_class_offset(lv, (S20605C3*)(S5566C6*), ABISELECT(424,292), "S5566C1");
    check_base_class_offset(lv, (S5566C6*), ABISELECT(408,284), "S5566C1");
    check_field_offset(lv, s5566c1f0, ABISELECT(336,248), "S5566C1.s5566c1f0");
    check_field_offset(lv, s5566c1f1, ABISELECT(352,252), "S5566C1.s5566c1f1");
    test_class_info(&lv, &cd_S5566C1);
    dp->~S5566C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5566C1(Test_S5566C1, "S5566C1", ABISELECT(752,536));

#else // __cplusplus

extern void _ZN7S5566C1C1Ev();
extern void _ZN7S5566C1D1Ev();
Name_Map name_map_S5566C1[] = {
  NSPAIR(_ZN7S5566C1C1Ev),
  NSPAIR(_ZN7S5566C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S5566C5;
extern VTBL_ENTRY _ZTI7S5566C5[];
extern  VTBL_ENTRY _ZTV7S5566C5[];
extern Class_Descriptor cd_S20605C3;
extern VTBL_ENTRY _ZTI8S20605C3[];
extern Class_Descriptor cd_S5566C6;
extern VTBL_ENTRY _ZTI7S5566C6[];
extern  VTBL_ENTRY _ZTV7S5566C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5566C6[];
static Base_Class bases_S5566C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20605C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S5566C5,    ABISELECT(368,264), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20605C3,    ABISELECT(424,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S5566C6,    ABISELECT(408,284), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5566C1[];
extern void _ZN7S5566C12v1Ev();
extern void _ZN7S5566C12v2Ev();
extern void _ZN7S5566C52v3Ev();
extern void _ZN7S5566C52v4Ev();
extern void _ZN7S5566C52v5Ev();
static  VTBL_ENTRY vtc_S5566C1[] = {
  ABISELECT(424,292),
  ABISELECT(408,284),
  ABISELECT(368,264),
  0,
  (VTBL_ENTRY)&(_ZTI7S5566C1[0]),
  (VTBL_ENTRY)&_ZN7S5566C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5566C12v2Ev,
  0,
  0,
  0,
  ABISELECT(-368,-264),
  (VTBL_ENTRY)&(_ZTI7S5566C1[0]),
  (VTBL_ENTRY)&_ZN7S5566C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v5Ev,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-408,-284),
  (VTBL_ENTRY)&(_ZTI7S5566C1[0]),
};
extern VTBL_ENTRY _ZTV7S5566C1[];
static  VTBL_ENTRY _tg__ZTV7S5566C6__7S5566C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S5566C6[0]),
};
extern void _ZN7S5566C52v3Ev();
extern void _ZN7S5566C52v4Ev();
extern void _ZN7S5566C52v5Ev();
static  VTBL_ENTRY _tg__ZTV7S5566C5__7S5566C6__7S5566C1[] = {
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S5566C6[0]),
  (VTBL_ENTRY)&_ZN7S5566C52v3Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v4Ev,
  (VTBL_ENTRY)&_ZN7S5566C52v5Ev,
};
static  VTT_ENTRY vtt_S5566C1[] = {
  {&(_ZTV7S5566C1[5]),  5,19},
  {&(_ZTV7S5566C1[12]),  12,19},
  {&(_ZTV7S5566C1[19]),  19,19},
  {&(_tg__ZTV7S5566C6__7S5566C1[4]),  4,4},
  {&(_tg__ZTV7S5566C5__7S5566C6__7S5566C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S5566C1[];
extern  VTBL_ENTRY _ZTV7S5566C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5566C1[];
Class_Descriptor cd_S5566C1 = {  "S5566C1", // class name
  bases_S5566C1, 4,
  &(vtc_S5566C1[0]), // expected_vtbl_contents
  &(vtt_S5566C1[0]), // expected_vtt_contents
  ABISELECT(752,536), // object size
  NSPAIRA(_ZTI7S5566C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5566C1),19, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5566C1),5, //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  S17705C7_nt  : S3465C9_nt {
};
//SIG(-1 S17705C7_nt) C1{ BC2{}}



//skip512 S17705C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S3465C9_nt;
static Base_Class bases_S17705C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C9_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  S17705C5  : S22028C16 {
  ::S17705C7_nt s17705c5f0;
  ::S17705C7_nt s17705c5f1;
  void *s17705c5f2;
  int s17705c5f3[3];
};
//SIG(-1 S17705C5) C1{ BC2{ m} FC3{ BC4{}} FC3 Fp Fi[3]}



static void Test_S17705C5()
{
  extern Class_Descriptor cd_S17705C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S17705C5, buf);
    S17705C5 &lv = *(new (buf) S17705C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17705C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17705C5)");
    check_base_class_offset(lv, (S22028C16*), 0, "S17705C5");
    check_field_offset(lv, s17705c5f0, 0, "S17705C5.s17705c5f0");
    check_field_offset(lv, s17705c5f1, 1, "S17705C5.s17705c5f1");
    check_field_offset(lv, s17705c5f2, ABISELECT(8,4), "S17705C5.s17705c5f2");
    check_field_offset(lv, s17705c5f3, ABISELECT(16,8), "S17705C5.s17705c5f3");
    test_class_info(&lv, &cd_S17705C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17705C5(Test_S17705C5, "S17705C5", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S17705C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S17705C5 = {  "S17705C5", // class name
  bases_S17705C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // 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  S17705C4  : S17705C5 {
};
//SIG(-1 S17705C4) C1{ BC2{ BC3{ m} FC4{ BC5{}} FC4 Fp Fi[3]}}



static void Test_S17705C4()
{
  extern Class_Descriptor cd_S17705C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S17705C4, buf);
    S17705C4 &lv = *(new (buf) S17705C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17705C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17705C4)");
    check_base_class_offset(lv, (S22028C16*)(S17705C5*), 0, "S17705C4");
    check_base_class_offset(lv, (S17705C5*), 0, "S17705C4");
    test_class_info(&lv, &cd_S17705C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17705C4(Test_S17705C4, "S17705C4", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S17705C5;
static Base_Class bases_S17705C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S17705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S17705C4 = {  "S17705C4", // class name
  bases_S17705C4, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // 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  S17705C3  : S17705C4 {
};
//SIG(-1 S17705C3) C1{ BC2{ BC3{ BC4{ m} FC5{ BC6{}} FC5 Fp Fi[3]}}}



static void Test_S17705C3()
{
  extern Class_Descriptor cd_S17705C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S17705C3, buf);
    S17705C3 &lv = *(new (buf) S17705C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17705C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17705C3)");
    check_base_class_offset(lv, (S22028C16*)(S17705C5*)(S17705C4*), 0, "S17705C3");
    check_base_class_offset(lv, (S17705C5*)(S17705C4*), 0, "S17705C3");
    check_base_class_offset(lv, (S17705C4*), 0, "S17705C3");
    test_class_info(&lv, &cd_S17705C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17705C3(Test_S17705C3, "S17705C3", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
extern Class_Descriptor cd_S17705C5;
extern Class_Descriptor cd_S17705C4;
static Base_Class bases_S17705C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S17705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S17705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S17705C3 = {  "S17705C3", // class name
  bases_S17705C3, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // 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  S17705C2  {
  ::S17705C3 s17705c2f0;
  void  mf17705c2(); // _ZN8S17705C29mf17705c2Ev
};
//SIG(-1 S17705C2) C1{ m FC2{ BC3{ BC4{ BC5{ m} FC6{ BC7{}} FC6 Fp Fi[3]}}}}


void  S17705C2 ::mf17705c2(){}

static void Test_S17705C2()
{
  {
    init_simple_test("S17705C2");
    S17705C2 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S17705C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17705C2)");
    check_field_offset(lv, s17705c2f0, 0, "S17705C2.s17705c2f0");
  }
}
static Arrange_To_Call_Me vS17705C2(Test_S17705C2, "S17705C2", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17705C1  {
  void *s17705c1f0;
  int s17705c1f1;
  ::S17705C2 s17705c1f2;
  ::S22028C73 s17705c1f3;
  int s17705c1f4[2];
  void *s17705c1f5[6];
  void  mf17705c1(); // _ZN8S17705C19mf17705c1Ev
};
//SIG(1 S17705C1) C1{ m Fp Fi FC2{ m FC3{ BC4{ BC5{ BC6{ m} FC7{ BC8{}} FC7 Fp Fi[3]}}}} FC9{ m Fp[2]} Fi[2] Fp[6]}


void  S17705C1 ::mf17705c1(){}

static void Test_S17705C1()
{
  {
    init_simple_test("S17705C1");
    S17705C1 lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S17705C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17705C1)");
    check_field_offset(lv, s17705c1f0, 0, "S17705C1.s17705c1f0");
    check_field_offset(lv, s17705c1f1, ABISELECT(8,4), "S17705C1.s17705c1f1");
    check_field_offset(lv, s17705c1f2, ABISELECT(16,8), "S17705C1.s17705c1f2");
    check_field_offset(lv, s17705c1f3, ABISELECT(48,28), "S17705C1.s17705c1f3");
    check_field_offset(lv, s17705c1f4, ABISELECT(64,36), "S17705C1.s17705c1f4");
    check_field_offset(lv, s17705c1f5, ABISELECT(72,44), "S17705C1.s17705c1f5");
  }
}
static Arrange_To_Call_Me vS17705C1(Test_S17705C1, "S17705C1", ABISELECT(120,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16211C4_nt  {
  __tsi64 s16211c4f0;
};
//SIG(-1 S16211C4_nt) C1{ FL}



//skip512 S16211C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16211C1  {
  ::S22028C11_nt s16211c1f0;
  ::S22028C11_nt s16211c1f1;
  ::S22028C11_nt s16211c1f2;
  ::S22028C11_nt s16211c1f3;
  __tsi64 s16211c1f4[2];
  ::S22028C11_nt s16211c1f5;
  ::S22028C11_nt s16211c1f6;
  int s16211c1f7[2];
  ::S16211C4_nt s16211c1f8;
  ::S16211C4_nt s16211c1f9;
  int s16211c1f10[2];
  ::S22028C68_nt s16211c1f11;
  ::S3715C9_nt s16211c1f12;
  void  mf16211c1(); // _ZN8S16211C19mf16211c1Ev
};
//SIG(1 S16211C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FL[2] FC2 FC2 Fi[2] FC4{ FL} FC4 Fi[2] FC5{ m Fp} FC6{ m Fp}}


void  S16211C1 ::mf16211c1(){}

static void Test_S16211C1()
{
  {
    init_simple_test("S16211C1");
    S16211C1 lv;
    check2(sizeof(lv), ABISELECT(160,128), "sizeof(S16211C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16211C1)");
    check_field_offset(lv, s16211c1f0, 0, "S16211C1.s16211c1f0");
    check_field_offset(lv, s16211c1f1, ABISELECT(16,12), "S16211C1.s16211c1f1");
    check_field_offset(lv, s16211c1f2, ABISELECT(32,24), "S16211C1.s16211c1f2");
    check_field_offset(lv, s16211c1f3, ABISELECT(48,36), "S16211C1.s16211c1f3");
    check_field_offset(lv, s16211c1f4, ABISELECT(64,48), "S16211C1.s16211c1f4");
    check_field_offset(lv, s16211c1f5, ABISELECT(80,64), "S16211C1.s16211c1f5");
    check_field_offset(lv, s16211c1f6, ABISELECT(96,76), "S16211C1.s16211c1f6");
    check_field_offset(lv, s16211c1f7, ABISELECT(112,88), "S16211C1.s16211c1f7");
    check_field_offset(lv, s16211c1f8, ABISELECT(120,96), "S16211C1.s16211c1f8");
    check_field_offset(lv, s16211c1f9, ABISELECT(128,104), "S16211C1.s16211c1f9");
    check_field_offset(lv, s16211c1f10, ABISELECT(136,112), "S16211C1.s16211c1f10");
    check_field_offset(lv, s16211c1f11, ABISELECT(144,120), "S16211C1.s16211c1f11");
    check_field_offset(lv, s16211c1f12, ABISELECT(152,124), "S16211C1.s16211c1f12");
  }
}
static Arrange_To_Call_Me vS16211C1(Test_S16211C1, "S16211C1", ABISELECT(160,128));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17251C1  {
  int s17251c1f0[5];
  char s17251c1f1;
  int s17251c1f2;
  char s17251c1f3;
  ::S8517C4_nt s17251c1f4;
  ::S17705C2 s17251c1f5;
  int s17251c1f6;
  void  mf17251c1(); // _ZN8S17251C19mf17251c1Ev
};
//SIG(1 S17251C1) C1{ m Fi[5] Fc Fi Fc FC2{ FL[4]} FC3{ m FC4{ BC5{ BC6{ BC7{ m} FC8{ BC9{}} FC8 Fp Fi[3]}}}} Fi}


void  S17251C1 ::mf17251c1(){}

static void Test_S17251C1()
{
  {
    init_simple_test("S17251C1");
    S17251C1 lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S17251C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17251C1)");
    check_field_offset(lv, s17251c1f0, 0, "S17251C1.s17251c1f0");
    check_field_offset(lv, s17251c1f1, 20, "S17251C1.s17251c1f1");
    check_field_offset(lv, s17251c1f2, 24, "S17251C1.s17251c1f2");
    check_field_offset(lv, s17251c1f3, 28, "S17251C1.s17251c1f3");
    check_field_offset(lv, s17251c1f4, 32, "S17251C1.s17251c1f4");
    check_field_offset(lv, s17251c1f5, 64, "S17251C1.s17251c1f5");
    check_field_offset(lv, s17251c1f6, ABISELECT(96,84), "S17251C1.s17251c1f6");
  }
}
static Arrange_To_Call_Me vS17251C1(Test_S17251C1, "S17251C1", ABISELECT(104,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17250C1  {
  int s17250c1f0[5];
  char s17250c1f1;
  int s17250c1f2;
  char s17250c1f3;
  ::S8516C4_nt s17250c1f4;
  ::S17705C2 s17250c1f5;
  int s17250c1f6;
  void  mf17250c1(); // _ZN8S17250C19mf17250c1Ev
};
//SIG(1 S17250C1) C1{ m Fi[5] Fc Fi Fc FC2{ Fl[4]} FC3{ m FC4{ BC5{ BC6{ BC7{ m} FC8{ BC9{}} FC8 Fp Fi[3]}}}} Fi}


void  S17250C1 ::mf17250c1(){}

static void Test_S17250C1()
{
  {
    init_simple_test("S17250C1");
    S17250C1 lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S17250C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17250C1)");
    check_field_offset(lv, s17250c1f0, 0, "S17250C1.s17250c1f0");
    check_field_offset(lv, s17250c1f1, 20, "S17250C1.s17250c1f1");
    check_field_offset(lv, s17250c1f2, 24, "S17250C1.s17250c1f2");
    check_field_offset(lv, s17250c1f3, 28, "S17250C1.s17250c1f3");
    check_field_offset(lv, s17250c1f4, 32, "S17250C1.s17250c1f4");
    check_field_offset(lv, s17250c1f5, ABISELECT(64,48), "S17250C1.s17250c1f5");
    check_field_offset(lv, s17250c1f6, ABISELECT(96,68), "S17250C1.s17250c1f6");
  }
}
static Arrange_To_Call_Me vS17250C1(Test_S17250C1, "S17250C1", ABISELECT(104,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20045C2_nt  {
  __tsi64 s20045c2f0[11];
  int s20045c2f1;
  virtual void  v2(); // _ZN11S20045C2_nt2v2Ev
  virtual void  v3(); // _ZN11S20045C2_nt2v3Ev
  virtual void  v4(); // _ZN11S20045C2_nt2v4Ev
  virtual void  v5(); // _ZN11S20045C2_nt2v5Ev
  ~S20045C2_nt(); // tgen
  S20045C2_nt(); // tgen
};
//SIG(-1 S20045C2_nt) C1{ v1 v2 v3 v4 FL[11] Fi}


void  S20045C2_nt ::v2(){vfunc_called(this, "_ZN11S20045C2_nt2v2Ev");}
void  S20045C2_nt ::v3(){vfunc_called(this, "_ZN11S20045C2_nt2v3Ev");}
void  S20045C2_nt ::v4(){vfunc_called(this, "_ZN11S20045C2_nt2v4Ev");}
void  S20045C2_nt ::v5(){vfunc_called(this, "_ZN11S20045C2_nt2v5Ev");}
S20045C2_nt ::~S20045C2_nt(){ note_dtor("S20045C2_nt", this);} // tgen
S20045C2_nt ::S20045C2_nt(){ note_ctor("S20045C2_nt", this);} // tgen

//skip512 S20045C2_nt

#else // __cplusplus

extern void _ZN11S20045C2_ntC1Ev();
extern void _ZN11S20045C2_ntD1Ev();
Name_Map name_map_S20045C2_nt[] = {
  NSPAIR(_ZN11S20045C2_ntC1Ev),
  NSPAIR(_ZN11S20045C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20045C2_nt[];
extern void _ZN11S20045C2_nt2v2Ev();
extern void _ZN11S20045C2_nt2v3Ev();
extern void _ZN11S20045C2_nt2v4Ev();
extern void _ZN11S20045C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S20045C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20045C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI11S20045C2_nt[];
VTBL_ENTRY *P__ZTI11S20045C2_nt = _ZTI11S20045C2_nt; 
extern  VTBL_ENTRY _ZTV11S20045C2_nt[];
Class_Descriptor cd_S20045C2_nt = {  "S20045C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20045C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,96), // object size
  NSPAIRA(_ZTI11S20045C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20045C2_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  S20045C3  {
  virtual void  v6(); // _ZN8S20045C32v6Ev
  ~S20045C3(); // tgen
  S20045C3(); // tgen
};
//SIG(-1 S20045C3) C1{ v1}


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

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

#else // __cplusplus

extern void _ZN8S20045C3C1Ev();
extern void _ZN8S20045C3D1Ev();
Name_Map name_map_S20045C3[] = {
  NSPAIR(_ZN8S20045C3C1Ev),
  NSPAIR(_ZN8S20045C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20045C3[];
extern void _ZN8S20045C32v6Ev();
static  VTBL_ENTRY vtc_S20045C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20045C3[0]),
  (VTBL_ENTRY)&_ZN8S20045C32v6Ev,
};
extern VTBL_ENTRY _ZTI8S20045C3[];
extern  VTBL_ENTRY _ZTV8S20045C3[];
Class_Descriptor cd_S20045C3 = {  "S20045C3", // class name
  0,0,//no base classes
  &(vtc_S20045C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20045C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20045C3),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  S20045C1  : virtual S20045C2_nt , S20045C3 {
  ::S20540C5 s20045c1f0;
  ::S20541C4 s20045c1f1;
  int s20045c1f2;
  char s20045c1f3[6];
  virtual void  v1(); // _ZN8S20045C12v1Ev
  ~S20045C1(); // tgen
  S20045C1(); // tgen
};
//SIG(1 S20045C1) C1{ VBC2{ v2 v3 v4 v5 FL[11] Fi} BC3{ v6} v1 FC4{ vd v7 v8 Fp} FC5{ v9 v10 v11 v12 Fi[10]} Fi Fc[6]}


void  S20045C1 ::v1(){vfunc_called(this, "_ZN8S20045C12v1Ev");}
S20045C1 ::~S20045C1(){ note_dtor("S20045C1", this);} // tgen
S20045C1 ::S20045C1(){ note_ctor("S20045C1", this);} // tgen

static void Test_S20045C1()
{
  extern Class_Descriptor cd_S20045C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,42)];
    init_test(&cd_S20045C1, buf);
    S20045C1 *dp, &lv = *(dp=new (buf) S20045C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,164), "sizeof(S20045C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20045C1)");
    check_base_class_offset(lv, (S20045C2_nt*), ABISELECT(88,68), "S20045C1");
    check_base_class_offset(lv, (S20045C3*), 0, "S20045C1");
    check_field_offset(lv, s20045c1f0, ABISELECT(8,4), "S20045C1.s20045c1f0");
    check_field_offset(lv, s20045c1f1, ABISELECT(24,12), "S20045C1.s20045c1f1");
    check_field_offset(lv, s20045c1f2, ABISELECT(72,56), "S20045C1.s20045c1f2");
    check_field_offset(lv, s20045c1f3, ABISELECT(76,60), "S20045C1.s20045c1f3");
    test_class_info(&lv, &cd_S20045C1);
    dp->~S20045C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20045C1(Test_S20045C1, "S20045C1", ABISELECT(192,164));

#else // __cplusplus

extern void _ZN8S20045C1C1Ev();
extern void _ZN8S20045C1D1Ev();
Name_Map name_map_S20045C1[] = {
  NSPAIR(_ZN8S20045C1C1Ev),
  NSPAIR(_ZN8S20045C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20045C2_nt;
extern VTBL_ENTRY _ZTI11S20045C2_nt[];
extern  VTBL_ENTRY _ZTV11S20045C2_nt[];
extern Class_Descriptor cd_S20045C3;
extern VTBL_ENTRY _ZTI8S20045C3[];
extern  VTBL_ENTRY _ZTV8S20045C3[];
static Base_Class bases_S20045C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20045C2_nt,    ABISELECT(88,68), //bcp->offset
    5, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20045C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20045C1[];
extern void _ZN8S20045C32v6Ev();
extern void _ZN8S20045C12v1Ev();
extern void _ZN11S20045C2_nt2v2Ev();
extern void _ZN11S20045C2_nt2v3Ev();
extern void _ZN11S20045C2_nt2v4Ev();
extern void _ZN11S20045C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S20045C1[] = {
  ABISELECT(88,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20045C1[0]),
  (VTBL_ENTRY)&_ZN8S20045C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20045C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-68),
  (VTBL_ENTRY)&(_ZTI8S20045C1[0]),
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20045C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTV8S20045C1[];
static  VTT_ENTRY vtt_S20045C1[] = {
  {&(_ZTV8S20045C1[3]),  3,15},
  {&(_ZTV8S20045C1[11]),  11,15},
};
extern VTBL_ENTRY _ZTI8S20045C1[];
extern  VTBL_ENTRY _ZTV8S20045C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20045C1[];
Class_Descriptor cd_S20045C1 = {  "S20045C1", // class name
  bases_S20045C1, 2,
  &(vtc_S20045C1[0]), // expected_vtbl_contents
  &(vtt_S20045C1[0]), // expected_vtt_contents
  ABISELECT(192,164), // object size
  NSPAIRA(_ZTI8S20045C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20045C1),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20045C1),2, //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  S20279C2  {
  void *s20279c2f0;
  virtual  ~S20279C2(); // _ZN8S20279C2D1Ev
  virtual void  v5(); // _ZN8S20279C22v5Ev
  virtual void  v6(); // _ZN8S20279C22v6Ev
  S20279C2(); // tgen
};
//SIG(-1 S20279C2) C1{ vd v1 v2 Fp}


 S20279C2 ::~S20279C2(){ note_dtor("S20279C2", this);}
void  S20279C2 ::v5(){vfunc_called(this, "_ZN8S20279C22v5Ev");}
void  S20279C2 ::v6(){vfunc_called(this, "_ZN8S20279C22v6Ev");}
S20279C2 ::S20279C2(){ note_ctor("S20279C2", this);} // tgen

static void Test_S20279C2()
{
  extern Class_Descriptor cd_S20279C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20279C2, buf);
    S20279C2 *dp, &lv = *(dp=new (buf) S20279C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20279C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20279C2)");
    check_field_offset(lv, s20279c2f0, ABISELECT(8,4), "S20279C2.s20279c2f0");
    test_class_info(&lv, &cd_S20279C2);
    dp->~S20279C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20279C2(Test_S20279C2, "S20279C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20279C2C1Ev();
extern void _ZN8S20279C2D1Ev();
Name_Map name_map_S20279C2[] = {
  NSPAIR(_ZN8S20279C2C1Ev),
  NSPAIR(_ZN8S20279C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20279C2[];
extern void _ZN8S20279C2D1Ev();
extern void _ZN8S20279C2D0Ev();
extern void _ZN8S20279C22v5Ev();
extern void _ZN8S20279C22v6Ev();
static  VTBL_ENTRY vtc_S20279C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20279C2[0]),
  (VTBL_ENTRY)&_ZN8S20279C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20279C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20279C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20279C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20279C2[];
extern  VTBL_ENTRY _ZTV8S20279C2[];
Class_Descriptor cd_S20279C2 = {  "S20279C2", // class name
  0,0,//no base classes
  &(vtc_S20279C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20279C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20279C2),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  S20279C4  {
  int s20279c4f0[10];
  virtual void  v7(); // _ZN8S20279C42v7Ev
  virtual void  v8(); // _ZN8S20279C42v8Ev
  virtual void  v9(); // _ZN8S20279C42v9Ev
  virtual void  v10(); // _ZN8S20279C43v10Ev
  ~S20279C4(); // tgen
  S20279C4(); // tgen
};
//SIG(-1 S20279C4) C1{ v1 v2 v3 v4 Fi[10]}


void  S20279C4 ::v7(){vfunc_called(this, "_ZN8S20279C42v7Ev");}
void  S20279C4 ::v8(){vfunc_called(this, "_ZN8S20279C42v8Ev");}
void  S20279C4 ::v9(){vfunc_called(this, "_ZN8S20279C42v9Ev");}
void  S20279C4 ::v10(){vfunc_called(this, "_ZN8S20279C43v10Ev");}
S20279C4 ::~S20279C4(){ note_dtor("S20279C4", this);} // tgen
S20279C4 ::S20279C4(){ note_ctor("S20279C4", this);} // tgen

static void Test_S20279C4()
{
  extern Class_Descriptor cd_S20279C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S20279C4, buf);
    S20279C4 *dp, &lv = *(dp=new (buf) S20279C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S20279C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20279C4)");
    check_field_offset(lv, s20279c4f0, ABISELECT(8,4), "S20279C4.s20279c4f0");
    test_class_info(&lv, &cd_S20279C4);
    dp->~S20279C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20279C4(Test_S20279C4, "S20279C4", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S20279C4C1Ev();
extern void _ZN8S20279C4D1Ev();
Name_Map name_map_S20279C4[] = {
  NSPAIR(_ZN8S20279C4C1Ev),
  NSPAIR(_ZN8S20279C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20279C4[];
extern void _ZN8S20279C42v7Ev();
extern void _ZN8S20279C42v8Ev();
extern void _ZN8S20279C42v9Ev();
extern void _ZN8S20279C43v10Ev();
static  VTBL_ENTRY vtc_S20279C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20279C4[0]),
  (VTBL_ENTRY)&_ZN8S20279C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20279C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20279C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20279C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S20279C4[];
extern  VTBL_ENTRY _ZTV8S20279C4[];
Class_Descriptor cd_S20279C4 = {  "S20279C4", // class name
  0,0,//no base classes
  &(vtc_S20279C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S20279C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20279C4),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  S20279C3  : S20279C4 {
  void *s20279c3f0;
  virtual void  v11(); // _ZN8S20279C33v11Ev
  virtual void  v12(); // _ZN8S20279C33v12Ev
  ~S20279C3(); // tgen
  S20279C3(); // tgen
};
//SIG(-1 S20279C3) C1{ BC2{ v3 v4 v5 v6 Fi[10]} v1 v2 Fp}


void  S20279C3 ::v11(){vfunc_called(this, "_ZN8S20279C33v11Ev");}
void  S20279C3 ::v12(){vfunc_called(this, "_ZN8S20279C33v12Ev");}
S20279C3 ::~S20279C3(){ note_dtor("S20279C3", this);} // tgen
S20279C3 ::S20279C3(){ note_ctor("S20279C3", this);} // tgen

static void Test_S20279C3()
{
  extern Class_Descriptor cd_S20279C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S20279C3, buf);
    S20279C3 *dp, &lv = *(dp=new (buf) S20279C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S20279C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20279C3)");
    check_base_class_offset(lv, (S20279C4*), 0, "S20279C3");
    check_field_offset(lv, s20279c3f0, ABISELECT(48,44), "S20279C3.s20279c3f0");
    test_class_info(&lv, &cd_S20279C3);
    dp->~S20279C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20279C3(Test_S20279C3, "S20279C3", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN8S20279C3C1Ev();
extern void _ZN8S20279C3D1Ev();
Name_Map name_map_S20279C3[] = {
  NSPAIR(_ZN8S20279C3C1Ev),
  NSPAIR(_ZN8S20279C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20279C4;
extern VTBL_ENTRY _ZTI8S20279C4[];
extern  VTBL_ENTRY _ZTV8S20279C4[];
static Base_Class bases_S20279C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20279C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20279C3[];
extern void _ZN8S20279C42v7Ev();
extern void _ZN8S20279C42v8Ev();
extern void _ZN8S20279C42v9Ev();
extern void _ZN8S20279C43v10Ev();
extern void _ZN8S20279C33v11Ev();
extern void _ZN8S20279C33v12Ev();
static  VTBL_ENTRY vtc_S20279C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20279C3[0]),
  (VTBL_ENTRY)&_ZN8S20279C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20279C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20279C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20279C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20279C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20279C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S20279C3[];
extern  VTBL_ENTRY _ZTV8S20279C3[];
Class_Descriptor cd_S20279C3 = {  "S20279C3", // class name
  bases_S20279C3, 1,
  &(vtc_S20279C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI8S20279C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20279C3),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  S20279C1  : virtual S20279C2 , virtual S20279C3 {
  ::S20045C3 s20279c1f0[9];
  __tsi64 s20279c1f1;
  virtual void  v1(); // _ZN8S20279C12v1Ev
  virtual void  v2(); // _ZN8S20279C12v2Ev
  virtual void  v3(); // _ZN8S20279C12v3Ev
  virtual void  v4(); // _ZN8S20279C12v4Ev
  ~S20279C1(); // tgen
  S20279C1(); // tgen
};
//SIG(1 S20279C1) C1{ VBC2{ vd v5 v6 Fp} VBC3{ BC4{ v7 v8 v9 v10 Fi[10]} v11 v12 Fp} v1 v2 v3 v4 FC5{ v13}[9] FL}


void  S20279C1 ::v1(){vfunc_called(this, "_ZN8S20279C12v1Ev");}
void  S20279C1 ::v2(){vfunc_called(this, "_ZN8S20279C12v2Ev");}
void  S20279C1 ::v3(){vfunc_called(this, "_ZN8S20279C12v3Ev");}
void  S20279C1 ::v4(){vfunc_called(this, "_ZN8S20279C12v4Ev");}
S20279C1 ::~S20279C1(){ note_dtor("S20279C1", this);} // tgen
S20279C1 ::S20279C1(){ note_ctor("S20279C1", this);} // tgen

static void Test_S20279C1()
{
  extern Class_Descriptor cd_S20279C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,27)];
    init_test(&cd_S20279C1, buf);
    S20279C1 *dp, &lv = *(dp=new (buf) S20279C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,104), "sizeof(S20279C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20279C1)");
    check_base_class_offset(lv, (S20279C2*), ABISELECT(88,48), "S20279C1");
    check_base_class_offset(lv, (S20279C4*)(S20279C3*), ABISELECT(104,56), "S20279C1");
    check_base_class_offset(lv, (S20279C3*), ABISELECT(104,56), "S20279C1");
    check_field_offset(lv, s20279c1f0, ABISELECT(8,4), "S20279C1.s20279c1f0");
    check_field_offset(lv, s20279c1f1, ABISELECT(80,40), "S20279C1.s20279c1f1");
    test_class_info(&lv, &cd_S20279C1);
    dp->~S20279C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20279C1(Test_S20279C1, "S20279C1", ABISELECT(160,104));

#else // __cplusplus

extern void _ZN8S20279C1C1Ev();
extern void _ZN8S20279C1D1Ev();
Name_Map name_map_S20279C1[] = {
  NSPAIR(_ZN8S20279C1C1Ev),
  NSPAIR(_ZN8S20279C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20279C2;
extern VTBL_ENTRY _ZTI8S20279C2[];
extern  VTBL_ENTRY _ZTV8S20279C2[];
extern Class_Descriptor cd_S20279C4;
extern VTBL_ENTRY _ZTI8S20279C4[];
extern  VTBL_ENTRY _ZTV8S20279C4[];
extern Class_Descriptor cd_S20279C3;
extern VTBL_ENTRY _ZTI8S20279C3[];
extern  VTBL_ENTRY _ZTV8S20279C3[];
static Base_Class bases_S20279C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20279C2,    ABISELECT(88,48), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20279C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20279C3,    ABISELECT(104,56), //bcp->offset
    19, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20279C1[];
extern void _ZN8S20279C12v1Ev();
extern void _ZN8S20279C12v2Ev();
extern void _ZN8S20279C12v3Ev();
extern void _ZN8S20279C12v4Ev();
extern void _ZN8S20279C1D1Ev();
extern void _ZN8S20279C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20279C1D1Ev,_ZTv0_n12_N8S20279C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S20279C1D1Ev,_ZThn48_N8S20279C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20279C1D0Ev,_ZTv0_n12_N8S20279C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S20279C1D0Ev,_ZThn48_N8S20279C1D0Ev)() __attribute__((weak));
extern void _ZN8S20279C22v5Ev();
extern void _ZN8S20279C22v6Ev();
extern void _ZN8S20279C42v7Ev();
extern void _ZN8S20279C42v8Ev();
extern void _ZN8S20279C42v9Ev();
extern void _ZN8S20279C43v10Ev();
extern void _ZN8S20279C33v11Ev();
extern void _ZN8S20279C33v12Ev();
static  VTBL_ENTRY vtc_S20279C1[] = {
  ABISELECT(104,56),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20279C1[0]),
  (VTBL_ENTRY)&_ZN8S20279C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20279C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20279C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20279C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20279C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20279C1D0Ev,
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20279C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20279C1D1Ev,_ZTv0_n12_N8S20279C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20279C1D0Ev,_ZTv0_n12_N8S20279C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20279C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20279C22v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S20279C1[0]),
  (VTBL_ENTRY)&_ZN8S20279C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20279C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20279C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20279C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20279C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20279C33v12Ev,
};
extern VTBL_ENTRY _ZTV8S20279C1[];
static  VTT_ENTRY vtt_S20279C1[] = {
  {&(_ZTV8S20279C1[4]),  4,33},
  {&(_ZTV8S20279C1[15]),  15,33},
  {&(_ZTV8S20279C1[27]),  27,33},
};
extern VTBL_ENTRY _ZTI8S20279C1[];
extern  VTBL_ENTRY _ZTV8S20279C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20279C1[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20279C1D0Ev,_ZTv0_n12_N8S20279C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20279C1D0Ev,_ZThn48_N8S20279C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20279C1D1Ev,_ZTv0_n12_N8S20279C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20279C1D1Ev,_ZThn48_N8S20279C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20279C1 = {  "S20279C1", // class name
  bases_S20279C1, 3,
  &(vtc_S20279C1[0]), // expected_vtbl_contents
  &(vtt_S20279C1[0]), // expected_vtt_contents
  ABISELECT(160,104), // object size
  NSPAIRA(_ZTI8S20279C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20279C1),33, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20279C1),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3263C3  {
  int s3263c3f0;
  virtual void  v5(); // _ZN7S3263C32v5Ev
  ~S3263C3(); // tgen
  S3263C3(); // tgen
};
//SIG(-1 S3263C3) C1{ v1 Fi}


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

static void Test_S3263C3()
{
  extern Class_Descriptor cd_S3263C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3263C3, buf);
    S3263C3 *dp, &lv = *(dp=new (buf) S3263C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3263C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3263C3)");
    check_field_offset(lv, s3263c3f0, ABISELECT(8,4), "S3263C3.s3263c3f0");
    test_class_info(&lv, &cd_S3263C3);
    dp->~S3263C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3263C3(Test_S3263C3, "S3263C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3263C3C1Ev();
extern void _ZN7S3263C3D1Ev();
Name_Map name_map_S3263C3[] = {
  NSPAIR(_ZN7S3263C3C1Ev),
  NSPAIR(_ZN7S3263C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3263C3[];
extern void _ZN7S3263C32v5Ev();
static  VTBL_ENTRY vtc_S3263C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3263C3[0]),
  (VTBL_ENTRY)&_ZN7S3263C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S3263C3[];
extern  VTBL_ENTRY _ZTV7S3263C3[];
Class_Descriptor cd_S3263C3 = {  "S3263C3", // class name
  0,0,//no base classes
  &(vtc_S3263C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3263C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3263C3),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  S3263C2  : S3263C3 {
  virtual void  v6(); // _ZN7S3263C22v6Ev
  virtual void  v7(); // _ZN7S3263C22v7Ev
  virtual void  v8(); // _ZN7S3263C22v8Ev
  virtual void  v9(); // _ZN7S3263C22v9Ev
  virtual void  v10(); // _ZN7S3263C23v10Ev
  virtual void  v11(); // _ZN7S3263C23v11Ev
  virtual void  v12(); // _ZN7S3263C23v12Ev
  ~S3263C2(); // tgen
  S3263C2(); // tgen
};
//SIG(-1 S3263C2) C1{ BC2{ v8 Fi} v1 v2 v3 v4 v5 v6 v7}


void  S3263C2 ::v6(){vfunc_called(this, "_ZN7S3263C22v6Ev");}
void  S3263C2 ::v7(){vfunc_called(this, "_ZN7S3263C22v7Ev");}
void  S3263C2 ::v8(){vfunc_called(this, "_ZN7S3263C22v8Ev");}
void  S3263C2 ::v9(){vfunc_called(this, "_ZN7S3263C22v9Ev");}
void  S3263C2 ::v10(){vfunc_called(this, "_ZN7S3263C23v10Ev");}
void  S3263C2 ::v11(){vfunc_called(this, "_ZN7S3263C23v11Ev");}
void  S3263C2 ::v12(){vfunc_called(this, "_ZN7S3263C23v12Ev");}
S3263C2 ::~S3263C2(){ note_dtor("S3263C2", this);} // tgen
S3263C2 ::S3263C2(){ note_ctor("S3263C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3263C2C1Ev();
extern void _ZN7S3263C2D1Ev();
Name_Map name_map_S3263C2[] = {
  NSPAIR(_ZN7S3263C2C1Ev),
  NSPAIR(_ZN7S3263C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3263C3;
extern VTBL_ENTRY _ZTI7S3263C3[];
extern  VTBL_ENTRY _ZTV7S3263C3[];
static Base_Class bases_S3263C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3263C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3263C2[];
extern void _ZN7S3263C32v5Ev();
extern void _ZN7S3263C22v6Ev();
extern void _ZN7S3263C22v7Ev();
extern void _ZN7S3263C22v8Ev();
extern void _ZN7S3263C22v9Ev();
extern void _ZN7S3263C23v10Ev();
extern void _ZN7S3263C23v11Ev();
extern void _ZN7S3263C23v12Ev();
static  VTBL_ENTRY vtc_S3263C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3263C2[0]),
  (VTBL_ENTRY)&_ZN7S3263C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3263C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3263C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3263C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S3263C2[];
extern  VTBL_ENTRY _ZTV7S3263C2[];
Class_Descriptor cd_S3263C2 = {  "S3263C2", // class name
  bases_S3263C2, 1,
  &(vtc_S3263C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3263C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3263C2),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  S3263C5  {
  void *s3263c5f0[2];
  int s3263c5f1;
  virtual void  v13(); // _ZN7S3263C53v13Ev
  virtual void  v14(); // _ZN7S3263C53v14Ev
  ~S3263C5(); // tgen
  S3263C5(); // tgen
};
//SIG(-1 S3263C5) C1{ v1 v2 Fp[2] Fi}


void  S3263C5 ::v13(){vfunc_called(this, "_ZN7S3263C53v13Ev");}
void  S3263C5 ::v14(){vfunc_called(this, "_ZN7S3263C53v14Ev");}
S3263C5 ::~S3263C5(){ note_dtor("S3263C5", this);} // tgen
S3263C5 ::S3263C5(){ note_ctor("S3263C5", this);} // tgen

static void Test_S3263C5()
{
  extern Class_Descriptor cd_S3263C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3263C5, buf);
    S3263C5 *dp, &lv = *(dp=new (buf) S3263C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3263C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3263C5)");
    check_field_offset(lv, s3263c5f0, ABISELECT(8,4), "S3263C5.s3263c5f0");
    check_field_offset(lv, s3263c5f1, ABISELECT(24,12), "S3263C5.s3263c5f1");
    test_class_info(&lv, &cd_S3263C5);
    dp->~S3263C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3263C5(Test_S3263C5, "S3263C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3263C5C1Ev();
extern void _ZN7S3263C5D1Ev();
Name_Map name_map_S3263C5[] = {
  NSPAIR(_ZN7S3263C5C1Ev),
  NSPAIR(_ZN7S3263C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3263C5[];
extern void _ZN7S3263C53v13Ev();
extern void _ZN7S3263C53v14Ev();
static  VTBL_ENTRY vtc_S3263C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3263C5[0]),
  (VTBL_ENTRY)&_ZN7S3263C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3263C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S3263C5[];
extern  VTBL_ENTRY _ZTV7S3263C5[];
Class_Descriptor cd_S3263C5 = {  "S3263C5", // class name
  0,0,//no base classes
  &(vtc_S3263C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3263C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3263C5),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  S3263C4  : S3263C5 {
  virtual void  v15(); // _ZN7S3263C43v15Ev
  ~S3263C4(); // tgen
  S3263C4(); // tgen
};
//SIG(-1 S3263C4) C1{ BC2{ v2 v3 Fp[2] Fi} v1}


void  S3263C4 ::v15(){vfunc_called(this, "_ZN7S3263C43v15Ev");}
S3263C4 ::~S3263C4(){ note_dtor("S3263C4", this);} // tgen
S3263C4 ::S3263C4(){ note_ctor("S3263C4", this);} // tgen

static void Test_S3263C4()
{
  extern Class_Descriptor cd_S3263C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3263C4, buf);
    S3263C4 *dp, &lv = *(dp=new (buf) S3263C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3263C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3263C4)");
    check_base_class_offset(lv, (S3263C5*), 0, "S3263C4");
    test_class_info(&lv, &cd_S3263C4);
    dp->~S3263C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3263C4(Test_S3263C4, "S3263C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3263C4C1Ev();
extern void _ZN7S3263C4D1Ev();
Name_Map name_map_S3263C4[] = {
  NSPAIR(_ZN7S3263C4C1Ev),
  NSPAIR(_ZN7S3263C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3263C5;
extern VTBL_ENTRY _ZTI7S3263C5[];
extern  VTBL_ENTRY _ZTV7S3263C5[];
static Base_Class bases_S3263C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3263C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3263C4[];
extern void _ZN7S3263C53v13Ev();
extern void _ZN7S3263C53v14Ev();
extern void _ZN7S3263C43v15Ev();
static  VTBL_ENTRY vtc_S3263C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3263C4[0]),
  (VTBL_ENTRY)&_ZN7S3263C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3263C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3263C43v15Ev,
};
extern VTBL_ENTRY _ZTI7S3263C4[];
extern  VTBL_ENTRY _ZTV7S3263C4[];
Class_Descriptor cd_S3263C4 = {  "S3263C4", // class name
  bases_S3263C4, 1,
  &(vtc_S3263C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3263C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3263C4),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  S3263C1  : S3263C2 , virtual S3263C4 {
  int s3263c1f0;
  virtual void  v1(); // _ZN7S3263C12v1Ev
  virtual void  v2(); // _ZN7S3263C12v2Ev
  virtual void  v3(); // _ZN7S3263C12v3Ev
  virtual void  v4(); // _ZN7S3263C12v4Ev
  ~S3263C1(); // tgen
  S3263C1(); // tgen
};
//SIG(1 S3263C1) C1{ BC2{ BC3{ v5 Fi} v6 v7 v8 v9 v10 v11 v12} VBC4{ BC5{ v13 v14 Fp[2] Fi} v15} v1 v2 v3 v4 Fi}


void  S3263C1 ::v1(){vfunc_called(this, "_ZN7S3263C12v1Ev");}
void  S3263C1 ::v2(){vfunc_called(this, "_ZN7S3263C12v2Ev");}
void  S3263C1 ::v3(){vfunc_called(this, "_ZN7S3263C12v3Ev");}
void  S3263C1 ::v4(){vfunc_called(this, "_ZN7S3263C12v4Ev");}
S3263C1 ::~S3263C1(){ note_dtor("S3263C1", this);} // tgen
S3263C1 ::S3263C1(){ note_ctor("S3263C1", this);} // tgen

static void Test_S3263C1()
{
  extern Class_Descriptor cd_S3263C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3263C1, buf);
    S3263C1 *dp, &lv = *(dp=new (buf) S3263C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3263C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3263C1)");
    check_base_class_offset(lv, (S3263C3*)(S3263C2*), 0, "S3263C1");
    check_base_class_offset(lv, (S3263C2*), 0, "S3263C1");
    check_base_class_offset(lv, (S3263C5*)(S3263C4*), ABISELECT(16,12), "S3263C1");
    check_base_class_offset(lv, (S3263C4*), ABISELECT(16,12), "S3263C1");
    check_field_offset(lv, s3263c1f0, ABISELECT(12,8), "S3263C1.s3263c1f0");
    test_class_info(&lv, &cd_S3263C1);
    dp->~S3263C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3263C1(Test_S3263C1, "S3263C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3263C1C1Ev();
extern void _ZN7S3263C1D1Ev();
Name_Map name_map_S3263C1[] = {
  NSPAIR(_ZN7S3263C1C1Ev),
  NSPAIR(_ZN7S3263C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3263C3;
extern VTBL_ENTRY _ZTI7S3263C3[];
extern  VTBL_ENTRY _ZTV7S3263C3[];
extern Class_Descriptor cd_S3263C2;
extern VTBL_ENTRY _ZTI7S3263C2[];
extern  VTBL_ENTRY _ZTV7S3263C2[];
extern Class_Descriptor cd_S3263C5;
extern VTBL_ENTRY _ZTI7S3263C5[];
extern  VTBL_ENTRY _ZTV7S3263C5[];
extern Class_Descriptor cd_S3263C4;
extern VTBL_ENTRY _ZTI7S3263C4[];
extern  VTBL_ENTRY _ZTV7S3263C4[];
static Base_Class bases_S3263C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3263C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S3263C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3263C5,    ABISELECT(16,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
    3, //immediately_derived
  0, 0},
  {&cd_S3263C4,    ABISELECT(16,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3263C1[];
extern void _ZN7S3263C32v5Ev();
extern void _ZN7S3263C22v6Ev();
extern void _ZN7S3263C22v7Ev();
extern void _ZN7S3263C22v8Ev();
extern void _ZN7S3263C22v9Ev();
extern void _ZN7S3263C23v10Ev();
extern void _ZN7S3263C23v11Ev();
extern void _ZN7S3263C23v12Ev();
extern void _ZN7S3263C12v1Ev();
extern void _ZN7S3263C12v2Ev();
extern void _ZN7S3263C12v3Ev();
extern void _ZN7S3263C12v4Ev();
extern void _ZN7S3263C53v13Ev();
extern void _ZN7S3263C53v14Ev();
extern void _ZN7S3263C43v15Ev();
static  VTBL_ENTRY vtc_S3263C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3263C1[0]),
  (VTBL_ENTRY)&_ZN7S3263C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3263C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3263C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3263C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3263C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3263C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3263C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3263C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3263C12v4Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3263C1[0]),
  (VTBL_ENTRY)&_ZN7S3263C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3263C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3263C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S3263C1[];
static  VTT_ENTRY vtt_S3263C1[] = {
  {&(_ZTV7S3263C1[3]),  3,23},
  {&(_ZTV7S3263C1[20]),  20,23},
};
extern VTBL_ENTRY _ZTI7S3263C1[];
extern  VTBL_ENTRY _ZTV7S3263C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3263C1[];
Class_Descriptor cd_S3263C1 = {  "S3263C1", // class name
  bases_S3263C1, 4,
  &(vtc_S3263C1[0]), // expected_vtbl_contents
  &(vtt_S3263C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3263C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3263C1),23, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3263C1),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10266C3  {
  void *s10266c3f0[10];
};
//SIG(-1 S10266C3) C1{ Fp[10]}



static void Test_S10266C3()
{
  {
    init_simple_test("S10266C3");
    S10266C3 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S10266C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10266C3)");
    check_field_offset(lv, s10266c3f0, 0, "S10266C3.s10266c3f0");
  }
}
static Arrange_To_Call_Me vS10266C3(Test_S10266C3, "S10266C3", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10266C2  {
  ::S10266C3 s10266c2f0;
  void *s10266c2f1;
  virtual  ~S10266C2(); // _ZN8S10266C2D1Ev
  virtual void  v9(); // _ZN8S10266C22v9Ev
  virtual void  v10(); // _ZN8S10266C23v10Ev
  virtual void  v11(); // _ZN8S10266C23v11Ev
  virtual void  v12(); // _ZN8S10266C23v12Ev
  virtual void  v13(); // _ZN8S10266C23v13Ev
  virtual void  v14(); // _ZN8S10266C23v14Ev
  virtual void  v15(); // _ZN8S10266C23v15Ev
  virtual void  v16(); // _ZN8S10266C23v16Ev
  S10266C2(); // tgen
};
//SIG(-1 S10266C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 FC2{ Fp[10]} Fp}


 S10266C2 ::~S10266C2(){ note_dtor("S10266C2", this);}
void  S10266C2 ::v9(){vfunc_called(this, "_ZN8S10266C22v9Ev");}
void  S10266C2 ::v10(){vfunc_called(this, "_ZN8S10266C23v10Ev");}
void  S10266C2 ::v11(){vfunc_called(this, "_ZN8S10266C23v11Ev");}
void  S10266C2 ::v12(){vfunc_called(this, "_ZN8S10266C23v12Ev");}
void  S10266C2 ::v13(){vfunc_called(this, "_ZN8S10266C23v13Ev");}
void  S10266C2 ::v14(){vfunc_called(this, "_ZN8S10266C23v14Ev");}
void  S10266C2 ::v15(){vfunc_called(this, "_ZN8S10266C23v15Ev");}
void  S10266C2 ::v16(){vfunc_called(this, "_ZN8S10266C23v16Ev");}
S10266C2 ::S10266C2(){ note_ctor("S10266C2", this);} // tgen

static void Test_S10266C2()
{
  extern Class_Descriptor cd_S10266C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S10266C2, buf);
    S10266C2 *dp, &lv = *(dp=new (buf) S10266C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S10266C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10266C2)");
    check_field_offset(lv, s10266c2f0, ABISELECT(8,4), "S10266C2.s10266c2f0");
    check_field_offset(lv, s10266c2f1, ABISELECT(88,44), "S10266C2.s10266c2f1");
    test_class_info(&lv, &cd_S10266C2);
    dp->~S10266C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10266C2(Test_S10266C2, "S10266C2", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S10266C2C1Ev();
extern void _ZN8S10266C2D1Ev();
Name_Map name_map_S10266C2[] = {
  NSPAIR(_ZN8S10266C2C1Ev),
  NSPAIR(_ZN8S10266C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10266C2[];
extern void _ZN8S10266C2D1Ev();
extern void _ZN8S10266C2D0Ev();
extern void _ZN8S10266C22v9Ev();
extern void _ZN8S10266C23v10Ev();
extern void _ZN8S10266C23v11Ev();
extern void _ZN8S10266C23v12Ev();
extern void _ZN8S10266C23v13Ev();
extern void _ZN8S10266C23v14Ev();
extern void _ZN8S10266C23v15Ev();
extern void _ZN8S10266C23v16Ev();
static  VTBL_ENTRY vtc_S10266C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10266C2[0]),
  (VTBL_ENTRY)&_ZN8S10266C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10266C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10266C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v16Ev,
};
extern VTBL_ENTRY _ZTI8S10266C2[];
extern  VTBL_ENTRY _ZTV8S10266C2[];
Class_Descriptor cd_S10266C2 = {  "S10266C2", // class name
  0,0,//no base classes
  &(vtc_S10266C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S10266C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10266C2),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10266C1  : S10266C2 {
  virtual  ~S10266C1(); // _ZN8S10266C1D1Ev
  virtual void  v1(); // _ZN8S10266C12v1Ev
  virtual void  v2(); // _ZN8S10266C12v2Ev
  virtual void  v3(); // _ZN8S10266C12v3Ev
  virtual void  v4(); // _ZN8S10266C12v4Ev
  virtual void  v5(); // _ZN8S10266C12v5Ev
  virtual void  v6(); // _ZN8S10266C12v6Ev
  virtual void  v7(); // _ZN8S10266C12v7Ev
  virtual void  v8(); // _ZN8S10266C12v8Ev
  S10266C1(); // tgen
};
//SIG(1 S10266C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 FC3{ Fp[10]} Fp} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S10266C1 ::~S10266C1(){ note_dtor("S10266C1", this);}
void  S10266C1 ::v1(){vfunc_called(this, "_ZN8S10266C12v1Ev");}
void  S10266C1 ::v2(){vfunc_called(this, "_ZN8S10266C12v2Ev");}
void  S10266C1 ::v3(){vfunc_called(this, "_ZN8S10266C12v3Ev");}
void  S10266C1 ::v4(){vfunc_called(this, "_ZN8S10266C12v4Ev");}
void  S10266C1 ::v5(){vfunc_called(this, "_ZN8S10266C12v5Ev");}
void  S10266C1 ::v6(){vfunc_called(this, "_ZN8S10266C12v6Ev");}
void  S10266C1 ::v7(){vfunc_called(this, "_ZN8S10266C12v7Ev");}
void  S10266C1 ::v8(){vfunc_called(this, "_ZN8S10266C12v8Ev");}
S10266C1 ::S10266C1(){ note_ctor("S10266C1", this);} // tgen

static void Test_S10266C1()
{
  extern Class_Descriptor cd_S10266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S10266C1, buf);
    S10266C1 *dp, &lv = *(dp=new (buf) S10266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S10266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10266C1)");
    check_base_class_offset(lv, (S10266C2*), 0, "S10266C1");
    test_class_info(&lv, &cd_S10266C1);
    dp->~S10266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10266C1(Test_S10266C1, "S10266C1", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S10266C1C1Ev();
extern void _ZN8S10266C1D1Ev();
Name_Map name_map_S10266C1[] = {
  NSPAIR(_ZN8S10266C1C1Ev),
  NSPAIR(_ZN8S10266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10266C2;
extern VTBL_ENTRY _ZTI8S10266C2[];
extern  VTBL_ENTRY _ZTV8S10266C2[];
static Base_Class bases_S10266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10266C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10266C1[];
extern void _ZN8S10266C1D1Ev();
extern void _ZN8S10266C1D0Ev();
extern void _ZN8S10266C22v9Ev();
extern void _ZN8S10266C23v10Ev();
extern void _ZN8S10266C23v11Ev();
extern void _ZN8S10266C23v12Ev();
extern void _ZN8S10266C23v13Ev();
extern void _ZN8S10266C23v14Ev();
extern void _ZN8S10266C23v15Ev();
extern void _ZN8S10266C23v16Ev();
extern void _ZN8S10266C12v1Ev();
extern void _ZN8S10266C12v2Ev();
extern void _ZN8S10266C12v3Ev();
extern void _ZN8S10266C12v4Ev();
extern void _ZN8S10266C12v5Ev();
extern void _ZN8S10266C12v6Ev();
extern void _ZN8S10266C12v7Ev();
extern void _ZN8S10266C12v8Ev();
static  VTBL_ENTRY vtc_S10266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10266C1[0]),
  (VTBL_ENTRY)&_ZN8S10266C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10266C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10266C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v15Ev,
  (VTBL_ENTRY)&_ZN8S10266C23v16Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10266C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S10266C1[];
extern  VTBL_ENTRY _ZTV8S10266C1[];
Class_Descriptor cd_S10266C1 = {  "S10266C1", // class name
  bases_S10266C1, 1,
  &(vtc_S10266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S10266C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10266C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20889C3  {
  short s20889c3f0;
  virtual void  v6(); // _ZN8S20889C32v6Ev
  virtual void  v7(); // _ZN8S20889C32v7Ev
  virtual void  v8(); // _ZN8S20889C32v8Ev
  virtual void  v9(); // _ZN8S20889C32v9Ev
  virtual void  v10(); // _ZN8S20889C33v10Ev
  virtual void  v11(); // _ZN8S20889C33v11Ev
  ~S20889C3(); // tgen
  S20889C3(); // tgen
};
//SIG(-1 S20889C3) C1{ v1 v2 v3 v4 v5 v6 Fs}


void  S20889C3 ::v6(){vfunc_called(this, "_ZN8S20889C32v6Ev");}
void  S20889C3 ::v7(){vfunc_called(this, "_ZN8S20889C32v7Ev");}
void  S20889C3 ::v8(){vfunc_called(this, "_ZN8S20889C32v8Ev");}
void  S20889C3 ::v9(){vfunc_called(this, "_ZN8S20889C32v9Ev");}
void  S20889C3 ::v10(){vfunc_called(this, "_ZN8S20889C33v10Ev");}
void  S20889C3 ::v11(){vfunc_called(this, "_ZN8S20889C33v11Ev");}
S20889C3 ::~S20889C3(){ note_dtor("S20889C3", this);} // tgen
S20889C3 ::S20889C3(){ note_ctor("S20889C3", this);} // tgen

static void Test_S20889C3()
{
  extern Class_Descriptor cd_S20889C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20889C3, buf);
    S20889C3 *dp, &lv = *(dp=new (buf) S20889C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20889C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20889C3)");
    check_field_offset(lv, s20889c3f0, ABISELECT(8,4), "S20889C3.s20889c3f0");
    test_class_info(&lv, &cd_S20889C3);
    dp->~S20889C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20889C3(Test_S20889C3, "S20889C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20889C3C1Ev();
extern void _ZN8S20889C3D1Ev();
Name_Map name_map_S20889C3[] = {
  NSPAIR(_ZN8S20889C3C1Ev),
  NSPAIR(_ZN8S20889C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20889C3[];
extern void _ZN8S20889C32v6Ev();
extern void _ZN8S20889C32v7Ev();
extern void _ZN8S20889C32v8Ev();
extern void _ZN8S20889C32v9Ev();
extern void _ZN8S20889C33v10Ev();
extern void _ZN8S20889C33v11Ev();
static  VTBL_ENTRY vtc_S20889C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20889C3[0]),
  (VTBL_ENTRY)&_ZN8S20889C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v11Ev,
};
extern VTBL_ENTRY _ZTI8S20889C3[];
extern  VTBL_ENTRY _ZTV8S20889C3[];
Class_Descriptor cd_S20889C3 = {  "S20889C3", // class name
  0,0,//no base classes
  &(vtc_S20889C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20889C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20889C3),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  S20889C2  : virtual S20889C3 {
  ::S20889C3 s20889c2f0;
  virtual void  v12(); // _ZN8S20889C23v12Ev
  virtual void  v13(); // _ZN8S20889C23v13Ev
  virtual void  v14(); // _ZN8S20889C23v14Ev
  virtual void  v15(); // _ZN8S20889C23v15Ev
  ~S20889C2(); // tgen
  S20889C2(); // tgen
};
//SIG(-1 S20889C2) C1{ VBC2{ v5 v6 v7 v8 v9 v10 Fs} v1 v2 v3 v4 FC2}


void  S20889C2 ::v12(){vfunc_called(this, "_ZN8S20889C23v12Ev");}
void  S20889C2 ::v13(){vfunc_called(this, "_ZN8S20889C23v13Ev");}
void  S20889C2 ::v14(){vfunc_called(this, "_ZN8S20889C23v14Ev");}
void  S20889C2 ::v15(){vfunc_called(this, "_ZN8S20889C23v15Ev");}
S20889C2 ::~S20889C2(){ note_dtor("S20889C2", this);} // tgen
S20889C2 ::S20889C2(){ note_ctor("S20889C2", this);} // tgen

static void Test_S20889C2()
{
  extern Class_Descriptor cd_S20889C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20889C2, buf);
    S20889C2 *dp, &lv = *(dp=new (buf) S20889C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20889C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20889C2)");
    check_base_class_offset(lv, (S20889C3*), ABISELECT(24,12), "S20889C2");
    check_field_offset(lv, s20889c2f0, ABISELECT(8,4), "S20889C2.s20889c2f0");
    test_class_info(&lv, &cd_S20889C2);
    dp->~S20889C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20889C2(Test_S20889C2, "S20889C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20889C2C1Ev();
extern void _ZN8S20889C2D1Ev();
Name_Map name_map_S20889C2[] = {
  NSPAIR(_ZN8S20889C2C1Ev),
  NSPAIR(_ZN8S20889C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20889C3;
extern VTBL_ENTRY _ZTI8S20889C3[];
extern  VTBL_ENTRY _ZTV8S20889C3[];
static Base_Class bases_S20889C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20889C3,    ABISELECT(24,12), //bcp->offset
    7, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20889C2[];
extern void _ZN8S20889C23v12Ev();
extern void _ZN8S20889C23v13Ev();
extern void _ZN8S20889C23v14Ev();
extern void _ZN8S20889C23v15Ev();
extern void _ZN8S20889C32v6Ev();
extern void _ZN8S20889C32v7Ev();
extern void _ZN8S20889C32v8Ev();
extern void _ZN8S20889C32v9Ev();
extern void _ZN8S20889C33v10Ev();
extern void _ZN8S20889C33v11Ev();
static  VTBL_ENTRY vtc_S20889C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20889C2[0]),
  (VTBL_ENTRY)&_ZN8S20889C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20889C2[0]),
  (VTBL_ENTRY)&_ZN8S20889C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S20889C2[];
static  VTT_ENTRY vtt_S20889C2[] = {
  {&(_ZTV8S20889C2[3]),  3,21},
  {&(_ZTV8S20889C2[15]),  15,21},
};
extern VTBL_ENTRY _ZTI8S20889C2[];
extern  VTBL_ENTRY _ZTV8S20889C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20889C2[];
Class_Descriptor cd_S20889C2 = {  "S20889C2", // class name
  bases_S20889C2, 1,
  &(vtc_S20889C2[0]), // expected_vtbl_contents
  &(vtt_S20889C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20889C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20889C2),21, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20889C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20889C1  : virtual S20889C2 {
  ::S20889C2 s20889c1f0;
  char s20889c1f1;
  long double s20889c1f2;
  virtual void  v1(); // _ZN8S20889C12v1Ev
  virtual void  v2(); // _ZN8S20889C12v2Ev
  virtual void  v3(); // _ZN8S20889C12v3Ev
  virtual void  v4(); // _ZN8S20889C12v4Ev
  virtual void  v5(); // _ZN8S20889C12v5Ev
  ~S20889C1(); // tgen
  S20889C1(); // tgen
};
//SIG(1 S20889C1) C1{ VBC2{ VBC3{ v6 v7 v8 v9 v10 v11 Fs} v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5 FC2 Fc FD}


void  S20889C1 ::v1(){vfunc_called(this, "_ZN8S20889C12v1Ev");}
void  S20889C1 ::v2(){vfunc_called(this, "_ZN8S20889C12v2Ev");}
void  S20889C1 ::v3(){vfunc_called(this, "_ZN8S20889C12v3Ev");}
void  S20889C1 ::v4(){vfunc_called(this, "_ZN8S20889C12v4Ev");}
void  S20889C1 ::v5(){vfunc_called(this, "_ZN8S20889C12v5Ev");}
S20889C1 ::~S20889C1(){ note_dtor("S20889C1", this);} // tgen
S20889C1 ::S20889C1(){ note_ctor("S20889C1", this);} // tgen

static void Test_S20889C1()
{
  extern Class_Descriptor cd_S20889C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,16)];
    init_test(&cd_S20889C1, buf);
    S20889C1 *dp, &lv = *(dp=new (buf) S20889C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,60), "sizeof(S20889C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20889C1)");
    check_base_class_offset(lv, (S20889C3*)(S20889C2*), ABISELECT(104,52), "S20889C1");
    check_base_class_offset(lv, (S20889C2*), ABISELECT(80,40), "S20889C1");
    check_field_offset(lv, s20889c1f0, ABISELECT(8,4), "S20889C1.s20889c1f0");
    check_field_offset(lv, s20889c1f1, ABISELECT(48,24), "S20889C1.s20889c1f1");
    check_field_offset(lv, s20889c1f2, ABISELECT(64,28), "S20889C1.s20889c1f2");
    test_class_info(&lv, &cd_S20889C1);
    dp->~S20889C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20889C1(Test_S20889C1, "S20889C1", ABISELECT(128,60));

#else // __cplusplus

extern void _ZN8S20889C1C1Ev();
extern void _ZN8S20889C1D1Ev();
Name_Map name_map_S20889C1[] = {
  NSPAIR(_ZN8S20889C1C1Ev),
  NSPAIR(_ZN8S20889C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20889C3;
extern VTBL_ENTRY _ZTI8S20889C3[];
extern  VTBL_ENTRY _ZTV8S20889C3[];
extern Class_Descriptor cd_S20889C2;
extern VTBL_ENTRY _ZTI8S20889C2[];
extern  VTBL_ENTRY _ZTV8S20889C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20889C2[];
static Base_Class bases_S20889C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20889C3,    ABISELECT(104,52), //bcp->offset
    20, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20889C2,    ABISELECT(80,40), //bcp->offset
    9, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20889C1[];
extern void _ZN8S20889C12v1Ev();
extern void _ZN8S20889C12v2Ev();
extern void _ZN8S20889C12v3Ev();
extern void _ZN8S20889C12v4Ev();
extern void _ZN8S20889C12v5Ev();
extern void _ZN8S20889C23v12Ev();
extern void _ZN8S20889C23v13Ev();
extern void _ZN8S20889C23v14Ev();
extern void _ZN8S20889C23v15Ev();
extern void _ZN8S20889C32v6Ev();
extern void _ZN8S20889C32v7Ev();
extern void _ZN8S20889C32v8Ev();
extern void _ZN8S20889C32v9Ev();
extern void _ZN8S20889C33v10Ev();
extern void _ZN8S20889C33v11Ev();
static  VTBL_ENTRY vtc_S20889C1[] = {
  ABISELECT(104,52),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20889C1[0]),
  (VTBL_ENTRY)&_ZN8S20889C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20889C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20889C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20889C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20889C12v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20889C1[0]),
  (VTBL_ENTRY)&_ZN8S20889C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20889C1[0]),
  (VTBL_ENTRY)&_ZN8S20889C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S20889C1[];
extern void _ZN8S20889C23v12Ev();
extern void _ZN8S20889C23v13Ev();
extern void _ZN8S20889C23v14Ev();
extern void _ZN8S20889C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20889C2__8S20889C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20889C2[0]),
  (VTBL_ENTRY)&_ZN8S20889C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20889C23v15Ev,
};
extern void _ZN8S20889C32v6Ev();
extern void _ZN8S20889C32v7Ev();
extern void _ZN8S20889C32v8Ev();
extern void _ZN8S20889C32v9Ev();
extern void _ZN8S20889C33v10Ev();
extern void _ZN8S20889C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S20889C3__8S20889C2__8S20889C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20889C2[0]),
  (VTBL_ENTRY)&_ZN8S20889C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20889C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20889C33v11Ev,
};
static  VTT_ENTRY vtt_S20889C1[] = {
  {&(_ZTV8S20889C1[4]),  4,34},
  {&(_ZTV8S20889C1[16]),  16,34},
  {&(_ZTV8S20889C1[28]),  28,34},
  {&(_tg__ZTV8S20889C2__8S20889C1[3]),  3,7},
  {&(_tg__ZTV8S20889C3__8S20889C2__8S20889C1[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20889C1[];
extern  VTBL_ENTRY _ZTV8S20889C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20889C1[];
Class_Descriptor cd_S20889C1 = {  "S20889C1", // class name
  bases_S20889C1, 2,
  &(vtc_S20889C1[0]), // expected_vtbl_contents
  &(vtt_S20889C1[0]), // expected_vtt_contents
  ABISELECT(128,60), // object size
  NSPAIRA(_ZTI8S20889C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20889C1),34, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20889C1),5, //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  S20056C2  {
  void *s20056c2f0;
  virtual void  v2(); // _ZN8S20056C22v2Ev
  virtual void  v3(); // _ZN8S20056C22v3Ev
  virtual void  v4(); // _ZN8S20056C22v4Ev
  virtual void  v5(); // _ZN8S20056C22v5Ev
  virtual void  v6(); // _ZN8S20056C22v6Ev
  virtual void  v7(); // _ZN8S20056C22v7Ev
  ~S20056C2(); // tgen
  S20056C2(); // tgen
};
//SIG(-1 S20056C2) C1{ v1 v2 v3 v4 v5 v6 Fp}


void  S20056C2 ::v2(){vfunc_called(this, "_ZN8S20056C22v2Ev");}
void  S20056C2 ::v3(){vfunc_called(this, "_ZN8S20056C22v3Ev");}
void  S20056C2 ::v4(){vfunc_called(this, "_ZN8S20056C22v4Ev");}
void  S20056C2 ::v5(){vfunc_called(this, "_ZN8S20056C22v5Ev");}
void  S20056C2 ::v6(){vfunc_called(this, "_ZN8S20056C22v6Ev");}
void  S20056C2 ::v7(){vfunc_called(this, "_ZN8S20056C22v7Ev");}
S20056C2 ::~S20056C2(){ note_dtor("S20056C2", this);} // tgen
S20056C2 ::S20056C2(){ note_ctor("S20056C2", this);} // tgen

static void Test_S20056C2()
{
  extern Class_Descriptor cd_S20056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20056C2, buf);
    S20056C2 *dp, &lv = *(dp=new (buf) S20056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20056C2)");
    check_field_offset(lv, s20056c2f0, ABISELECT(8,4), "S20056C2.s20056c2f0");
    test_class_info(&lv, &cd_S20056C2);
    dp->~S20056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20056C2(Test_S20056C2, "S20056C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20056C2C1Ev();
extern void _ZN8S20056C2D1Ev();
Name_Map name_map_S20056C2[] = {
  NSPAIR(_ZN8S20056C2C1Ev),
  NSPAIR(_ZN8S20056C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20056C2[];
extern void _ZN8S20056C22v2Ev();
extern void _ZN8S20056C22v3Ev();
extern void _ZN8S20056C22v4Ev();
extern void _ZN8S20056C22v5Ev();
extern void _ZN8S20056C22v6Ev();
extern void _ZN8S20056C22v7Ev();
static  VTBL_ENTRY vtc_S20056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20056C2[0]),
  (VTBL_ENTRY)&_ZN8S20056C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20056C2[];
extern  VTBL_ENTRY _ZTV8S20056C2[];
Class_Descriptor cd_S20056C2 = {  "S20056C2", // class name
  0,0,//no base classes
  &(vtc_S20056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20056C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20056C2),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  S20056C4  {
  short s20056c4f0;
  virtual  ~S20056C4(); // _ZN8S20056C4D1Ev
  virtual void  v8(); // _ZN8S20056C42v8Ev
  virtual void  v9(); // _ZN8S20056C42v9Ev
  virtual void  v10(); // _ZN8S20056C43v10Ev
  S20056C4(); // tgen
};
//SIG(-1 S20056C4) C1{ vd v1 v2 v3 Fs}


 S20056C4 ::~S20056C4(){ note_dtor("S20056C4", this);}
void  S20056C4 ::v8(){vfunc_called(this, "_ZN8S20056C42v8Ev");}
void  S20056C4 ::v9(){vfunc_called(this, "_ZN8S20056C42v9Ev");}
void  S20056C4 ::v10(){vfunc_called(this, "_ZN8S20056C43v10Ev");}
S20056C4 ::S20056C4(){ note_ctor("S20056C4", this);} // tgen

static void Test_S20056C4()
{
  extern Class_Descriptor cd_S20056C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20056C4, buf);
    S20056C4 *dp, &lv = *(dp=new (buf) S20056C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20056C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20056C4)");
    check_field_offset(lv, s20056c4f0, ABISELECT(8,4), "S20056C4.s20056c4f0");
    test_class_info(&lv, &cd_S20056C4);
    dp->~S20056C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20056C4(Test_S20056C4, "S20056C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20056C4C1Ev();
extern void _ZN8S20056C4D1Ev();
Name_Map name_map_S20056C4[] = {
  NSPAIR(_ZN8S20056C4C1Ev),
  NSPAIR(_ZN8S20056C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20056C4[];
extern void _ZN8S20056C4D1Ev();
extern void _ZN8S20056C4D0Ev();
extern void _ZN8S20056C42v8Ev();
extern void _ZN8S20056C42v9Ev();
extern void _ZN8S20056C43v10Ev();
static  VTBL_ENTRY vtc_S20056C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20056C4[0]),
  (VTBL_ENTRY)&_ZN8S20056C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20056C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20056C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20056C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20056C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S20056C4[];
extern  VTBL_ENTRY _ZTV8S20056C4[];
Class_Descriptor cd_S20056C4 = {  "S20056C4", // class name
  0,0,//no base classes
  &(vtc_S20056C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20056C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20056C4),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  S20056C3  : virtual S20056C4 {
  int s20056c3f0;
  virtual  ~S20056C3(); // _ZN8S20056C3D2Ev
  virtual void  v11(); // _ZN8S20056C33v11Ev
  virtual void  v12(); // _ZN8S20056C33v12Ev
  virtual void  v13(); // _ZN8S20056C33v13Ev
  virtual void  v14(); // _ZN8S20056C33v14Ev
  S20056C3(); // tgen
};
//SIG(-1 S20056C3) C1{ VBC2{ vd v5 v6 v7 Fs} vd v1 v2 v3 v4 Fi}


 S20056C3 ::~S20056C3(){ note_dtor("S20056C3", this);}
void  S20056C3 ::v11(){vfunc_called(this, "_ZN8S20056C33v11Ev");}
void  S20056C3 ::v12(){vfunc_called(this, "_ZN8S20056C33v12Ev");}
void  S20056C3 ::v13(){vfunc_called(this, "_ZN8S20056C33v13Ev");}
void  S20056C3 ::v14(){vfunc_called(this, "_ZN8S20056C33v14Ev");}
S20056C3 ::S20056C3(){ note_ctor("S20056C3", this);} // tgen

static void Test_S20056C3()
{
  extern Class_Descriptor cd_S20056C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20056C3, buf);
    S20056C3 *dp, &lv = *(dp=new (buf) S20056C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20056C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20056C3)");
    check_base_class_offset(lv, (S20056C4*), ABISELECT(16,8), "S20056C3");
    check_field_offset(lv, s20056c3f0, ABISELECT(8,4), "S20056C3.s20056c3f0");
    test_class_info(&lv, &cd_S20056C3);
    dp->~S20056C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20056C3(Test_S20056C3, "S20056C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20056C3C1Ev();
extern void _ZN8S20056C3D2Ev();
Name_Map name_map_S20056C3[] = {
  NSPAIR(_ZN8S20056C3C1Ev),
  NSPAIR(_ZN8S20056C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20056C4;
extern VTBL_ENTRY _ZTI8S20056C4[];
extern  VTBL_ENTRY _ZTV8S20056C4[];
static Base_Class bases_S20056C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20056C4,    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
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20056C3[];
extern void _ZN8S20056C3D1Ev();
extern void _ZN8S20056C3D0Ev();
extern void _ZN8S20056C33v11Ev();
extern void _ZN8S20056C33v12Ev();
extern void _ZN8S20056C33v13Ev();
extern void _ZN8S20056C33v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S20056C3D1Ev,_ZTv0_n12_N8S20056C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20056C3D1Ev,_ZThn8_N8S20056C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20056C3D0Ev,_ZTv0_n12_N8S20056C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S20056C3D0Ev,_ZThn8_N8S20056C3D0Ev)() __attribute__((weak));
extern void _ZN8S20056C42v8Ev();
extern void _ZN8S20056C42v9Ev();
extern void _ZN8S20056C43v10Ev();
static  VTBL_ENTRY vtc_S20056C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20056C3[0]),
  (VTBL_ENTRY)&_ZN8S20056C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20056C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v14Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20056C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20056C3D1Ev,_ZTv0_n12_N8S20056C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20056C3D0Ev,_ZTv0_n12_N8S20056C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20056C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20056C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20056C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20056C3[];
static  VTT_ENTRY vtt_S20056C3[] = {
  {&(_ZTV8S20056C3[3]),  3,20},
  {&(_ZTV8S20056C3[15]),  15,20},
};
extern VTBL_ENTRY _ZTI8S20056C3[];
extern  VTBL_ENTRY _ZTV8S20056C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20056C3[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20056C3D0Ev,_ZTv0_n12_N8S20056C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20056C3D0Ev,_ZThn8_N8S20056C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20056C3D1Ev,_ZTv0_n12_N8S20056C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20056C3D1Ev,_ZThn8_N8S20056C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20056C3 = {  "S20056C3", // class name
  bases_S20056C3, 1,
  &(vtc_S20056C3[0]), // expected_vtbl_contents
  &(vtt_S20056C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20056C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20056C3),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20056C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20056C1  : virtual S20056C2 , S20056C3 {
  virtual void  v1(); // _ZN8S20056C12v1Ev
  ~S20056C1(); // tgen
  S20056C1(); // tgen
};
//SIG(1 S20056C1) C1{ VBC2{ v2 v3 v4 v5 v6 v7 Fp} BC3{ VBC4{ vd v8 v9 v10 Fs} vd v11 v12 v13 v14 Fi} v1}


void  S20056C1 ::v1(){vfunc_called(this, "_ZN8S20056C12v1Ev");}
S20056C1 ::~S20056C1(){ note_dtor("S20056C1", this);} // tgen
S20056C1 ::S20056C1(){ note_ctor("S20056C1", this);} // tgen

static void Test_S20056C1()
{
  extern Class_Descriptor cd_S20056C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20056C1, buf);
    S20056C1 *dp, &lv = *(dp=new (buf) S20056C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20056C1)");
    check_base_class_offset(lv, (S20056C2*), ABISELECT(16,8), "S20056C1");
    check_base_class_offset(lv, (S20056C4*)(S20056C3*), ABISELECT(32,16), "S20056C1");
    check_base_class_offset(lv, (S20056C3*), 0, "S20056C1");
    test_class_info(&lv, &cd_S20056C1);
    dp->~S20056C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20056C1(Test_S20056C1, "S20056C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20056C1C1Ev();
extern void _ZN8S20056C1D1Ev();
Name_Map name_map_S20056C1[] = {
  NSPAIR(_ZN8S20056C1C1Ev),
  NSPAIR(_ZN8S20056C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20056C2;
extern VTBL_ENTRY _ZTI8S20056C2[];
extern  VTBL_ENTRY _ZTV8S20056C2[];
extern Class_Descriptor cd_S20056C4;
extern VTBL_ENTRY _ZTI8S20056C4[];
extern  VTBL_ENTRY _ZTV8S20056C4[];
extern Class_Descriptor cd_S20056C3;
extern VTBL_ENTRY _ZTI8S20056C3[];
extern  VTBL_ENTRY _ZTV8S20056C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20056C3[];
static Base_Class bases_S20056C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20056C2,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20056C4,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20056C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20056C1[];
extern void _ZN8S20056C1D1Ev();
extern void _ZN8S20056C1D0Ev();
extern void _ZN8S20056C33v11Ev();
extern void _ZN8S20056C33v12Ev();
extern void _ZN8S20056C33v13Ev();
extern void _ZN8S20056C33v14Ev();
extern void _ZN8S20056C12v1Ev();
extern void _ZN8S20056C22v2Ev();
extern void _ZN8S20056C22v3Ev();
extern void _ZN8S20056C22v4Ev();
extern void _ZN8S20056C22v5Ev();
extern void _ZN8S20056C22v6Ev();
extern void _ZN8S20056C22v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S20056C1D1Ev,_ZTv0_n12_N8S20056C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20056C1D1Ev,_ZThn16_N8S20056C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20056C1D0Ev,_ZTv0_n12_N8S20056C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20056C1D0Ev,_ZThn16_N8S20056C1D0Ev)() __attribute__((weak));
extern void _ZN8S20056C42v8Ev();
extern void _ZN8S20056C42v9Ev();
extern void _ZN8S20056C43v10Ev();
static  VTBL_ENTRY vtc_S20056C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20056C1[0]),
  (VTBL_ENTRY)&_ZN8S20056C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20056C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20056C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20056C1[0]),
  (VTBL_ENTRY)&_ZN8S20056C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20056C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20056C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20056C1D1Ev,_ZTv0_n12_N8S20056C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20056C1D0Ev,_ZTv0_n12_N8S20056C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20056C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20056C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20056C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S20056C1[];
extern void _ZN8S20056C3D1Ev();
extern void _ZN8S20056C3D0Ev();
extern void _ZN8S20056C33v11Ev();
extern void _ZN8S20056C33v12Ev();
extern void _ZN8S20056C33v13Ev();
extern void _ZN8S20056C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20056C3__8S20056C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20056C3[0]),
  (VTBL_ENTRY)&_ZN8S20056C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20056C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20056C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20056C3D1Ev,_ZTv0_n12_N8S20056C3D1Ev)();
extern void ABISELECT(_ZThn32_N8S20056C3D1Ev,_ZThn16_N8S20056C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20056C3D0Ev,_ZTv0_n12_N8S20056C3D0Ev)();
extern void ABISELECT(_ZThn32_N8S20056C3D0Ev,_ZThn16_N8S20056C3D0Ev)() __attribute__((weak));
extern void _ZN8S20056C42v8Ev();
extern void _ZN8S20056C42v9Ev();
extern void _ZN8S20056C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20056C4__8S20056C3__8S20056C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20056C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20056C3D1Ev,_ZTv0_n12_N8S20056C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20056C3D0Ev,_ZTv0_n12_N8S20056C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20056C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20056C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20056C43v10Ev,
};
static  VTT_ENTRY vtt_S20056C1[] = {
  {&(_ZTV8S20056C1[4]),  4,36},
  {&(_tg__ZTV8S20056C3__8S20056C1[3]),  3,9},
  {&(_tg__ZTV8S20056C4__8S20056C3__8S20056C1[6]),  6,11},
  {&(_ZTV8S20056C1[19]),  19,36},
  {&(_ZTV8S20056C1[31]),  31,36},
};
extern VTBL_ENTRY _ZTI8S20056C1[];
extern  VTBL_ENTRY _ZTV8S20056C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20056C1[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20056C3D0Ev,_ZTv0_n12_N8S20056C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20056C3D0Ev,_ZThn16_N8S20056C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20056C3D1Ev,_ZTv0_n12_N8S20056C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20056C3D1Ev,_ZThn16_N8S20056C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20056C1D0Ev,_ZTv0_n12_N8S20056C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20056C1D0Ev,_ZThn16_N8S20056C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20056C1D1Ev,_ZTv0_n12_N8S20056C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20056C1D1Ev,_ZThn16_N8S20056C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20056C1 = {  "S20056C1", // class name
  bases_S20056C1, 3,
  &(vtc_S20056C1[0]), // expected_vtbl_contents
  &(vtt_S20056C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20056C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20056C1),36, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20056C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4391C3  {
  ::S22028C11_nt s4391c3f0;
  int s4391c3f1[2];
  char s4391c3f2;
  virtual  ~S4391C3(); // _ZN7S4391C3D1Ev
  virtual void  v2(); // _ZN7S4391C32v2Ev
  virtual void  v3(); // _ZN7S4391C32v3Ev
  virtual void  v4(); // _ZN7S4391C32v4Ev
  S4391C3(); // tgen
};
//SIG(-1 S4391C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4391C3 ::~S4391C3(){ note_dtor("S4391C3", this);}
void  S4391C3 ::v2(){vfunc_called(this, "_ZN7S4391C32v2Ev");}
void  S4391C3 ::v3(){vfunc_called(this, "_ZN7S4391C32v3Ev");}
void  S4391C3 ::v4(){vfunc_called(this, "_ZN7S4391C32v4Ev");}
S4391C3 ::S4391C3(){ note_ctor("S4391C3", this);} // tgen

static void Test_S4391C3()
{
  extern Class_Descriptor cd_S4391C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4391C3, buf);
    S4391C3 *dp, &lv = *(dp=new (buf) S4391C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4391C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4391C3)");
    check_field_offset(lv, s4391c3f0, ABISELECT(8,4), "S4391C3.s4391c3f0");
    check_field_offset(lv, s4391c3f1, ABISELECT(24,16), "S4391C3.s4391c3f1");
    check_field_offset(lv, s4391c3f2, ABISELECT(32,24), "S4391C3.s4391c3f2");
    test_class_info(&lv, &cd_S4391C3);
    dp->~S4391C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4391C3(Test_S4391C3, "S4391C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4391C3C1Ev();
extern void _ZN7S4391C3D1Ev();
Name_Map name_map_S4391C3[] = {
  NSPAIR(_ZN7S4391C3C1Ev),
  NSPAIR(_ZN7S4391C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4391C3[];
extern void _ZN7S4391C3D1Ev();
extern void _ZN7S4391C3D0Ev();
extern void _ZN7S4391C32v2Ev();
extern void _ZN7S4391C32v3Ev();
extern void _ZN7S4391C32v4Ev();
static  VTBL_ENTRY vtc_S4391C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4391C3[0]),
  (VTBL_ENTRY)&_ZN7S4391C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4391C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4391C3[];
extern  VTBL_ENTRY _ZTV7S4391C3[];
Class_Descriptor cd_S4391C3 = {  "S4391C3", // class name
  0,0,//no base classes
  &(vtc_S4391C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4391C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4391C3),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  S4391C2_nt  : S4391C3 {
  void *s4391c2f0;
  virtual void  v5(); // _ZN10S4391C2_nt2v5Ev
  virtual void  v6(); // _ZN10S4391C2_nt2v6Ev
  ~S4391C2_nt(); // tgen
  S4391C2_nt(); // tgen
};
//SIG(-1 S4391C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4391C2_nt ::v5(){vfunc_called(this, "_ZN10S4391C2_nt2v5Ev");}
void  S4391C2_nt ::v6(){vfunc_called(this, "_ZN10S4391C2_nt2v6Ev");}
S4391C2_nt ::~S4391C2_nt(){ note_dtor("S4391C2_nt", this);} // tgen
S4391C2_nt ::S4391C2_nt(){ note_ctor("S4391C2_nt", this);} // tgen

//skip512 S4391C2_nt

#else // __cplusplus

extern void _ZN10S4391C2_ntC1Ev();
extern void _ZN10S4391C2_ntD1Ev();
Name_Map name_map_S4391C2_nt[] = {
  NSPAIR(_ZN10S4391C2_ntC1Ev),
  NSPAIR(_ZN10S4391C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4391C3;
extern VTBL_ENTRY _ZTI7S4391C3[];
extern  VTBL_ENTRY _ZTV7S4391C3[];
static Base_Class bases_S4391C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4391C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4391C2_nt[];
extern void _ZN10S4391C2_ntD1Ev();
extern void _ZN10S4391C2_ntD0Ev();
extern void _ZN7S4391C32v2Ev();
extern void _ZN7S4391C32v3Ev();
extern void _ZN7S4391C32v4Ev();
extern void _ZN10S4391C2_nt2v5Ev();
extern void _ZN10S4391C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S4391C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4391C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4391C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4391C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4391C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4391C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S4391C2_nt[];
VTBL_ENTRY *P__ZTI10S4391C2_nt = _ZTI10S4391C2_nt; 
extern  VTBL_ENTRY _ZTV10S4391C2_nt[];
Class_Descriptor cd_S4391C2_nt = {  "S4391C2_nt", // class name
  bases_S4391C2_nt, 1,
  &(vtc_S4391C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S4391C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4391C2_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4391C1  : S4391C2_nt {
  ::S22028C68_nt s4391c1f0;
  void *s4391c1f1;
  int s4391c1f2;
  virtual void  v1(); // _ZN7S4391C12v1Ev
  ~S4391C1(); // tgen
  S4391C1(); // tgen
};
//SIG(1 S4391C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp} Fp Fi}


void  S4391C1 ::v1(){vfunc_called(this, "_ZN7S4391C12v1Ev");}
S4391C1 ::~S4391C1(){ note_dtor("S4391C1", this);} // tgen
S4391C1 ::S4391C1(){ note_ctor("S4391C1", this);} // tgen

static void Test_S4391C1()
{
  extern Class_Descriptor cd_S4391C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S4391C1, buf);
    S4391C1 *dp, &lv = *(dp=new (buf) S4391C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S4391C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4391C1)");
    check_base_class_offset(lv, (S4391C3*)(S4391C2_nt*), 0, "S4391C1");
    check_base_class_offset(lv, (S4391C2_nt*), 0, "S4391C1");
    check_field_offset(lv, s4391c1f0, ABISELECT(48,32), "S4391C1.s4391c1f0");
    check_field_offset(lv, s4391c1f1, ABISELECT(56,36), "S4391C1.s4391c1f1");
    check_field_offset(lv, s4391c1f2, ABISELECT(64,40), "S4391C1.s4391c1f2");
    test_class_info(&lv, &cd_S4391C1);
    dp->~S4391C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4391C1(Test_S4391C1, "S4391C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S4391C1C1Ev();
extern void _ZN7S4391C1D1Ev();
Name_Map name_map_S4391C1[] = {
  NSPAIR(_ZN7S4391C1C1Ev),
  NSPAIR(_ZN7S4391C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4391C3;
extern VTBL_ENTRY _ZTI7S4391C3[];
extern  VTBL_ENTRY _ZTV7S4391C3[];
extern Class_Descriptor cd_S4391C2_nt;
extern VTBL_ENTRY _ZTI10S4391C2_nt[];
extern  VTBL_ENTRY _ZTV10S4391C2_nt[];
static Base_Class bases_S4391C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4391C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4391C2_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 _ZTI7S4391C1[];
extern void _ZN7S4391C1D1Ev();
extern void _ZN7S4391C1D0Ev();
extern void _ZN7S4391C32v2Ev();
extern void _ZN7S4391C32v3Ev();
extern void _ZN7S4391C32v4Ev();
extern void _ZN10S4391C2_nt2v5Ev();
extern void _ZN10S4391C2_nt2v6Ev();
extern void _ZN7S4391C12v1Ev();
static  VTBL_ENTRY vtc_S4391C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4391C1[0]),
  (VTBL_ENTRY)&_ZN7S4391C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4391C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4391C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4391C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4391C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN7S4391C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4391C1[];
extern  VTBL_ENTRY _ZTV7S4391C1[];
Class_Descriptor cd_S4391C1 = {  "S4391C1", // class name
  bases_S4391C1, 2,
  &(vtc_S4391C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S4391C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4391C1),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

union  S12893C2  {
  void *s12893c2f0;
  void *s12893c2f1;
  void *s12893c2f2;
  void *s12893c2f3;
  void *s12893c2f4;
  void *s12893c2f5;
  void *s12893c2f6;
  void *s12893c2f7;
  void *s12893c2f8;
  void *s12893c2f9;
  void *s12893c2f10;
  void *s12893c2f11;
  void *s12893c2f12;
  void *s12893c2f13;
  void *s12893c2f14;
  void *s12893c2f15;
  void *s12893c2f16;
  void *s12893c2f17;
  void *s12893c2f18;
  void *s12893c2f19;
  void *s12893c2f20;
  void *s12893c2f21;
};
//SIG(1 S12893C2) U1{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12893C1  {
  int s12893c1f0;
  ::S12893C2 s12893c1f1;
};
//SIG(1 S12893C1) C1{ Fi FU2{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}}



static void Test_S12893C1()
{
  {
    init_simple_test("S12893C1");
    S12893C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12893C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12893C1)");
    check_field_offset(lv, s12893c1f0, 0, "S12893C1.s12893c1f0");
    check_field_offset(lv, s12893c1f1, ABISELECT(8,4), "S12893C1.s12893c1f1");
  }
}
static Arrange_To_Call_Me vS12893C1(Test_S12893C1, "S12893C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19261C3  {
  void *s19261c3f0[2];
  int s19261c3f1;
  virtual void  v1(); // _ZN8S19261C32v1Ev
  virtual void  v2(); // _ZN8S19261C32v2Ev
  ~S19261C3(); // tgen
  S19261C3(); // tgen
};
//SIG(-1 S19261C3) C1{ v1 v2 Fp[2] Fi}


void  S19261C3 ::v1(){vfunc_called(this, "_ZN8S19261C32v1Ev");}
void  S19261C3 ::v2(){vfunc_called(this, "_ZN8S19261C32v2Ev");}
S19261C3 ::~S19261C3(){ note_dtor("S19261C3", this);} // tgen
S19261C3 ::S19261C3(){ note_ctor("S19261C3", this);} // tgen

static void Test_S19261C3()
{
  extern Class_Descriptor cd_S19261C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19261C3, buf);
    S19261C3 *dp, &lv = *(dp=new (buf) S19261C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19261C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19261C3)");
    check_field_offset(lv, s19261c3f0, ABISELECT(8,4), "S19261C3.s19261c3f0");
    check_field_offset(lv, s19261c3f1, ABISELECT(24,12), "S19261C3.s19261c3f1");
    test_class_info(&lv, &cd_S19261C3);
    dp->~S19261C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19261C3(Test_S19261C3, "S19261C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19261C3C1Ev();
extern void _ZN8S19261C3D1Ev();
Name_Map name_map_S19261C3[] = {
  NSPAIR(_ZN8S19261C3C1Ev),
  NSPAIR(_ZN8S19261C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19261C3[];
extern void _ZN8S19261C32v1Ev();
extern void _ZN8S19261C32v2Ev();
static  VTBL_ENTRY vtc_S19261C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19261C3[0]),
  (VTBL_ENTRY)&_ZN8S19261C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19261C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S19261C3[];
extern  VTBL_ENTRY _ZTV8S19261C3[];
Class_Descriptor cd_S19261C3 = {  "S19261C3", // class name
  0,0,//no base classes
  &(vtc_S19261C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19261C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19261C3),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  S19261C2  : S19261C3 {
  ::S3135C4 s19261c2f0;
  ::S19261C3 s19261c2f1;
  __tsi64 s19261c2f2;
  virtual  ~S19261C2(); // _ZN8S19261C2D1Ev
  S19261C2(); // tgen
};
//SIG(-1 S19261C2) C1{ BC2{ v1 v2 Fp[2] Fi} vd FU3{ m FD[2] FD[6] FL Fi:32 Fs FD} FC2 FL}


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

static void Test_S19261C2()
{
  extern Class_Descriptor cd_S19261C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,29)];
    init_test(&cd_S19261C2, buf);
    S19261C2 *dp, &lv = *(dp=new (buf) S19261C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,112), "sizeof(S19261C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19261C2)");
    check_base_class_offset(lv, (S19261C3*), 0, "S19261C2");
    check_field_offset(lv, s19261c2f0, ABISELECT(32,16), "S19261C2.s19261c2f0");
    check_field_offset(lv, s19261c2f1, ABISELECT(128,88), "S19261C2.s19261c2f1");
    check_field_offset(lv, s19261c2f2, ABISELECT(160,104), "S19261C2.s19261c2f2");
    test_class_info(&lv, &cd_S19261C2);
    dp->~S19261C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19261C2(Test_S19261C2, "S19261C2", ABISELECT(176,112));

#else // __cplusplus

extern void _ZN8S19261C2C1Ev();
extern void _ZN8S19261C2D1Ev();
Name_Map name_map_S19261C2[] = {
  NSPAIR(_ZN8S19261C2C1Ev),
  NSPAIR(_ZN8S19261C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19261C3;
extern VTBL_ENTRY _ZTI8S19261C3[];
extern  VTBL_ENTRY _ZTV8S19261C3[];
static Base_Class bases_S19261C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19261C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19261C2[];
extern void _ZN8S19261C32v1Ev();
extern void _ZN8S19261C32v2Ev();
extern void _ZN8S19261C2D1Ev();
extern void _ZN8S19261C2D0Ev();
static  VTBL_ENTRY vtc_S19261C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19261C2[0]),
  (VTBL_ENTRY)&_ZN8S19261C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19261C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19261C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19261C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S19261C2[];
extern  VTBL_ENTRY _ZTV8S19261C2[];
Class_Descriptor cd_S19261C2 = {  "S19261C2", // class name
  bases_S19261C2, 1,
  &(vtc_S19261C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,112), // object size
  NSPAIRA(_ZTI8S19261C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19261C2),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  S19261C1  : virtual S19261C2 {
  long s19261c1f0[3];
  ~S19261C1(); // tgen
  S19261C1(); // tgen
};
//SIG(1 S19261C1) C1{ VBC2{ BC3{ v1 v2 Fp[2] Fi} vd FU4{ m FD[2] FD[6] FL Fi:32 Fs FD} FC3 FL} Fl[3]}


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

static void Test_S19261C1()
{
  extern Class_Descriptor cd_S19261C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S19261C1, buf);
    S19261C1 *dp, &lv = *(dp=new (buf) S19261C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S19261C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19261C1)");
    check_base_class_offset(lv, (S19261C3*)(S19261C2*), ABISELECT(32,16), "S19261C1");
    check_base_class_offset(lv, (S19261C2*), ABISELECT(32,16), "S19261C1");
    check_field_offset(lv, s19261c1f0, ABISELECT(8,4), "S19261C1.s19261c1f0");
    test_class_info(&lv, &cd_S19261C1);
    dp->~S19261C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19261C1(Test_S19261C1, "S19261C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN8S19261C1C1Ev();
extern void _ZN8S19261C1D1Ev();
Name_Map name_map_S19261C1[] = {
  NSPAIR(_ZN8S19261C1C1Ev),
  NSPAIR(_ZN8S19261C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19261C3;
extern VTBL_ENTRY _ZTI8S19261C3[];
extern  VTBL_ENTRY _ZTV8S19261C3[];
extern Class_Descriptor cd_S19261C2;
extern VTBL_ENTRY _ZTI8S19261C2[];
extern  VTBL_ENTRY _ZTV8S19261C2[];
static Base_Class bases_S19261C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19261C3,    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
  0, 0},
  {&cd_S19261C2,    ABISELECT(32,16), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19261C1[];
extern void _ZN8S19261C1D1Ev();
extern void _ZN8S19261C1D0Ev();
extern void _ZN8S19261C32v1Ev();
extern void _ZN8S19261C32v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S19261C1D1Ev,_ZTv0_n20_N8S19261C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19261C1D1Ev,_ZThn16_N8S19261C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19261C1D0Ev,_ZTv0_n20_N8S19261C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19261C1D0Ev,_ZThn16_N8S19261C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19261C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19261C1[0]),
  (VTBL_ENTRY)&_ZN8S19261C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19261C1D0Ev,
  ABISELECT(-32,-16),
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19261C1[0]),
  (VTBL_ENTRY)&_ZN8S19261C32v1Ev,
  (VTBL_ENTRY)&_ZN8S19261C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19261C1D1Ev,_ZTv0_n20_N8S19261C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19261C1D0Ev,_ZTv0_n20_N8S19261C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19261C1[];
static  VTT_ENTRY vtt_S19261C1[] = {
  {&(_ZTV8S19261C1[3]),  3,14},
  {&(_ZTV8S19261C1[10]),  10,14},
};
extern VTBL_ENTRY _ZTI8S19261C1[];
extern  VTBL_ENTRY _ZTV8S19261C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19261C1[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19261C1D0Ev,_ZTv0_n20_N8S19261C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19261C1D0Ev,_ZThn16_N8S19261C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19261C1D1Ev,_ZTv0_n20_N8S19261C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19261C1D1Ev,_ZThn16_N8S19261C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19261C1 = {  "S19261C1", // class name
  bases_S19261C1, 2,
  &(vtc_S19261C1[0]), // expected_vtbl_contents
  &(vtt_S19261C1[0]), // expected_vtt_contents
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI8S19261C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19261C1),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19261C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9368C2  {
  ::S22028C11_nt s9368c2f0;
  int s9368c2f1[2];
  char s9368c2f2;
  virtual  ~S9368C2(); // _ZN7S9368C2D1Ev
  virtual void  v3(); // _ZN7S9368C22v3Ev
  virtual void  v4(); // _ZN7S9368C22v4Ev
  virtual void  v5(); // _ZN7S9368C22v5Ev
  S9368C2(); // tgen
};
//SIG(-1 S9368C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9368C2 ::~S9368C2(){ note_dtor("S9368C2", this);}
void  S9368C2 ::v3(){vfunc_called(this, "_ZN7S9368C22v3Ev");}
void  S9368C2 ::v4(){vfunc_called(this, "_ZN7S9368C22v4Ev");}
void  S9368C2 ::v5(){vfunc_called(this, "_ZN7S9368C22v5Ev");}
S9368C2 ::S9368C2(){ note_ctor("S9368C2", this);} // tgen

static void Test_S9368C2()
{
  extern Class_Descriptor cd_S9368C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9368C2, buf);
    S9368C2 *dp, &lv = *(dp=new (buf) S9368C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9368C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9368C2)");
    check_field_offset(lv, s9368c2f0, ABISELECT(8,4), "S9368C2.s9368c2f0");
    check_field_offset(lv, s9368c2f1, ABISELECT(24,16), "S9368C2.s9368c2f1");
    check_field_offset(lv, s9368c2f2, ABISELECT(32,24), "S9368C2.s9368c2f2");
    test_class_info(&lv, &cd_S9368C2);
    dp->~S9368C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9368C2(Test_S9368C2, "S9368C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9368C2C1Ev();
extern void _ZN7S9368C2D1Ev();
Name_Map name_map_S9368C2[] = {
  NSPAIR(_ZN7S9368C2C1Ev),
  NSPAIR(_ZN7S9368C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9368C2[];
extern void _ZN7S9368C2D1Ev();
extern void _ZN7S9368C2D0Ev();
extern void _ZN7S9368C22v3Ev();
extern void _ZN7S9368C22v4Ev();
extern void _ZN7S9368C22v5Ev();
static  VTBL_ENTRY vtc_S9368C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9368C2[0]),
  (VTBL_ENTRY)&_ZN7S9368C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9368C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9368C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9368C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9368C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9368C2[];
extern  VTBL_ENTRY _ZTV7S9368C2[];
Class_Descriptor cd_S9368C2 = {  "S9368C2", // class name
  0,0,//no base classes
  &(vtc_S9368C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9368C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9368C2),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  S9368C1  : S9368C2 {
  void *s9368c1f0;
  ::S22028C73 s9368c1f1;
  void *s9368c1f2;
  virtual  ~S9368C1(); // _ZN7S9368C1D1Ev
  virtual void  v1(); // _ZN7S9368C12v1Ev
  virtual void  v2(); // _ZN7S9368C12v2Ev
  S9368C1(); // tgen
};
//SIG(1 S9368C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp FC5{ m Fp[2]} Fp}


 S9368C1 ::~S9368C1(){ note_dtor("S9368C1", this);}
void  S9368C1 ::v1(){vfunc_called(this, "_ZN7S9368C12v1Ev");}
void  S9368C1 ::v2(){vfunc_called(this, "_ZN7S9368C12v2Ev");}
S9368C1 ::S9368C1(){ note_ctor("S9368C1", this);} // tgen

static void Test_S9368C1()
{
  extern Class_Descriptor cd_S9368C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S9368C1, buf);
    S9368C1 *dp, &lv = *(dp=new (buf) S9368C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S9368C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9368C1)");
    check_base_class_offset(lv, (S9368C2*), 0, "S9368C1");
    check_field_offset(lv, s9368c1f0, ABISELECT(40,28), "S9368C1.s9368c1f0");
    check_field_offset(lv, s9368c1f1, ABISELECT(48,32), "S9368C1.s9368c1f1");
    check_field_offset(lv, s9368c1f2, ABISELECT(64,40), "S9368C1.s9368c1f2");
    test_class_info(&lv, &cd_S9368C1);
    dp->~S9368C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9368C1(Test_S9368C1, "S9368C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S9368C1C1Ev();
extern void _ZN7S9368C1D1Ev();
Name_Map name_map_S9368C1[] = {
  NSPAIR(_ZN7S9368C1C1Ev),
  NSPAIR(_ZN7S9368C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9368C2;
extern VTBL_ENTRY _ZTI7S9368C2[];
extern  VTBL_ENTRY _ZTV7S9368C2[];
static Base_Class bases_S9368C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9368C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9368C1[];
extern void _ZN7S9368C1D1Ev();
extern void _ZN7S9368C1D0Ev();
extern void _ZN7S9368C22v3Ev();
extern void _ZN7S9368C22v4Ev();
extern void _ZN7S9368C22v5Ev();
extern void _ZN7S9368C12v1Ev();
extern void _ZN7S9368C12v2Ev();
static  VTBL_ENTRY vtc_S9368C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9368C1[0]),
  (VTBL_ENTRY)&_ZN7S9368C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9368C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9368C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9368C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9368C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9368C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9368C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9368C1[];
extern  VTBL_ENTRY _ZTV7S9368C1[];
Class_Descriptor cd_S9368C1 = {  "S9368C1", // class name
  bases_S9368C1, 1,
  &(vtc_S9368C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S9368C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9368C1),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  S13575C2_nt  : S16253C7_nt {
};
//SIG(-1 S13575C2_nt) C1{ BC2{ m Fp Fi}}



//skip512 S13575C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S16253C7_nt;
static Base_Class bases_S13575C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16253C7_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  S13575C4  {
  char s13575c4f0;
  ::S22028C14_nt s13575c4f1;
  int s13575c4f2[2];
  void  mf13575c4(); // _ZN8S13575C49mf13575c4Ev
};
//SIG(-1 S13575C4) C1{ m Fc FC2{ m Fp Fi FC3{ m} FC4{ m}} Fi[2]}


void  S13575C4 ::mf13575c4(){}

static void Test_S13575C4()
{
  {
    init_simple_test("S13575C4");
    S13575C4 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13575C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13575C4)");
    check_field_offset(lv, s13575c4f0, 0, "S13575C4.s13575c4f0");
    check_field_offset(lv, s13575c4f1, ABISELECT(8,4), "S13575C4.s13575c4f1");
    check_field_offset(lv, s13575c4f2, ABISELECT(24,16), "S13575C4.s13575c4f2");
  }
}
static Arrange_To_Call_Me vS13575C4(Test_S13575C4, "S13575C4", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13575C1  {
  int s13575c1f0[6];
  ::S13575C2_nt s13575c1f1;
  ::S13575C2_nt s13575c1f2;
  ::S13575C4 s13575c1f3;
  int s13575c1f4;
};
//SIG(1 S13575C1) C1{ Fi[6] FC2{ BC3{ m Fp Fi}} FC2 FC4{ m Fc FC5{ m Fp Fi FC6{ m} FC7{ m}} Fi[2]} Fi}



static void Test_S13575C1()
{
  {
    init_simple_test("S13575C1");
    S13575C1 lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S13575C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13575C1)");
    check_field_offset(lv, s13575c1f0, 0, "S13575C1.s13575c1f0");
    check_field_offset(lv, s13575c1f1, 24, "S13575C1.s13575c1f1");
    check_field_offset(lv, s13575c1f2, ABISELECT(40,32), "S13575C1.s13575c1f2");
    check_field_offset(lv, s13575c1f3, ABISELECT(56,40), "S13575C1.s13575c1f3");
    check_field_offset(lv, s13575c1f4, ABISELECT(88,64), "S13575C1.s13575c1f4");
  }
}
static Arrange_To_Call_Me vS13575C1(Test_S13575C1, "S13575C1", ABISELECT(96,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20327C2  {
  void *s20327c2f0;
  virtual  ~S20327C2(); // _ZN8S20327C2D1Ev
  virtual void  v6(); // _ZN8S20327C22v6Ev
  virtual void  v7(); // _ZN8S20327C22v7Ev
  S20327C2(); // tgen
};
//SIG(-1 S20327C2) C1{ vd v1 v2 Fp}


 S20327C2 ::~S20327C2(){ note_dtor("S20327C2", this);}
void  S20327C2 ::v6(){vfunc_called(this, "_ZN8S20327C22v6Ev");}
void  S20327C2 ::v7(){vfunc_called(this, "_ZN8S20327C22v7Ev");}
S20327C2 ::S20327C2(){ note_ctor("S20327C2", this);} // tgen

static void Test_S20327C2()
{
  extern Class_Descriptor cd_S20327C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20327C2, buf);
    S20327C2 *dp, &lv = *(dp=new (buf) S20327C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20327C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20327C2)");
    check_field_offset(lv, s20327c2f0, ABISELECT(8,4), "S20327C2.s20327c2f0");
    test_class_info(&lv, &cd_S20327C2);
    dp->~S20327C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20327C2(Test_S20327C2, "S20327C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20327C2C1Ev();
extern void _ZN8S20327C2D1Ev();
Name_Map name_map_S20327C2[] = {
  NSPAIR(_ZN8S20327C2C1Ev),
  NSPAIR(_ZN8S20327C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20327C2[];
extern void _ZN8S20327C2D1Ev();
extern void _ZN8S20327C2D0Ev();
extern void _ZN8S20327C22v6Ev();
extern void _ZN8S20327C22v7Ev();
static  VTBL_ENTRY vtc_S20327C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20327C2[0]),
  (VTBL_ENTRY)&_ZN8S20327C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20327C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20327C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20327C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20327C2[];
extern  VTBL_ENTRY _ZTV8S20327C2[];
Class_Descriptor cd_S20327C2 = {  "S20327C2", // class name
  0,0,//no base classes
  &(vtc_S20327C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20327C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20327C2),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  S20327C3  {
  __tsi64 s20327c3f0;
  char s20327c3f1;
  virtual void  v8(); // _ZN8S20327C32v8Ev
  virtual void  v9(); // _ZN8S20327C32v9Ev
  virtual void  v10(); // _ZN8S20327C33v10Ev
  virtual void  v11(); // _ZN8S20327C33v11Ev
  virtual void  v12(); // _ZN8S20327C33v12Ev
  ~S20327C3(); // tgen
  S20327C3(); // tgen
};
//SIG(-1 S20327C3) C1{ v1 v2 v3 v4 v5 FL Fc}


void  S20327C3 ::v8(){vfunc_called(this, "_ZN8S20327C32v8Ev");}
void  S20327C3 ::v9(){vfunc_called(this, "_ZN8S20327C32v9Ev");}
void  S20327C3 ::v10(){vfunc_called(this, "_ZN8S20327C33v10Ev");}
void  S20327C3 ::v11(){vfunc_called(this, "_ZN8S20327C33v11Ev");}
void  S20327C3 ::v12(){vfunc_called(this, "_ZN8S20327C33v12Ev");}
S20327C3 ::~S20327C3(){ note_dtor("S20327C3", this);} // tgen
S20327C3 ::S20327C3(){ note_ctor("S20327C3", this);} // tgen

static void Test_S20327C3()
{
  extern Class_Descriptor cd_S20327C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20327C3, buf);
    S20327C3 *dp, &lv = *(dp=new (buf) S20327C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20327C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20327C3)");
    check_field_offset(lv, s20327c3f0, ABISELECT(8,4), "S20327C3.s20327c3f0");
    check_field_offset(lv, s20327c3f1, ABISELECT(16,12), "S20327C3.s20327c3f1");
    test_class_info(&lv, &cd_S20327C3);
    dp->~S20327C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20327C3(Test_S20327C3, "S20327C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20327C3C1Ev();
extern void _ZN8S20327C3D1Ev();
Name_Map name_map_S20327C3[] = {
  NSPAIR(_ZN8S20327C3C1Ev),
  NSPAIR(_ZN8S20327C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20327C3[];
extern void _ZN8S20327C32v8Ev();
extern void _ZN8S20327C32v9Ev();
extern void _ZN8S20327C33v10Ev();
extern void _ZN8S20327C33v11Ev();
extern void _ZN8S20327C33v12Ev();
static  VTBL_ENTRY vtc_S20327C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20327C3[0]),
  (VTBL_ENTRY)&_ZN8S20327C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20327C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20327C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20327C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20327C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S20327C3[];
extern  VTBL_ENTRY _ZTV8S20327C3[];
Class_Descriptor cd_S20327C3 = {  "S20327C3", // class name
  0,0,//no base classes
  &(vtc_S20327C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20327C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20327C3),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  S20327C1  : virtual S20327C2 , S20327C3 {
  void *s20327c1f0[2];
  virtual  ~S20327C1(); // _ZN8S20327C1D2Ev
  virtual void  v1(); // _ZN8S20327C12v1Ev
  virtual void  v2(); // _ZN8S20327C12v2Ev
  virtual void  v3(); // _ZN8S20327C12v3Ev
  virtual void  v4(); // _ZN8S20327C12v4Ev
  virtual void  v5(); // _ZN8S20327C12v5Ev
  S20327C1(); // tgen
};
//SIG(1 S20327C1) C1{ VBC2{ vd v6 v7 Fp} BC3{ v8 v9 v10 v11 v12 FL Fc} vd v1 v2 v3 v4 v5 Fp[2]}


 S20327C1 ::~S20327C1(){ note_dtor("S20327C1", this);}
void  S20327C1 ::v1(){vfunc_called(this, "_ZN8S20327C12v1Ev");}
void  S20327C1 ::v2(){vfunc_called(this, "_ZN8S20327C12v2Ev");}
void  S20327C1 ::v3(){vfunc_called(this, "_ZN8S20327C12v3Ev");}
void  S20327C1 ::v4(){vfunc_called(this, "_ZN8S20327C12v4Ev");}
void  S20327C1 ::v5(){vfunc_called(this, "_ZN8S20327C12v5Ev");}
S20327C1 ::S20327C1(){ note_ctor("S20327C1", this);} // tgen

static void Test_S20327C1()
{
  extern Class_Descriptor cd_S20327C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20327C1, buf);
    S20327C1 *dp, &lv = *(dp=new (buf) S20327C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20327C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20327C1)");
    check_base_class_offset(lv, (S20327C2*), ABISELECT(40,24), "S20327C1");
    check_base_class_offset(lv, (S20327C3*), 0, "S20327C1");
    check_field_offset(lv, s20327c1f0, ABISELECT(24,16), "S20327C1.s20327c1f0");
    test_class_info(&lv, &cd_S20327C1);
    dp->~S20327C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20327C1(Test_S20327C1, "S20327C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S20327C1C1Ev();
extern void _ZN8S20327C1D2Ev();
Name_Map name_map_S20327C1[] = {
  NSPAIR(_ZN8S20327C1C1Ev),
  NSPAIR(_ZN8S20327C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20327C2;
extern VTBL_ENTRY _ZTI8S20327C2[];
extern  VTBL_ENTRY _ZTV8S20327C2[];
extern Class_Descriptor cd_S20327C3;
extern VTBL_ENTRY _ZTI8S20327C3[];
extern  VTBL_ENTRY _ZTV8S20327C3[];
static Base_Class bases_S20327C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20327C2,    ABISELECT(40,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20327C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S20327C1[];
extern void _ZN8S20327C32v8Ev();
extern void _ZN8S20327C32v9Ev();
extern void _ZN8S20327C33v10Ev();
extern void _ZN8S20327C33v11Ev();
extern void _ZN8S20327C33v12Ev();
extern void _ZN8S20327C1D1Ev();
extern void _ZN8S20327C1D0Ev();
extern void _ZN8S20327C12v1Ev();
extern void _ZN8S20327C12v2Ev();
extern void _ZN8S20327C12v3Ev();
extern void _ZN8S20327C12v4Ev();
extern void _ZN8S20327C12v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20327C1D1Ev,_ZTv0_n12_N8S20327C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20327C1D1Ev,_ZThn24_N8S20327C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20327C1D0Ev,_ZTv0_n12_N8S20327C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20327C1D0Ev,_ZThn24_N8S20327C1D0Ev)() __attribute__((weak));
extern void _ZN8S20327C22v6Ev();
extern void _ZN8S20327C22v7Ev();
static  VTBL_ENTRY vtc_S20327C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20327C1[0]),
  (VTBL_ENTRY)&_ZN8S20327C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20327C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20327C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20327C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20327C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20327C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20327C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20327C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20327C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20327C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20327C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20327C12v5Ev,
  0,
  0,
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20327C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20327C1D1Ev,_ZTv0_n12_N8S20327C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20327C1D0Ev,_ZTv0_n12_N8S20327C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20327C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20327C22v7Ev,
};
extern VTBL_ENTRY _ZTV8S20327C1[];
static  VTT_ENTRY vtt_S20327C1[] = {
  {&(_ZTV8S20327C1[3]),  3,24},
  {&(_ZTV8S20327C1[20]),  20,24},
};
extern VTBL_ENTRY _ZTI8S20327C1[];
extern  VTBL_ENTRY _ZTV8S20327C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20327C1[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20327C1D0Ev,_ZTv0_n12_N8S20327C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20327C1D0Ev,_ZThn24_N8S20327C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20327C1D1Ev,_ZTv0_n12_N8S20327C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20327C1D1Ev,_ZThn24_N8S20327C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20327C1 = {  "S20327C1", // class name
  bases_S20327C1, 2,
  &(vtc_S20327C1[0]), // expected_vtbl_contents
  &(vtt_S20327C1[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S20327C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20327C1),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20327C1),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21569C1  {
  int s21569c1f0;
  char s21569c1f1[2];
  ::S22028C11_nt s21569c1f2;
  ::S22028C11_nt s21569c1f3;
  ::S22028C11_nt s21569c1f4;
  int s21569c1f5[8];
  __tsi64 s21569c1f6;
  char s21569c1f7[2];
  int s21569c1f8;
  char s21569c1f9[2048];
  void  mf21569c1(); // _ZN8S21569C19mf21569c1Ev
  virtual  ~S21569C1(); // _ZN8S21569C1D1Ev
  S21569C1(); // tgen
};
//SIG(1 S21569C1) C1{ vd m Fi Fc[2] FC2{ m Fp Fi FC3{ m}} FC2 FC2 Fi[8] FL Fc[2] Fi Fc[2048]}


void  S21569C1 ::mf21569c1(){}
 S21569C1 ::~S21569C1(){ note_dtor("S21569C1", this);}
S21569C1 ::S21569C1(){ note_ctor("S21569C1", this);} // tgen

static void Test_S21569C1()
{
  extern Class_Descriptor cd_S21569C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(271,537)];
    init_test(&cd_S21569C1, buf);
    S21569C1 *dp, &lv = *(dp=new (buf) S21569C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2160,2144), "sizeof(S21569C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21569C1)");
    check_field_offset(lv, s21569c1f0, ABISELECT(8,4), "S21569C1.s21569c1f0");
    check_field_offset(lv, s21569c1f1, ABISELECT(12,8), "S21569C1.s21569c1f1");
    check_field_offset(lv, s21569c1f2, ABISELECT(16,12), "S21569C1.s21569c1f2");
    check_field_offset(lv, s21569c1f3, ABISELECT(32,24), "S21569C1.s21569c1f3");
    check_field_offset(lv, s21569c1f4, ABISELECT(48,36), "S21569C1.s21569c1f4");
    check_field_offset(lv, s21569c1f5, ABISELECT(64,48), "S21569C1.s21569c1f5");
    check_field_offset(lv, s21569c1f6, ABISELECT(96,80), "S21569C1.s21569c1f6");
    check_field_offset(lv, s21569c1f7, ABISELECT(104,88), "S21569C1.s21569c1f7");
    check_field_offset(lv, s21569c1f8, ABISELECT(108,92), "S21569C1.s21569c1f8");
    check_field_offset(lv, s21569c1f9, ABISELECT(112,96), "S21569C1.s21569c1f9");
    test_class_info(&lv, &cd_S21569C1);
    dp->~S21569C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21569C1(Test_S21569C1, "S21569C1", ABISELECT(2160,2144));

#else // __cplusplus

extern void _ZN8S21569C1C1Ev();
extern void _ZN8S21569C1D1Ev();
Name_Map name_map_S21569C1[] = {
  NSPAIR(_ZN8S21569C1C1Ev),
  NSPAIR(_ZN8S21569C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21569C1[];
extern void _ZN8S21569C1D1Ev();
extern void _ZN8S21569C1D0Ev();
static  VTBL_ENTRY vtc_S21569C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21569C1[0]),
  (VTBL_ENTRY)&_ZN8S21569C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21569C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21569C1[];
extern  VTBL_ENTRY _ZTV8S21569C1[];
Class_Descriptor cd_S21569C1 = {  "S21569C1", // class name
  0,0,//no base classes
  &(vtc_S21569C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(2160,2144), // object size
  NSPAIRA(_ZTI8S21569C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21569C1),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  S10241C2  {
  virtual  ~S10241C2(); // _ZN8S10241C2D1Ev
  virtual void  v8(); // _ZN8S10241C22v8Ev
  virtual void  v9(); // _ZN8S10241C22v9Ev
  virtual void  v10(); // _ZN8S10241C23v10Ev
  virtual void  v11(); // _ZN8S10241C23v11Ev
  virtual void  v12(); // _ZN8S10241C23v12Ev
  virtual void  v13(); // _ZN8S10241C23v13Ev
  virtual void  v14(); // _ZN8S10241C23v14Ev
  S10241C2(); // tgen
};
//SIG(-1 S10241C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10241C2 ::~S10241C2(){ note_dtor("S10241C2", this);}
void  S10241C2 ::v8(){vfunc_called(this, "_ZN8S10241C22v8Ev");}
void  S10241C2 ::v9(){vfunc_called(this, "_ZN8S10241C22v9Ev");}
void  S10241C2 ::v10(){vfunc_called(this, "_ZN8S10241C23v10Ev");}
void  S10241C2 ::v11(){vfunc_called(this, "_ZN8S10241C23v11Ev");}
void  S10241C2 ::v12(){vfunc_called(this, "_ZN8S10241C23v12Ev");}
void  S10241C2 ::v13(){vfunc_called(this, "_ZN8S10241C23v13Ev");}
void  S10241C2 ::v14(){vfunc_called(this, "_ZN8S10241C23v14Ev");}
S10241C2 ::S10241C2(){ note_ctor("S10241C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10241C2C1Ev();
extern void _ZN8S10241C2D1Ev();
Name_Map name_map_S10241C2[] = {
  NSPAIR(_ZN8S10241C2C1Ev),
  NSPAIR(_ZN8S10241C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10241C2[];
extern void _ZN8S10241C2D1Ev();
extern void _ZN8S10241C2D0Ev();
extern void _ZN8S10241C22v8Ev();
extern void _ZN8S10241C22v9Ev();
extern void _ZN8S10241C23v10Ev();
extern void _ZN8S10241C23v11Ev();
extern void _ZN8S10241C23v12Ev();
extern void _ZN8S10241C23v13Ev();
extern void _ZN8S10241C23v14Ev();
static  VTBL_ENTRY vtc_S10241C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10241C2[0]),
  (VTBL_ENTRY)&_ZN8S10241C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10241C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10241C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10241C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S10241C2[];
extern  VTBL_ENTRY _ZTV8S10241C2[];
Class_Descriptor cd_S10241C2 = {  "S10241C2", // class name
  0,0,//no base classes
  &(vtc_S10241C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10241C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10241C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10241C1  : S10241C2 {
  void *s10241c1f0;
  int s10241c1f1[2];
  virtual  ~S10241C1(); // _ZN8S10241C1D1Ev
  virtual void  v1(); // _ZN8S10241C12v1Ev
  virtual void  v2(); // _ZN8S10241C12v2Ev
  virtual void  v3(); // _ZN8S10241C12v3Ev
  virtual void  v4(); // _ZN8S10241C12v4Ev
  virtual void  v5(); // _ZN8S10241C12v5Ev
  virtual void  v6(); // _ZN8S10241C12v6Ev
  virtual void  v7(); // _ZN8S10241C12v7Ev
  S10241C1(); // tgen
};
//SIG(1 S10241C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp Fi[2]}


 S10241C1 ::~S10241C1(){ note_dtor("S10241C1", this);}
void  S10241C1 ::v1(){vfunc_called(this, "_ZN8S10241C12v1Ev");}
void  S10241C1 ::v2(){vfunc_called(this, "_ZN8S10241C12v2Ev");}
void  S10241C1 ::v3(){vfunc_called(this, "_ZN8S10241C12v3Ev");}
void  S10241C1 ::v4(){vfunc_called(this, "_ZN8S10241C12v4Ev");}
void  S10241C1 ::v5(){vfunc_called(this, "_ZN8S10241C12v5Ev");}
void  S10241C1 ::v6(){vfunc_called(this, "_ZN8S10241C12v6Ev");}
void  S10241C1 ::v7(){vfunc_called(this, "_ZN8S10241C12v7Ev");}
S10241C1 ::S10241C1(){ note_ctor("S10241C1", this);} // tgen

static void Test_S10241C1()
{
  extern Class_Descriptor cd_S10241C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S10241C1, buf);
    S10241C1 *dp, &lv = *(dp=new (buf) S10241C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10241C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10241C1)");
    check_base_class_offset(lv, (S10241C2*), 0, "S10241C1");
    check_field_offset(lv, s10241c1f0, ABISELECT(8,4), "S10241C1.s10241c1f0");
    check_field_offset(lv, s10241c1f1, ABISELECT(16,8), "S10241C1.s10241c1f1");
    test_class_info(&lv, &cd_S10241C1);
    dp->~S10241C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10241C1(Test_S10241C1, "S10241C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S10241C1C1Ev();
extern void _ZN8S10241C1D1Ev();
Name_Map name_map_S10241C1[] = {
  NSPAIR(_ZN8S10241C1C1Ev),
  NSPAIR(_ZN8S10241C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10241C2;
extern VTBL_ENTRY _ZTI8S10241C2[];
extern  VTBL_ENTRY _ZTV8S10241C2[];
static Base_Class bases_S10241C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10241C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10241C1[];
extern void _ZN8S10241C1D1Ev();
extern void _ZN8S10241C1D0Ev();
extern void _ZN8S10241C22v8Ev();
extern void _ZN8S10241C22v9Ev();
extern void _ZN8S10241C23v10Ev();
extern void _ZN8S10241C23v11Ev();
extern void _ZN8S10241C23v12Ev();
extern void _ZN8S10241C23v13Ev();
extern void _ZN8S10241C23v14Ev();
extern void _ZN8S10241C12v1Ev();
extern void _ZN8S10241C12v2Ev();
extern void _ZN8S10241C12v3Ev();
extern void _ZN8S10241C12v4Ev();
extern void _ZN8S10241C12v5Ev();
extern void _ZN8S10241C12v6Ev();
extern void _ZN8S10241C12v7Ev();
static  VTBL_ENTRY vtc_S10241C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10241C1[0]),
  (VTBL_ENTRY)&_ZN8S10241C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10241C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10241C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10241C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10241C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10241C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10241C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10241C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10241C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10241C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10241C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10241C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10241C1[];
extern  VTBL_ENTRY _ZTV8S10241C1[];
Class_Descriptor cd_S10241C1 = {  "S10241C1", // class name
  bases_S10241C1, 1,
  &(vtc_S10241C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S10241C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10241C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10196C2  {
  void *s10196c2f0[2];
  virtual  ~S10196C2(); // _ZN8S10196C2D1Ev
  virtual void  v8(); // _ZN8S10196C22v8Ev
  virtual void  v9(); // _ZN8S10196C22v9Ev
  virtual void  v10(); // _ZN8S10196C23v10Ev
  virtual void  v11(); // _ZN8S10196C23v11Ev
  virtual void  v12(); // _ZN8S10196C23v12Ev
  virtual void  v13(); // _ZN8S10196C23v13Ev
  virtual void  v14(); // _ZN8S10196C23v14Ev
  S10196C2(); // tgen
};
//SIG(-1 S10196C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 Fp[2]}


 S10196C2 ::~S10196C2(){ note_dtor("S10196C2", this);}
void  S10196C2 ::v8(){vfunc_called(this, "_ZN8S10196C22v8Ev");}
void  S10196C2 ::v9(){vfunc_called(this, "_ZN8S10196C22v9Ev");}
void  S10196C2 ::v10(){vfunc_called(this, "_ZN8S10196C23v10Ev");}
void  S10196C2 ::v11(){vfunc_called(this, "_ZN8S10196C23v11Ev");}
void  S10196C2 ::v12(){vfunc_called(this, "_ZN8S10196C23v12Ev");}
void  S10196C2 ::v13(){vfunc_called(this, "_ZN8S10196C23v13Ev");}
void  S10196C2 ::v14(){vfunc_called(this, "_ZN8S10196C23v14Ev");}
S10196C2 ::S10196C2(){ note_ctor("S10196C2", this);} // tgen

static void Test_S10196C2()
{
  extern Class_Descriptor cd_S10196C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10196C2, buf);
    S10196C2 *dp, &lv = *(dp=new (buf) S10196C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10196C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10196C2)");
    check_field_offset(lv, s10196c2f0, ABISELECT(8,4), "S10196C2.s10196c2f0");
    test_class_info(&lv, &cd_S10196C2);
    dp->~S10196C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10196C2(Test_S10196C2, "S10196C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10196C2C1Ev();
extern void _ZN8S10196C2D1Ev();
Name_Map name_map_S10196C2[] = {
  NSPAIR(_ZN8S10196C2C1Ev),
  NSPAIR(_ZN8S10196C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10196C2[];
extern void _ZN8S10196C2D1Ev();
extern void _ZN8S10196C2D0Ev();
extern void _ZN8S10196C22v8Ev();
extern void _ZN8S10196C22v9Ev();
extern void _ZN8S10196C23v10Ev();
extern void _ZN8S10196C23v11Ev();
extern void _ZN8S10196C23v12Ev();
extern void _ZN8S10196C23v13Ev();
extern void _ZN8S10196C23v14Ev();
static  VTBL_ENTRY vtc_S10196C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10196C2[0]),
  (VTBL_ENTRY)&_ZN8S10196C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10196C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10196C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10196C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S10196C2[];
extern  VTBL_ENTRY _ZTV8S10196C2[];
Class_Descriptor cd_S10196C2 = {  "S10196C2", // class name
  0,0,//no base classes
  &(vtc_S10196C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10196C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10196C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10196C1  : S10196C2 {
  int s10196c1f0[3];
  virtual void  v1(); // _ZN8S10196C12v1Ev
  virtual void  v2(); // _ZN8S10196C12v2Ev
  virtual void  v3(); // _ZN8S10196C12v3Ev
  virtual void  v4(); // _ZN8S10196C12v4Ev
  virtual void  v5(); // _ZN8S10196C12v5Ev
  virtual void  v6(); // _ZN8S10196C12v6Ev
  virtual void  v7(); // _ZN8S10196C12v7Ev
  ~S10196C1(); // tgen
  S10196C1(); // tgen
};
//SIG(1 S10196C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 Fp[2]} v1 v2 v3 v4 v5 v6 v7 Fi[3]}


void  S10196C1 ::v1(){vfunc_called(this, "_ZN8S10196C12v1Ev");}
void  S10196C1 ::v2(){vfunc_called(this, "_ZN8S10196C12v2Ev");}
void  S10196C1 ::v3(){vfunc_called(this, "_ZN8S10196C12v3Ev");}
void  S10196C1 ::v4(){vfunc_called(this, "_ZN8S10196C12v4Ev");}
void  S10196C1 ::v5(){vfunc_called(this, "_ZN8S10196C12v5Ev");}
void  S10196C1 ::v6(){vfunc_called(this, "_ZN8S10196C12v6Ev");}
void  S10196C1 ::v7(){vfunc_called(this, "_ZN8S10196C12v7Ev");}
S10196C1 ::~S10196C1(){ note_dtor("S10196C1", this);} // tgen
S10196C1 ::S10196C1(){ note_ctor("S10196C1", this);} // tgen

static void Test_S10196C1()
{
  extern Class_Descriptor cd_S10196C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S10196C1, buf);
    S10196C1 *dp, &lv = *(dp=new (buf) S10196C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S10196C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10196C1)");
    check_base_class_offset(lv, (S10196C2*), 0, "S10196C1");
    check_field_offset(lv, s10196c1f0, ABISELECT(24,12), "S10196C1.s10196c1f0");
    test_class_info(&lv, &cd_S10196C1);
    dp->~S10196C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10196C1(Test_S10196C1, "S10196C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S10196C1C1Ev();
extern void _ZN8S10196C1D1Ev();
Name_Map name_map_S10196C1[] = {
  NSPAIR(_ZN8S10196C1C1Ev),
  NSPAIR(_ZN8S10196C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10196C2;
extern VTBL_ENTRY _ZTI8S10196C2[];
extern  VTBL_ENTRY _ZTV8S10196C2[];
static Base_Class bases_S10196C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10196C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10196C1[];
extern void _ZN8S10196C1D1Ev();
extern void _ZN8S10196C1D0Ev();
extern void _ZN8S10196C22v8Ev();
extern void _ZN8S10196C22v9Ev();
extern void _ZN8S10196C23v10Ev();
extern void _ZN8S10196C23v11Ev();
extern void _ZN8S10196C23v12Ev();
extern void _ZN8S10196C23v13Ev();
extern void _ZN8S10196C23v14Ev();
extern void _ZN8S10196C12v1Ev();
extern void _ZN8S10196C12v2Ev();
extern void _ZN8S10196C12v3Ev();
extern void _ZN8S10196C12v4Ev();
extern void _ZN8S10196C12v5Ev();
extern void _ZN8S10196C12v6Ev();
extern void _ZN8S10196C12v7Ev();
static  VTBL_ENTRY vtc_S10196C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10196C1[0]),
  (VTBL_ENTRY)&_ZN8S10196C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10196C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10196C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10196C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v13Ev,
  (VTBL_ENTRY)&_ZN8S10196C23v14Ev,
  (VTBL_ENTRY)&_ZN8S10196C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10196C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10196C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10196C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10196C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10196C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10196C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10196C1[];
extern  VTBL_ENTRY _ZTV8S10196C1[];
Class_Descriptor cd_S10196C1 = {  "S10196C1", // class name
  bases_S10196C1, 1,
  &(vtc_S10196C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S10196C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10196C1),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2804C2  : S22028C68_nt {
  void *s2804c2f0;
};
//SIG(-1 S2804C2) C1{ BC2{ m Fp} Fp}



static void Test_S2804C2()
{
  extern Class_Descriptor cd_S2804C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2804C2, buf);
    S2804C2 &lv = *(new (buf) S2804C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2804C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2804C2)");
    check_base_class_offset(lv, (S22028C68_nt*), 0, "S2804C2");
    check_field_offset(lv, s2804c2f0, ABISELECT(8,4), "S2804C2.s2804c2f0");
    test_class_info(&lv, &cd_S2804C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2804C2(Test_S2804C2, "S2804C2", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S2804C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S2804C2 = {  "S2804C2", // class name
  bases_S2804C2, 1,
  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  S2804C1  : S2804C2 {
  ::S22028C29_nt s2804c1f0;
  ::S22028C29_nt s2804c1f1;
  int s2804c1f2[2];
  void *s2804c1f3[3];
  ::S3280C4_nt s2804c1f4;
  void *s2804c1f5;
  int s2804c1f6[2];
};
//SIG(1 S2804C1) C1{ BC2{ BC3{ m Fp} Fp} FC4{ m Fi[3]} FC4 Fi[2] Fp[3] FC5{ m Fi[2]} Fp Fi[2]}



static void Test_S2804C1()
{
  extern Class_Descriptor cd_S2804C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S2804C1, buf);
    S2804C1 &lv = *(new (buf) S2804C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S2804C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2804C1)");
    check_base_class_offset(lv, (S22028C68_nt*)(S2804C2*), 0, "S2804C1");
    check_base_class_offset(lv, (S2804C2*), 0, "S2804C1");
    check_field_offset(lv, s2804c1f0, ABISELECT(16,8), "S2804C1.s2804c1f0");
    check_field_offset(lv, s2804c1f1, ABISELECT(28,20), "S2804C1.s2804c1f1");
    check_field_offset(lv, s2804c1f2, ABISELECT(40,32), "S2804C1.s2804c1f2");
    check_field_offset(lv, s2804c1f3, ABISELECT(48,40), "S2804C1.s2804c1f3");
    check_field_offset(lv, s2804c1f4, ABISELECT(72,52), "S2804C1.s2804c1f4");
    check_field_offset(lv, s2804c1f5, ABISELECT(80,60), "S2804C1.s2804c1f5");
    check_field_offset(lv, s2804c1f6, ABISELECT(88,64), "S2804C1.s2804c1f6");
    test_class_info(&lv, &cd_S2804C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2804C1(Test_S2804C1, "S2804C1", ABISELECT(96,72));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S2804C2;
static Base_Class bases_S2804C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S2804C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2804C1 = {  "S2804C1", // class name
  bases_S2804C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,72), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21572C1  {
  int s21572c1f0;
  char s21572c1f1[5];
  int s21572c1f2[3];
  ::S22028C11_nt s21572c1f3;
  ::S22028C11_nt s21572c1f4;
  ::S22028C11_nt s21572c1f5;
  ::S22028C11_nt s21572c1f6;
  int s21572c1f7[4];
  void *s21572c1f8[2];
  void  mf21572c1(); // _ZN8S21572C19mf21572c1Ev
  virtual  ~S21572C1(); // _ZN8S21572C1D1Ev
  S21572C1(); // tgen
};
//SIG(1 S21572C1) C1{ vd m Fi Fc[5] Fi[3] FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 Fi[4] Fp[2]}


void  S21572C1 ::mf21572c1(){}
 S21572C1 ::~S21572C1(){ note_dtor("S21572C1", this);}
S21572C1 ::S21572C1(){ note_ctor("S21572C1", this);} // tgen

static void Test_S21572C1()
{
  extern Class_Descriptor cd_S21572C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,26)];
    init_test(&cd_S21572C1, buf);
    S21572C1 *dp, &lv = *(dp=new (buf) S21572C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,100), "sizeof(S21572C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21572C1)");
    check_field_offset(lv, s21572c1f0, ABISELECT(8,4), "S21572C1.s21572c1f0");
    check_field_offset(lv, s21572c1f1, ABISELECT(12,8), "S21572C1.s21572c1f1");
    check_field_offset(lv, s21572c1f2, ABISELECT(20,16), "S21572C1.s21572c1f2");
    check_field_offset(lv, s21572c1f3, ABISELECT(32,28), "S21572C1.s21572c1f3");
    check_field_offset(lv, s21572c1f4, ABISELECT(48,40), "S21572C1.s21572c1f4");
    check_field_offset(lv, s21572c1f5, ABISELECT(64,52), "S21572C1.s21572c1f5");
    check_field_offset(lv, s21572c1f6, ABISELECT(80,64), "S21572C1.s21572c1f6");
    check_field_offset(lv, s21572c1f7, ABISELECT(96,76), "S21572C1.s21572c1f7");
    check_field_offset(lv, s21572c1f8, ABISELECT(112,92), "S21572C1.s21572c1f8");
    test_class_info(&lv, &cd_S21572C1);
    dp->~S21572C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21572C1(Test_S21572C1, "S21572C1", ABISELECT(128,100));

#else // __cplusplus

extern void _ZN8S21572C1C1Ev();
extern void _ZN8S21572C1D1Ev();
Name_Map name_map_S21572C1[] = {
  NSPAIR(_ZN8S21572C1C1Ev),
  NSPAIR(_ZN8S21572C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21572C1[];
extern void _ZN8S21572C1D1Ev();
extern void _ZN8S21572C1D0Ev();
static  VTBL_ENTRY vtc_S21572C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21572C1[0]),
  (VTBL_ENTRY)&_ZN8S21572C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21572C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21572C1[];
extern  VTBL_ENTRY _ZTV8S21572C1[];
Class_Descriptor cd_S21572C1 = {  "S21572C1", // class name
  0,0,//no base classes
  &(vtc_S21572C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,100), // object size
  NSPAIRA(_ZTI8S21572C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21572C1),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  S12087C5_nt  {
  char s12087c5f0;
  char s12087c5f1;
  char s12087c5f2;
  char s12087c5f3;
};
//SIG(1 S12087C5_nt) C1{ Fc[4]}



//skip512 S12087C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12087C4_nt  {
  ::S12087C5_nt s12087c4f0;
  int s12087c4f1;
};
//SIG(1 S12087C4_nt) U1{ FC2{ Fc Fc Fc Fc} Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12087C3_nt  {
  ::S12087C4_nt s12087c3f0;
  void  mf12087c3(); // _ZN11S12087C3_nt9mf12087c3Ev
};
//SIG(-1 S12087C3_nt) C1{ m FU2{ FC3{ Fc Fc Fc Fc} Fi}}


void  S12087C3_nt ::mf12087c3(){}

//skip512 S12087C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12087C6_nt  {
  int s12087c6f0;
  int s12087c6f1;
  void  mf12087c6(); // _ZN11S12087C6_nt9mf12087c6Ev
};
//SIG(-1 S12087C6_nt) C1{ m Fi[2]}


void  S12087C6_nt ::mf12087c6(){}

//skip512 S12087C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12087C1  {
  ::S22028C29_nt s12087c1f0;
  ::S12087C3_nt s12087c1f1;
  ::S12087C3_nt s12087c1f2;
  ::S12087C6_nt s12087c1f3;
  ::S12087C6_nt s12087c1f4;
};
//SIG(1 S12087C1) C1{ FC2{ m Fi[3]} FC3{ m FU4{ FC5{ Fc Fc Fc Fc} Fi}} FC3 FC6{ m Fi Fi} FC6}



static void Test_S12087C1()
{
  {
    init_simple_test("S12087C1");
    S12087C1 lv;
    check2(sizeof(lv), 36, "sizeof(S12087C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12087C1)");
    check_field_offset(lv, s12087c1f0, 0, "S12087C1.s12087c1f0");
    check_field_offset(lv, s12087c1f1, 12, "S12087C1.s12087c1f1");
    check_field_offset(lv, s12087c1f2, 16, "S12087C1.s12087c1f2");
    check_field_offset(lv, s12087c1f3, 20, "S12087C1.s12087c1f3");
    check_field_offset(lv, s12087c1f4, 28, "S12087C1.s12087c1f4");
  }
}
static Arrange_To_Call_Me vS12087C1(Test_S12087C1, "S12087C1", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10070C2  {
  virtual  ~S10070C2(); // _ZN8S10070C2D1Ev
  virtual void  v6(); // _ZN8S10070C22v6Ev
  virtual void  v7(); // _ZN8S10070C22v7Ev
  virtual void  v8(); // _ZN8S10070C22v8Ev
  virtual void  v9(); // _ZN8S10070C22v9Ev
  virtual void  v10(); // _ZN8S10070C23v10Ev
  virtual void  v11(); // _ZN8S10070C23v11Ev
  virtual void  v12(); // _ZN8S10070C23v12Ev
  S10070C2(); // tgen
};
//SIG(-1 S10070C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S10070C2 ::~S10070C2(){ note_dtor("S10070C2", this);}
void  S10070C2 ::v6(){vfunc_called(this, "_ZN8S10070C22v6Ev");}
void  S10070C2 ::v7(){vfunc_called(this, "_ZN8S10070C22v7Ev");}
void  S10070C2 ::v8(){vfunc_called(this, "_ZN8S10070C22v8Ev");}
void  S10070C2 ::v9(){vfunc_called(this, "_ZN8S10070C22v9Ev");}
void  S10070C2 ::v10(){vfunc_called(this, "_ZN8S10070C23v10Ev");}
void  S10070C2 ::v11(){vfunc_called(this, "_ZN8S10070C23v11Ev");}
void  S10070C2 ::v12(){vfunc_called(this, "_ZN8S10070C23v12Ev");}
S10070C2 ::S10070C2(){ note_ctor("S10070C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S10070C2C1Ev();
extern void _ZN8S10070C2D1Ev();
Name_Map name_map_S10070C2[] = {
  NSPAIR(_ZN8S10070C2C1Ev),
  NSPAIR(_ZN8S10070C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10070C2[];
extern void _ZN8S10070C2D1Ev();
extern void _ZN8S10070C2D0Ev();
extern void _ZN8S10070C22v6Ev();
extern void _ZN8S10070C22v7Ev();
extern void _ZN8S10070C22v8Ev();
extern void _ZN8S10070C22v9Ev();
extern void _ZN8S10070C23v10Ev();
extern void _ZN8S10070C23v11Ev();
extern void _ZN8S10070C23v12Ev();
static  VTBL_ENTRY vtc_S10070C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10070C2[0]),
  (VTBL_ENTRY)&_ZN8S10070C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10070C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10070C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10070C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10070C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10070C2[];
extern  VTBL_ENTRY _ZTV8S10070C2[];
Class_Descriptor cd_S10070C2 = {  "S10070C2", // class name
  0,0,//no base classes
  &(vtc_S10070C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10070C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10070C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10070C1  : S10070C2 {
  void *s10070c1f0[2];
  int s10070c1f1;
  void *s10070c1f2;
  virtual  ~S10070C1(); // _ZN8S10070C1D1Ev
  virtual void  v1(); // _ZN8S10070C12v1Ev
  virtual void  v2(); // _ZN8S10070C12v2Ev
  virtual void  v3(); // _ZN8S10070C12v3Ev
  virtual void  v4(); // _ZN8S10070C12v4Ev
  virtual void  v5(); // _ZN8S10070C12v5Ev
  S10070C1(); // tgen
};
//SIG(1 S10070C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 Fp[2] Fi Fp}


 S10070C1 ::~S10070C1(){ note_dtor("S10070C1", this);}
void  S10070C1 ::v1(){vfunc_called(this, "_ZN8S10070C12v1Ev");}
void  S10070C1 ::v2(){vfunc_called(this, "_ZN8S10070C12v2Ev");}
void  S10070C1 ::v3(){vfunc_called(this, "_ZN8S10070C12v3Ev");}
void  S10070C1 ::v4(){vfunc_called(this, "_ZN8S10070C12v4Ev");}
void  S10070C1 ::v5(){vfunc_called(this, "_ZN8S10070C12v5Ev");}
S10070C1 ::S10070C1(){ note_ctor("S10070C1", this);} // tgen

static void Test_S10070C1()
{
  extern Class_Descriptor cd_S10070C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S10070C1, buf);
    S10070C1 *dp, &lv = *(dp=new (buf) S10070C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S10070C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10070C1)");
    check_base_class_offset(lv, (S10070C2*), 0, "S10070C1");
    check_field_offset(lv, s10070c1f0, ABISELECT(8,4), "S10070C1.s10070c1f0");
    check_field_offset(lv, s10070c1f1, ABISELECT(24,12), "S10070C1.s10070c1f1");
    check_field_offset(lv, s10070c1f2, ABISELECT(32,16), "S10070C1.s10070c1f2");
    test_class_info(&lv, &cd_S10070C1);
    dp->~S10070C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10070C1(Test_S10070C1, "S10070C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S10070C1C1Ev();
extern void _ZN8S10070C1D1Ev();
Name_Map name_map_S10070C1[] = {
  NSPAIR(_ZN8S10070C1C1Ev),
  NSPAIR(_ZN8S10070C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10070C2;
extern VTBL_ENTRY _ZTI8S10070C2[];
extern  VTBL_ENTRY _ZTV8S10070C2[];
static Base_Class bases_S10070C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10070C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10070C1[];
extern void _ZN8S10070C1D1Ev();
extern void _ZN8S10070C1D0Ev();
extern void _ZN8S10070C22v6Ev();
extern void _ZN8S10070C22v7Ev();
extern void _ZN8S10070C22v8Ev();
extern void _ZN8S10070C22v9Ev();
extern void _ZN8S10070C23v10Ev();
extern void _ZN8S10070C23v11Ev();
extern void _ZN8S10070C23v12Ev();
extern void _ZN8S10070C12v1Ev();
extern void _ZN8S10070C12v2Ev();
extern void _ZN8S10070C12v3Ev();
extern void _ZN8S10070C12v4Ev();
extern void _ZN8S10070C12v5Ev();
static  VTBL_ENTRY vtc_S10070C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10070C1[0]),
  (VTBL_ENTRY)&_ZN8S10070C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10070C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10070C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10070C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10070C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10070C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10070C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10070C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10070C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10070C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10070C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10070C1[];
extern  VTBL_ENTRY _ZTV8S10070C1[];
Class_Descriptor cd_S10070C1 = {  "S10070C1", // class name
  bases_S10070C1, 1,
  &(vtc_S10070C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S10070C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10070C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9268C2  {
  ::S22028C11_nt s9268c2f0;
  int s9268c2f1[2];
  char s9268c2f2;
  virtual  ~S9268C2(); // _ZN7S9268C2D1Ev
  virtual void  v3(); // _ZN7S9268C22v3Ev
  virtual void  v4(); // _ZN7S9268C22v4Ev
  virtual void  v5(); // _ZN7S9268C22v5Ev
  S9268C2(); // tgen
};
//SIG(-1 S9268C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9268C2 ::~S9268C2(){ note_dtor("S9268C2", this);}
void  S9268C2 ::v3(){vfunc_called(this, "_ZN7S9268C22v3Ev");}
void  S9268C2 ::v4(){vfunc_called(this, "_ZN7S9268C22v4Ev");}
void  S9268C2 ::v5(){vfunc_called(this, "_ZN7S9268C22v5Ev");}
S9268C2 ::S9268C2(){ note_ctor("S9268C2", this);} // tgen

static void Test_S9268C2()
{
  extern Class_Descriptor cd_S9268C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9268C2, buf);
    S9268C2 *dp, &lv = *(dp=new (buf) S9268C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9268C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9268C2)");
    check_field_offset(lv, s9268c2f0, ABISELECT(8,4), "S9268C2.s9268c2f0");
    check_field_offset(lv, s9268c2f1, ABISELECT(24,16), "S9268C2.s9268c2f1");
    check_field_offset(lv, s9268c2f2, ABISELECT(32,24), "S9268C2.s9268c2f2");
    test_class_info(&lv, &cd_S9268C2);
    dp->~S9268C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9268C2(Test_S9268C2, "S9268C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9268C2C1Ev();
extern void _ZN7S9268C2D1Ev();
Name_Map name_map_S9268C2[] = {
  NSPAIR(_ZN7S9268C2C1Ev),
  NSPAIR(_ZN7S9268C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9268C2[];
extern void _ZN7S9268C2D1Ev();
extern void _ZN7S9268C2D0Ev();
extern void _ZN7S9268C22v3Ev();
extern void _ZN7S9268C22v4Ev();
extern void _ZN7S9268C22v5Ev();
static  VTBL_ENTRY vtc_S9268C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9268C2[0]),
  (VTBL_ENTRY)&_ZN7S9268C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9268C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9268C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9268C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9268C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9268C2[];
extern  VTBL_ENTRY _ZTV7S9268C2[];
Class_Descriptor cd_S9268C2 = {  "S9268C2", // class name
  0,0,//no base classes
  &(vtc_S9268C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9268C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9268C2),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  S9268C1  : S9268C2 {
  char s9268c1f0[64];
  virtual  ~S9268C1(); // _ZN7S9268C1D1Ev
  virtual void  v1(); // _ZN7S9268C12v1Ev
  virtual void  v2(); // _ZN7S9268C12v2Ev
  S9268C1(); // tgen
};
//SIG(1 S9268C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[64]}


 S9268C1 ::~S9268C1(){ note_dtor("S9268C1", this);}
void  S9268C1 ::v1(){vfunc_called(this, "_ZN7S9268C12v1Ev");}
void  S9268C1 ::v2(){vfunc_called(this, "_ZN7S9268C12v2Ev");}
S9268C1 ::S9268C1(){ note_ctor("S9268C1", this);} // tgen

static void Test_S9268C1()
{
  extern Class_Descriptor cd_S9268C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,24)];
    init_test(&cd_S9268C1, buf);
    S9268C1 *dp, &lv = *(dp=new (buf) S9268C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,92), "sizeof(S9268C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9268C1)");
    check_base_class_offset(lv, (S9268C2*), 0, "S9268C1");
    check_field_offset(lv, s9268c1f0, ABISELECT(33,25), "S9268C1.s9268c1f0");
    test_class_info(&lv, &cd_S9268C1);
    dp->~S9268C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9268C1(Test_S9268C1, "S9268C1", ABISELECT(104,92));

#else // __cplusplus

extern void _ZN7S9268C1C1Ev();
extern void _ZN7S9268C1D1Ev();
Name_Map name_map_S9268C1[] = {
  NSPAIR(_ZN7S9268C1C1Ev),
  NSPAIR(_ZN7S9268C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9268C2;
extern VTBL_ENTRY _ZTI7S9268C2[];
extern  VTBL_ENTRY _ZTV7S9268C2[];
static Base_Class bases_S9268C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9268C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9268C1[];
extern void _ZN7S9268C1D1Ev();
extern void _ZN7S9268C1D0Ev();
extern void _ZN7S9268C22v3Ev();
extern void _ZN7S9268C22v4Ev();
extern void _ZN7S9268C22v5Ev();
extern void _ZN7S9268C12v1Ev();
extern void _ZN7S9268C12v2Ev();
static  VTBL_ENTRY vtc_S9268C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9268C1[0]),
  (VTBL_ENTRY)&_ZN7S9268C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9268C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9268C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9268C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9268C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9268C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9268C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9268C1[];
extern  VTBL_ENTRY _ZTV7S9268C1[];
Class_Descriptor cd_S9268C1 = {  "S9268C1", // class name
  bases_S9268C1, 1,
  &(vtc_S9268C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,92), // object size
  NSPAIRA(_ZTI7S9268C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9268C1),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  S21295C1  {
  ::S7190C16 s21295c1f0;
  int s21295c1f1[2];
  void *s21295c1f2;
  int s21295c1f3;
  ::S22028C16 s21295c1f4;
  int s21295c1f5;
  ::S22028C16 s21295c1f6;
  void *s21295c1f7;
  int s21295c1f8[2];
  void  mf21295c1(); // _ZN8S21295C19mf21295c1Ev
  virtual  ~S21295C1(); // _ZN8S21295C1D1Ev
  S21295C1(); // tgen
};
//SIG(1 S21295C1) C1{ vd m FC2{ BC3{ m Fp Fi[2]}} Fi[2] Fp Fi FC4{ m} Fi FC4 Fp Fi[2]}


void  S21295C1 ::mf21295c1(){}
 S21295C1 ::~S21295C1(){ note_dtor("S21295C1", this);}
S21295C1 ::S21295C1(){ note_ctor("S21295C1", this);} // tgen

static void Test_S21295C1()
{
  extern Class_Descriptor cd_S21295C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,15)];
    init_test(&cd_S21295C1, buf);
    S21295C1 *dp, &lv = *(dp=new (buf) S21295C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S21295C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21295C1)");
    check_field_offset(lv, s21295c1f0, ABISELECT(8,4), "S21295C1.s21295c1f0");
    check_field_offset(lv, s21295c1f1, ABISELECT(24,16), "S21295C1.s21295c1f1");
    check_field_offset(lv, s21295c1f2, ABISELECT(32,24), "S21295C1.s21295c1f2");
    check_field_offset(lv, s21295c1f3, ABISELECT(40,28), "S21295C1.s21295c1f3");
    check_field_offset(lv, s21295c1f4, ABISELECT(44,32), "S21295C1.s21295c1f4");
    check_field_offset(lv, s21295c1f5, ABISELECT(48,36), "S21295C1.s21295c1f5");
    check_field_offset(lv, s21295c1f6, ABISELECT(52,40), "S21295C1.s21295c1f6");
    check_field_offset(lv, s21295c1f7, ABISELECT(56,44), "S21295C1.s21295c1f7");
    check_field_offset(lv, s21295c1f8, ABISELECT(64,48), "S21295C1.s21295c1f8");
    test_class_info(&lv, &cd_S21295C1);
    dp->~S21295C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21295C1(Test_S21295C1, "S21295C1", ABISELECT(72,56));

#else // __cplusplus

extern void _ZN8S21295C1C1Ev();
extern void _ZN8S21295C1D1Ev();
Name_Map name_map_S21295C1[] = {
  NSPAIR(_ZN8S21295C1C1Ev),
  NSPAIR(_ZN8S21295C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21295C1[];
extern void _ZN8S21295C1D1Ev();
extern void _ZN8S21295C1D0Ev();
static  VTBL_ENTRY vtc_S21295C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21295C1[0]),
  (VTBL_ENTRY)&_ZN8S21295C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21295C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21295C1[];
extern  VTBL_ENTRY _ZTV8S21295C1[];
Class_Descriptor cd_S21295C1 = {  "S21295C1", // class name
  0,0,//no base classes
  &(vtc_S21295C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,56), // object size
  NSPAIRA(_ZTI8S21295C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21295C1),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  S14115C4  {
  char s14115c4f0;
  char s14115c4f1;
  char s14115c4f2;
  char s14115c4f3;
  char s14115c4f4[8];
};
//SIG(1 S14115C4) C1{ Fc[12]}



static void Test_S14115C4()
{
  {
    init_simple_test("S14115C4");
    S14115C4 lv;
    check2(sizeof(lv), 12, "sizeof(S14115C4)");
    check2(__alignof__(lv), 1, "__alignof__(S14115C4)");
    check_field_offset(lv, s14115c4f0, 0, "S14115C4.s14115c4f0");
    check_field_offset(lv, s14115c4f1, 1, "S14115C4.s14115c4f1");
    check_field_offset(lv, s14115c4f2, 2, "S14115C4.s14115c4f2");
    check_field_offset(lv, s14115c4f3, 3, "S14115C4.s14115c4f3");
    check_field_offset(lv, s14115c4f4, 4, "S14115C4.s14115c4f4");
  }
}
static Arrange_To_Call_Me vS14115C4(Test_S14115C4, "S14115C4", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14115C5_nt  {
  char s14115c5f0;
  char s14115c5f1;
  char s14115c5f2;
};
//SIG(1 S14115C5_nt) C1{ Fc[3]}



//skip512 S14115C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14115C3  {
  ::S14115C4 s14115c3f0;
  ::S14115C5_nt s14115c3f1;
  char s14115c3f2[12];
};
//SIG(1 S14115C3) U1{ FC2{ Fc Fc Fc Fc Fc[8]} FC3{ Fc Fc Fc} Fc[12]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14115C2  {
  int s14115c2f0;
  ::S14115C3 s14115c2f1;
};
//SIG(-1 S14115C2) C1{ Fi FU2{ FC3{ Fc Fc Fc Fc Fc[8]} FC4{ Fc Fc Fc} Fc[12]}}



static void Test_S14115C2()
{
  {
    init_simple_test("S14115C2");
    S14115C2 lv;
    check2(sizeof(lv), 16, "sizeof(S14115C2)");
    check2(__alignof__(lv), 4, "__alignof__(S14115C2)");
    check_field_offset(lv, s14115c2f0, 0, "S14115C2.s14115c2f0");
    check_field_offset(lv, s14115c2f1, 4, "S14115C2.s14115c2f1");
  }
}
static Arrange_To_Call_Me vS14115C2(Test_S14115C2, "S14115C2", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14115C1  {
  void *s14115c1f0;
  ::S14115C2 s14115c1f1;
};
//SIG(1 S14115C1) C1{ Fp FC2{ Fi FU3{ FC4{ Fc Fc Fc Fc Fc[8]} FC5{ Fc Fc Fc} Fc[12]}}}



static void Test_S14115C1()
{
  {
    init_simple_test("S14115C1");
    S14115C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S14115C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14115C1)");
    check_field_offset(lv, s14115c1f0, 0, "S14115C1.s14115c1f0");
    check_field_offset(lv, s14115c1f1, ABISELECT(8,4), "S14115C1.s14115c1f1");
  }
}
static Arrange_To_Call_Me vS14115C1(Test_S14115C1, "S14115C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9181C2  {
  int s9181c2f0;
  ::S22028C11_nt s9181c2f1;
  ::S22028C68_nt s9181c2f2;
  virtual  ~S9181C2(); // _ZN7S9181C2D1Ev
  virtual void  v3(); // _ZN7S9181C22v3Ev
  virtual void  v4(); // _ZN7S9181C22v4Ev
  S9181C2(); // tgen
};
//SIG(-1 S9181C2) C1{ vd v1 v2 Fi FC2{ m Fp Fi FC3{ m}} FC4{ m Fp}}


 S9181C2 ::~S9181C2(){ note_dtor("S9181C2", this);}
void  S9181C2 ::v3(){vfunc_called(this, "_ZN7S9181C22v3Ev");}
void  S9181C2 ::v4(){vfunc_called(this, "_ZN7S9181C22v4Ev");}
S9181C2 ::S9181C2(){ note_ctor("S9181C2", this);} // tgen

static void Test_S9181C2()
{
  extern Class_Descriptor cd_S9181C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S9181C2, buf);
    S9181C2 *dp, &lv = *(dp=new (buf) S9181C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S9181C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9181C2)");
    check_field_offset(lv, s9181c2f0, ABISELECT(8,4), "S9181C2.s9181c2f0");
    check_field_offset(lv, s9181c2f1, ABISELECT(16,8), "S9181C2.s9181c2f1");
    check_field_offset(lv, s9181c2f2, ABISELECT(32,20), "S9181C2.s9181c2f2");
    test_class_info(&lv, &cd_S9181C2);
    dp->~S9181C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9181C2(Test_S9181C2, "S9181C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S9181C2C1Ev();
extern void _ZN7S9181C2D1Ev();
Name_Map name_map_S9181C2[] = {
  NSPAIR(_ZN7S9181C2C1Ev),
  NSPAIR(_ZN7S9181C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9181C2[];
extern void _ZN7S9181C2D1Ev();
extern void _ZN7S9181C2D0Ev();
extern void _ZN7S9181C22v3Ev();
extern void _ZN7S9181C22v4Ev();
static  VTBL_ENTRY vtc_S9181C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9181C2[0]),
  (VTBL_ENTRY)&_ZN7S9181C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9181C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9181C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9181C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9181C2[];
extern  VTBL_ENTRY _ZTV7S9181C2[];
Class_Descriptor cd_S9181C2 = {  "S9181C2", // class name
  0,0,//no base classes
  &(vtc_S9181C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S9181C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9181C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9181C1  : S9181C2 {
  void *s9181c1f0;
  int s9181c1f1;
  virtual void  v1(); // _ZN7S9181C12v1Ev
  virtual void  v2(); // _ZN7S9181C12v2Ev
  ~S9181C1(); // tgen
  S9181C1(); // tgen
};
//SIG(1 S9181C1) C1{ BC2{ vd v3 v4 Fi FC3{ m Fp Fi FC4{ m}} FC5{ m Fp}} v1 v2 Fp Fi}


void  S9181C1 ::v1(){vfunc_called(this, "_ZN7S9181C12v1Ev");}
void  S9181C1 ::v2(){vfunc_called(this, "_ZN7S9181C12v2Ev");}
S9181C1 ::~S9181C1(){ note_dtor("S9181C1", this);} // tgen
S9181C1 ::S9181C1(){ note_ctor("S9181C1", this);} // tgen

static void Test_S9181C1()
{
  extern Class_Descriptor cd_S9181C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9181C1, buf);
    S9181C1 *dp, &lv = *(dp=new (buf) S9181C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9181C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9181C1)");
    check_base_class_offset(lv, (S9181C2*), 0, "S9181C1");
    check_field_offset(lv, s9181c1f0, ABISELECT(40,24), "S9181C1.s9181c1f0");
    check_field_offset(lv, s9181c1f1, ABISELECT(48,28), "S9181C1.s9181c1f1");
    test_class_info(&lv, &cd_S9181C1);
    dp->~S9181C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9181C1(Test_S9181C1, "S9181C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9181C1C1Ev();
extern void _ZN7S9181C1D1Ev();
Name_Map name_map_S9181C1[] = {
  NSPAIR(_ZN7S9181C1C1Ev),
  NSPAIR(_ZN7S9181C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9181C2;
extern VTBL_ENTRY _ZTI7S9181C2[];
extern  VTBL_ENTRY _ZTV7S9181C2[];
static Base_Class bases_S9181C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9181C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9181C1[];
extern void _ZN7S9181C1D1Ev();
extern void _ZN7S9181C1D0Ev();
extern void _ZN7S9181C22v3Ev();
extern void _ZN7S9181C22v4Ev();
extern void _ZN7S9181C12v1Ev();
extern void _ZN7S9181C12v2Ev();
static  VTBL_ENTRY vtc_S9181C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9181C1[0]),
  (VTBL_ENTRY)&_ZN7S9181C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9181C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9181C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9181C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9181C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9181C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9181C1[];
extern  VTBL_ENTRY _ZTV7S9181C1[];
Class_Descriptor cd_S9181C1 = {  "S9181C1", // class name
  bases_S9181C1, 1,
  &(vtc_S9181C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9181C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9181C1),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  S7012C2  {
  short s7012c2f0;
  virtual void  v6(); // _ZN7S7012C22v6Ev
  virtual void  v7(); // _ZN7S7012C22v7Ev
  virtual void  v8(); // _ZN7S7012C22v8Ev
  virtual void  v9(); // _ZN7S7012C22v9Ev
  virtual void  v10(); // _ZN7S7012C23v10Ev
  virtual void  v11(); // _ZN7S7012C23v11Ev
  ~S7012C2(); // tgen
  S7012C2(); // tgen
};
//SIG(-1 S7012C2) C1{ v1 v2 v3 v4 v5 v6 Fs}


void  S7012C2 ::v6(){vfunc_called(this, "_ZN7S7012C22v6Ev");}
void  S7012C2 ::v7(){vfunc_called(this, "_ZN7S7012C22v7Ev");}
void  S7012C2 ::v8(){vfunc_called(this, "_ZN7S7012C22v8Ev");}
void  S7012C2 ::v9(){vfunc_called(this, "_ZN7S7012C22v9Ev");}
void  S7012C2 ::v10(){vfunc_called(this, "_ZN7S7012C23v10Ev");}
void  S7012C2 ::v11(){vfunc_called(this, "_ZN7S7012C23v11Ev");}
S7012C2 ::~S7012C2(){ note_dtor("S7012C2", this);} // tgen
S7012C2 ::S7012C2(){ note_ctor("S7012C2", this);} // tgen

static void Test_S7012C2()
{
  extern Class_Descriptor cd_S7012C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7012C2, buf);
    S7012C2 *dp, &lv = *(dp=new (buf) S7012C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7012C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7012C2)");
    check_field_offset(lv, s7012c2f0, ABISELECT(8,4), "S7012C2.s7012c2f0");
    test_class_info(&lv, &cd_S7012C2);
    dp->~S7012C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7012C2(Test_S7012C2, "S7012C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7012C2C1Ev();
extern void _ZN7S7012C2D1Ev();
Name_Map name_map_S7012C2[] = {
  NSPAIR(_ZN7S7012C2C1Ev),
  NSPAIR(_ZN7S7012C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7012C2[];
extern void _ZN7S7012C22v6Ev();
extern void _ZN7S7012C22v7Ev();
extern void _ZN7S7012C22v8Ev();
extern void _ZN7S7012C22v9Ev();
extern void _ZN7S7012C23v10Ev();
extern void _ZN7S7012C23v11Ev();
static  VTBL_ENTRY vtc_S7012C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7012C2[0]),
  (VTBL_ENTRY)&_ZN7S7012C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7012C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7012C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7012C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7012C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7012C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S7012C2[];
extern  VTBL_ENTRY _ZTV7S7012C2[];
Class_Descriptor cd_S7012C2 = {  "S7012C2", // class name
  0,0,//no base classes
  &(vtc_S7012C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7012C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7012C2),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  S7012C3_nt  {
  int s7012c3f0;
  virtual void  v12(); // _ZN10S7012C3_nt3v12Ev
  virtual void  v13(); // _ZN10S7012C3_nt3v13Ev
  ~S7012C3_nt(); // tgen
  S7012C3_nt(); // tgen
};
//SIG(-1 S7012C3_nt) C1{ v1 v2 Fi}


void  S7012C3_nt ::v12(){vfunc_called(this, "_ZN10S7012C3_nt3v12Ev");}
void  S7012C3_nt ::v13(){vfunc_called(this, "_ZN10S7012C3_nt3v13Ev");}
S7012C3_nt ::~S7012C3_nt(){ note_dtor("S7012C3_nt", this);} // tgen
S7012C3_nt ::S7012C3_nt(){ note_ctor("S7012C3_nt", this);} // tgen

//skip512 S7012C3_nt

#else // __cplusplus

extern void _ZN10S7012C3_ntC1Ev();
extern void _ZN10S7012C3_ntD1Ev();
Name_Map name_map_S7012C3_nt[] = {
  NSPAIR(_ZN10S7012C3_ntC1Ev),
  NSPAIR(_ZN10S7012C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7012C3_nt[];
extern void _ZN10S7012C3_nt3v12Ev();
extern void _ZN10S7012C3_nt3v13Ev();
static  VTBL_ENTRY vtc_S7012C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7012C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7012C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7012C3_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S7012C3_nt[];
VTBL_ENTRY *P__ZTI10S7012C3_nt = _ZTI10S7012C3_nt; 
extern  VTBL_ENTRY _ZTV10S7012C3_nt[];
Class_Descriptor cd_S7012C3_nt = {  "S7012C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7012C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S7012C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7012C3_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  S7012C1  : S7012C2 , S7012C3_nt {
  virtual void  v1(); // _ZN7S7012C12v1Ev
  virtual void  v2(); // _ZN7S7012C12v2Ev
  virtual void  v3(); // _ZN7S7012C12v3Ev
  virtual void  v4(); // _ZN7S7012C12v4Ev
  virtual void  v5(); // _ZN7S7012C12v5Ev
  ~S7012C1(); // tgen
  S7012C1(); // tgen
};
//SIG(1 S7012C1) C1{ BC2{ v6 v7 v8 v9 v10 v11 Fs} BC3{ v12 v13 Fi} v1 v2 v3 v4 v5}


void  S7012C1 ::v1(){vfunc_called(this, "_ZN7S7012C12v1Ev");}
void  S7012C1 ::v2(){vfunc_called(this, "_ZN7S7012C12v2Ev");}
void  S7012C1 ::v3(){vfunc_called(this, "_ZN7S7012C12v3Ev");}
void  S7012C1 ::v4(){vfunc_called(this, "_ZN7S7012C12v4Ev");}
void  S7012C1 ::v5(){vfunc_called(this, "_ZN7S7012C12v5Ev");}
S7012C1 ::~S7012C1(){ note_dtor("S7012C1", this);} // tgen
S7012C1 ::S7012C1(){ note_ctor("S7012C1", this);} // tgen

static void Test_S7012C1()
{
  extern Class_Descriptor cd_S7012C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7012C1, buf);
    S7012C1 *dp, &lv = *(dp=new (buf) S7012C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7012C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7012C1)");
    check_base_class_offset(lv, (S7012C2*), 0, "S7012C1");
    check_base_class_offset(lv, (S7012C3_nt*), ABISELECT(16,8), "S7012C1");
    test_class_info(&lv, &cd_S7012C1);
    dp->~S7012C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7012C1(Test_S7012C1, "S7012C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7012C1C1Ev();
extern void _ZN7S7012C1D1Ev();
Name_Map name_map_S7012C1[] = {
  NSPAIR(_ZN7S7012C1C1Ev),
  NSPAIR(_ZN7S7012C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7012C2;
extern VTBL_ENTRY _ZTI7S7012C2[];
extern  VTBL_ENTRY _ZTV7S7012C2[];
extern Class_Descriptor cd_S7012C3_nt;
extern VTBL_ENTRY _ZTI10S7012C3_nt[];
extern  VTBL_ENTRY _ZTV10S7012C3_nt[];
static Base_Class bases_S7012C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7012C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7012C3_nt,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S7012C1[];
extern void _ZN7S7012C22v6Ev();
extern void _ZN7S7012C22v7Ev();
extern void _ZN7S7012C22v8Ev();
extern void _ZN7S7012C22v9Ev();
extern void _ZN7S7012C23v10Ev();
extern void _ZN7S7012C23v11Ev();
extern void _ZN7S7012C12v1Ev();
extern void _ZN7S7012C12v2Ev();
extern void _ZN7S7012C12v3Ev();
extern void _ZN7S7012C12v4Ev();
extern void _ZN7S7012C12v5Ev();
extern void _ZN10S7012C3_nt3v12Ev();
extern void _ZN10S7012C3_nt3v13Ev();
static  VTBL_ENTRY vtc_S7012C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7012C1[0]),
  (VTBL_ENTRY)&_ZN7S7012C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7012C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7012C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7012C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7012C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7012C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7012C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7012C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7012C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7012C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7012C12v5Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7012C1[0]),
  (VTBL_ENTRY)&_ZN10S7012C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7012C3_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI7S7012C1[];
extern  VTBL_ENTRY _ZTV7S7012C1[];
Class_Descriptor cd_S7012C1 = {  "S7012C1", // class name
  bases_S7012C1, 2,
  &(vtc_S7012C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7012C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7012C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5591C2  {
  ::S17189C4_nt s5591c2f0;
  ::S17189C4_nt s5591c2f1;
  ::S17189C4_nt s5591c2f2;
  ::S17189C4_nt s5591c2f3;
  int s5591c2f4[5];
  void  mf5591c2(); // _ZN7S5591C28mf5591c2Ev
};
//SIG(-1 S5591C2) C1{ m FC2{ BC3{ m Fc[16]}} FC2 FC2 FC2 Fi[5]}


void  S5591C2 ::mf5591c2(){}

static void Test_S5591C2()
{
  {
    init_simple_test("S5591C2");
    S5591C2 lv;
    check2(sizeof(lv), 84, "sizeof(S5591C2)");
    check2(__alignof__(lv), 4, "__alignof__(S5591C2)");
    check_field_offset(lv, s5591c2f0, 0, "S5591C2.s5591c2f0");
    check_field_offset(lv, s5591c2f1, 16, "S5591C2.s5591c2f1");
    check_field_offset(lv, s5591c2f2, 32, "S5591C2.s5591c2f2");
    check_field_offset(lv, s5591c2f3, 48, "S5591C2.s5591c2f3");
    check_field_offset(lv, s5591c2f4, 64, "S5591C2.s5591c2f4");
  }
}
static Arrange_To_Call_Me vS5591C2(Test_S5591C2, "S5591C2", 84);

#else // __cplusplus

Class_Descriptor cd_S5591C2 = {  "S5591C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S5591C1  : S5591C2 {
  char s5591c1f0[928];
};
//SIG(1 S5591C1) C1{ BC2{ m FC3{ BC4{ m Fc[16]}} FC3 FC3 FC3 Fi[5]} Fc[928]}



static void Test_S5591C1()
{
  extern Class_Descriptor cd_S5591C1;
  void *lvp;
  {
    int buf[254];
    init_test(&cd_S5591C1, buf);
    S5591C1 &lv = *(new (buf) S5591C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1012, "sizeof(S5591C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5591C1)");
    check_base_class_offset(lv, (S5591C2*), 0, "S5591C1");
    check_field_offset(lv, s5591c1f0, 84, "S5591C1.s5591c1f0");
    test_class_info(&lv, &cd_S5591C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5591C1(Test_S5591C1, "S5591C1", 1012);

#else // __cplusplus

extern Class_Descriptor cd_S5591C2;
static Base_Class bases_S5591C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5591C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5591C1 = {  "S5591C1", // class name
  bases_S5591C1, 1,
  0, // no vftv
  0, //no vtt
  1012, // 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  S16965C3  {
  int s16965c3f0;
  char s16965c3f1[65];
  int s16965c3f2;
  void *s16965c3f3;
  void  mf16965c3(); // _ZN8S16965C39mf16965c3Ev
};
//SIG(-1 S16965C3) C1{ m Fi Fc[65] Fi Fp}


void  S16965C3 ::mf16965c3(){}

static void Test_S16965C3()
{
  {
    init_simple_test("S16965C3");
    S16965C3 lv;
    check2(sizeof(lv), ABISELECT(88,80), "sizeof(S16965C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16965C3)");
    check_field_offset(lv, s16965c3f0, 0, "S16965C3.s16965c3f0");
    check_field_offset(lv, s16965c3f1, 4, "S16965C3.s16965c3f1");
    check_field_offset(lv, s16965c3f2, 72, "S16965C3.s16965c3f2");
    check_field_offset(lv, s16965c3f3, ABISELECT(80,76), "S16965C3.s16965c3f3");
  }
}
static Arrange_To_Call_Me vS16965C3(Test_S16965C3, "S16965C3", ABISELECT(88,80));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16965C1  {
  int s16965c1f0;
  void *s16965c1f1[2];
  int s16965c1f2;
  ::S8516C16_nt s16965c1f3;
  char s16965c1f4[16];
  ::S16965C3 s16965c1f5;
  void  mf16965c1(); // _ZN8S16965C19mf16965c1Ev
};
//SIG(1 S16965C1) C1{ m Fi Fp[2] Fi FC2{ Fi[2]} Fc[16] FC3{ m Fi Fc[65] Fi Fp}}


void  S16965C1 ::mf16965c1(){}

static void Test_S16965C1()
{
  {
    init_simple_test("S16965C1");
    S16965C1 lv;
    check2(sizeof(lv), ABISELECT(144,120), "sizeof(S16965C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16965C1)");
    check_field_offset(lv, s16965c1f0, 0, "S16965C1.s16965c1f0");
    check_field_offset(lv, s16965c1f1, ABISELECT(8,4), "S16965C1.s16965c1f1");
    check_field_offset(lv, s16965c1f2, ABISELECT(24,12), "S16965C1.s16965c1f2");
    check_field_offset(lv, s16965c1f3, ABISELECT(28,16), "S16965C1.s16965c1f3");
    check_field_offset(lv, s16965c1f4, ABISELECT(36,24), "S16965C1.s16965c1f4");
    check_field_offset(lv, s16965c1f5, ABISELECT(56,40), "S16965C1.s16965c1f5");
  }
}
static Arrange_To_Call_Me vS16965C1(Test_S16965C1, "S16965C1", ABISELECT(144,120));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19C7  : S22028C68_nt {
  void *s19c7f0;
};
//SIG(-1 S19C7) C1{ BC2{ m Fp} Fp}



static void Test_S19C7()
{
  extern Class_Descriptor cd_S19C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19C7, buf);
    S19C7 &lv = *(new (buf) S19C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19C7)");
    check_base_class_offset(lv, (S22028C68_nt*), 0, "S19C7");
    check_field_offset(lv, s19c7f0, ABISELECT(8,4), "S19C7.s19c7f0");
    test_class_info(&lv, &cd_S19C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19C7(Test_S19C7, "S19C7", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S19C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19C7 = {  "S19C7", // class name
  bases_S19C7, 1,
  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  S19C6  : S19C7 {
  void *s19c6f0;
};
//SIG(-1 S19C6) C1{ BC2{ BC3{ m Fp} Fp} Fp}



static void Test_S19C6()
{
  extern Class_Descriptor cd_S19C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19C6, buf);
    S19C6 &lv = *(new (buf) S19C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19C6)");
    check_base_class_offset(lv, (S22028C68_nt*)(S19C7*), 0, "S19C6");
    check_base_class_offset(lv, (S19C7*), 0, "S19C6");
    check_field_offset(lv, s19c6f0, ABISELECT(16,8), "S19C6.s19c6f0");
    test_class_info(&lv, &cd_S19C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19C6(Test_S19C6, "S19C6", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S19C7;
static Base_Class bases_S19C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S19C6 = {  "S19C6", // class name
  bases_S19C6, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S19C5  : S19C6 {
  void *s19c5f0;
};
//SIG(-1 S19C5) C1{ BC2{ BC3{ BC4{ m Fp} Fp} Fp} Fp}



static void Test_S19C5()
{
  extern Class_Descriptor cd_S19C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19C5, buf);
    S19C5 &lv = *(new (buf) S19C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19C5)");
    check_base_class_offset(lv, (S22028C68_nt*)(S19C7*)(S19C6*), 0, "S19C5");
    check_base_class_offset(lv, (S19C7*)(S19C6*), 0, "S19C5");
    check_base_class_offset(lv, (S19C6*), 0, "S19C5");
    check_field_offset(lv, s19c5f0, ABISELECT(24,12), "S19C5.s19c5f0");
    test_class_info(&lv, &cd_S19C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19C5(Test_S19C5, "S19C5", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S19C7;
extern Class_Descriptor cd_S19C6;
static Base_Class bases_S19C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S19C5 = {  "S19C5", // class name
  bases_S19C5, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,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  S19C4  : S19C5 {
  void *s19c4f0;
};
//SIG(-1 S19C4) C1{ BC2{ BC3{ BC4{ BC5{ m Fp} Fp} Fp} Fp} Fp}



static void Test_S19C4()
{
  extern Class_Descriptor cd_S19C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19C4, buf);
    S19C4 &lv = *(new (buf) S19C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19C4)");
    check_base_class_offset(lv, (S22028C68_nt*)(S19C7*)(S19C6*)(S19C5*), 0, "S19C4");
    check_base_class_offset(lv, (S19C7*)(S19C6*)(S19C5*), 0, "S19C4");
    check_base_class_offset(lv, (S19C6*)(S19C5*), 0, "S19C4");
    check_base_class_offset(lv, (S19C5*), 0, "S19C4");
    check_field_offset(lv, s19c4f0, ABISELECT(32,16), "S19C4.s19c4f0");
    test_class_info(&lv, &cd_S19C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19C4(Test_S19C4, "S19C4", ABISELECT(40,20));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S19C7;
extern Class_Descriptor cd_S19C6;
extern Class_Descriptor cd_S19C5;
static Base_Class bases_S19C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S19C4 = {  "S19C4", // class name
  bases_S19C4, 4,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,20), // 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  S19C3  : S19C4 {
  void *s19c3f0;
};
//SIG(-1 S19C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ m Fp} Fp} Fp} Fp} Fp} Fp}



static void Test_S19C3()
{
  extern Class_Descriptor cd_S19C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19C3, buf);
    S19C3 &lv = *(new (buf) S19C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19C3)");
    check_base_class_offset(lv, (S22028C68_nt*)(S19C7*)(S19C6*)(S19C5*)(S19C4*), 0, "S19C3");
    check_base_class_offset(lv, (S19C7*)(S19C6*)(S19C5*)(S19C4*), 0, "S19C3");
    check_base_class_offset(lv, (S19C6*)(S19C5*)(S19C4*), 0, "S19C3");
    check_base_class_offset(lv, (S19C5*)(S19C4*), 0, "S19C3");
    check_base_class_offset(lv, (S19C4*), 0, "S19C3");
    check_field_offset(lv, s19c3f0, ABISELECT(40,20), "S19C3.s19c3f0");
    test_class_info(&lv, &cd_S19C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19C3(Test_S19C3, "S19C3", ABISELECT(48,24));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S19C7;
extern Class_Descriptor cd_S19C6;
extern Class_Descriptor cd_S19C5;
extern Class_Descriptor cd_S19C4;
static Base_Class bases_S19C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S19C3 = {  "S19C3", // class name
  bases_S19C3, 5,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19C2  : S19C3 {
  void *s19c2f0;
};
//SIG(-1 S19C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ m Fp} Fp} Fp} Fp} Fp} Fp} Fp}



static void Test_S19C2()
{
  extern Class_Descriptor cd_S19C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19C2, buf);
    S19C2 &lv = *(new (buf) S19C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19C2)");
    check_base_class_offset(lv, (S22028C68_nt*)(S19C7*)(S19C6*)(S19C5*)(S19C4*)(S19C3*), 0, "S19C2");
    check_base_class_offset(lv, (S19C7*)(S19C6*)(S19C5*)(S19C4*)(S19C3*), 0, "S19C2");
    check_base_class_offset(lv, (S19C6*)(S19C5*)(S19C4*)(S19C3*), 0, "S19C2");
    check_base_class_offset(lv, (S19C5*)(S19C4*)(S19C3*), 0, "S19C2");
    check_base_class_offset(lv, (S19C4*)(S19C3*), 0, "S19C2");
    check_base_class_offset(lv, (S19C3*), 0, "S19C2");
    check_field_offset(lv, s19c2f0, ABISELECT(48,24), "S19C2.s19c2f0");
    test_class_info(&lv, &cd_S19C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19C2(Test_S19C2, "S19C2", ABISELECT(56,28));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S19C7;
extern Class_Descriptor cd_S19C6;
extern Class_Descriptor cd_S19C5;
extern Class_Descriptor cd_S19C4;
extern Class_Descriptor cd_S19C3;
static Base_Class bases_S19C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S19C2 = {  "S19C2", // class name
  bases_S19C2, 6,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19C1  : S19C2 {
  void *s19c1f0;
};
//SIG(1 S19C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ m Fp} Fp} Fp} Fp} Fp} Fp} Fp} Fp}



static void Test_S19C1()
{
  extern Class_Descriptor cd_S19C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19C1, buf);
    S19C1 &lv = *(new (buf) S19C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19C1)");
    check_base_class_offset(lv, (S22028C68_nt*)(S19C7*)(S19C6*)(S19C5*)(S19C4*)(S19C3*)(S19C2*), 0, "S19C1");
    check_base_class_offset(lv, (S19C7*)(S19C6*)(S19C5*)(S19C4*)(S19C3*)(S19C2*), 0, "S19C1");
    check_base_class_offset(lv, (S19C6*)(S19C5*)(S19C4*)(S19C3*)(S19C2*), 0, "S19C1");
    check_base_class_offset(lv, (S19C5*)(S19C4*)(S19C3*)(S19C2*), 0, "S19C1");
    check_base_class_offset(lv, (S19C4*)(S19C3*)(S19C2*), 0, "S19C1");
    check_base_class_offset(lv, (S19C3*)(S19C2*), 0, "S19C1");
    check_base_class_offset(lv, (S19C2*), 0, "S19C1");
    check_field_offset(lv, s19c1f0, ABISELECT(56,28), "S19C1.s19c1f0");
    test_class_info(&lv, &cd_S19C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19C1(Test_S19C1, "S19C1", ABISELECT(64,32));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S19C7;
extern Class_Descriptor cd_S19C6;
extern Class_Descriptor cd_S19C5;
extern Class_Descriptor cd_S19C4;
extern Class_Descriptor cd_S19C3;
extern Class_Descriptor cd_S19C2;
static Base_Class bases_S19C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S19C1 = {  "S19C1", // class name
  bases_S19C1, 7,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,32), // 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  S12360C3  {
  short s12360c3f0[2];
  char s12360c3f1[32];
};
//SIG(-1 S12360C3) C1{ Fs[2] Fc[32]}



static void Test_S12360C3()
{
  {
    init_simple_test("S12360C3");
    S12360C3 lv;
    check2(sizeof(lv), 36, "sizeof(S12360C3)");
    check2(__alignof__(lv), 2, "__alignof__(S12360C3)");
    check_field_offset(lv, s12360c3f0, 0, "S12360C3.s12360c3f0");
    check_field_offset(lv, s12360c3f1, 4, "S12360C3.s12360c3f1");
  }
}
static Arrange_To_Call_Me vS12360C3(Test_S12360C3, "S12360C3", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12360C1  {
  int s12360c1f0;
  ::S4874C11_nt s12360c1f1;
  ::S12360C3 s12360c1f2;
  ::S8512C19 s12360c1f3;
};
//SIG(1 S12360C1) C1{ Fi FC2{ Fc[4]} FC3{ Fs[2] Fc[32]} FC4{ Fs Fc[2] Fs[2] Fi}}



static void Test_S12360C1()
{
  {
    init_simple_test("S12360C1");
    S12360C1 lv;
    check2(sizeof(lv), 56, "sizeof(S12360C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12360C1)");
    check_field_offset(lv, s12360c1f0, 0, "S12360C1.s12360c1f0");
    check_field_offset(lv, s12360c1f1, 4, "S12360C1.s12360c1f1");
    check_field_offset(lv, s12360c1f2, 8, "S12360C1.s12360c1f2");
    check_field_offset(lv, s12360c1f3, 44, "S12360C1.s12360c1f3");
  }
}
static Arrange_To_Call_Me vS12360C1(Test_S12360C1, "S12360C1", 56);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5592C1  : S5591C2 {
  void *s5592c1f0[2];
};
//SIG(1 S5592C1) C1{ BC2{ m FC3{ BC4{ m Fc[16]}} FC3 FC3 FC3 Fi[5]} Fp[2]}



static void Test_S5592C1()
{
  extern Class_Descriptor cd_S5592C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,24)];
    init_test(&cd_S5592C1, buf);
    S5592C1 &lv = *(new (buf) S5592C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,92), "sizeof(S5592C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5592C1)");
    check_base_class_offset(lv, (S5591C2*), 0, "S5592C1");
    check_field_offset(lv, s5592c1f0, ABISELECT(88,84), "S5592C1.s5592c1f0");
    test_class_info(&lv, &cd_S5592C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5592C1(Test_S5592C1, "S5592C1", ABISELECT(104,92));

#else // __cplusplus

extern Class_Descriptor cd_S5591C2;
static Base_Class bases_S5592C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5591C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5592C1 = {  "S5592C1", // class name
  bases_S5592C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(104,92), // 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  S984C3  : S21712C8_nt {
};
//SIG(-1 S984C3) C1{ BC2{ m Fi}}



static void Test_S984C3()
{
  extern Class_Descriptor cd_S984C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S984C3, buf);
    S984C3 &lv = *(new (buf) S984C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S984C3)");
    check2(__alignof__(lv), 4, "__alignof__(S984C3)");
    check_base_class_offset(lv, (S21712C8_nt*), 0, "S984C3");
    test_class_info(&lv, &cd_S984C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS984C3(Test_S984C3, "S984C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
static Base_Class bases_S984C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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_S984C3 = {  "S984C3", // class name
  bases_S984C3, 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  S984C2_nt  : S984C3 {
  unsigned int s984c2f0:1;
  unsigned int s984c2f1:1;
  int s984c2f2:4;
};
//SIG(-1 S984C2_nt) C1{ BC2{ BC3{ m Fi}} Fi:1 Fi:1 Fi:4}



//skip512 S984C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
extern Class_Descriptor cd_S984C3;
static Base_Class bases_S984C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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_S984C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S984C2_nt = {  "S984C2_nt", // class name
  bases_S984C2_nt, 2,
  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  S984C1  : S984C2_nt {
  ::S22028C68_nt s984c1f0;
  ::S3715C9_nt s984c1f1;
};
//SIG(1 S984C1) C1{ BC2{ BC3{ BC4{ m Fi}} Fi:1 Fi:1 Fi:4} FC5{ m Fp} FC6{ m Fp}}



static void Test_S984C1()
{
  extern Class_Descriptor cd_S984C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S984C1, buf);
    S984C1 &lv = *(new (buf) S984C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S984C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S984C1)");
    check_base_class_offset(lv, (S21712C8_nt*)(S984C3*)(S984C2_nt*), 0, "S984C1");
    check_base_class_offset(lv, (S984C3*)(S984C2_nt*), 0, "S984C1");
    check_base_class_offset(lv, (S984C2_nt*), 0, "S984C1");
    check_field_offset(lv, s984c1f0, 8, "S984C1.s984c1f0");
    check_field_offset(lv, s984c1f1, ABISELECT(16,12), "S984C1.s984c1f1");
    test_class_info(&lv, &cd_S984C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS984C1(Test_S984C1, "S984C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
extern Class_Descriptor cd_S984C3;
extern Class_Descriptor cd_S984C2_nt;
static Base_Class bases_S984C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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_S984C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S984C2_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_S984C1 = {  "S984C1", // class name
  bases_S984C1, 3,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S17658C3  {
  __tsi64 s17658c3f0;
  __tsi64 s17658c3f1;
  void *s17658c3f2;
  void *s17658c3f3;
};
//SIG(1 S17658C3) U1{ FL FL Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S17658C1  {
  void *s17658c1f0;
  ::S22028C68_nt s17658c1f1;
  ::S22028C68_nt s17658c1f2;
  ::S22028C68_nt s17658c1f3;
  unsigned char s17658c1f4:1;
  int s17658c1f5[2];
  ::S17658C3 s17658c1f6;
  int s17658c1f7;
  void  mf17658c1(); // _ZN8S17658C19mf17658c1Ev
};
//SIG(1 S17658C1) C1{ m Fp FC2{ m Fp} FC2 FC2 Fc:1 Fi[2] FU3{ FL FL Fp Fp} Fi}


void  S17658C1 ::mf17658c1(){}

static void Test_S17658C1()
{
  {
    init_simple_test("S17658C1");
    static S17658C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S17658C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17658C1)");
    check_field_offset(lv, s17658c1f0, 0, "S17658C1.s17658c1f0");
    check_field_offset(lv, s17658c1f1, ABISELECT(8,4), "S17658C1.s17658c1f1");
    check_field_offset(lv, s17658c1f2, ABISELECT(16,8), "S17658C1.s17658c1f2");
    check_field_offset(lv, s17658c1f3, ABISELECT(24,12), "S17658C1.s17658c1f3");
    set_bf_and_test(lv, s17658c1f4, ABISELECT(32,16), 0, 1, 1, "S17658C1");
    check_field_offset(lv, s17658c1f5, ABISELECT(36,20), "S17658C1.s17658c1f5");
    check_field_offset(lv, s17658c1f6, ABISELECT(48,28), "S17658C1.s17658c1f6");
    check_field_offset(lv, s17658c1f7, ABISELECT(56,36), "S17658C1.s17658c1f7");
  }
}
static Arrange_To_Call_Me vS17658C1(Test_S17658C1, "S17658C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20374C2  {
  void *s20374c2f0[2];
  int s20374c2f1;
  virtual void  v8(); // _ZN8S20374C22v8Ev
  virtual void  v9(); // _ZN8S20374C22v9Ev
  ~S20374C2(); // tgen
  S20374C2(); // tgen
};
//SIG(-1 S20374C2) C1{ v1 v2 Fp[2] Fi}


void  S20374C2 ::v8(){vfunc_called(this, "_ZN8S20374C22v8Ev");}
void  S20374C2 ::v9(){vfunc_called(this, "_ZN8S20374C22v9Ev");}
S20374C2 ::~S20374C2(){ note_dtor("S20374C2", this);} // tgen
S20374C2 ::S20374C2(){ note_ctor("S20374C2", this);} // tgen

static void Test_S20374C2()
{
  extern Class_Descriptor cd_S20374C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20374C2, buf);
    S20374C2 *dp, &lv = *(dp=new (buf) S20374C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20374C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20374C2)");
    check_field_offset(lv, s20374c2f0, ABISELECT(8,4), "S20374C2.s20374c2f0");
    check_field_offset(lv, s20374c2f1, ABISELECT(24,12), "S20374C2.s20374c2f1");
    test_class_info(&lv, &cd_S20374C2);
    dp->~S20374C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20374C2(Test_S20374C2, "S20374C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20374C2C1Ev();
extern void _ZN8S20374C2D1Ev();
Name_Map name_map_S20374C2[] = {
  NSPAIR(_ZN8S20374C2C1Ev),
  NSPAIR(_ZN8S20374C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20374C2[];
extern void _ZN8S20374C22v8Ev();
extern void _ZN8S20374C22v9Ev();
static  VTBL_ENTRY vtc_S20374C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20374C2[0]),
  (VTBL_ENTRY)&_ZN8S20374C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20374C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20374C2[];
extern  VTBL_ENTRY _ZTV8S20374C2[];
Class_Descriptor cd_S20374C2 = {  "S20374C2", // class name
  0,0,//no base classes
  &(vtc_S20374C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20374C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20374C2),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  S20374C1  : virtual S20374C2 {
  char s20374c1f0[2];
  int s20374c1f1;
  virtual void  v1(); // _ZN8S20374C12v1Ev
  virtual void  v2(); // _ZN8S20374C12v2Ev
  virtual void  v3(); // _ZN8S20374C12v3Ev
  virtual void  v4(); // _ZN8S20374C12v4Ev
  virtual void  v5(); // _ZN8S20374C12v5Ev
  virtual void  v6(); // _ZN8S20374C12v6Ev
  virtual void  v7(); // _ZN8S20374C12v7Ev
  ~S20374C1(); // tgen
  S20374C1(); // tgen
};
//SIG(1 S20374C1) C1{ VBC2{ v8 v9 Fp[2] Fi} v1 v2 v3 v4 v5 v6 v7 Fc[2] Fi}


void  S20374C1 ::v1(){vfunc_called(this, "_ZN8S20374C12v1Ev");}
void  S20374C1 ::v2(){vfunc_called(this, "_ZN8S20374C12v2Ev");}
void  S20374C1 ::v3(){vfunc_called(this, "_ZN8S20374C12v3Ev");}
void  S20374C1 ::v4(){vfunc_called(this, "_ZN8S20374C12v4Ev");}
void  S20374C1 ::v5(){vfunc_called(this, "_ZN8S20374C12v5Ev");}
void  S20374C1 ::v6(){vfunc_called(this, "_ZN8S20374C12v6Ev");}
void  S20374C1 ::v7(){vfunc_called(this, "_ZN8S20374C12v7Ev");}
S20374C1 ::~S20374C1(){ note_dtor("S20374C1", this);} // tgen
S20374C1 ::S20374C1(){ note_ctor("S20374C1", this);} // tgen

static void Test_S20374C1()
{
  extern Class_Descriptor cd_S20374C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S20374C1, buf);
    S20374C1 *dp, &lv = *(dp=new (buf) S20374C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S20374C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20374C1)");
    check_base_class_offset(lv, (S20374C2*), ABISELECT(16,12), "S20374C1");
    check_field_offset(lv, s20374c1f0, ABISELECT(8,4), "S20374C1.s20374c1f0");
    check_field_offset(lv, s20374c1f1, ABISELECT(12,8), "S20374C1.s20374c1f1");
    test_class_info(&lv, &cd_S20374C1);
    dp->~S20374C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20374C1(Test_S20374C1, "S20374C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S20374C1C1Ev();
extern void _ZN8S20374C1D1Ev();
Name_Map name_map_S20374C1[] = {
  NSPAIR(_ZN8S20374C1C1Ev),
  NSPAIR(_ZN8S20374C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20374C2;
extern VTBL_ENTRY _ZTI8S20374C2[];
extern  VTBL_ENTRY _ZTV8S20374C2[];
static Base_Class bases_S20374C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20374C2,    ABISELECT(16,12), //bcp->offset
    10, //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 _ZTI8S20374C1[];
extern void _ZN8S20374C12v1Ev();
extern void _ZN8S20374C12v2Ev();
extern void _ZN8S20374C12v3Ev();
extern void _ZN8S20374C12v4Ev();
extern void _ZN8S20374C12v5Ev();
extern void _ZN8S20374C12v6Ev();
extern void _ZN8S20374C12v7Ev();
extern void _ZN8S20374C22v8Ev();
extern void _ZN8S20374C22v9Ev();
static  VTBL_ENTRY vtc_S20374C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20374C1[0]),
  (VTBL_ENTRY)&_ZN8S20374C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20374C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20374C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20374C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20374C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20374C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20374C12v7Ev,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20374C1[0]),
  (VTBL_ENTRY)&_ZN8S20374C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20374C22v9Ev,
};
extern VTBL_ENTRY _ZTV8S20374C1[];
static  VTT_ENTRY vtt_S20374C1[] = {
  {&(_ZTV8S20374C1[3]),  3,16},
  {&(_ZTV8S20374C1[14]),  14,16},
};
extern VTBL_ENTRY _ZTI8S20374C1[];
extern  VTBL_ENTRY _ZTV8S20374C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20374C1[];
Class_Descriptor cd_S20374C1 = {  "S20374C1", // class name
  bases_S20374C1, 1,
  &(vtc_S20374C1[0]), // expected_vtbl_contents
  &(vtt_S20374C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S20374C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20374C1),16, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20374C1),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  S1067C3  : S21712C8_nt {
};
//SIG(-1 S1067C3) C1{ BC2{ m Fi}}



static void Test_S1067C3()
{
  extern Class_Descriptor cd_S1067C3;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S1067C3, buf);
    S1067C3 &lv = *(new (buf) S1067C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S1067C3)");
    check2(__alignof__(lv), 4, "__alignof__(S1067C3)");
    check_base_class_offset(lv, (S21712C8_nt*), 0, "S1067C3");
    test_class_info(&lv, &cd_S1067C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1067C3(Test_S1067C3, "S1067C3", 4);

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
static Base_Class bases_S1067C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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 _ZTI7S1067C3[];
Class_Descriptor cd_S1067C3 = {  "S1067C3", // class name
  bases_S1067C3, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S1067C3),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1067C2_nt  : S1067C3 {
  virtual  ~S1067C2_nt(); // _ZN10S1067C2_ntD1Ev
  virtual void  v2(); // _ZN10S1067C2_nt2v2Ev
  S1067C2_nt(); // tgen
};
//SIG(-1 S1067C2_nt) C1{ BC2{ BC3{ m Fi}} vd v1}


 S1067C2_nt ::~S1067C2_nt(){ note_dtor("S1067C2_nt", this);}
void  S1067C2_nt ::v2(){vfunc_called(this, "_ZN10S1067C2_nt2v2Ev");}
S1067C2_nt ::S1067C2_nt(){ note_ctor("S1067C2_nt", this);} // tgen

//skip512 S1067C2_nt

#else // __cplusplus

extern void _ZN10S1067C2_ntC1Ev();
extern void _ZN10S1067C2_ntD1Ev();
Name_Map name_map_S1067C2_nt[] = {
  NSPAIR(_ZN10S1067C2_ntC1Ev),
  NSPAIR(_ZN10S1067C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
extern Class_Descriptor cd_S1067C3;
extern VTBL_ENTRY _ZTI7S1067C3[];
static Base_Class bases_S1067C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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
  0, 0},
  {&cd_S1067C3,    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 _ZTI10S1067C2_nt[];
extern void _ZN10S1067C2_ntD1Ev();
extern void _ZN10S1067C2_ntD0Ev();
extern void _ZN10S1067C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S1067C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1067C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1067C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1067C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1067C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S1067C2_nt[];
VTBL_ENTRY *P__ZTI10S1067C2_nt = _ZTI10S1067C2_nt; 
extern  VTBL_ENTRY _ZTV10S1067C2_nt[];
Class_Descriptor cd_S1067C2_nt = {  "S1067C2_nt", // class name
  bases_S1067C2_nt, 2,
  &(vtc_S1067C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1067C2_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S1067C2_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  S1067C1  : S1067C2_nt {
  ::S22028C68_nt s1067c1f0;
  ::S3715C9_nt s1067c1f1;
  virtual  ~S1067C1(); // _ZN7S1067C1D1Ev
  virtual void  v1(); // _ZN7S1067C12v1Ev
  S1067C1(); // tgen
};
//SIG(1 S1067C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v2} vd v1 FC5{ m Fp} FC6{ m Fp}}


 S1067C1 ::~S1067C1(){ note_dtor("S1067C1", this);}
void  S1067C1 ::v1(){vfunc_called(this, "_ZN7S1067C12v1Ev");}
S1067C1 ::S1067C1(){ note_ctor("S1067C1", this);} // tgen

static void Test_S1067C1()
{
  extern Class_Descriptor cd_S1067C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1067C1, buf);
    S1067C1 *dp, &lv = *(dp=new (buf) S1067C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1067C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1067C1)");
    check_base_class_offset(lv, (S21712C8_nt*)(S1067C3*)(S1067C2_nt*), ABISELECT(8,4), "S1067C1");
    check_base_class_offset(lv, (S1067C3*)(S1067C2_nt*), ABISELECT(8,4), "S1067C1");
    check_base_class_offset(lv, (S1067C2_nt*), 0, "S1067C1");
    check_field_offset(lv, s1067c1f0, ABISELECT(16,8), "S1067C1.s1067c1f0");
    check_field_offset(lv, s1067c1f1, ABISELECT(24,12), "S1067C1.s1067c1f1");
    test_class_info(&lv, &cd_S1067C1);
    dp->~S1067C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1067C1(Test_S1067C1, "S1067C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1067C1C1Ev();
extern void _ZN7S1067C1D1Ev();
Name_Map name_map_S1067C1[] = {
  NSPAIR(_ZN7S1067C1C1Ev),
  NSPAIR(_ZN7S1067C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
extern Class_Descriptor cd_S1067C3;
extern VTBL_ENTRY _ZTI7S1067C3[];
extern Class_Descriptor cd_S1067C2_nt;
extern VTBL_ENTRY _ZTI10S1067C2_nt[];
extern  VTBL_ENTRY _ZTV10S1067C2_nt[];
static Base_Class bases_S1067C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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
  0, 0},
  {&cd_S1067C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1067C2_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 _ZTI7S1067C1[];
extern void _ZN7S1067C1D1Ev();
extern void _ZN7S1067C1D0Ev();
extern void _ZN10S1067C2_nt2v2Ev();
extern void _ZN7S1067C12v1Ev();
static  VTBL_ENTRY vtc_S1067C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1067C1[0]),
  (VTBL_ENTRY)&_ZN7S1067C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1067C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1067C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S1067C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S1067C1[];
extern  VTBL_ENTRY _ZTV7S1067C1[];
Class_Descriptor cd_S1067C1 = {  "S1067C1", // class name
  bases_S1067C1, 3,
  &(vtc_S1067C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1067C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1067C1),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  S17945C1  {
  void *s17945c1f0[2];
  ::S13575C4 s17945c1f1;
  void  mf17945c1(); // _ZN8S17945C19mf17945c1Ev
};
//SIG(1 S17945C1) C1{ m Fp[2] FC2{ m Fc FC3{ m Fp Fi FC4{ m} FC5{ m}} Fi[2]}}


void  S17945C1 ::mf17945c1(){}

static void Test_S17945C1()
{
  {
    init_simple_test("S17945C1");
    S17945C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S17945C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17945C1)");
    check_field_offset(lv, s17945c1f0, 0, "S17945C1.s17945c1f0");
    check_field_offset(lv, s17945c1f1, ABISELECT(16,8), "S17945C1.s17945c1f1");
  }
}
static Arrange_To_Call_Me vS17945C1(Test_S17945C1, "S17945C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16430C5_nt  {
  void *s16430c5f0;
  void  mf16430c5(); // _ZN11S16430C5_nt9mf16430c5Ev
};
//SIG(-1 S16430C5_nt) C1{ m Fp}


void  S16430C5_nt ::mf16430c5(){}

//skip512 S16430C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16430C1  {
  ::S22028C68_nt s16430c1f0;
  ::S3715C9_nt s16430c1f1;
  ::S3714C10 s16430c1f2;
  ::S16430C5_nt s16430c1f3;
  ::S16430C5_nt s16430c1f4;
  void  mf16430c1(); // _ZN8S16430C19mf16430c1Ev
};
//SIG(1 S16430C1) C1{ m FC2{ m Fp} FC3{ m Fp} FC4{ m Fp} FC5{ m Fp} FC5}


void  S16430C1 ::mf16430c1(){}

static void Test_S16430C1()
{
  {
    init_simple_test("S16430C1");
    S16430C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S16430C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16430C1)");
    check_field_offset(lv, s16430c1f0, 0, "S16430C1.s16430c1f0");
    check_field_offset(lv, s16430c1f1, ABISELECT(8,4), "S16430C1.s16430c1f1");
    check_field_offset(lv, s16430c1f2, ABISELECT(16,8), "S16430C1.s16430c1f2");
    check_field_offset(lv, s16430c1f3, ABISELECT(24,12), "S16430C1.s16430c1f3");
    check_field_offset(lv, s16430c1f4, ABISELECT(32,16), "S16430C1.s16430c1f4");
  }
}
static Arrange_To_Call_Me vS16430C1(Test_S16430C1, "S16430C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17046C1  {
  int s17046c1f0[16];
  void *s17046c1f1;
  ::S22028C68_nt s17046c1f2;
  ::S22028C68_nt s17046c1f3;
  void *s17046c1f4;
  ::S16430C5_nt s17046c1f5;
  ::S3715C9_nt s17046c1f6;
  void  mf17046c1(); // _ZN8S17046C19mf17046c1Ev
};
//SIG(1 S17046C1) C1{ m Fi[16] Fp FC2{ m Fp} FC2 Fp FC3{ m Fp} FC4{ m Fp}}


void  S17046C1 ::mf17046c1(){}

static void Test_S17046C1()
{
  {
    init_simple_test("S17046C1");
    S17046C1 lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S17046C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17046C1)");
    check_field_offset(lv, s17046c1f0, 0, "S17046C1.s17046c1f0");
    check_field_offset(lv, s17046c1f1, 64, "S17046C1.s17046c1f1");
    check_field_offset(lv, s17046c1f2, ABISELECT(72,68), "S17046C1.s17046c1f2");
    check_field_offset(lv, s17046c1f3, ABISELECT(80,72), "S17046C1.s17046c1f3");
    check_field_offset(lv, s17046c1f4, ABISELECT(88,76), "S17046C1.s17046c1f4");
    check_field_offset(lv, s17046c1f5, ABISELECT(96,80), "S17046C1.s17046c1f5");
    check_field_offset(lv, s17046c1f6, ABISELECT(104,84), "S17046C1.s17046c1f6");
  }
}
static Arrange_To_Call_Me vS17046C1(Test_S17046C1, "S17046C1", ABISELECT(112,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11149C3  {
  char s11149c3f0[64];
  int s11149c3f1[2];
  char s11149c3f2[64];
};
//SIG(-1 S11149C3) C1{ Fc[64] Fi[2] Fc[64]}



static void Test_S11149C3()
{
  {
    init_simple_test("S11149C3");
    S11149C3 lv;
    check2(sizeof(lv), 136, "sizeof(S11149C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11149C3)");
    check_field_offset(lv, s11149c3f0, 0, "S11149C3.s11149c3f0");
    check_field_offset(lv, s11149c3f1, 64, "S11149C3.s11149c3f1");
    check_field_offset(lv, s11149c3f2, 72, "S11149C3.s11149c3f2");
  }
}
static Arrange_To_Call_Me vS11149C3(Test_S11149C3, "S11149C3", 136);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11149C1  {
  ::S3715C6 s11149c1f0;
  ::S11149C3 s11149c1f1;
};
//SIG(1 S11149C1) C1{ FC2{ Fc[16] Fi Fc[40]} FC3{ Fc[64] Fi[2] Fc[64]}}



static void Test_S11149C1()
{
  {
    init_simple_test("S11149C1");
    S11149C1 lv;
    check2(sizeof(lv), 196, "sizeof(S11149C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11149C1)");
    check_field_offset(lv, s11149c1f0, 0, "S11149C1.s11149c1f0");
    check_field_offset(lv, s11149c1f1, 60, "S11149C1.s11149c1f1");
  }
}
static Arrange_To_Call_Me vS11149C1(Test_S11149C1, "S11149C1", 196);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18592C1  {
  void *s18592c1f0;
  ::S20540C5 s18592c1f1;
  int s18592c1f2;
  ::S20541C5 s18592c1f3;
  virtual void  v1(); // _ZN8S18592C12v1Ev
  virtual void  v2(); // _ZN8S18592C12v2Ev
  ~S18592C1(); // tgen
  S18592C1(); // tgen
};
//SIG(1 S18592C1) C1{ v1 v2 Fp FC2{ vd v3 v4 Fp} Fi FC3{ v5 v6 Fp Fl}}


void  S18592C1 ::v1(){vfunc_called(this, "_ZN8S18592C12v1Ev");}
void  S18592C1 ::v2(){vfunc_called(this, "_ZN8S18592C12v2Ev");}
S18592C1 ::~S18592C1(){ note_dtor("S18592C1", this);} // tgen
S18592C1 ::S18592C1(){ note_ctor("S18592C1", this);} // tgen

static void Test_S18592C1()
{
  extern Class_Descriptor cd_S18592C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S18592C1, buf);
    S18592C1 *dp, &lv = *(dp=new (buf) S18592C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S18592C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18592C1)");
    check_field_offset(lv, s18592c1f0, ABISELECT(8,4), "S18592C1.s18592c1f0");
    check_field_offset(lv, s18592c1f1, ABISELECT(16,8), "S18592C1.s18592c1f1");
    check_field_offset(lv, s18592c1f2, ABISELECT(32,16), "S18592C1.s18592c1f2");
    check_field_offset(lv, s18592c1f3, ABISELECT(40,20), "S18592C1.s18592c1f3");
    test_class_info(&lv, &cd_S18592C1);
    dp->~S18592C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18592C1(Test_S18592C1, "S18592C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S18592C1C1Ev();
extern void _ZN8S18592C1D1Ev();
Name_Map name_map_S18592C1[] = {
  NSPAIR(_ZN8S18592C1C1Ev),
  NSPAIR(_ZN8S18592C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18592C1[];
extern void _ZN8S18592C12v1Ev();
extern void _ZN8S18592C12v2Ev();
static  VTBL_ENTRY vtc_S18592C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18592C1[0]),
  (VTBL_ENTRY)&_ZN8S18592C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18592C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18592C1[];
extern  VTBL_ENTRY _ZTV8S18592C1[];
Class_Descriptor cd_S18592C1 = {  "S18592C1", // class name
  0,0,//no base classes
  &(vtc_S18592C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S18592C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18592C1),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  S963C4_nt  {
  char s963c4f0;
  void  mf963c4(); // _ZN9S963C4_nt7mf963c4Ev
};
//SIG(-1 S963C4_nt) C1{ m Fc}


void  S963C4_nt ::mf963c4(){}

//skip512 S963C4_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S963C4_nt[];
VTBL_ENTRY *P__ZTI9S963C4_nt = _ZTI9S963C4_nt; 
Class_Descriptor cd_S963C4_nt = {  "S963C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S963C4_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  S963C3_nt  : S963C4_nt {
  virtual  ~S963C3_nt(); // _ZN9S963C3_ntD1Ev
  virtual void  v2(); // _ZN9S963C3_nt2v2Ev
  S963C3_nt(); // tgen
};
//SIG(-1 S963C3_nt) C1{ BC2{ m Fc} vd v1}


 S963C3_nt ::~S963C3_nt(){ note_dtor("S963C3_nt", this);}
void  S963C3_nt ::v2(){vfunc_called(this, "_ZN9S963C3_nt2v2Ev");}
S963C3_nt ::S963C3_nt(){ note_ctor("S963C3_nt", this);} // tgen

//skip512 S963C3_nt

#else // __cplusplus

extern void _ZN9S963C3_ntC1Ev();
extern void _ZN9S963C3_ntD1Ev();
Name_Map name_map_S963C3_nt[] = {
  NSPAIR(_ZN9S963C3_ntC1Ev),
  NSPAIR(_ZN9S963C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S963C4_nt;
extern VTBL_ENTRY _ZTI9S963C4_nt[];
static Base_Class bases_S963C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S963C4_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 _ZTI9S963C3_nt[];
extern void _ZN9S963C3_ntD1Ev();
extern void _ZN9S963C3_ntD0Ev();
extern void _ZN9S963C3_nt2v2Ev();
static  VTBL_ENTRY vtc_S963C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S963C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S963C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S963C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S963C3_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI9S963C3_nt[];
VTBL_ENTRY *P__ZTI9S963C3_nt = _ZTI9S963C3_nt; 
extern  VTBL_ENTRY _ZTV9S963C3_nt[];
Class_Descriptor cd_S963C3_nt = {  "S963C3_nt", // class name
  bases_S963C3_nt, 1,
  &(vtc_S963C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S963C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S963C3_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  S963C2_nt  : S963C3_nt {
  virtual  ~S963C2_nt(); // _ZN9S963C2_ntD1Ev
  virtual void  v3(); // _ZN9S963C2_nt2v3Ev
  S963C2_nt(); // tgen
};
//SIG(-1 S963C2_nt) C1{ BC2{ BC3{ m Fc} vd v2} vd v1}


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

//skip512 S963C2_nt

#else // __cplusplus

extern void _ZN9S963C2_ntC1Ev();
extern void _ZN9S963C2_ntD1Ev();
Name_Map name_map_S963C2_nt[] = {
  NSPAIR(_ZN9S963C2_ntC1Ev),
  NSPAIR(_ZN9S963C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S963C4_nt;
extern VTBL_ENTRY _ZTI9S963C4_nt[];
extern Class_Descriptor cd_S963C3_nt;
extern VTBL_ENTRY _ZTI9S963C3_nt[];
extern  VTBL_ENTRY _ZTV9S963C3_nt[];
static Base_Class bases_S963C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S963C4_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
  0, 0},
  {&cd_S963C3_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 _ZTI9S963C2_nt[];
extern void _ZN9S963C2_ntD1Ev();
extern void _ZN9S963C2_ntD0Ev();
extern void _ZN9S963C3_nt2v2Ev();
extern void _ZN9S963C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S963C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S963C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S963C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S963C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S963C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S963C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI9S963C2_nt[];
VTBL_ENTRY *P__ZTI9S963C2_nt = _ZTI9S963C2_nt; 
extern  VTBL_ENTRY _ZTV9S963C2_nt[];
Class_Descriptor cd_S963C2_nt = {  "S963C2_nt", // class name
  bases_S963C2_nt, 2,
  &(vtc_S963C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S963C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S963C2_nt),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  S963C1  : S963C2_nt {
  void *s963c1f0;
  ::S22028C68_nt s963c1f1;
  virtual void  v1(); // _ZN6S963C12v1Ev
  ~S963C1(); // tgen
  S963C1(); // tgen
};
//SIG(1 S963C1) C1{ BC2{ BC3{ BC4{ m Fc} vd v2} vd v3} v1 Fp FC5{ m Fp}}


void  S963C1 ::v1(){vfunc_called(this, "_ZN6S963C12v1Ev");}
S963C1 ::~S963C1(){ note_dtor("S963C1", this);} // tgen
S963C1 ::S963C1(){ note_ctor("S963C1", this);} // tgen

static void Test_S963C1()
{
  extern Class_Descriptor cd_S963C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S963C1, buf);
    S963C1 *dp, &lv = *(dp=new (buf) S963C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S963C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S963C1)");
    check_base_class_offset(lv, (S963C4_nt*)(S963C3_nt*)(S963C2_nt*), ABISELECT(8,4), "S963C1");
    check_base_class_offset(lv, (S963C3_nt*)(S963C2_nt*), 0, "S963C1");
    check_base_class_offset(lv, (S963C2_nt*), 0, "S963C1");
    check_field_offset(lv, s963c1f0, ABISELECT(16,8), "S963C1.s963c1f0");
    check_field_offset(lv, s963c1f1, ABISELECT(24,12), "S963C1.s963c1f1");
    test_class_info(&lv, &cd_S963C1);
    dp->~S963C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS963C1(Test_S963C1, "S963C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN6S963C1C1Ev();
extern void _ZN6S963C1D1Ev();
Name_Map name_map_S963C1[] = {
  NSPAIR(_ZN6S963C1C1Ev),
  NSPAIR(_ZN6S963C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S963C4_nt;
extern VTBL_ENTRY _ZTI9S963C4_nt[];
extern Class_Descriptor cd_S963C3_nt;
extern VTBL_ENTRY _ZTI9S963C3_nt[];
extern  VTBL_ENTRY _ZTV9S963C3_nt[];
extern Class_Descriptor cd_S963C2_nt;
extern VTBL_ENTRY _ZTI9S963C2_nt[];
extern  VTBL_ENTRY _ZTV9S963C2_nt[];
static Base_Class bases_S963C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S963C4_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
  0, 0},
  {&cd_S963C3_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_S963C2_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 _ZTI6S963C1[];
extern void _ZN6S963C1D1Ev();
extern void _ZN6S963C1D0Ev();
extern void _ZN9S963C3_nt2v2Ev();
extern void _ZN9S963C2_nt2v3Ev();
extern void _ZN6S963C12v1Ev();
static  VTBL_ENTRY vtc_S963C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S963C1[0]),
  (VTBL_ENTRY)&_ZN6S963C1D1Ev,
  (VTBL_ENTRY)&_ZN6S963C1D0Ev,
  (VTBL_ENTRY)&_ZN9S963C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S963C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN6S963C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S963C1[];
extern  VTBL_ENTRY _ZTV6S963C1[];
Class_Descriptor cd_S963C1 = {  "S963C1", // class name
  bases_S963C1, 3,
  &(vtc_S963C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI6S963C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S963C1),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  S2689C2  : S21712C8_nt {
};
//SIG(-1 S2689C2) C1{ BC2{ m Fi}}



static void Test_S2689C2()
{
  extern Class_Descriptor cd_S2689C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2689C2, buf);
    S2689C2 &lv = *(new (buf) S2689C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2689C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2689C2)");
    check_base_class_offset(lv, (S21712C8_nt*), 0, "S2689C2");
    test_class_info(&lv, &cd_S2689C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2689C2(Test_S2689C2, "S2689C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
static Base_Class bases_S2689C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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_S2689C2 = {  "S2689C2", // class name
  bases_S2689C2, 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  S2689C1  : S2689C2 {
  int s2689c1f0:6;
  int s2689c1f1:5;
  unsigned int s2689c1f2:1;
  unsigned int s2689c1f3:1;
  ::S22028C68_nt s2689c1f4;
};
//SIG(1 S2689C1) C1{ BC2{ BC3{ m Fi}} Fi:6 Fi:5 Fi:1 Fi:1 FC4{ m Fp}}



static void Test_S2689C1()
{
  extern Class_Descriptor cd_S2689C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2689C1, buf);
    S2689C1 &lv = *(new (buf) S2689C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2689C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2689C1)");
    check_base_class_offset(lv, (S21712C8_nt*)(S2689C2*), 0, "S2689C1");
    check_base_class_offset(lv, (S2689C2*), 0, "S2689C1");
    set_bf_and_test(lv, s2689c1f0, 4, 0, 6, 1, "S2689C1");
    set_bf_and_test(lv, s2689c1f0, 4, 0, 6, hide_sll(1LL<<5), "S2689C1");
    set_bf_and_test(lv, s2689c1f1, 4, 6, 5, 1, "S2689C1");
    set_bf_and_test(lv, s2689c1f1, 4, 6, 5, hide_sll(1LL<<4), "S2689C1");
    set_bf_and_test(lv, s2689c1f2, 5, 3, 1, 1, "S2689C1");
    set_bf_and_test(lv, s2689c1f3, 5, 4, 1, 1, "S2689C1");
    check_field_offset(lv, s2689c1f4, 8, "S2689C1.s2689c1f4");
    test_class_info(&lv, &cd_S2689C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2689C1(Test_S2689C1, "S2689C1", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
extern Class_Descriptor cd_S2689C2;
static Base_Class bases_S2689C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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_S2689C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2689C1 = {  "S2689C1", // class name
  bases_S2689C1, 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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14011C1  {
  __tsi64 s14011c1f0[4];
  long s14011c1f1[4];
  __tsi64 s14011c1f2;
  long s14011c1f3[4];
  __tsi64 s14011c1f4[3];
  ::S10266C3 s14011c1f5;
  void *s14011c1f6[2];
};
//SIG(1 S14011C1) C1{ FL[4] Fl[4] FL Fl[4] FL[3] FC2{ Fp[10]} Fp[2]}



static void Test_S14011C1()
{
  {
    init_simple_test("S14011C1");
    S14011C1 lv;
    check2(sizeof(lv), ABISELECT(224,144), "sizeof(S14011C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14011C1)");
    check_field_offset(lv, s14011c1f0, 0, "S14011C1.s14011c1f0");
    check_field_offset(lv, s14011c1f1, 32, "S14011C1.s14011c1f1");
    check_field_offset(lv, s14011c1f2, ABISELECT(64,48), "S14011C1.s14011c1f2");
    check_field_offset(lv, s14011c1f3, ABISELECT(72,56), "S14011C1.s14011c1f3");
    check_field_offset(lv, s14011c1f4, ABISELECT(104,72), "S14011C1.s14011c1f4");
    check_field_offset(lv, s14011c1f5, ABISELECT(128,96), "S14011C1.s14011c1f5");
    check_field_offset(lv, s14011c1f6, ABISELECT(208,136), "S14011C1.s14011c1f6");
  }
}
static Arrange_To_Call_Me vS14011C1(Test_S14011C1, "S14011C1", ABISELECT(224,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18279C3  {
  ::S22028C68_nt s18279c3f0;
  ::S22028C68_nt s18279c3f1;
  void  mf18279c3(); // _ZN8S18279C39mf18279c3Ev
};
//SIG(-1 S18279C3) C1{ m FC2{ m Fp} FC2}


void  S18279C3 ::mf18279c3(){}

static void Test_S18279C3()
{
  {
    init_simple_test("S18279C3");
    S18279C3 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18279C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18279C3)");
    check_field_offset(lv, s18279c3f0, 0, "S18279C3.s18279c3f0");
    check_field_offset(lv, s18279c3f1, ABISELECT(8,4), "S18279C3.s18279c3f1");
  }
}
static Arrange_To_Call_Me vS18279C3(Test_S18279C3, "S18279C3", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18279C2  {
  void *s18279c2f0;
  ::S18279C3 s18279c2f1;
  void  mf18279c2(); // _ZN8S18279C29mf18279c2Ev
};
//SIG(-1 S18279C2) C1{ m Fp FC2{ m FC3{ m Fp} FC3}}


void  S18279C2 ::mf18279c2(){}

static void Test_S18279C2()
{
  {
    init_simple_test("S18279C2");
    S18279C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18279C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18279C2)");
    check_field_offset(lv, s18279c2f0, 0, "S18279C2.s18279c2f0");
    check_field_offset(lv, s18279c2f1, ABISELECT(8,4), "S18279C2.s18279c2f1");
  }
}
static Arrange_To_Call_Me vS18279C2(Test_S18279C2, "S18279C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18279C1  {
  void *s18279c1f0[3];
  ::S18279C2 s18279c1f1;
  char s18279c1f2[2];
  void  mf18279c1(); // _ZN8S18279C19mf18279c1Ev
};
//SIG(1 S18279C1) C1{ m Fp[3] FC2{ m Fp FC3{ m FC4{ m Fp} FC4}} Fc[2]}


void  S18279C1 ::mf18279c1(){}

static void Test_S18279C1()
{
  {
    init_simple_test("S18279C1");
    S18279C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S18279C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18279C1)");
    check_field_offset(lv, s18279c1f0, 0, "S18279C1.s18279c1f0");
    check_field_offset(lv, s18279c1f1, ABISELECT(24,12), "S18279C1.s18279c1f1");
    check_field_offset(lv, s18279c1f2, ABISELECT(48,24), "S18279C1.s18279c1f2");
  }
}
static Arrange_To_Call_Me vS18279C1(Test_S18279C1, "S18279C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14485C2  {
  ::S22028C68_nt s14485c2f0;
  ::S16430C5_nt s14485c2f1;
  void *s14485c2f2;
  int s14485c2f3;
  char s14485c2f4;
  void *s14485c2f5;
  void  mf14485c2(); // _ZN8S14485C29mf14485c2Ev
};
//SIG(-1 S14485C2) C1{ m FC2{ m Fp} FC3{ m Fp} Fp Fi Fc Fp}


void  S14485C2 ::mf14485c2(){}

static void Test_S14485C2()
{
  {
    init_simple_test("S14485C2");
    S14485C2 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S14485C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14485C2)");
    check_field_offset(lv, s14485c2f0, 0, "S14485C2.s14485c2f0");
    check_field_offset(lv, s14485c2f1, ABISELECT(8,4), "S14485C2.s14485c2f1");
    check_field_offset(lv, s14485c2f2, ABISELECT(16,8), "S14485C2.s14485c2f2");
    check_field_offset(lv, s14485c2f3, ABISELECT(24,12), "S14485C2.s14485c2f3");
    check_field_offset(lv, s14485c2f4, ABISELECT(28,16), "S14485C2.s14485c2f4");
    check_field_offset(lv, s14485c2f5, ABISELECT(32,20), "S14485C2.s14485c2f5");
  }
}
static Arrange_To_Call_Me vS14485C2(Test_S14485C2, "S14485C2", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14485C1  {
  void *s14485c1f0[2];
  ::S14485C2 s14485c1f1;
};
//SIG(1 S14485C1) C1{ Fp[2] FC2{ m FC3{ m Fp} FC4{ m Fp} Fp Fi Fc Fp}}



static void Test_S14485C1()
{
  {
    init_simple_test("S14485C1");
    S14485C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S14485C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14485C1)");
    check_field_offset(lv, s14485c1f0, 0, "S14485C1.s14485c1f0");
    check_field_offset(lv, s14485c1f1, ABISELECT(16,8), "S14485C1.s14485c1f1");
  }
}
static Arrange_To_Call_Me vS14485C1(Test_S14485C1, "S14485C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18147C3  {
  int s18147c3f0;
  ::S22028C68_nt s18147c3f1;
};
//SIG(-1 S18147C3) C1{ Fi FC2{ m Fp}}



static void Test_S18147C3()
{
  {
    init_simple_test("S18147C3");
    S18147C3 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18147C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18147C3)");
    check_field_offset(lv, s18147c3f0, 0, "S18147C3.s18147c3f0");
    check_field_offset(lv, s18147c3f1, ABISELECT(8,4), "S18147C3.s18147c3f1");
  }
}
static Arrange_To_Call_Me vS18147C3(Test_S18147C3, "S18147C3", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18147C2  {
  char s18147c2f0;
  ::S18147C3 s18147c2f1;
  void  mf18147c2(); // _ZN8S18147C29mf18147c2Ev
};
//SIG(-1 S18147C2) C1{ m Fc FC2{ Fi FC3{ m Fp}}}


void  S18147C2 ::mf18147c2(){}

static void Test_S18147C2()
{
  {
    init_simple_test("S18147C2");
    S18147C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18147C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18147C2)");
    check_field_offset(lv, s18147c2f0, 0, "S18147C2.s18147c2f0");
    check_field_offset(lv, s18147c2f1, ABISELECT(8,4), "S18147C2.s18147c2f1");
  }
}
static Arrange_To_Call_Me vS18147C2(Test_S18147C2, "S18147C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18147C1  {
  void *s18147c1f0[3];
  ::S18147C2 s18147c1f1;
  char s18147c1f2[2];
  void  mf18147c1(); // _ZN8S18147C19mf18147c1Ev
};
//SIG(1 S18147C1) C1{ m Fp[3] FC2{ m Fc FC3{ Fi FC4{ m Fp}}} Fc[2]}


void  S18147C1 ::mf18147c1(){}

static void Test_S18147C1()
{
  {
    init_simple_test("S18147C1");
    S18147C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S18147C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18147C1)");
    check_field_offset(lv, s18147c1f0, 0, "S18147C1.s18147c1f0");
    check_field_offset(lv, s18147c1f1, ABISELECT(24,12), "S18147C1.s18147c1f1");
    check_field_offset(lv, s18147c1f2, ABISELECT(48,24), "S18147C1.s18147c1f2");
  }
}
static Arrange_To_Call_Me vS18147C1(Test_S18147C1, "S18147C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2805C2  : S22028C68_nt {
  void *s2805c2f0;
};
//SIG(-1 S2805C2) C1{ BC2{ m Fp} Fp}



static void Test_S2805C2()
{
  extern Class_Descriptor cd_S2805C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2805C2, buf);
    S2805C2 &lv = *(new (buf) S2805C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2805C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2805C2)");
    check_base_class_offset(lv, (S22028C68_nt*), 0, "S2805C2");
    check_field_offset(lv, s2805c2f0, ABISELECT(8,4), "S2805C2.s2805c2f0");
    test_class_info(&lv, &cd_S2805C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2805C2(Test_S2805C2, "S2805C2", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S2805C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S2805C2 = {  "S2805C2", // class name
  bases_S2805C2, 1,
  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  S2805C1  : S2805C2 {
  ::S22028C29_nt s2805c1f0;
  ::S3280C13_nt s2805c1f1;
};
//SIG(1 S2805C1) C1{ BC2{ BC3{ m Fp} Fp} FC4{ m Fi[3]} FC5{ m Fi[3]}}



static void Test_S2805C1()
{
  extern Class_Descriptor cd_S2805C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S2805C1, buf);
    S2805C1 &lv = *(new (buf) S2805C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S2805C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2805C1)");
    check_base_class_offset(lv, (S22028C68_nt*)(S2805C2*), 0, "S2805C1");
    check_base_class_offset(lv, (S2805C2*), 0, "S2805C1");
    check_field_offset(lv, s2805c1f0, ABISELECT(16,8), "S2805C1.s2805c1f0");
    check_field_offset(lv, s2805c1f1, ABISELECT(28,20), "S2805C1.s2805c1f1");
    test_class_info(&lv, &cd_S2805C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2805C1(Test_S2805C1, "S2805C1", ABISELECT(40,32));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S2805C2;
static Base_Class bases_S2805C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S2805C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2805C1 = {  "S2805C1", // class name
  bases_S2805C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,32), // 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  S5994C2  {
  void *s5994c2f0;
  int s5994c2f1;
  void *s5994c2f2[2];
  int s5994c2f3;
  void  mf5994c2(); // _ZN7S5994C28mf5994c2Ev
};
//SIG(-1 S5994C2) C1{ m Fp Fi Fp[2] Fi}


void  S5994C2 ::mf5994c2(){}

static void Test_S5994C2()
{
  {
    init_simple_test("S5994C2");
    S5994C2 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S5994C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5994C2)");
    check_field_offset(lv, s5994c2f0, 0, "S5994C2.s5994c2f0");
    check_field_offset(lv, s5994c2f1, ABISELECT(8,4), "S5994C2.s5994c2f1");
    check_field_offset(lv, s5994c2f2, ABISELECT(16,8), "S5994C2.s5994c2f2");
    check_field_offset(lv, s5994c2f3, ABISELECT(32,16), "S5994C2.s5994c2f3");
  }
}
static Arrange_To_Call_Me vS5994C2(Test_S5994C2, "S5994C2", ABISELECT(40,20));

#else // __cplusplus

Class_Descriptor cd_S5994C2 = {  "S5994C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(40,20), // 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  S5994C1  : S5994C2 {
  void *s5994c1f0[3];
  int s5994c1f1;
  ::S22028C68_nt s5994c1f2;
};
//SIG(1 S5994C1) C1{ BC2{ m Fp Fi Fp[2] Fi} Fp[3] Fi FC3{ m Fp}}



static void Test_S5994C1()
{
  extern Class_Descriptor cd_S5994C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S5994C1, buf);
    S5994C1 &lv = *(new (buf) S5994C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S5994C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5994C1)");
    check_base_class_offset(lv, (S5994C2*), 0, "S5994C1");
    check_field_offset(lv, s5994c1f0, ABISELECT(40,20), "S5994C1.s5994c1f0");
    check_field_offset(lv, s5994c1f1, ABISELECT(64,32), "S5994C1.s5994c1f1");
    check_field_offset(lv, s5994c1f2, ABISELECT(72,36), "S5994C1.s5994c1f2");
    test_class_info(&lv, &cd_S5994C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5994C1(Test_S5994C1, "S5994C1", ABISELECT(80,40));

#else // __cplusplus

extern Class_Descriptor cd_S5994C2;
static Base_Class bases_S5994C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5994C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5994C1 = {  "S5994C1", // class name
  bases_S5994C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,40), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6226C1  : S22028C16 {
  void *s6226c1f0;
  ::S22028C68_nt s6226c1f1;
  int s6226c1f2[2];
  void *s6226c1f3;
  int s6226c1f4[2];
  char s6226c1f5;
  int s6226c1f6;
};
//SIG(1 S6226C1) C1{ BC2{ m} Fp FC3{ m Fp} Fi[2] Fp Fi[2] Fc Fi}



static void Test_S6226C1()
{
  extern Class_Descriptor cd_S6226C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S6226C1, buf);
    S6226C1 &lv = *(new (buf) S6226C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S6226C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6226C1)");
    check_base_class_offset(lv, (S22028C16*), 0, "S6226C1");
    check_field_offset(lv, s6226c1f0, 0, "S6226C1.s6226c1f0");
    check_field_offset(lv, s6226c1f1, ABISELECT(8,4), "S6226C1.s6226c1f1");
    check_field_offset(lv, s6226c1f2, ABISELECT(16,8), "S6226C1.s6226c1f2");
    check_field_offset(lv, s6226c1f3, ABISELECT(24,16), "S6226C1.s6226c1f3");
    check_field_offset(lv, s6226c1f4, ABISELECT(32,20), "S6226C1.s6226c1f4");
    check_field_offset(lv, s6226c1f5, ABISELECT(40,28), "S6226C1.s6226c1f5");
    check_field_offset(lv, s6226c1f6, ABISELECT(44,32), "S6226C1.s6226c1f6");
    test_class_info(&lv, &cd_S6226C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6226C1(Test_S6226C1, "S6226C1", ABISELECT(48,36));

#else // __cplusplus

extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S6226C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6226C1 = {  "S6226C1", // class name
  bases_S6226C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17010C1  {
  int s17010c1f0:14;
  int s17010c1f1:14;
  unsigned int s17010c1f2:1;
  unsigned int s17010c1f3:1;
  unsigned int s17010c1f4:1;
  ::S22028C68_nt s17010c1f5;
  void  mf17010c1(); // _ZN8S17010C19mf17010c1Ev
};
//SIG(1 S17010C1) C1{ m Fi:14 Fi:14 Fi:1 Fi:1 Fi:1 FC2{ m Fp}}


void  S17010C1 ::mf17010c1(){}

static void Test_S17010C1()
{
  {
    init_simple_test("S17010C1");
    static S17010C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17010C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17010C1)");
    set_bf_and_test(lv, s17010c1f0, 0, 0, 14, 1, "S17010C1");
    set_bf_and_test(lv, s17010c1f0, 0, 0, 14, hide_sll(1LL<<13), "S17010C1");
    set_bf_and_test(lv, s17010c1f1, 1, 6, 14, 1, "S17010C1");
    set_bf_and_test(lv, s17010c1f1, 1, 6, 14, hide_sll(1LL<<13), "S17010C1");
    set_bf_and_test(lv, s17010c1f2, 3, 4, 1, 1, "S17010C1");
    set_bf_and_test(lv, s17010c1f3, 3, 5, 1, 1, "S17010C1");
    set_bf_and_test(lv, s17010c1f4, 3, 6, 1, 1, "S17010C1");
    check_field_offset(lv, s17010c1f5, ABISELECT(8,4), "S17010C1.s17010c1f5");
  }
}
static Arrange_To_Call_Me vS17010C1(Test_S17010C1, "S17010C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5864C1  : S21712C8_nt {
  ::S22028C68_nt s5864c1f0;
  ::S16430C5_nt s5864c1f1;
  int s5864c1f2;
  void *s5864c1f3[2];
  int s5864c1f4;
};
//SIG(1 S5864C1) C1{ BC2{ m Fi} FC3{ m Fp} FC4{ m Fp} Fi Fp[2] Fi}



static void Test_S5864C1()
{
  extern Class_Descriptor cd_S5864C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S5864C1, buf);
    S5864C1 &lv = *(new (buf) S5864C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S5864C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5864C1)");
    check_base_class_offset(lv, (S21712C8_nt*), 0, "S5864C1");
    check_field_offset(lv, s5864c1f0, ABISELECT(8,4), "S5864C1.s5864c1f0");
    check_field_offset(lv, s5864c1f1, ABISELECT(16,8), "S5864C1.s5864c1f1");
    check_field_offset(lv, s5864c1f2, ABISELECT(24,12), "S5864C1.s5864c1f2");
    check_field_offset(lv, s5864c1f3, ABISELECT(32,16), "S5864C1.s5864c1f3");
    check_field_offset(lv, s5864c1f4, ABISELECT(48,24), "S5864C1.s5864c1f4");
    test_class_info(&lv, &cd_S5864C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5864C1(Test_S5864C1, "S5864C1", ABISELECT(56,28));

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
static Base_Class bases_S5864C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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_S5864C1 = {  "S5864C1", // class name
  bases_S5864C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,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  S5676C3  {
  void *s5676c3f0;
  ::S22028C68_nt s5676c3f1;
  int s5676c3f2[3];
  void  mf5676c3(); // _ZN7S5676C38mf5676c3Ev
};
//SIG(-1 S5676C3) C1{ m Fp FC2{ m Fp} Fi[3]}


void  S5676C3 ::mf5676c3(){}

static void Test_S5676C3()
{
  {
    init_simple_test("S5676C3");
    S5676C3 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5676C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5676C3)");
    check_field_offset(lv, s5676c3f0, 0, "S5676C3.s5676c3f0");
    check_field_offset(lv, s5676c3f1, ABISELECT(8,4), "S5676C3.s5676c3f1");
    check_field_offset(lv, s5676c3f2, ABISELECT(16,8), "S5676C3.s5676c3f2");
  }
}
static Arrange_To_Call_Me vS5676C3(Test_S5676C3, "S5676C3", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5676C2  {
  ::S5676C3 s5676c2f0;
  void  mf5676c2(); // _ZN7S5676C28mf5676c2Ev
};
//SIG(-1 S5676C2) C1{ m FC2{ m Fp FC3{ m Fp} Fi[3]}}


void  S5676C2 ::mf5676c2(){}

static void Test_S5676C2()
{
  {
    init_simple_test("S5676C2");
    S5676C2 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5676C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5676C2)");
    check_field_offset(lv, s5676c2f0, 0, "S5676C2.s5676c2f0");
  }
}
static Arrange_To_Call_Me vS5676C2(Test_S5676C2, "S5676C2", ABISELECT(32,20));

#else // __cplusplus

Class_Descriptor cd_S5676C2 = {  "S5676C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // 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  S5676C1  : S5676C2 {
  void *s5676c1f0[4];
};
//SIG(1 S5676C1) C1{ BC2{ m FC3{ m Fp FC4{ m Fp} Fi[3]}} Fp[4]}



static void Test_S5676C1()
{
  extern Class_Descriptor cd_S5676C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S5676C1, buf);
    S5676C1 &lv = *(new (buf) S5676C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S5676C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5676C1)");
    check_base_class_offset(lv, (S5676C2*), 0, "S5676C1");
    check_field_offset(lv, s5676c1f0, ABISELECT(32,20), "S5676C1.s5676c1f0");
    test_class_info(&lv, &cd_S5676C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5676C1(Test_S5676C1, "S5676C1", ABISELECT(64,36));

#else // __cplusplus

extern Class_Descriptor cd_S5676C2;
static Base_Class bases_S5676C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5676C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5676C1 = {  "S5676C1", // class name
  bases_S5676C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8726C2_nt  {
  int s8726c2f0;
  char s8726c2f1[3];
  virtual  ~S8726C2_nt(); // _ZN10S8726C2_ntD1Ev
  virtual void  v2(); // _ZN10S8726C2_nt2v2Ev
  S8726C2_nt(); // tgen
};
//SIG(-1 S8726C2_nt) C1{ vd v1 Fi Fc[3]}


 S8726C2_nt ::~S8726C2_nt(){ note_dtor("S8726C2_nt", this);}
void  S8726C2_nt ::v2(){vfunc_called(this, "_ZN10S8726C2_nt2v2Ev");}
S8726C2_nt ::S8726C2_nt(){ note_ctor("S8726C2_nt", this);} // tgen

//skip512 S8726C2_nt

#else // __cplusplus

extern void _ZN10S8726C2_ntC1Ev();
extern void _ZN10S8726C2_ntD1Ev();
Name_Map name_map_S8726C2_nt[] = {
  NSPAIR(_ZN10S8726C2_ntC1Ev),
  NSPAIR(_ZN10S8726C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8726C2_nt[];
extern void _ZN10S8726C2_ntD1Ev();
extern void _ZN10S8726C2_ntD0Ev();
extern void _ZN10S8726C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8726C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8726C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8726C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8726C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8726C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8726C2_nt[];
VTBL_ENTRY *P__ZTI10S8726C2_nt = _ZTI10S8726C2_nt; 
extern  VTBL_ENTRY _ZTV10S8726C2_nt[];
Class_Descriptor cd_S8726C2_nt = {  "S8726C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8726C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S8726C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8726C2_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  S8726C1  : S8726C2_nt {
  ::S22028C68_nt s8726c1f0;
  int s8726c1f1;
  virtual  ~S8726C1(); // _ZN7S8726C1D1Ev
  virtual void  v1(); // _ZN7S8726C12v1Ev
  S8726C1(); // tgen
};
//SIG(1 S8726C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ m Fp} Fi}


 S8726C1 ::~S8726C1(){ note_dtor("S8726C1", this);}
void  S8726C1 ::v1(){vfunc_called(this, "_ZN7S8726C12v1Ev");}
S8726C1 ::S8726C1(){ note_ctor("S8726C1", this);} // tgen

static void Test_S8726C1()
{
  extern Class_Descriptor cd_S8726C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S8726C1, buf);
    S8726C1 *dp, &lv = *(dp=new (buf) S8726C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S8726C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8726C1)");
    check_base_class_offset(lv, (S8726C2_nt*), 0, "S8726C1");
    check_field_offset(lv, s8726c1f0, ABISELECT(16,12), "S8726C1.s8726c1f0");
    check_field_offset(lv, s8726c1f1, ABISELECT(24,16), "S8726C1.s8726c1f1");
    test_class_info(&lv, &cd_S8726C1);
    dp->~S8726C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8726C1(Test_S8726C1, "S8726C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S8726C1C1Ev();
extern void _ZN7S8726C1D1Ev();
Name_Map name_map_S8726C1[] = {
  NSPAIR(_ZN7S8726C1C1Ev),
  NSPAIR(_ZN7S8726C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8726C2_nt;
extern VTBL_ENTRY _ZTI10S8726C2_nt[];
extern  VTBL_ENTRY _ZTV10S8726C2_nt[];
static Base_Class bases_S8726C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8726C2_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 _ZTI7S8726C1[];
extern void _ZN7S8726C1D1Ev();
extern void _ZN7S8726C1D0Ev();
extern void _ZN10S8726C2_nt2v2Ev();
extern void _ZN7S8726C12v1Ev();
static  VTBL_ENTRY vtc_S8726C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8726C1[0]),
  (VTBL_ENTRY)&_ZN7S8726C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8726C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8726C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8726C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8726C1[];
extern  VTBL_ENTRY _ZTV7S8726C1[];
Class_Descriptor cd_S8726C1 = {  "S8726C1", // class name
  bases_S8726C1, 1,
  &(vtc_S8726C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S8726C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8726C1),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  S7129C2  {
  long double s7129c2f0;
  virtual void  v8(); // _ZN7S7129C22v8Ev
  ~S7129C2(); // tgen
  S7129C2(); // tgen
};
//SIG(-1 S7129C2) C1{ v1 FD}


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

static void Test_S7129C2()
{
  extern Class_Descriptor cd_S7129C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S7129C2, buf);
    S7129C2 *dp, &lv = *(dp=new (buf) S7129C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7129C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7129C2)");
    check_field_offset(lv, s7129c2f0, ABISELECT(16,4), "S7129C2.s7129c2f0");
    test_class_info(&lv, &cd_S7129C2);
    dp->~S7129C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7129C2(Test_S7129C2, "S7129C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7129C2C1Ev();
extern void _ZN7S7129C2D1Ev();
Name_Map name_map_S7129C2[] = {
  NSPAIR(_ZN7S7129C2C1Ev),
  NSPAIR(_ZN7S7129C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7129C2[];
extern void _ZN7S7129C22v8Ev();
static  VTBL_ENTRY vtc_S7129C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7129C2[0]),
  (VTBL_ENTRY)&_ZN7S7129C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S7129C2[];
extern  VTBL_ENTRY _ZTV7S7129C2[];
Class_Descriptor cd_S7129C2 = {  "S7129C2", // class name
  0,0,//no base classes
  &(vtc_S7129C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7129C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7129C2),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  S7129C1  : S7129C2 {
  char s7129c1f0:8;
  virtual void  v1(); // _ZN7S7129C12v1Ev
  virtual void  v2(); // _ZN7S7129C12v2Ev
  virtual void  v3(); // _ZN7S7129C12v3Ev
  virtual void  v4(); // _ZN7S7129C12v4Ev
  virtual void  v5(); // _ZN7S7129C12v5Ev
  virtual void  v6(); // _ZN7S7129C12v6Ev
  virtual void  v7(); // _ZN7S7129C12v7Ev
  ~S7129C1(); // tgen
  S7129C1(); // tgen
};
//SIG(1 S7129C1) C1{ BC2{ v8 FD} v1 v2 v3 v4 v5 v6 v7 Fc:8}


void  S7129C1 ::v1(){vfunc_called(this, "_ZN7S7129C12v1Ev");}
void  S7129C1 ::v2(){vfunc_called(this, "_ZN7S7129C12v2Ev");}
void  S7129C1 ::v3(){vfunc_called(this, "_ZN7S7129C12v3Ev");}
void  S7129C1 ::v4(){vfunc_called(this, "_ZN7S7129C12v4Ev");}
void  S7129C1 ::v5(){vfunc_called(this, "_ZN7S7129C12v5Ev");}
void  S7129C1 ::v6(){vfunc_called(this, "_ZN7S7129C12v6Ev");}
void  S7129C1 ::v7(){vfunc_called(this, "_ZN7S7129C12v7Ev");}
S7129C1 ::~S7129C1(){ note_dtor("S7129C1", this);} // tgen
S7129C1 ::S7129C1(){ note_ctor("S7129C1", this);} // tgen

static void Test_S7129C1()
{
  extern Class_Descriptor cd_S7129C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S7129C1, buf);
    S7129C1 *dp, &lv = *(dp=new (buf) S7129C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S7129C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7129C1)");
    check_base_class_offset(lv, (S7129C2*), 0, "S7129C1");
    set_bf_and_test(lv, s7129c1f0, ABISELECT(32,16), 0, 8, 1, "S7129C1");
    set_bf_and_test(lv, s7129c1f0, ABISELECT(32,16), 0, 8, hide_sll(1LL<<7), "S7129C1");
    test_class_info(&lv, &cd_S7129C1);
    dp->~S7129C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7129C1(Test_S7129C1, "S7129C1", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN7S7129C1C1Ev();
extern void _ZN7S7129C1D1Ev();
Name_Map name_map_S7129C1[] = {
  NSPAIR(_ZN7S7129C1C1Ev),
  NSPAIR(_ZN7S7129C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7129C2;
extern VTBL_ENTRY _ZTI7S7129C2[];
extern  VTBL_ENTRY _ZTV7S7129C2[];
static Base_Class bases_S7129C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7129C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7129C1[];
extern void _ZN7S7129C22v8Ev();
extern void _ZN7S7129C12v1Ev();
extern void _ZN7S7129C12v2Ev();
extern void _ZN7S7129C12v3Ev();
extern void _ZN7S7129C12v4Ev();
extern void _ZN7S7129C12v5Ev();
extern void _ZN7S7129C12v6Ev();
extern void _ZN7S7129C12v7Ev();
static  VTBL_ENTRY vtc_S7129C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7129C1[0]),
  (VTBL_ENTRY)&_ZN7S7129C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7129C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7129C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7129C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7129C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7129C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7129C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7129C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S7129C1[];
extern  VTBL_ENTRY _ZTV7S7129C1[];
Class_Descriptor cd_S7129C1 = {  "S7129C1", // class name
  bases_S7129C1, 1,
  &(vtc_S7129C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI7S7129C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7129C1),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  S18043C1  {
  void *s18043c1f0[2];
  ::S22028C68_nt s18043c1f1;
  ::S16430C5_nt s18043c1f2;
  ::S3715C9_nt s18043c1f3;
  void  mf18043c1(); // _ZN8S18043C19mf18043c1Ev
};
//SIG(1 S18043C1) C1{ m Fp[2] FC2{ m Fp} FC3{ m Fp} FC4{ m Fp}}


void  S18043C1 ::mf18043c1(){}

static void Test_S18043C1()
{
  {
    init_simple_test("S18043C1");
    S18043C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18043C1)");
    check_field_offset(lv, s18043c1f0, 0, "S18043C1.s18043c1f0");
    check_field_offset(lv, s18043c1f1, ABISELECT(16,8), "S18043C1.s18043c1f1");
    check_field_offset(lv, s18043c1f2, ABISELECT(24,12), "S18043C1.s18043c1f2");
    check_field_offset(lv, s18043c1f3, ABISELECT(32,16), "S18043C1.s18043c1f3");
  }
}
static Arrange_To_Call_Me vS18043C1(Test_S18043C1, "S18043C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18815C1  {
  ::S20606C9 s18815c1f0;
  virtual void  v1(); // _ZN8S18815C12v1Ev
  virtual void  v2(); // _ZN8S18815C12v2Ev
  virtual void  v3(); // _ZN8S18815C12v3Ev
  virtual void  v4(); // _ZN8S18815C12v4Ev
  virtual void  v5(); // _ZN8S18815C12v5Ev
  virtual void  v6(); // _ZN8S18815C12v6Ev
  virtual void  v7(); // _ZN8S18815C12v7Ev
  virtual void  v8(); // _ZN8S18815C12v8Ev
  ~S18815C1(); // tgen
  S18815C1(); // tgen
};
//SIG(1 S18815C1) C1{ v1 v2 v3 v4 v5 v6 v7 v8 FC2{ v9 FD}}


void  S18815C1 ::v1(){vfunc_called(this, "_ZN8S18815C12v1Ev");}
void  S18815C1 ::v2(){vfunc_called(this, "_ZN8S18815C12v2Ev");}
void  S18815C1 ::v3(){vfunc_called(this, "_ZN8S18815C12v3Ev");}
void  S18815C1 ::v4(){vfunc_called(this, "_ZN8S18815C12v4Ev");}
void  S18815C1 ::v5(){vfunc_called(this, "_ZN8S18815C12v5Ev");}
void  S18815C1 ::v6(){vfunc_called(this, "_ZN8S18815C12v6Ev");}
void  S18815C1 ::v7(){vfunc_called(this, "_ZN8S18815C12v7Ev");}
void  S18815C1 ::v8(){vfunc_called(this, "_ZN8S18815C12v8Ev");}
S18815C1 ::~S18815C1(){ note_dtor("S18815C1", this);} // tgen
S18815C1 ::S18815C1(){ note_ctor("S18815C1", this);} // tgen

static void Test_S18815C1()
{
  extern Class_Descriptor cd_S18815C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,6)];
    init_test(&cd_S18815C1, buf);
    S18815C1 *dp, &lv = *(dp=new (buf) S18815C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,20), "sizeof(S18815C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18815C1)");
    check_field_offset(lv, s18815c1f0, ABISELECT(16,4), "S18815C1.s18815c1f0");
    test_class_info(&lv, &cd_S18815C1);
    dp->~S18815C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18815C1(Test_S18815C1, "S18815C1", ABISELECT(48,20));

#else // __cplusplus

extern void _ZN8S18815C1C1Ev();
extern void _ZN8S18815C1D1Ev();
Name_Map name_map_S18815C1[] = {
  NSPAIR(_ZN8S18815C1C1Ev),
  NSPAIR(_ZN8S18815C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18815C1[];
extern void _ZN8S18815C12v1Ev();
extern void _ZN8S18815C12v2Ev();
extern void _ZN8S18815C12v3Ev();
extern void _ZN8S18815C12v4Ev();
extern void _ZN8S18815C12v5Ev();
extern void _ZN8S18815C12v6Ev();
extern void _ZN8S18815C12v7Ev();
extern void _ZN8S18815C12v8Ev();
static  VTBL_ENTRY vtc_S18815C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18815C1[0]),
  (VTBL_ENTRY)&_ZN8S18815C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18815C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18815C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18815C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18815C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18815C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18815C12v7Ev,
  (VTBL_ENTRY)&_ZN8S18815C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S18815C1[];
extern  VTBL_ENTRY _ZTV8S18815C1[];
Class_Descriptor cd_S18815C1 = {  "S18815C1", // class name
  0,0,//no base classes
  &(vtc_S18815C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,20), // object size
  NSPAIRA(_ZTI8S18815C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18815C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17906C2  {
  ::S22028C68_nt s17906c2f0;
  void *s17906c2f1;
  int s17906c2f2:8;
  int s17906c2f3:8;
};
//SIG(-1 S17906C2) C1{ FC2{ m Fp} Fp Fi:8 Fi:8}



static void Test_S17906C2()
{
  {
    init_simple_test("S17906C2");
    static S17906C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S17906C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17906C2)");
    check_field_offset(lv, s17906c2f0, 0, "S17906C2.s17906c2f0");
    check_field_offset(lv, s17906c2f1, ABISELECT(8,4), "S17906C2.s17906c2f1");
    set_bf_and_test(lv, s17906c2f2, ABISELECT(16,8), 0, 8, 1, "S17906C2");
    set_bf_and_test(lv, s17906c2f2, ABISELECT(16,8), 0, 8, hide_sll(1LL<<7), "S17906C2");
    set_bf_and_test(lv, s17906c2f3, ABISELECT(17,9), 0, 8, 1, "S17906C2");
    set_bf_and_test(lv, s17906c2f3, ABISELECT(17,9), 0, 8, hide_sll(1LL<<7), "S17906C2");
  }
}
static Arrange_To_Call_Me vS17906C2(Test_S17906C2, "S17906C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17906C1  {
  void *s17906c1f0[2];
  ::S17906C2 s17906c1f1;
  void  mf17906c1(); // _ZN8S17906C19mf17906c1Ev
};
//SIG(1 S17906C1) C1{ m Fp[2] FC2{ FC3{ m Fp} Fp Fi:8 Fi:8}}


void  S17906C1 ::mf17906c1(){}

static void Test_S17906C1()
{
  {
    init_simple_test("S17906C1");
    static S17906C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S17906C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17906C1)");
    check_field_offset(lv, s17906c1f0, 0, "S17906C1.s17906c1f0");
    check_field_offset(lv, s17906c1f1, ABISELECT(16,8), "S17906C1.s17906c1f1");
  }
}
static Arrange_To_Call_Me vS17906C1(Test_S17906C1, "S17906C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18245C2  {
  int s18245c2f0;
  ::S22028C68_nt s18245c2f1;
  void  mf18245c2(); // _ZN8S18245C29mf18245c2Ev
};
//SIG(-1 S18245C2) C1{ m Fi FC2{ m Fp}}


void  S18245C2 ::mf18245c2(){}

static void Test_S18245C2()
{
  {
    init_simple_test("S18245C2");
    S18245C2 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18245C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18245C2)");
    check_field_offset(lv, s18245c2f0, 0, "S18245C2.s18245c2f0");
    check_field_offset(lv, s18245c2f1, ABISELECT(8,4), "S18245C2.s18245c2f1");
  }
}
static Arrange_To_Call_Me vS18245C2(Test_S18245C2, "S18245C2", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18245C1  {
  void *s18245c1f0[3];
  ::S18245C2 s18245c1f1;
  char s18245c1f2[2];
  void  mf18245c1(); // _ZN8S18245C19mf18245c1Ev
};
//SIG(1 S18245C1) C1{ m Fp[3] FC2{ m Fi FC3{ m Fp}} Fc[2]}


void  S18245C1 ::mf18245c1(){}

static void Test_S18245C1()
{
  {
    init_simple_test("S18245C1");
    S18245C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S18245C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18245C1)");
    check_field_offset(lv, s18245c1f0, 0, "S18245C1.s18245c1f0");
    check_field_offset(lv, s18245c1f1, ABISELECT(24,12), "S18245C1.s18245c1f1");
    check_field_offset(lv, s18245c1f2, ABISELECT(40,20), "S18245C1.s18245c1f2");
  }
}
static Arrange_To_Call_Me vS18245C1(Test_S18245C1, "S18245C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6609C2  {
  virtual void  v2(); // _ZN7S6609C22v2Ev
  ~S6609C2(); // tgen
  S6609C2(); // tgen
};
//SIG(-1 S6609C2) C1{ v1}


void  S6609C2 ::v2(){vfunc_called(this, "_ZN7S6609C22v2Ev");}
S6609C2 ::~S6609C2(){ note_dtor("S6609C2", this);} // tgen
S6609C2 ::S6609C2(){ note_ctor("S6609C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6609C2C1Ev();
extern void _ZN7S6609C2D1Ev();
Name_Map name_map_S6609C2[] = {
  NSPAIR(_ZN7S6609C2C1Ev),
  NSPAIR(_ZN7S6609C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6609C2[];
extern void _ZN7S6609C22v2Ev();
static  VTBL_ENTRY vtc_S6609C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6609C2[0]),
  (VTBL_ENTRY)&_ZN7S6609C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6609C2[];
extern  VTBL_ENTRY _ZTV7S6609C2[];
Class_Descriptor cd_S6609C2 = {  "S6609C2", // class name
  0,0,//no base classes
  &(vtc_S6609C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6609C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6609C2),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  S6609C1  : S6609C2 {
  ::S22028C68_nt s6609c1f0;
  void *s6609c1f1[2];
  int s6609c1f2:3;
  int s6609c1f3;
  virtual void  v1(); // _ZN7S6609C12v1Ev
  ~S6609C1(); // tgen
  S6609C1(); // tgen
};
//SIG(1 S6609C1) C1{ BC2{ v2} v1 FC3{ m Fp} Fp[2] Fi:3 Fi}


void  S6609C1 ::v1(){vfunc_called(this, "_ZN7S6609C12v1Ev");}
S6609C1 ::~S6609C1(){ note_dtor("S6609C1", this);} // tgen
S6609C1 ::S6609C1(){ note_ctor("S6609C1", this);} // tgen

static void Test_S6609C1()
{
  extern Class_Descriptor cd_S6609C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S6609C1, buf);
    S6609C1 *dp, &lv = *(dp=new (buf) S6609C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S6609C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6609C1)");
    check_base_class_offset(lv, (S6609C2*), 0, "S6609C1");
    check_field_offset(lv, s6609c1f0, ABISELECT(8,4), "S6609C1.s6609c1f0");
    check_field_offset(lv, s6609c1f1, ABISELECT(16,8), "S6609C1.s6609c1f1");
    set_bf_and_test(lv, s6609c1f2, ABISELECT(32,16), 0, 3, 1, "S6609C1");
    set_bf_and_test(lv, s6609c1f2, ABISELECT(32,16), 0, 3, hide_sll(1LL<<2), "S6609C1");
    check_field_offset(lv, s6609c1f3, ABISELECT(36,20), "S6609C1.s6609c1f3");
    test_class_info(&lv, &cd_S6609C1);
    dp->~S6609C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6609C1(Test_S6609C1, "S6609C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S6609C1C1Ev();
extern void _ZN7S6609C1D1Ev();
Name_Map name_map_S6609C1[] = {
  NSPAIR(_ZN7S6609C1C1Ev),
  NSPAIR(_ZN7S6609C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6609C2;
extern VTBL_ENTRY _ZTI7S6609C2[];
extern  VTBL_ENTRY _ZTV7S6609C2[];
static Base_Class bases_S6609C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6609C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6609C1[];
extern void _ZN7S6609C22v2Ev();
extern void _ZN7S6609C12v1Ev();
static  VTBL_ENTRY vtc_S6609C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6609C1[0]),
  (VTBL_ENTRY)&_ZN7S6609C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6609C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S6609C1[];
extern  VTBL_ENTRY _ZTV7S6609C1[];
Class_Descriptor cd_S6609C1 = {  "S6609C1", // class name
  bases_S6609C1, 1,
  &(vtc_S6609C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S6609C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6609C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17822C1  {
  void *s17822c1f0;
  int s17822c1f1[6];
  char s17822c1f2;
  int s17822c1f3;
  char s17822c1f4[5];
  ::S22028C68_nt s17822c1f5;
  void  mf17822c1(); // _ZN8S17822C19mf17822c1Ev
};
//SIG(1 S17822C1) C1{ m Fp Fi[6] Fc Fi Fc[5] FC2{ m Fp}}


void  S17822C1 ::mf17822c1(){}

static void Test_S17822C1()
{
  {
    init_simple_test("S17822C1");
    S17822C1 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S17822C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17822C1)");
    check_field_offset(lv, s17822c1f0, 0, "S17822C1.s17822c1f0");
    check_field_offset(lv, s17822c1f1, ABISELECT(8,4), "S17822C1.s17822c1f1");
    check_field_offset(lv, s17822c1f2, ABISELECT(32,28), "S17822C1.s17822c1f2");
    check_field_offset(lv, s17822c1f3, ABISELECT(36,32), "S17822C1.s17822c1f3");
    check_field_offset(lv, s17822c1f4, ABISELECT(40,36), "S17822C1.s17822c1f4");
    check_field_offset(lv, s17822c1f5, ABISELECT(48,44), "S17822C1.s17822c1f5");
  }
}
static Arrange_To_Call_Me vS17822C1(Test_S17822C1, "S17822C1", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5993C1  : S5994C2 {
  void *s5993c1f0[2];
  int s5993c1f1;
  __tsi64 s5993c1f2;
};
//SIG(1 S5993C1) C1{ BC2{ m Fp Fi Fp[2] Fi} Fp[2] Fi FL}



static void Test_S5993C1()
{
  extern Class_Descriptor cd_S5993C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S5993C1, buf);
    S5993C1 &lv = *(new (buf) S5993C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S5993C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5993C1)");
    check_base_class_offset(lv, (S5994C2*), 0, "S5993C1");
    check_field_offset(lv, s5993c1f0, ABISELECT(40,20), "S5993C1.s5993c1f0");
    check_field_offset(lv, s5993c1f1, ABISELECT(56,28), "S5993C1.s5993c1f1");
    check_field_offset(lv, s5993c1f2, ABISELECT(64,32), "S5993C1.s5993c1f2");
    test_class_info(&lv, &cd_S5993C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5993C1(Test_S5993C1, "S5993C1", ABISELECT(72,40));

#else // __cplusplus

extern Class_Descriptor cd_S5994C2;
static Base_Class bases_S5993C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5994C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5993C1 = {  "S5993C1", // class name
  bases_S5993C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,40), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18284C2  {
  void *s18284c2f0;
  ::S22028C68_nt s18284c2f1;
  void  mf18284c2(); // _ZN8S18284C29mf18284c2Ev
};
//SIG(-1 S18284C2) C1{ m Fp FC2{ m Fp}}


void  S18284C2 ::mf18284c2(){}

static void Test_S18284C2()
{
  {
    init_simple_test("S18284C2");
    S18284C2 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18284C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18284C2)");
    check_field_offset(lv, s18284c2f0, 0, "S18284C2.s18284c2f0");
    check_field_offset(lv, s18284c2f1, ABISELECT(8,4), "S18284C2.s18284c2f1");
  }
}
static Arrange_To_Call_Me vS18284C2(Test_S18284C2, "S18284C2", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18284C1  {
  void *s18284c1f0[3];
  ::S18284C2 s18284c1f1;
  char s18284c1f2[2];
  void  mf18284c1(); // _ZN8S18284C19mf18284c1Ev
};
//SIG(1 S18284C1) C1{ m Fp[3] FC2{ m Fp FC3{ m Fp}} Fc[2]}


void  S18284C1 ::mf18284c1(){}

static void Test_S18284C1()
{
  {
    init_simple_test("S18284C1");
    S18284C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S18284C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18284C1)");
    check_field_offset(lv, s18284c1f0, 0, "S18284C1.s18284c1f0");
    check_field_offset(lv, s18284c1f1, ABISELECT(24,12), "S18284C1.s18284c1f1");
    check_field_offset(lv, s18284c1f2, ABISELECT(40,20), "S18284C1.s18284c1f2");
  }
}
static Arrange_To_Call_Me vS18284C1(Test_S18284C1, "S18284C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9187C2  {
  void *s9187c2f0;
  ::S22028C68_nt s9187c2f1;
  virtual  ~S9187C2(); // _ZN7S9187C2D1Ev
  virtual void  v3(); // _ZN7S9187C22v3Ev
  virtual void  v4(); // _ZN7S9187C22v4Ev
  S9187C2(); // tgen
};
//SIG(-1 S9187C2) C1{ vd v1 v2 Fp FC2{ m Fp}}


 S9187C2 ::~S9187C2(){ note_dtor("S9187C2", this);}
void  S9187C2 ::v3(){vfunc_called(this, "_ZN7S9187C22v3Ev");}
void  S9187C2 ::v4(){vfunc_called(this, "_ZN7S9187C22v4Ev");}
S9187C2 ::S9187C2(){ note_ctor("S9187C2", this);} // tgen

static void Test_S9187C2()
{
  extern Class_Descriptor cd_S9187C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9187C2, buf);
    S9187C2 *dp, &lv = *(dp=new (buf) S9187C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9187C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9187C2)");
    check_field_offset(lv, s9187c2f0, ABISELECT(8,4), "S9187C2.s9187c2f0");
    check_field_offset(lv, s9187c2f1, ABISELECT(16,8), "S9187C2.s9187c2f1");
    test_class_info(&lv, &cd_S9187C2);
    dp->~S9187C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9187C2(Test_S9187C2, "S9187C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9187C2C1Ev();
extern void _ZN7S9187C2D1Ev();
Name_Map name_map_S9187C2[] = {
  NSPAIR(_ZN7S9187C2C1Ev),
  NSPAIR(_ZN7S9187C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9187C2[];
extern void _ZN7S9187C2D1Ev();
extern void _ZN7S9187C2D0Ev();
extern void _ZN7S9187C22v3Ev();
extern void _ZN7S9187C22v4Ev();
static  VTBL_ENTRY vtc_S9187C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9187C2[0]),
  (VTBL_ENTRY)&_ZN7S9187C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9187C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9187C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9187C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9187C2[];
extern  VTBL_ENTRY _ZTV7S9187C2[];
Class_Descriptor cd_S9187C2 = {  "S9187C2", // class name
  0,0,//no base classes
  &(vtc_S9187C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9187C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9187C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9187C1  : S9187C2 {
  virtual void  v1(); // _ZN7S9187C12v1Ev
  virtual void  v2(); // _ZN7S9187C12v2Ev
  ~S9187C1(); // tgen
  S9187C1(); // tgen
};
//SIG(1 S9187C1) C1{ BC2{ vd v3 v4 Fp FC3{ m Fp}} v1 v2}


void  S9187C1 ::v1(){vfunc_called(this, "_ZN7S9187C12v1Ev");}
void  S9187C1 ::v2(){vfunc_called(this, "_ZN7S9187C12v2Ev");}
S9187C1 ::~S9187C1(){ note_dtor("S9187C1", this);} // tgen
S9187C1 ::S9187C1(){ note_ctor("S9187C1", this);} // tgen

static void Test_S9187C1()
{
  extern Class_Descriptor cd_S9187C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9187C1, buf);
    S9187C1 *dp, &lv = *(dp=new (buf) S9187C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9187C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9187C1)");
    check_base_class_offset(lv, (S9187C2*), 0, "S9187C1");
    test_class_info(&lv, &cd_S9187C1);
    dp->~S9187C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9187C1(Test_S9187C1, "S9187C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9187C1C1Ev();
extern void _ZN7S9187C1D1Ev();
Name_Map name_map_S9187C1[] = {
  NSPAIR(_ZN7S9187C1C1Ev),
  NSPAIR(_ZN7S9187C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9187C2;
extern VTBL_ENTRY _ZTI7S9187C2[];
extern  VTBL_ENTRY _ZTV7S9187C2[];
static Base_Class bases_S9187C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9187C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9187C1[];
extern void _ZN7S9187C1D1Ev();
extern void _ZN7S9187C1D0Ev();
extern void _ZN7S9187C22v3Ev();
extern void _ZN7S9187C22v4Ev();
extern void _ZN7S9187C12v1Ev();
extern void _ZN7S9187C12v2Ev();
static  VTBL_ENTRY vtc_S9187C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9187C1[0]),
  (VTBL_ENTRY)&_ZN7S9187C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9187C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9187C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9187C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9187C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9187C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9187C1[];
extern  VTBL_ENTRY _ZTV7S9187C1[];
Class_Descriptor cd_S9187C1 = {  "S9187C1", // class name
  bases_S9187C1, 1,
  &(vtc_S9187C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9187C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9187C1),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  S6693C2  {
  short s6693c2f0;
  virtual void  v3(); // _ZN7S6693C22v3Ev
  virtual void  v4(); // _ZN7S6693C22v4Ev
  virtual void  v5(); // _ZN7S6693C22v5Ev
  virtual void  v6(); // _ZN7S6693C22v6Ev
  virtual void  v7(); // _ZN7S6693C22v7Ev
  virtual void  v8(); // _ZN7S6693C22v8Ev
  ~S6693C2(); // tgen
  S6693C2(); // tgen
};
//SIG(-1 S6693C2) C1{ v1 v2 v3 v4 v5 v6 Fs}


void  S6693C2 ::v3(){vfunc_called(this, "_ZN7S6693C22v3Ev");}
void  S6693C2 ::v4(){vfunc_called(this, "_ZN7S6693C22v4Ev");}
void  S6693C2 ::v5(){vfunc_called(this, "_ZN7S6693C22v5Ev");}
void  S6693C2 ::v6(){vfunc_called(this, "_ZN7S6693C22v6Ev");}
void  S6693C2 ::v7(){vfunc_called(this, "_ZN7S6693C22v7Ev");}
void  S6693C2 ::v8(){vfunc_called(this, "_ZN7S6693C22v8Ev");}
S6693C2 ::~S6693C2(){ note_dtor("S6693C2", this);} // tgen
S6693C2 ::S6693C2(){ note_ctor("S6693C2", this);} // tgen

static void Test_S6693C2()
{
  extern Class_Descriptor cd_S6693C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6693C2, buf);
    S6693C2 *dp, &lv = *(dp=new (buf) S6693C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6693C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6693C2)");
    check_field_offset(lv, s6693c2f0, ABISELECT(8,4), "S6693C2.s6693c2f0");
    test_class_info(&lv, &cd_S6693C2);
    dp->~S6693C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6693C2(Test_S6693C2, "S6693C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6693C2C1Ev();
extern void _ZN7S6693C2D1Ev();
Name_Map name_map_S6693C2[] = {
  NSPAIR(_ZN7S6693C2C1Ev),
  NSPAIR(_ZN7S6693C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6693C2[];
extern void _ZN7S6693C22v3Ev();
extern void _ZN7S6693C22v4Ev();
extern void _ZN7S6693C22v5Ev();
extern void _ZN7S6693C22v6Ev();
extern void _ZN7S6693C22v7Ev();
extern void _ZN7S6693C22v8Ev();
static  VTBL_ENTRY vtc_S6693C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6693C2[0]),
  (VTBL_ENTRY)&_ZN7S6693C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S6693C2[];
extern  VTBL_ENTRY _ZTV7S6693C2[];
Class_Descriptor cd_S6693C2 = {  "S6693C2", // class name
  0,0,//no base classes
  &(vtc_S6693C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6693C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6693C2),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  S6693C1  : S6693C2 {
  virtual void  v1(); // _ZN7S6693C12v1Ev
  virtual void  v2(); // _ZN7S6693C12v2Ev
  ~S6693C1(); // tgen
  S6693C1(); // tgen
};
//SIG(1 S6693C1) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fs} v1 v2}


void  S6693C1 ::v1(){vfunc_called(this, "_ZN7S6693C12v1Ev");}
void  S6693C1 ::v2(){vfunc_called(this, "_ZN7S6693C12v2Ev");}
S6693C1 ::~S6693C1(){ note_dtor("S6693C1", this);} // tgen
S6693C1 ::S6693C1(){ note_ctor("S6693C1", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6693C1C1Ev();
extern void _ZN7S6693C1D1Ev();
Name_Map name_map_S6693C1[] = {
  NSPAIR(_ZN7S6693C1C1Ev),
  NSPAIR(_ZN7S6693C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6693C2;
extern VTBL_ENTRY _ZTI7S6693C2[];
extern  VTBL_ENTRY _ZTV7S6693C2[];
static Base_Class bases_S6693C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6693C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6693C1[];
extern void _ZN7S6693C22v3Ev();
extern void _ZN7S6693C22v4Ev();
extern void _ZN7S6693C22v5Ev();
extern void _ZN7S6693C22v6Ev();
extern void _ZN7S6693C22v7Ev();
extern void _ZN7S6693C22v8Ev();
extern void _ZN7S6693C12v1Ev();
extern void _ZN7S6693C12v2Ev();
static  VTBL_ENTRY vtc_S6693C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6693C1[0]),
  (VTBL_ENTRY)&_ZN7S6693C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6693C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6693C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6693C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6693C1[];
extern  VTBL_ENTRY _ZTV7S6693C1[];
Class_Descriptor cd_S6693C1 = {  "S6693C1", // class name
  bases_S6693C1, 1,
  &(vtc_S6693C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6693C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6693C1),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  S15193C1  {
  char s15193c1f0[2];
  int s15193c1f1;
  ::S22028C68_nt s15193c1f2;
  ::S16430C5_nt s15193c1f3;
  void  mf15193c1(); // _ZN8S15193C19mf15193c1Ev
};
//SIG(1 S15193C1) C1{ m Fc[2] Fi FC2{ m Fp} FC3{ m Fp}}


void  S15193C1 ::mf15193c1(){}

static void Test_S15193C1()
{
  {
    init_simple_test("S15193C1");
    S15193C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S15193C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15193C1)");
    check_field_offset(lv, s15193c1f0, 0, "S15193C1.s15193c1f0");
    check_field_offset(lv, s15193c1f1, 4, "S15193C1.s15193c1f1");
    check_field_offset(lv, s15193c1f2, 8, "S15193C1.s15193c1f2");
    check_field_offset(lv, s15193c1f3, ABISELECT(16,12), "S15193C1.s15193c1f3");
  }
}
static Arrange_To_Call_Me vS15193C1(Test_S15193C1, "S15193C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6186C1  : S22028C16 {
  ::S22028C68_nt s6186c1f0;
  short s6186c1f1;
  void *s6186c1f2;
  int s6186c1f3[2];
  void *s6186c1f4;
};
//SIG(1 S6186C1) C1{ BC2{ m} FC3{ m Fp} Fs Fp Fi[2] Fp}



static void Test_S6186C1()
{
  extern Class_Descriptor cd_S6186C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S6186C1, buf);
    S6186C1 &lv = *(new (buf) S6186C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S6186C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6186C1)");
    check_base_class_offset(lv, (S22028C16*), 0, "S6186C1");
    check_field_offset(lv, s6186c1f0, 0, "S6186C1.s6186c1f0");
    check_field_offset(lv, s6186c1f1, ABISELECT(8,4), "S6186C1.s6186c1f1");
    check_field_offset(lv, s6186c1f2, ABISELECT(16,8), "S6186C1.s6186c1f2");
    check_field_offset(lv, s6186c1f3, ABISELECT(24,12), "S6186C1.s6186c1f3");
    check_field_offset(lv, s6186c1f4, ABISELECT(32,20), "S6186C1.s6186c1f4");
    test_class_info(&lv, &cd_S6186C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6186C1(Test_S6186C1, "S6186C1", ABISELECT(40,24));

#else // __cplusplus

extern Class_Descriptor cd_S22028C16;
extern VTBL_ENTRY _ZTI9S22028C16[];
static Base_Class bases_S6186C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S6186C1 = {  "S6186C1", // class name
  bases_S6186C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,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  S15070C1  {
  char s15070c1f0;
  ::S22028C68_nt s15070c1f1;
  ::S22028C68_nt s15070c1f2;
  ::S22028C68_nt s15070c1f3;
  ::S22028C68_nt s15070c1f4;
  ::S22028C68_nt s15070c1f5;
  void  mf15070c1(); // _ZN8S15070C19mf15070c1Ev
};
//SIG(1 S15070C1) C1{ m Fc FC2{ m Fp} FC2 FC2 FC2 FC2}


void  S15070C1 ::mf15070c1(){}

static void Test_S15070C1()
{
  {
    init_simple_test("S15070C1");
    S15070C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S15070C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15070C1)");
    check_field_offset(lv, s15070c1f0, 0, "S15070C1.s15070c1f0");
    check_field_offset(lv, s15070c1f1, ABISELECT(8,4), "S15070C1.s15070c1f1");
    check_field_offset(lv, s15070c1f2, ABISELECT(16,8), "S15070C1.s15070c1f2");
    check_field_offset(lv, s15070c1f3, ABISELECT(24,12), "S15070C1.s15070c1f3");
    check_field_offset(lv, s15070c1f4, ABISELECT(32,16), "S15070C1.s15070c1f4");
    check_field_offset(lv, s15070c1f5, ABISELECT(40,20), "S15070C1.s15070c1f5");
  }
}
static Arrange_To_Call_Me vS15070C1(Test_S15070C1, "S15070C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19789C3  : S22028C68_nt {
  ::S22028C68_nt s19789c3f0;
};
//SIG(-1 S19789C3) C1{ BC2{ m Fp} FC2}



static void Test_S19789C3()
{
  extern Class_Descriptor cd_S19789C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19789C3, buf);
    S19789C3 &lv = *(new (buf) S19789C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19789C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19789C3)");
    check_base_class_offset(lv, (S22028C68_nt*), 0, "S19789C3");
    check_field_offset(lv, s19789c3f0, ABISELECT(8,4), "S19789C3.s19789c3f0");
    test_class_info(&lv, &cd_S19789C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19789C3(Test_S19789C3, "S19789C3", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S19789C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S19789C3 = {  "S19789C3", // class name
  bases_S19789C3, 1,
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19789C1  : virtual S22028C68_nt {
  ::S19789C3 s19789c1f0;
  virtual  ~S19789C1(); // _ZN8S19789C1D2Ev
  virtual void  v1(); // _ZN8S19789C12v1Ev
  S19789C1(); // tgen
};
//SIG(1 S19789C1) C1{ VBC2{ m Fp} vd v1 FC3{ BC2 FC2}}


 S19789C1 ::~S19789C1(){ note_dtor("S19789C1", this);}
void  S19789C1 ::v1(){vfunc_called(this, "_ZN8S19789C12v1Ev");}
S19789C1 ::S19789C1(){ note_ctor("S19789C1", this);} // tgen

static void Test_S19789C1()
{
  extern Class_Descriptor cd_S19789C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19789C1, buf);
    S19789C1 *dp, &lv = *(dp=new (buf) S19789C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19789C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19789C1)");
    check_base_class_offset(lv, (S22028C68_nt*), ABISELECT(24,12), "S19789C1");
    check_field_offset(lv, s19789c1f0, ABISELECT(8,4), "S19789C1.s19789c1f0");
    test_class_info(&lv, &cd_S19789C1);
    dp->~S19789C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19789C1(Test_S19789C1, "S19789C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19789C1C1Ev();
extern void _ZN8S19789C1D2Ev();
Name_Map name_map_S19789C1[] = {
  NSPAIR(_ZN8S19789C1C1Ev),
  NSPAIR(_ZN8S19789C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S19789C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19789C1[];
extern void _ZN8S19789C1D1Ev();
extern void _ZN8S19789C1D0Ev();
extern void _ZN8S19789C12v1Ev();
static  VTBL_ENTRY vtc_S19789C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19789C1[0]),
  (VTBL_ENTRY)&_ZN8S19789C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19789C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19789C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S19789C1[];
static  VTT_ENTRY vtt_S19789C1[] = {
  {&(_ZTV8S19789C1[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19789C1[];
extern  VTBL_ENTRY _ZTV8S19789C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19789C1[];
Class_Descriptor cd_S19789C1 = {  "S19789C1", // class name
  bases_S19789C1, 1,
  &(vtc_S19789C1[0]), // expected_vtbl_contents
  &(vtt_S19789C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19789C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19789C1),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19789C1),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  S21608C1  {
  int s21608c1f0;
  ::S22028C68_nt s21608c1f1;
  ::S22028C68_nt s21608c1f2;
  ::S22028C68_nt s21608c1f3;
  ::S22028C68_nt s21608c1f4;
  void  mf21608c1(); // _ZN8S21608C19mf21608c1Ev
  virtual  ~S21608C1(); // _ZN8S21608C1D1Ev
  S21608C1(); // tgen
};
//SIG(1 S21608C1) C1{ vd m Fi FC2{ m Fp} FC2 FC2 FC2}


void  S21608C1 ::mf21608c1(){}
 S21608C1 ::~S21608C1(){ note_dtor("S21608C1", this);}
S21608C1 ::S21608C1(){ note_ctor("S21608C1", this);} // tgen

static void Test_S21608C1()
{
  extern Class_Descriptor cd_S21608C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21608C1, buf);
    S21608C1 *dp, &lv = *(dp=new (buf) S21608C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21608C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21608C1)");
    check_field_offset(lv, s21608c1f0, ABISELECT(8,4), "S21608C1.s21608c1f0");
    check_field_offset(lv, s21608c1f1, ABISELECT(16,8), "S21608C1.s21608c1f1");
    check_field_offset(lv, s21608c1f2, ABISELECT(24,12), "S21608C1.s21608c1f2");
    check_field_offset(lv, s21608c1f3, ABISELECT(32,16), "S21608C1.s21608c1f3");
    check_field_offset(lv, s21608c1f4, ABISELECT(40,20), "S21608C1.s21608c1f4");
    test_class_info(&lv, &cd_S21608C1);
    dp->~S21608C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21608C1(Test_S21608C1, "S21608C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21608C1C1Ev();
extern void _ZN8S21608C1D1Ev();
Name_Map name_map_S21608C1[] = {
  NSPAIR(_ZN8S21608C1C1Ev),
  NSPAIR(_ZN8S21608C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21608C1[];
extern void _ZN8S21608C1D1Ev();
extern void _ZN8S21608C1D0Ev();
static  VTBL_ENTRY vtc_S21608C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21608C1[0]),
  (VTBL_ENTRY)&_ZN8S21608C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21608C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21608C1[];
extern  VTBL_ENTRY _ZTV8S21608C1[];
Class_Descriptor cd_S21608C1 = {  "S21608C1", // class name
  0,0,//no base classes
  &(vtc_S21608C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21608C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21608C1),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  S18020C1  {
  void *s18020c1f0[2];
  ::S18284C2 s18020c1f1;
  void  mf18020c1(); // _ZN8S18020C19mf18020c1Ev
};
//SIG(1 S18020C1) C1{ m Fp[2] FC2{ m Fp FC3{ m Fp}}}


void  S18020C1 ::mf18020c1(){}

static void Test_S18020C1()
{
  {
    init_simple_test("S18020C1");
    S18020C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18020C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18020C1)");
    check_field_offset(lv, s18020c1f0, 0, "S18020C1.s18020c1f0");
    check_field_offset(lv, s18020c1f1, ABISELECT(16,8), "S18020C1.s18020c1f1");
  }
}
static Arrange_To_Call_Me vS18020C1(Test_S18020C1, "S18020C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16897C1  {
  int s16897c1f0;
  void *s16897c1f1;
  ::S18245C2 s16897c1f2;
  void  mf16897c1(); // _ZN8S16897C19mf16897c1Ev
};
//SIG(1 S16897C1) C1{ m Fi Fp FC2{ m Fi FC3{ m Fp}}}


void  S16897C1 ::mf16897c1(){}

static void Test_S16897C1()
{
  {
    init_simple_test("S16897C1");
    S16897C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S16897C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16897C1)");
    check_field_offset(lv, s16897c1f0, 0, "S16897C1.s16897c1f0");
    check_field_offset(lv, s16897c1f1, ABISELECT(8,4), "S16897C1.s16897c1f1");
    check_field_offset(lv, s16897c1f2, ABISELECT(16,8), "S16897C1.s16897c1f2");
  }
}
static Arrange_To_Call_Me vS16897C1(Test_S16897C1, "S16897C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8775C2  {
  void *s8775c2f0;
  ::S22028C68_nt s8775c2f1;
  void *s8775c2f2;
  virtual  ~S8775C2(); // _ZN7S8775C2D1Ev
  virtual void  v2(); // _ZN7S8775C22v2Ev
  S8775C2(); // tgen
};
//SIG(-1 S8775C2) C1{ vd v1 Fp FC2{ m Fp} Fp}


 S8775C2 ::~S8775C2(){ note_dtor("S8775C2", this);}
void  S8775C2 ::v2(){vfunc_called(this, "_ZN7S8775C22v2Ev");}
S8775C2 ::S8775C2(){ note_ctor("S8775C2", this);} // tgen

static void Test_S8775C2()
{
  extern Class_Descriptor cd_S8775C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8775C2, buf);
    S8775C2 *dp, &lv = *(dp=new (buf) S8775C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8775C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8775C2)");
    check_field_offset(lv, s8775c2f0, ABISELECT(8,4), "S8775C2.s8775c2f0");
    check_field_offset(lv, s8775c2f1, ABISELECT(16,8), "S8775C2.s8775c2f1");
    check_field_offset(lv, s8775c2f2, ABISELECT(24,12), "S8775C2.s8775c2f2");
    test_class_info(&lv, &cd_S8775C2);
    dp->~S8775C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8775C2(Test_S8775C2, "S8775C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8775C2C1Ev();
extern void _ZN7S8775C2D1Ev();
Name_Map name_map_S8775C2[] = {
  NSPAIR(_ZN7S8775C2C1Ev),
  NSPAIR(_ZN7S8775C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8775C2[];
extern void _ZN7S8775C2D1Ev();
extern void _ZN7S8775C2D0Ev();
extern void _ZN7S8775C22v2Ev();
static  VTBL_ENTRY vtc_S8775C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8775C2[0]),
  (VTBL_ENTRY)&_ZN7S8775C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8775C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8775C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8775C2[];
extern  VTBL_ENTRY _ZTV7S8775C2[];
Class_Descriptor cd_S8775C2 = {  "S8775C2", // class name
  0,0,//no base classes
  &(vtc_S8775C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8775C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8775C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8775C1  : S8775C2 {
  virtual void  v1(); // _ZN7S8775C12v1Ev
  ~S8775C1(); // tgen
  S8775C1(); // tgen
};
//SIG(1 S8775C1) C1{ BC2{ vd v2 Fp FC3{ m Fp} Fp} v1}


void  S8775C1 ::v1(){vfunc_called(this, "_ZN7S8775C12v1Ev");}
S8775C1 ::~S8775C1(){ note_dtor("S8775C1", this);} // tgen
S8775C1 ::S8775C1(){ note_ctor("S8775C1", this);} // tgen

static void Test_S8775C1()
{
  extern Class_Descriptor cd_S8775C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8775C1, buf);
    S8775C1 *dp, &lv = *(dp=new (buf) S8775C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8775C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8775C1)");
    check_base_class_offset(lv, (S8775C2*), 0, "S8775C1");
    test_class_info(&lv, &cd_S8775C1);
    dp->~S8775C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8775C1(Test_S8775C1, "S8775C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8775C1C1Ev();
extern void _ZN7S8775C1D1Ev();
Name_Map name_map_S8775C1[] = {
  NSPAIR(_ZN7S8775C1C1Ev),
  NSPAIR(_ZN7S8775C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8775C2;
extern VTBL_ENTRY _ZTI7S8775C2[];
extern  VTBL_ENTRY _ZTV7S8775C2[];
static Base_Class bases_S8775C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8775C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8775C1[];
extern void _ZN7S8775C1D1Ev();
extern void _ZN7S8775C1D0Ev();
extern void _ZN7S8775C22v2Ev();
extern void _ZN7S8775C12v1Ev();
static  VTBL_ENTRY vtc_S8775C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8775C1[0]),
  (VTBL_ENTRY)&_ZN7S8775C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8775C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8775C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8775C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8775C1[];
extern  VTBL_ENTRY _ZTV7S8775C1[];
Class_Descriptor cd_S8775C1 = {  "S8775C1", // class name
  bases_S8775C1, 1,
  &(vtc_S8775C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8775C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8775C1),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  S5992C1  : S5994C2 {
  int s5992c1f0;
  void *s5992c1f1;
};
//SIG(1 S5992C1) C1{ BC2{ m Fp Fi Fp[2] Fi} Fi Fp}



static void Test_S5992C1()
{
  extern Class_Descriptor cd_S5992C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S5992C1, buf);
    S5992C1 &lv = *(new (buf) S5992C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S5992C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5992C1)");
    check_base_class_offset(lv, (S5994C2*), 0, "S5992C1");
    check_field_offset(lv, s5992c1f0, ABISELECT(40,20), "S5992C1.s5992c1f0");
    check_field_offset(lv, s5992c1f1, ABISELECT(48,24), "S5992C1.s5992c1f1");
    test_class_info(&lv, &cd_S5992C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5992C1(Test_S5992C1, "S5992C1", ABISELECT(56,28));

#else // __cplusplus

extern Class_Descriptor cd_S5994C2;
static Base_Class bases_S5992C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5994C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S5992C1 = {  "S5992C1", // class name
  bases_S5992C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18299C1  {
  void *s18299c1f0[3];
  ::S22028C68_nt s18299c1f1;
  void *s18299c1f2[4];
  int s18299c1f3;
  void  mf18299c1(); // _ZN8S18299C19mf18299c1Ev
};
//SIG(1 S18299C1) C1{ m Fp[3] FC2{ m Fp} Fp[4] Fi}


void  S18299C1 ::mf18299c1(){}

static void Test_S18299C1()
{
  {
    init_simple_test("S18299C1");
    S18299C1 lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18299C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18299C1)");
    check_field_offset(lv, s18299c1f0, 0, "S18299C1.s18299c1f0");
    check_field_offset(lv, s18299c1f1, ABISELECT(24,12), "S18299C1.s18299c1f1");
    check_field_offset(lv, s18299c1f2, ABISELECT(32,16), "S18299C1.s18299c1f2");
    check_field_offset(lv, s18299c1f3, ABISELECT(64,32), "S18299C1.s18299c1f3");
  }
}
static Arrange_To_Call_Me vS18299C1(Test_S18299C1, "S18299C1", ABISELECT(72,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16830C1  {
  int s16830c1f0;
  ::S22028C68_nt s16830c1f1;
  void *s16830c1f2[3];
  int s16830c1f3[3];
  void  mf16830c1(); // _ZN8S16830C19mf16830c1Ev
};
//SIG(1 S16830C1) C1{ m Fi FC2{ m Fp} Fp[3] Fi[3]}


void  S16830C1 ::mf16830c1(){}

static void Test_S16830C1()
{
  {
    init_simple_test("S16830C1");
    S16830C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S16830C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16830C1)");
    check_field_offset(lv, s16830c1f0, 0, "S16830C1.s16830c1f0");
    check_field_offset(lv, s16830c1f1, ABISELECT(8,4), "S16830C1.s16830c1f1");
    check_field_offset(lv, s16830c1f2, ABISELECT(16,8), "S16830C1.s16830c1f2");
    check_field_offset(lv, s16830c1f3, ABISELECT(40,20), "S16830C1.s16830c1f3");
  }
}
static Arrange_To_Call_Me vS16830C1(Test_S16830C1, "S16830C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18391C1  {
  void *s18391c1f0[7];
  ::S22028C68_nt s18391c1f1;
  void *s18391c1f2[3];
  int s18391c1f3;
  void  mf18391c1(); // _ZN8S18391C19mf18391c1Ev
};
//SIG(1 S18391C1) C1{ m Fp[7] FC2{ m Fp} Fp[3] Fi}


void  S18391C1 ::mf18391c1(){}

static void Test_S18391C1()
{
  {
    init_simple_test("S18391C1");
    S18391C1 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S18391C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18391C1)");
    check_field_offset(lv, s18391c1f0, 0, "S18391C1.s18391c1f0");
    check_field_offset(lv, s18391c1f1, ABISELECT(56,28), "S18391C1.s18391c1f1");
    check_field_offset(lv, s18391c1f2, ABISELECT(64,32), "S18391C1.s18391c1f2");
    check_field_offset(lv, s18391c1f3, ABISELECT(88,44), "S18391C1.s18391c1f3");
  }
}
static Arrange_To_Call_Me vS18391C1(Test_S18391C1, "S18391C1", ABISELECT(96,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18610C1  {
  ::S22028C68_nt s18610c1f0;
  int s18610c1f1:10;
  virtual void  v1(); // _ZN8S18610C12v1Ev
  virtual void  v2(); // _ZN8S18610C12v2Ev
  virtual void  v3(); // _ZN8S18610C12v3Ev
  ~S18610C1(); // tgen
  S18610C1(); // tgen
};
//SIG(1 S18610C1) C1{ v1 v2 v3 FC2{ m Fp} Fi:10}


void  S18610C1 ::v1(){vfunc_called(this, "_ZN8S18610C12v1Ev");}
void  S18610C1 ::v2(){vfunc_called(this, "_ZN8S18610C12v2Ev");}
void  S18610C1 ::v3(){vfunc_called(this, "_ZN8S18610C12v3Ev");}
S18610C1 ::~S18610C1(){ note_dtor("S18610C1", this);} // tgen
S18610C1 ::S18610C1(){ note_ctor("S18610C1", this);} // tgen

static void Test_S18610C1()
{
  extern Class_Descriptor cd_S18610C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18610C1, buf);
    S18610C1 *dp, &lv = *(dp=new (buf) S18610C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18610C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18610C1)");
    check_field_offset(lv, s18610c1f0, ABISELECT(8,4), "S18610C1.s18610c1f0");
    set_bf_and_test(lv, s18610c1f1, ABISELECT(16,8), 0, 10, 1, "S18610C1");
    set_bf_and_test(lv, s18610c1f1, ABISELECT(16,8), 0, 10, hide_sll(1LL<<9), "S18610C1");
    test_class_info(&lv, &cd_S18610C1);
    dp->~S18610C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18610C1(Test_S18610C1, "S18610C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18610C1C1Ev();
extern void _ZN8S18610C1D1Ev();
Name_Map name_map_S18610C1[] = {
  NSPAIR(_ZN8S18610C1C1Ev),
  NSPAIR(_ZN8S18610C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18610C1[];
extern void _ZN8S18610C12v1Ev();
extern void _ZN8S18610C12v2Ev();
extern void _ZN8S18610C12v3Ev();
static  VTBL_ENTRY vtc_S18610C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18610C1[0]),
  (VTBL_ENTRY)&_ZN8S18610C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18610C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18610C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18610C1[];
extern  VTBL_ENTRY _ZTV8S18610C1[];
Class_Descriptor cd_S18610C1 = {  "S18610C1", // class name
  0,0,//no base classes
  &(vtc_S18610C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18610C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18610C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11150C1  {
  ::S3715C6 s11150c1f0;
  int s11150c1f1;
};
//SIG(1 S11150C1) C1{ FC2{ Fc[16] Fi Fc[40]} Fi}



static void Test_S11150C1()
{
  {
    init_simple_test("S11150C1");
    S11150C1 lv;
    check2(sizeof(lv), 64, "sizeof(S11150C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11150C1)");
    check_field_offset(lv, s11150c1f0, 0, "S11150C1.s11150c1f0");
    check_field_offset(lv, s11150c1f1, 60, "S11150C1.s11150c1f1");
  }
}
static Arrange_To_Call_Me vS11150C1(Test_S11150C1, "S11150C1", 64);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17196C1  {
  int s17196c1f0[3];
  ::S22028C68_nt s17196c1f1;
  int s17196c1f2[2];
  void  mf17196c1(); // _ZN8S17196C19mf17196c1Ev
};
//SIG(1 S17196C1) C1{ m Fi[3] FC2{ m Fp} Fi[2]}


void  S17196C1 ::mf17196c1(){}

static void Test_S17196C1()
{
  {
    init_simple_test("S17196C1");
    S17196C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S17196C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17196C1)");
    check_field_offset(lv, s17196c1f0, 0, "S17196C1.s17196c1f0");
    check_field_offset(lv, s17196c1f1, ABISELECT(16,12), "S17196C1.s17196c1f1");
    check_field_offset(lv, s17196c1f2, ABISELECT(24,16), "S17196C1.s17196c1f2");
  }
}
static Arrange_To_Call_Me vS17196C1(Test_S17196C1, "S17196C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16437C1  {
  ::S22028C68_nt s16437c1f0;
  int s16437c1f1;
  void *s16437c1f2[8000];
  void  mf16437c1(); // _ZN8S16437C19mf16437c1Ev
};
//SIG(1 S16437C1) C1{ m FC2{ m Fp} Fi Fp[8000]}


void  S16437C1 ::mf16437c1(){}

static void Test_S16437C1()
{
  {
    init_simple_test("S16437C1");
    S16437C1 lv;
    check2(sizeof(lv), ABISELECT(64016,32008), "sizeof(S16437C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16437C1)");
    check_field_offset(lv, s16437c1f0, 0, "S16437C1.s16437c1f0");
    check_field_offset(lv, s16437c1f1, ABISELECT(8,4), "S16437C1.s16437c1f1");
    check_field_offset(lv, s16437c1f2, ABISELECT(16,8), "S16437C1.s16437c1f2");
  }
}
static Arrange_To_Call_Me vS16437C1(Test_S16437C1, "S16437C1", ABISELECT(64016,32008));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18297C1  {
  void *s18297c1f0[3];
  ::S22028C68_nt s18297c1f1;
  char s18297c1f2[2];
  void  mf18297c1(); // _ZN8S18297C19mf18297c1Ev
};
//SIG(1 S18297C1) C1{ m Fp[3] FC2{ m Fp} Fc[2]}


void  S18297C1 ::mf18297c1(){}

static void Test_S18297C1()
{
  {
    init_simple_test("S18297C1");
    S18297C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18297C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18297C1)");
    check_field_offset(lv, s18297c1f0, 0, "S18297C1.s18297c1f0");
    check_field_offset(lv, s18297c1f1, ABISELECT(24,12), "S18297C1.s18297c1f1");
    check_field_offset(lv, s18297c1f2, ABISELECT(32,16), "S18297C1.s18297c1f2");
  }
}
static Arrange_To_Call_Me vS18297C1(Test_S18297C1, "S18297C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16913C1  {
  int s16913c1f0;
  void *s16913c1f1;
  ::S22028C68_nt s16913c1f2;
  ::S3465C9_nt s16913c1f3;
  void  mf16913c1(); // _ZN8S16913C19mf16913c1Ev
};
//SIG(1 S16913C1) C1{ m Fi Fp FC2{ m Fp} FC3{}}


void  S16913C1 ::mf16913c1(){}

static void Test_S16913C1()
{
  {
    init_simple_test("S16913C1");
    S16913C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S16913C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16913C1)");
    check_field_offset(lv, s16913c1f0, 0, "S16913C1.s16913c1f0");
    check_field_offset(lv, s16913c1f1, ABISELECT(8,4), "S16913C1.s16913c1f1");
    check_field_offset(lv, s16913c1f2, ABISELECT(16,8), "S16913C1.s16913c1f2");
    check_field_offset(lv, s16913c1f3, ABISELECT(24,12), "S16913C1.s16913c1f3");
  }
}
static Arrange_To_Call_Me vS16913C1(Test_S16913C1, "S16913C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14148C1  {
  void *s14148c1f0;
  ::S22028C68_nt s14148c1f1;
  ::S22028C68_nt s14148c1f2;
  int s14148c1f3[4];
};
//SIG(1 S14148C1) C1{ Fp FC2{ m Fp} FC2 Fi[4]}



static void Test_S14148C1()
{
  {
    init_simple_test("S14148C1");
    S14148C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14148C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14148C1)");
    check_field_offset(lv, s14148c1f0, 0, "S14148C1.s14148c1f0");
    check_field_offset(lv, s14148c1f1, ABISELECT(8,4), "S14148C1.s14148c1f1");
    check_field_offset(lv, s14148c1f2, ABISELECT(16,8), "S14148C1.s14148c1f2");
    check_field_offset(lv, s14148c1f3, ABISELECT(24,12), "S14148C1.s14148c1f3");
  }
}
static Arrange_To_Call_Me vS14148C1(Test_S14148C1, "S14148C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16411C1  {
  ::S22028C68_nt s16411c1f0;
  ::S22028C68_nt s16411c1f1;
  int s16411c1f2[2];
  void  mf16411c1(); // _ZN8S16411C19mf16411c1Ev
};
//SIG(1 S16411C1) C1{ m FC2{ m Fp} FC2 Fi[2]}


void  S16411C1 ::mf16411c1(){}

static void Test_S16411C1()
{
  {
    init_simple_test("S16411C1");
    S16411C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S16411C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16411C1)");
    check_field_offset(lv, s16411c1f0, 0, "S16411C1.s16411c1f0");
    check_field_offset(lv, s16411c1f1, ABISELECT(8,4), "S16411C1.s16411c1f1");
    check_field_offset(lv, s16411c1f2, ABISELECT(16,8), "S16411C1.s16411c1f2");
  }
}
static Arrange_To_Call_Me vS16411C1(Test_S16411C1, "S16411C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17236C1  {
  int s17236c1f0[4];
  void *s17236c1f1;
  ::S22028C68_nt s17236c1f2;
  void  mf17236c1(); // _ZN8S17236C19mf17236c1Ev
};
//SIG(1 S17236C1) C1{ m Fi[4] Fp FC2{ m Fp}}


void  S17236C1 ::mf17236c1(){}

static void Test_S17236C1()
{
  {
    init_simple_test("S17236C1");
    S17236C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S17236C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17236C1)");
    check_field_offset(lv, s17236c1f0, 0, "S17236C1.s17236c1f0");
    check_field_offset(lv, s17236c1f1, 16, "S17236C1.s17236c1f1");
    check_field_offset(lv, s17236c1f2, ABISELECT(24,20), "S17236C1.s17236c1f2");
  }
}
static Arrange_To_Call_Me vS17236C1(Test_S17236C1, "S17236C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10357C1  : S3465C9_nt {
  int s10357c1f0;
  ::S22028C68_nt s10357c1f1;
  ::S22028C68_nt s10357c1f2;
};
//SIG(1 S10357C1) C1{ BC2{} Fi FC3{ m Fp} FC3}



static void Test_S10357C1()
{
  extern Class_Descriptor cd_S10357C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10357C1, buf);
    S10357C1 &lv = *(new (buf) S10357C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10357C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10357C1)");
    check_base_class_offset(lv, (S3465C9_nt*), 0, "S10357C1");
    check_field_offset(lv, s10357c1f0, 0, "S10357C1.s10357c1f0");
    check_field_offset(lv, s10357c1f1, ABISELECT(8,4), "S10357C1.s10357c1f1");
    check_field_offset(lv, s10357c1f2, ABISELECT(16,8), "S10357C1.s10357c1f2");
    test_class_info(&lv, &cd_S10357C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10357C1(Test_S10357C1, "S10357C1", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S3465C9_nt;
static Base_Class bases_S10357C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3465C9_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_S10357C1 = {  "S10357C1", // class name
  bases_S10357C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S21609C1  {
  int s21609c1f0;
  ::S22028C68_nt s21609c1f1;
  short s21609c1f2;
  void  mf21609c1(); // _ZN8S21609C19mf21609c1Ev
  virtual  ~S21609C1(); // _ZN8S21609C1D1Ev
  S21609C1(); // tgen
};
//SIG(1 S21609C1) C1{ vd m Fi FC2{ m Fp} Fs}


void  S21609C1 ::mf21609c1(){}
 S21609C1 ::~S21609C1(){ note_dtor("S21609C1", this);}
S21609C1 ::S21609C1(){ note_ctor("S21609C1", this);} // tgen

static void Test_S21609C1()
{
  extern Class_Descriptor cd_S21609C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21609C1, buf);
    S21609C1 *dp, &lv = *(dp=new (buf) S21609C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21609C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21609C1)");
    check_field_offset(lv, s21609c1f0, ABISELECT(8,4), "S21609C1.s21609c1f0");
    check_field_offset(lv, s21609c1f1, ABISELECT(16,8), "S21609C1.s21609c1f1");
    check_field_offset(lv, s21609c1f2, ABISELECT(24,12), "S21609C1.s21609c1f2");
    test_class_info(&lv, &cd_S21609C1);
    dp->~S21609C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21609C1(Test_S21609C1, "S21609C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21609C1C1Ev();
extern void _ZN8S21609C1D1Ev();
Name_Map name_map_S21609C1[] = {
  NSPAIR(_ZN8S21609C1C1Ev),
  NSPAIR(_ZN8S21609C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21609C1[];
extern void _ZN8S21609C1D1Ev();
extern void _ZN8S21609C1D0Ev();
static  VTBL_ENTRY vtc_S21609C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21609C1[0]),
  (VTBL_ENTRY)&_ZN8S21609C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21609C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21609C1[];
extern  VTBL_ENTRY _ZTV8S21609C1[];
Class_Descriptor cd_S21609C1 = {  "S21609C1", // class name
  0,0,//no base classes
  &(vtc_S21609C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21609C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21609C1),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  S21739C1  {
  void *s21739c1f0;
  ::S22028C68_nt s21739c1f1;
  char s21739c1f2;
  void  mf21739c1(); // _ZN8S21739C19mf21739c1Ev
  virtual  ~S21739C1(); // _ZN8S21739C1D1Ev
  S21739C1(); // tgen
};
//SIG(1 S21739C1) C1{ vd m Fp FC2{ m Fp} Fc}


void  S21739C1 ::mf21739c1(){}
 S21739C1 ::~S21739C1(){ note_dtor("S21739C1", this);}
S21739C1 ::S21739C1(){ note_ctor("S21739C1", this);} // tgen

static void Test_S21739C1()
{
  extern Class_Descriptor cd_S21739C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21739C1, buf);
    S21739C1 *dp, &lv = *(dp=new (buf) S21739C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21739C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21739C1)");
    check_field_offset(lv, s21739c1f0, ABISELECT(8,4), "S21739C1.s21739c1f0");
    check_field_offset(lv, s21739c1f1, ABISELECT(16,8), "S21739C1.s21739c1f1");
    check_field_offset(lv, s21739c1f2, ABISELECT(24,12), "S21739C1.s21739c1f2");
    test_class_info(&lv, &cd_S21739C1);
    dp->~S21739C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21739C1(Test_S21739C1, "S21739C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21739C1C1Ev();
extern void _ZN8S21739C1D1Ev();
Name_Map name_map_S21739C1[] = {
  NSPAIR(_ZN8S21739C1C1Ev),
  NSPAIR(_ZN8S21739C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21739C1[];
extern void _ZN8S21739C1D1Ev();
extern void _ZN8S21739C1D0Ev();
static  VTBL_ENTRY vtc_S21739C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21739C1[0]),
  (VTBL_ENTRY)&_ZN8S21739C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21739C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21739C1[];
extern  VTBL_ENTRY _ZTV8S21739C1[];
Class_Descriptor cd_S21739C1 = {  "S21739C1", // class name
  0,0,//no base classes
  &(vtc_S21739C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21739C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21739C1),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  S17666C1  {
  void *s17666c1f0;
  ::S22028C68_nt s17666c1f1;
  void *s17666c1f2;
  char s17666c1f3;
  void  mf17666c1(); // _ZN8S17666C19mf17666c1Ev
};
//SIG(1 S17666C1) C1{ m Fp FC2{ m Fp} Fp Fc}


void  S17666C1 ::mf17666c1(){}

static void Test_S17666C1()
{
  {
    init_simple_test("S17666C1");
    S17666C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S17666C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17666C1)");
    check_field_offset(lv, s17666c1f0, 0, "S17666C1.s17666c1f0");
    check_field_offset(lv, s17666c1f1, ABISELECT(8,4), "S17666C1.s17666c1f1");
    check_field_offset(lv, s17666c1f2, ABISELECT(16,8), "S17666C1.s17666c1f2");
    check_field_offset(lv, s17666c1f3, ABISELECT(24,12), "S17666C1.s17666c1f3");
  }
}
static Arrange_To_Call_Me vS17666C1(Test_S17666C1, "S17666C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5865C1  : S21712C8_nt {
  ::S22028C68_nt s5865c1f0;
};
//SIG(1 S5865C1) C1{ BC2{ m Fi} FC3{ m Fp}}



static void Test_S5865C1()
{
  extern Class_Descriptor cd_S5865C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S5865C1, buf);
    S5865C1 &lv = *(new (buf) S5865C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5865C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5865C1)");
    check_base_class_offset(lv, (S21712C8_nt*), 0, "S5865C1");
    check_field_offset(lv, s5865c1f0, ABISELECT(8,4), "S5865C1.s5865c1f0");
    test_class_info(&lv, &cd_S5865C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5865C1(Test_S5865C1, "S5865C1", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S21712C8_nt;
extern VTBL_ENTRY _ZTI11S21712C8_nt[];
static Base_Class bases_S5865C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21712C8_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_S5865C1 = {  "S5865C1", // class name
  bases_S5865C1, 1,
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19787C1  : virtual S22028C68_nt {
  virtual void  v1(); // _ZN8S19787C12v1Ev
  virtual void  v2(); // _ZN8S19787C12v2Ev
  virtual void  v3(); // _ZN8S19787C12v3Ev
  ~S19787C1(); // tgen
  S19787C1(); // tgen
};
//SIG(1 S19787C1) C1{ VBC2{ m Fp} v1 v2 v3}


void  S19787C1 ::v1(){vfunc_called(this, "_ZN8S19787C12v1Ev");}
void  S19787C1 ::v2(){vfunc_called(this, "_ZN8S19787C12v2Ev");}
void  S19787C1 ::v3(){vfunc_called(this, "_ZN8S19787C12v3Ev");}
S19787C1 ::~S19787C1(){ note_dtor("S19787C1", this);} // tgen
S19787C1 ::S19787C1(){ note_ctor("S19787C1", this);} // tgen

static void Test_S19787C1()
{
  extern Class_Descriptor cd_S19787C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19787C1, buf);
    S19787C1 *dp, &lv = *(dp=new (buf) S19787C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19787C1)");
    check_base_class_offset(lv, (S22028C68_nt*), ABISELECT(8,4), "S19787C1");
    test_class_info(&lv, &cd_S19787C1);
    dp->~S19787C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19787C1(Test_S19787C1, "S19787C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19787C1C1Ev();
extern void _ZN8S19787C1D1Ev();
Name_Map name_map_S19787C1[] = {
  NSPAIR(_ZN8S19787C1C1Ev),
  NSPAIR(_ZN8S19787C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S19787C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19787C1[];
extern void _ZN8S19787C12v1Ev();
extern void _ZN8S19787C12v2Ev();
extern void _ZN8S19787C12v3Ev();
static  VTBL_ENTRY vtc_S19787C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19787C1[0]),
  (VTBL_ENTRY)&_ZN8S19787C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19787C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19787C12v3Ev,
};
extern VTBL_ENTRY _ZTV8S19787C1[];
static  VTT_ENTRY vtt_S19787C1[] = {
  {&(_ZTV8S19787C1[3]),  3,6},
};
extern VTBL_ENTRY _ZTI8S19787C1[];
extern  VTBL_ENTRY _ZTV8S19787C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19787C1[];
Class_Descriptor cd_S19787C1 = {  "S19787C1", // class name
  bases_S19787C1, 1,
  &(vtc_S19787C1[0]), // expected_vtbl_contents
  &(vtt_S19787C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19787C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19787C1),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19787C1),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  S16914C1  {
  int s16914c1f0;
  void *s16914c1f1;
  ::S22028C68_nt s16914c1f2;
  void  mf16914c1(); // _ZN8S16914C19mf16914c1Ev
};
//SIG(1 S16914C1) C1{ m Fi Fp FC2{ m Fp}}


void  S16914C1 ::mf16914c1(){}

static void Test_S16914C1()
{
  {
    init_simple_test("S16914C1");
    S16914C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S16914C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16914C1)");
    check_field_offset(lv, s16914c1f0, 0, "S16914C1.s16914c1f0");
    check_field_offset(lv, s16914c1f1, ABISELECT(8,4), "S16914C1.s16914c1f1");
    check_field_offset(lv, s16914c1f2, ABISELECT(16,8), "S16914C1.s16914c1f2");
  }
}
static Arrange_To_Call_Me vS16914C1(Test_S16914C1, "S16914C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18383C1  {
  void *s18383c1f0[6];
  ::S22028C68_nt s18383c1f1;
  void  mf18383c1(); // _ZN8S18383C19mf18383c1Ev
};
//SIG(1 S18383C1) C1{ m Fp[6] FC2{ m Fp}}


void  S18383C1 ::mf18383c1(){}

static void Test_S18383C1()
{
  {
    init_simple_test("S18383C1");
    S18383C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S18383C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18383C1)");
    check_field_offset(lv, s18383c1f0, 0, "S18383C1.s18383c1f0");
    check_field_offset(lv, s18383c1f1, ABISELECT(48,24), "S18383C1.s18383c1f1");
  }
}
static Arrange_To_Call_Me vS18383C1(Test_S18383C1, "S18383C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17441C1  {
  void *s17441c1f0;
  char s17441c1f1;
  ::S22028C68_nt s17441c1f2;
  void  mf17441c1(); // _ZN8S17441C19mf17441c1Ev
};
//SIG(1 S17441C1) C1{ m Fp Fc FC2{ m Fp}}


void  S17441C1 ::mf17441c1(){}

static void Test_S17441C1()
{
  {
    init_simple_test("S17441C1");
    S17441C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S17441C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17441C1)");
    check_field_offset(lv, s17441c1f0, 0, "S17441C1.s17441c1f0");
    check_field_offset(lv, s17441c1f1, ABISELECT(8,4), "S17441C1.s17441c1f1");
    check_field_offset(lv, s17441c1f2, ABISELECT(16,8), "S17441C1.s17441c1f2");
  }
}
static Arrange_To_Call_Me vS17441C1(Test_S17441C1, "S17441C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16449C1  {
  ::S22028C68_nt s16449c1f0;
  void *s16449c1f1[2];
  void  mf16449c1(); // _ZN8S16449C19mf16449c1Ev
};
//SIG(1 S16449C1) C1{ m FC2{ m Fp} Fp[2]}


void  S16449C1 ::mf16449c1(){}

static void Test_S16449C1()
{
  {
    init_simple_test("S16449C1");
    S16449C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S16449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16449C1)");
    check_field_offset(lv, s16449c1f0, 0, "S16449C1.s16449c1f0");
    check_field_offset(lv, s16449c1f1, ABISELECT(8,4), "S16449C1.s16449c1f1");
  }
}
static Arrange_To_Call_Me vS16449C1(Test_S16449C1, "S16449C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16405C1  {
  ::S22028C68_nt s16405c1f0;
  char s16405c1f1;
  int s16405c1f2;
  void  mf16405c1(); // _ZN8S16405C19mf16405c1Ev
};
//SIG(1 S16405C1) C1{ m FC2{ m Fp} Fc Fi}


void  S16405C1 ::mf16405c1(){}

static void Test_S16405C1()
{
  {
    init_simple_test("S16405C1");
    S16405C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S16405C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16405C1)");
    check_field_offset(lv, s16405c1f0, 0, "S16405C1.s16405c1f0");
    check_field_offset(lv, s16405c1f1, ABISELECT(8,4), "S16405C1.s16405c1f1");
    check_field_offset(lv, s16405c1f2, ABISELECT(12,8), "S16405C1.s16405c1f2");
  }
}
static Arrange_To_Call_Me vS16405C1(Test_S16405C1, "S16405C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2807C2  : S22028C68_nt {
  void *s2807c2f0;
};
//SIG(-1 S2807C2) C1{ BC2{ m Fp} Fp}



static void Test_S2807C2()
{
  extern Class_Descriptor cd_S2807C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2807C2, buf);
    S2807C2 &lv = *(new (buf) S2807C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2807C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2807C2)");
    check_base_class_offset(lv, (S22028C68_nt*), 0, "S2807C2");
    check_field_offset(lv, s2807c2f0, ABISELECT(8,4), "S2807C2.s2807c2f0");
    test_class_info(&lv, &cd_S2807C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2807C2(Test_S2807C2, "S2807C2", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S2807C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S2807C2 = {  "S2807C2", // class name
  bases_S2807C2, 1,
  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  S2807C1  : S2807C2 {
};
//SIG(1 S2807C1) C1{ BC2{ BC3{ m Fp} Fp}}



static void Test_S2807C1()
{
  extern Class_Descriptor cd_S2807C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2807C1, buf);
    S2807C1 &lv = *(new (buf) S2807C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2807C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2807C1)");
    check_base_class_offset(lv, (S22028C68_nt*)(S2807C2*), 0, "S2807C1");
    check_base_class_offset(lv, (S2807C2*), 0, "S2807C1");
    test_class_info(&lv, &cd_S2807C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2807C1(Test_S2807C1, "S2807C1", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
extern Class_Descriptor cd_S2807C2;
static Base_Class bases_S2807C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S2807C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2807C1 = {  "S2807C1", // class name
  bases_S2807C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18939C1  {
  ::S22028C68_nt s18939c1f0;
  virtual  ~S18939C1(); // _ZN8S18939C1D1Ev
  virtual void  v1(); // _ZN8S18939C12v1Ev
  S18939C1(); // tgen
};
//SIG(1 S18939C1) C1{ vd v1 FC2{ m Fp}}


 S18939C1 ::~S18939C1(){ note_dtor("S18939C1", this);}
void  S18939C1 ::v1(){vfunc_called(this, "_ZN8S18939C12v1Ev");}
S18939C1 ::S18939C1(){ note_ctor("S18939C1", this);} // tgen

static void Test_S18939C1()
{
  extern Class_Descriptor cd_S18939C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18939C1, buf);
    S18939C1 *dp, &lv = *(dp=new (buf) S18939C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18939C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18939C1)");
    check_field_offset(lv, s18939c1f0, ABISELECT(8,4), "S18939C1.s18939c1f0");
    test_class_info(&lv, &cd_S18939C1);
    dp->~S18939C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18939C1(Test_S18939C1, "S18939C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18939C1C1Ev();
extern void _ZN8S18939C1D1Ev();
Name_Map name_map_S18939C1[] = {
  NSPAIR(_ZN8S18939C1C1Ev),
  NSPAIR(_ZN8S18939C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18939C1[];
extern void _ZN8S18939C1D1Ev();
extern void _ZN8S18939C1D0Ev();
extern void _ZN8S18939C12v1Ev();
static  VTBL_ENTRY vtc_S18939C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18939C1[0]),
  (VTBL_ENTRY)&_ZN8S18939C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18939C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18939C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18939C1[];
extern  VTBL_ENTRY _ZTV8S18939C1[];
Class_Descriptor cd_S18939C1 = {  "S18939C1", // class name
  0,0,//no base classes
  &(vtc_S18939C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18939C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18939C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18481C1  {
  ::S22028C68_nt s18481c1f0;
  long double s18481c1f1;
  virtual void  v1(); // _ZN8S18481C12v1Ev
  ~S18481C1(); // tgen
  S18481C1(); // tgen
};
//SIG(1 S18481C1) C1{ v1 FC2{ m Fp} FD}


void  S18481C1 ::v1(){vfunc_called(this, "_ZN8S18481C12v1Ev");}
S18481C1 ::~S18481C1(){ note_dtor("S18481C1", this);} // tgen
S18481C1 ::S18481C1(){ note_ctor("S18481C1", this);} // tgen

static void Test_S18481C1()
{
  extern Class_Descriptor cd_S18481C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,6)];
    init_test(&cd_S18481C1, buf);
    S18481C1 *dp, &lv = *(dp=new (buf) S18481C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18481C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18481C1)");
    check_field_offset(lv, s18481c1f0, ABISELECT(8,4), "S18481C1.s18481c1f0");
    check_field_offset(lv, s18481c1f1, ABISELECT(16,8), "S18481C1.s18481c1f1");
    test_class_info(&lv, &cd_S18481C1);
    dp->~S18481C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18481C1(Test_S18481C1, "S18481C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18481C1C1Ev();
extern void _ZN8S18481C1D1Ev();
Name_Map name_map_S18481C1[] = {
  NSPAIR(_ZN8S18481C1C1Ev),
  NSPAIR(_ZN8S18481C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18481C1[];
extern void _ZN8S18481C12v1Ev();
static  VTBL_ENTRY vtc_S18481C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18481C1[0]),
  (VTBL_ENTRY)&_ZN8S18481C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18481C1[];
extern  VTBL_ENTRY _ZTV8S18481C1[];
Class_Descriptor cd_S18481C1 = {  "S18481C1", // class name
  0,0,//no base classes
  &(vtc_S18481C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18481C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18481C1),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  S12177C1  {
  ::S22028C68_nt s12177c1f0;
  void *s12177c1f1;
  int s12177c1f2;
};
//SIG(1 S12177C1) C1{ FC2{ m Fp} Fp Fi}



static void Test_S12177C1()
{
  {
    init_simple_test("S12177C1");
    S12177C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12177C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12177C1)");
    check_field_offset(lv, s12177c1f0, 0, "S12177C1.s12177c1f0");
    check_field_offset(lv, s12177c1f1, ABISELECT(8,4), "S12177C1.s12177c1f1");
    check_field_offset(lv, s12177c1f2, ABISELECT(16,8), "S12177C1.s12177c1f2");
  }
}
static Arrange_To_Call_Me vS12177C1(Test_S12177C1, "S12177C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6078C1  : S22028C68_nt {
  void *s6078c1f0[4];
};
//SIG(1 S6078C1) C1{ BC2{ m Fp} Fp[4]}



static void Test_S6078C1()
{
  extern Class_Descriptor cd_S6078C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6078C1, buf);
    S6078C1 &lv = *(new (buf) S6078C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6078C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6078C1)");
    check_base_class_offset(lv, (S22028C68_nt*), 0, "S6078C1");
    check_field_offset(lv, s6078c1f0, ABISELECT(8,4), "S6078C1.s6078c1f0");
    test_class_info(&lv, &cd_S6078C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6078C1(Test_S6078C1, "S6078C1", ABISELECT(40,20));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S6078C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S6078C1 = {  "S6078C1", // class name
  bases_S6078C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,20), // 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  S6073C1  : S22028C68_nt {
  char s6073c1f0:8;
};
//SIG(1 S6073C1) C1{ BC2{ m Fp} Fc:8}



static void Test_S6073C1()
{
  extern Class_Descriptor cd_S6073C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6073C1, buf);
    S6073C1 &lv = *(new (buf) S6073C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6073C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6073C1)");
    check_base_class_offset(lv, (S22028C68_nt*), 0, "S6073C1");
    set_bf_and_test(lv, s6073c1f0, ABISELECT(8,4), 0, 8, 1, "S6073C1");
    set_bf_and_test(lv, s6073c1f0, ABISELECT(8,4), 0, 8, hide_sll(1LL<<7), "S6073C1");
    test_class_info(&lv, &cd_S6073C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6073C1(Test_S6073C1, "S6073C1", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S6073C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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_S6073C1 = {  "S6073C1", // class name
  bases_S6073C1, 1,
  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  S19786C1  : virtual S22028C68_nt {
  ::S22028C68_nt s19786c1f0;
  ~S19786C1(); // tgen
  S19786C1(); // tgen
};
//SIG(1 S19786C1) C1{ VBC2{ m Fp} FC2}


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

static void Test_S19786C1()
{
  extern Class_Descriptor cd_S19786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19786C1, buf);
    S19786C1 *dp, &lv = *(dp=new (buf) S19786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19786C1)");
    check_base_class_offset(lv, (S22028C68_nt*), ABISELECT(16,8), "S19786C1");
    check_field_offset(lv, s19786c1f0, ABISELECT(8,4), "S19786C1.s19786c1f0");
    test_class_info(&lv, &cd_S19786C1);
    dp->~S19786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19786C1(Test_S19786C1, "S19786C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19786C1C1Ev();
extern void _ZN8S19786C1D1Ev();
Name_Map name_map_S19786C1[] = {
  NSPAIR(_ZN8S19786C1C1Ev),
  NSPAIR(_ZN8S19786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S22028C68_nt;
extern VTBL_ENTRY _ZTI12S22028C68_nt[];
static Base_Class bases_S19786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S22028C68_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19786C1[];
static  VTBL_ENTRY vtc_S19786C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19786C1[0]),
};
extern VTBL_ENTRY _ZTV8S19786C1[];
static  VTT_ENTRY vtt_S19786C1[] = {
  {&(_ZTV8S19786C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19786C1[];
extern  VTBL_ENTRY _ZTV8S19786C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19786C1[];
Class_Descriptor cd_S19786C1 = {  "S19786C1", // class name
  bases_S19786C1, 1,
  &(vtc_S19786C1[0]), // expected_vtbl_contents
  &(vtt_S19786C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19786C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19786C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19786C1),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  S12171C1  {
  ::S22028C68_nt s12171c1f0;
  ::S22028C68_nt s12171c1f1;
};
//SIG(1 S12171C1) C1{ FC2{ m Fp} FC2}



static void Test_S12171C1()
{
  {
    init_simple_test("S12171C1");
    S12171C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12171C1)");
    check_field_offset(lv, s12171c1f0, 0, "S12171C1.s12171c1f0");
    check_field_offset(lv, s12171c1f1, ABISELECT(8,4), "S12171C1.s12171c1f1");
  }
}
static Arrange_To_Call_Me vS12171C1(Test_S12171C1, "S12171C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14150C1  {
  void *s14150c1f0;
  ::S22028C68_nt s14150c1f1;
};
//SIG(1 S14150C1) C1{ Fp FC2{ m Fp}}



static void Test_S14150C1()
{
  {
    init_simple_test("S14150C1");
    S14150C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14150C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14150C1)");
    check_field_offset(lv, s14150c1f0, 0, "S14150C1.s14150c1f0");
    check_field_offset(lv, s14150c1f1, ABISELECT(8,4), "S14150C1.s14150c1f1");
  }
}
static Arrange_To_Call_Me vS14150C1(Test_S14150C1, "S14150C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12180C1  {
  ::S22028C68_nt s12180c1f0;
};
//SIG(1 S12180C1) C1{ FC2{ m Fp}}



static void Test_S12180C1()
{
  {
    init_simple_test("S12180C1");
    S12180C1 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S12180C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12180C1)");
    check_field_offset(lv, s12180c1f0, 0, "S12180C1.s12180c1f0");
  }
}
static Arrange_To_Call_Me vS12180C1(Test_S12180C1, "S12180C1", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

