public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/3676: GCC 3.1 experimental, Internal compiler error
@ 2001-07-13  5:56 us
  0 siblings, 0 replies; only message in thread
From: us @ 2001-07-13  5:56 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3676
>Category:       c++
>Synopsis:       Internal compiler error
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jul 13 05:56:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Uwe Seimet
>Release:        3.1 20010713 (experimental)
>Organization:
Object Oriented Concepts GmbH
>Environment:
System: Linux duplo 2.4.6 #1 SMP Wed Jul 4 13:42:19 MEST 2001 i686 unknown
Architecture: i686

	
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /home/us/egcs/gcc/configure --prefix=/opt/egcs --enable-threads --enable-shared --enable-languages=c++
>Description:
	Compiling the file with the preprocessed output from the end of
this e-mail results in an internal compiler error:
GenCPPSkelH.cpp: In member function `void 
   IdlCPPGenerator::genCPlusPlusSkelHOperation(const 
   CORBA::OperationDescription*, bool, IdlPrettyPrint&)':
GenCPPSkelH.cpp:499: Internal compiler error in genrtl_compound_stmt, at 
   c-semantics.c:686
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.

>How-To-Repeat:
        Please compile the preprocessed output at the end of this e-mail with
the following command:
c++ -Wno-deprecated -pipe -fPIC -Wall -fpermissive test.cpp
>Fix:
	None



This is the offending preprocessed output:




# 11 "GenCPPSkelH.cpp"
# 1 "../../include/OB/CORBA.h" 1
# 14 "../../include/OB/CORBA.h"
# 1 "../../include/OB/CORBAServer.h" 1
# 14 "../../include/OB/CORBAServer.h"
# 1 "../../include/OB/CORBAClient.h" 1
# 14 "../../include/OB/CORBAClient.h"
# 1 "../../include/OB/NativeTypes.h" 1
# 33 "../../include/OB/NativeTypes.h"
namespace CORBA
{

class ValueFactoryBase;

}

namespace OBNative_CORBA
{

typedef CORBA::ValueFactoryBase* ValueFactory;

}

namespace PortableServer
{

class ServantBase;

}


namespace OBNative_PortableServer
{

typedef PortableServer::ServantBase* Servant;

class ServantLocator
{
public:
    typedef void* Cookie;
};

}

namespace OB
{

class Properties;

class EventHandlerBase;

}

namespace OBNative_OB
{

typedef OB::Properties* PropertySet;

typedef OB::EventHandlerBase* EventHandler;

}
# 15 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/TypeCode.h" 1
# 14 "../../include/OB/TypeCode.h"
# 1 "../../include/OB/Any.h" 1
# 14 "../../include/OB/Any.h"
# 1 "../../include/OB/Principal_fwd.h" 1
# 14 "../../include/OB/Principal_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 14 "../../include/OB/Template.h"
# 1 "../../include/OB/Basic.h" 1
# 22 "../../include/OB/Basic.h"
# 1 "../../include/OB/Config.h" 1
# 23 "../../include/OB/Basic.h" 2




# 1 "../../../jtc/include/JTC/JTC.h" 1
# 14 "../../../jtc/include/JTC/JTC.h"
# 1 "../../../jtc/include/JTC/Thread.h" 1
# 14 "../../../jtc/include/JTC/Thread.h"
# 1 "../../../jtc/include/JTC/Types.h" 1
# 17 "../../../jtc/include/JTC/Types.h"
# 1 "../../../jtc/include/JTC/Config.h" 1
# 18 "../../../jtc/include/JTC/Types.h" 2
# 58 "../../../jtc/include/JTC/Types.h"
# 1 "/opt/egcs/include/g++-v3/iostream" 1 3
# 31 "/opt/egcs/include/g++-v3/iostream" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_iostream.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_iostream.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 34 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/os_defines.h" 1 3
# 37 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/os_defines.h" 3
# 1 "/usr/include/features.h" 1 3
# 283 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 284 "/usr/include/features.h" 2 3
# 311 "/usr/include/features.h" 3
# 1 "/usr/include/gnu/stubs.h" 1 3
# 312 "/usr/include/features.h" 2 3
# 38 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/os_defines.h" 2 3
# 35 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 2 3
# 40 "/opt/egcs/include/g++-v3/bits/std_iostream.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_ostream.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_ostream.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/std_ios.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_ios.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stringfwd.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/stringfwd.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/stringfwd.h" 2 3

namespace std
{
  template<class _CharT>
    struct char_traits;

  template<> class char_traits<char>;

  template<> class char_traits<wchar_t>;


  template<typename _Alloc>
    class allocator;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_string;

  typedef basic_string<char> string;

  typedef basic_string<wchar_t> wstring;

}
# 41 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/fpos.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/fpos.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++io.h" 1 3
# 35 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++io.h" 3
# 1 "/opt/egcs/include/g++-v3/cstdio" 1 3
# 31 "/opt/egcs/include/g++-v3/cstdio" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 1 3
# 37 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 147 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 3
typedef int ptrdiff_t;
# 199 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 3
typedef unsigned int size_t;
# 39 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 2 3

namespace std
{
  using ::ptrdiff_t;
  using ::size_t;
}
# 39 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 2 3
# 41 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 1 3
# 36 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
# 1 "/usr/include/features.h" 1 3
# 37 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 2 3

extern "C" {



# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 43 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 2 3

# 1 "/usr/include/bits/types.h" 1 3
# 26 "/usr/include/bits/types.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/bits/types.h" 2 3


# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 30 "/usr/include/bits/types.h" 2 3


typedef unsigned char __u_char;
typedef unsigned short __u_short;
typedef unsigned int __u_int;
typedef unsigned long __u_long;

__extension__ typedef unsigned long long int __u_quad_t;
__extension__ typedef long long int __quad_t;
# 49 "/usr/include/bits/types.h" 3
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;

__extension__ typedef signed long long int __int64_t;
__extension__ typedef unsigned long long int __uint64_t;

typedef __quad_t *__qaddr_t;

typedef __u_quad_t __dev_t;
typedef __u_int __uid_t;
typedef __u_int __gid_t;
typedef __u_long __ino_t;
typedef __u_int __mode_t;
typedef __u_int __nlink_t;
typedef long int __off_t;
typedef __quad_t __loff_t;
typedef int __pid_t;
typedef int __ssize_t;
typedef __u_long __rlim_t;
typedef __u_quad_t __rlim64_t;
typedef __u_int __id_t;

typedef struct
  {
    int __val[2];
  } __fsid_t;


typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __swblk_t;

typedef long int __clock_t;


typedef int __clockid_t;


typedef int __timer_t;






typedef int __key_t;


typedef unsigned short int __ipc_pid_t;



typedef long int __blksize_t;




typedef long int __blkcnt_t;
typedef __quad_t __blkcnt64_t;


typedef __u_long __fsblkcnt_t;
typedef __u_quad_t __fsblkcnt64_t;


typedef __u_long __fsfilcnt_t;
typedef __u_quad_t __fsfilcnt64_t;


typedef __u_quad_t __ino64_t;


typedef __loff_t __off64_t;


typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;


typedef int __intptr_t;


typedef unsigned int __socklen_t;




# 1 "/usr/include/bits/pthreadtypes.h" 1 3
# 23 "/usr/include/bits/pthreadtypes.h" 3
# 1 "/usr/include/bits/sched.h" 1 3
# 68 "/usr/include/bits/sched.h" 3
struct __sched_param
  {
    int __sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;

};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct __pthread_attr_s
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;



typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;




typedef struct _pthread_rwlock_t
{
  struct _pthread_fastlock __rw_lock;
  int __rw_readers;
  _pthread_descr __rw_writer;
  _pthread_descr __rw_read_waiting;
  _pthread_descr __rw_write_waiting;
  int __rw_kind;
  int __rw_pshared;
} pthread_rwlock_t;



typedef struct
{
  int __lockkind;
  int __pshared;
} pthread_rwlockattr_t;




typedef volatile int pthread_spinlock_t;


typedef struct {
  struct _pthread_fastlock __ba_lock;
  int __ba_required;
  int __ba_present;
  _pthread_descr __ba_waiting;
} pthread_barrier_t;


typedef struct {
  int __pshared;
} pthread_barrierattr_t;





typedef unsigned long int pthread_t;
# 144 "/usr/include/bits/types.h" 2 3
# 45 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 2 3
# 53 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
typedef struct _IO_FILE FILE;
# 63 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
typedef struct _IO_FILE __FILE;
# 73 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
# 1 "/usr/include/libio.h" 1 3
# 30 "/usr/include/libio.h" 3
# 1 "/usr/include/_G_config.h" 1 3
# 9 "/usr/include/_G_config.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 10 "/usr/include/_G_config.h" 2 3




# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 314 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 3
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3
# 24 "/usr/include/_G_config.h" 3
# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3

# 1 "/usr/include/bits/wchar.h" 1 3
# 51 "/usr/include/wchar.h" 2 3
# 67 "/usr/include/wchar.h" 3
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 25 "/usr/include/_G_config.h" 2 3

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 44 "/usr/include/_G_config.h" 3
# 1 "/usr/include/gconv.h" 1 3
# 26 "/usr/include/gconv.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/gconv.h" 2 3

# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3

# 1 "/usr/include/bits/wchar.h" 1 3
# 51 "/usr/include/wchar.h" 2 3
# 29 "/usr/include/gconv.h" 2 3

# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 31 "/usr/include/gconv.h" 2 3





enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};



enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};



struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;



typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
                            __const unsigned char **, __const unsigned char *,
                            unsigned char **, size_t *, int, int);


typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);



typedef int (*__gconv_trans_fct) (struct __gconv_step *,
                                  struct __gconv_step_data *, void *,
                                  __const unsigned char *,
                                  __const unsigned char **,
                                  __const unsigned char *, unsigned char **,
                                  size_t *);


typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
                                          __const unsigned char *,
                                          unsigned char *, unsigned char *);


typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
                                        size_t *);


typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{

  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};



struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  char *__from_name;
  char *__to_name;

  __gconv_fct __fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;



  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;


  int __stateful;

  void *__data;
};



struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;



  int __flags;



  int __invocation_counter;



  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;



  struct __gconv_trans_data *__trans;
};



typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [];
} *__gconv_t;
# 45 "/usr/include/_G_config.h" 2 3
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 31 "/usr/include/libio.h" 2 3
# 51 "/usr/include/libio.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdarg.h" 1 3
# 43 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 52 "/usr/include/libio.h" 2 3
# 158 "/usr/include/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
# 168 "/usr/include/libio.h" 3
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 191 "/usr/include/libio.h" 3
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};




struct _IO_codecvt
{
  void (*__codecvt_destr) (struct _IO_codecvt *);
  enum __codecvt_result (*__codecvt_do_out) (struct _IO_codecvt *,
                                             __mbstate_t *,
                                             const wchar_t *,
                                             const wchar_t *,
                                             const wchar_t **, char *,
                                             char *, char **);
  enum __codecvt_result (*__codecvt_do_unshift) (struct _IO_codecvt *,
                                                 __mbstate_t *, char *,
                                                 char *, char **);
  enum __codecvt_result (*__codecvt_do_in) (struct _IO_codecvt *,
                                            __mbstate_t *,
                                            const char *, const char *,
                                            const char **, wchar_t *,
                                            wchar_t *, wchar_t **);
  int (*__codecvt_do_encoding) (struct _IO_codecvt *);
  int (*__codecvt_do_always_noconv) (struct _IO_codecvt *);
  int (*__codecvt_do_length) (struct _IO_codecvt *, __mbstate_t *,
                              const char *, const char *, size_t);
  int (*__codecvt_do_max_length) (struct _IO_codecvt *);

  _G_iconv_t __cd_in;
  _G_iconv_t __cd_out;
};


struct _IO_wide_data
{
  wchar_t *_IO_read_ptr;
  wchar_t *_IO_read_end;
  wchar_t *_IO_read_base;
  wchar_t *_IO_write_base;
  wchar_t *_IO_write_ptr;
  wchar_t *_IO_write_end;
  wchar_t *_IO_buf_base;
  wchar_t *_IO_buf_end;

  wchar_t *_IO_save_base;
  wchar_t *_IO_backup_base;

  wchar_t *_IO_save_end;

  __mbstate_t _IO_state;
  __mbstate_t _IO_last_state;
  struct _IO_codecvt _codecvt;

  wchar_t _shortbuf[1];

  struct _IO_jump_t *_wide_vtable;
};


struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _blksize;
  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 303 "/usr/include/libio.h" 3
  __off64_t _offset;


  struct _IO_codecvt *_codecvt;
  struct _IO_wide_data *_wide_data;




  int _mode;

  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};





struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 342 "/usr/include/libio.h" 3
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);







typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
                                 size_t __n);







typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);




typedef __io_read_fn cookie_read_function_t;
typedef __io_write_fn cookie_write_function_t;
typedef __io_seek_fn cookie_seek_function_t;
typedef __io_close_fn cookie_close_function_t;


typedef struct
{
  __io_read_fn *read;
  __io_write_fn *write;
  __io_seek_fn *seek;
  __io_close_fn *close;
} _IO_cookie_io_functions_t;
typedef _IO_cookie_io_functions_t cookie_io_functions_t;

struct _IO_cookie_file;


extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
                             void *__cookie, _IO_cookie_io_functions_t __fns);




extern "C" {


extern int __underflow (_IO_FILE *) throw ();
extern int __uflow (_IO_FILE *) throw ();
extern int __overflow (_IO_FILE *, int) throw ();
extern wint_t __wunderflow (_IO_FILE *) throw ();
extern wint_t __wuflow (_IO_FILE *) throw ();
extern wint_t __woverflow (_IO_FILE *, wint_t) throw ();
# 424 "/usr/include/libio.h" 3
extern int _IO_getc (_IO_FILE *__fp) throw ();
extern int _IO_putc (int __c, _IO_FILE *__fp) throw ();
extern int _IO_feof (_IO_FILE *__fp) throw ();
extern int _IO_ferror (_IO_FILE *__fp) throw ();

extern int _IO_peekc_locked (_IO_FILE *__fp) throw ();





extern void _IO_flockfile (_IO_FILE *) throw ();
extern void _IO_funlockfile (_IO_FILE *) throw ();
extern int _IO_ftrylockfile (_IO_FILE *) throw ();
# 454 "/usr/include/libio.h" 3
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
                        __gnuc_va_list, int *__restrict) throw ();
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
                         __gnuc_va_list) throw ();
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) throw ();
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) throw ();

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) throw ();
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) throw ();

extern void _IO_free_backup_area (_IO_FILE *) throw ();


extern wint_t _IO_getwc (_IO_FILE *__fp) throw ();
extern wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp) throw ();
extern int _IO_fwide (_IO_FILE *__fp, int __mode) throw ();
# 501 "/usr/include/libio.h" 3
extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
                         __gnuc_va_list, int *__restrict) throw ();
extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
                          __gnuc_va_list) throw ();
extern __ssize_t _IO_wpadn (_IO_FILE *, wint_t, __ssize_t) throw ();
extern void _IO_free_wbackup_area (_IO_FILE *) throw ();



}
# 74 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 2 3




typedef __gnuc_va_list __not_va_list__;
# 88 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
typedef _G_fpos_t fpos_t;




typedef _G_fpos64_t fpos64_t;
# 137 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 138 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 2 3



extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;






extern int remove (__const char *__filename) throw ();

extern int rename (__const char *__old, __const char *__new) throw ();




extern FILE *tmpfile (void) throw ();
# 166 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
extern FILE *tmpfile64 (void) throw ();


extern char *tmpnam (char *__s) throw ();




extern char *tmpnam_r (char *__s) throw ();
# 186 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
extern char *tempnam (__const char *__dir, __const char *__pfx)
     throw () __attribute__ ((__malloc__));




extern int fclose (FILE *__stream) throw ();

extern int fflush (FILE *__stream) throw ();



extern int fflush_unlocked (FILE *__stream) throw ();




extern int fcloseall (void) throw ();





extern FILE *fopen (__const char *__restrict __filename,
                    __const char *__restrict __modes) throw ();

extern FILE *freopen (__const char *__restrict __filename,
                      __const char *__restrict __modes,
                      FILE *__restrict __stream) throw ();
# 230 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
extern FILE *fopen64 (__const char *__restrict __filename,
                      __const char *__restrict __modes) throw ();
extern FILE *freopen64 (__const char *__restrict __filename,
                        __const char *__restrict __modes,
                        FILE *__restrict __stream) throw ();




extern FILE *fdopen (int __fd, __const char *__modes) throw ();





extern FILE *fopencookie (void *__restrict __magic_cookie,
                          __const char *__restrict __modes,
                          _IO_cookie_io_functions_t __io_funcs) throw ();


extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) throw ();




extern FILE *open_memstream (char **__restrict __bufloc,
                             size_t *__restrict __sizeloc) throw ();





extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
                    int __modes, size_t __n) throw ();




extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
                       size_t __size) throw ();


extern void setlinebuf (FILE *__stream) throw ();




extern int fprintf (FILE *__restrict __stream,
                    __const char *__restrict __format, ...) throw ();

extern int printf (__const char *__restrict __format, ...) throw ();

extern int sprintf (char *__restrict __s,
                    __const char *__restrict __format, ...) throw ();


extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) throw ();

extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg)
     throw ();

extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) throw ();



extern int snprintf (char *__restrict __s, size_t __maxlen,
                     __const char *__restrict __format, ...)
     throw () __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
                      __const char *__restrict __format, __gnuc_va_list __arg)
     throw () __attribute__ ((__format__ (__printf__, 3, 0)));





extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
                      __gnuc_va_list __arg)
     throw () __attribute__ ((__format__ (__printf__, 2, 0)));
extern int __asprintf (char **__restrict __ptr,
                       __const char *__restrict __fmt, ...)
     throw () __attribute__ ((__format__ (__printf__, 2, 3)));
extern int asprintf (char **__restrict __ptr,
                     __const char *__restrict __fmt, ...)
     throw () __attribute__ ((__format__ (__printf__, 2, 3)));


extern int vdprintf (int __fd, __const char *__restrict __fmt,
                     __gnuc_va_list __arg)
     throw () __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
     throw () __attribute__ ((__format__ (__printf__, 2, 3)));




extern int fscanf (FILE *__restrict __stream,
                   __const char *__restrict __format, ...) throw ();

extern int scanf (__const char *__restrict __format, ...) throw ();

extern int sscanf (__const char *__restrict __s,
                   __const char *__restrict __format, ...) throw ();



extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
                    __gnuc_va_list __arg)
     throw () __attribute__ ((__format__ (__scanf__, 2, 0)));


extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
     throw () __attribute__ ((__format__ (__scanf__, 1, 0)));


extern int vsscanf (__const char *__restrict __s,
                    __const char *__restrict __format, __gnuc_va_list __arg)
     throw () __attribute__ ((__format__ (__scanf__, 2, 0)));




extern int fgetc (FILE *__stream) throw ();
extern int getc (FILE *__stream) throw ();


extern int getchar (void) throw ();







extern int getc_unlocked (FILE *__stream) throw ();
extern int getchar_unlocked (void) throw ();




extern int fgetc_unlocked (FILE *__stream) throw ();




extern int fputc (int __c, FILE *__stream) throw ();
extern int putc (int __c, FILE *__stream) throw ();


extern int putchar (int __c) throw ();







extern int fputc_unlocked (int __c, FILE *__stream) throw ();




extern int putc_unlocked (int __c, FILE *__stream) throw ();
extern int putchar_unlocked (int __c) throw ();





extern int getw (FILE *__stream) throw ();


extern int putw (int __w, FILE *__stream) throw ();




extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
     throw ();



extern char *fgets_unlocked (char *__restrict __s, int __n,
                             FILE *__restrict __stream) throw ();




extern char *gets (char *__s) throw ();
# 434 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
extern __ssize_t __getdelim (char **__restrict __lineptr,
                               size_t *__restrict __n, int __delimiter,
                               FILE *__restrict __stream) throw ();
extern __ssize_t getdelim (char **__restrict __lineptr,
                             size_t *__restrict __n, int __delimiter,
                             FILE *__restrict __stream) throw ();


extern __ssize_t getline (char **__restrict __lineptr,
                            size_t *__restrict __n,
                            FILE *__restrict __stream) throw ();




extern int fputs (__const char *__restrict __s, FILE *__restrict __stream)
     throw ();



extern int fputs_unlocked (__const char *__restrict __s,
                           FILE *__restrict __stream) throw ();



extern int puts (__const char *__s) throw ();



extern int ungetc (int __c, FILE *__stream) throw ();



extern size_t fread (void *__restrict __ptr, size_t __size,
                     size_t __n, FILE *__restrict __stream) throw ();

extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
                      size_t __n, FILE *__restrict __s) throw ();



extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
                              size_t __n, FILE *__restrict __stream) throw ();
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
                               size_t __n, FILE *__restrict __stream) throw ();




extern int fseek (FILE *__stream, long int __off, int __whence) throw ();

extern long int ftell (FILE *__stream) throw ();

extern void rewind (FILE *__stream) throw ();
# 497 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
extern int fseeko (FILE *__stream, __off_t __off, int __whence) throw ();

extern __off_t ftello (FILE *__stream) throw ();



extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos)
     throw ();

extern int fsetpos (FILE *__stream, __const fpos_t *__pos) throw ();
# 531 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) throw ();
extern __off64_t ftello64 (FILE *__stream) throw ();
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos)
     throw ();
extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos) throw ();



extern void clearerr (FILE *__stream) throw ();

extern int feof (FILE *__stream) throw ();

extern int ferror (FILE *__stream) throw ();



extern void clearerr_unlocked (FILE *__stream) throw ();
extern int feof_unlocked (FILE *__stream) throw ();
extern int ferror_unlocked (FILE *__stream) throw ();




extern void perror (__const char *__s) throw ();




extern int sys_nerr;
extern __const char *__const sys_errlist[];


extern int _sys_nerr;
extern __const char *__const _sys_errlist[];





extern int fileno (FILE *__stream) throw ();




extern int fileno_unlocked (FILE *__stream) throw ();






extern FILE *popen (__const char *__command, __const char *__modes) throw ();


extern int pclose (FILE *__stream) throw ();





extern char *ctermid (char *__s) throw ();





extern char *cuserid (char *__s) throw ();




struct obstack;


extern int obstack_printf (struct obstack *__restrict __obstack,
                           __const char *__restrict __format, ...) throw ();
extern int obstack_vprintf (struct obstack *__restrict __obstack,
                            __const char *__restrict __format,
                            __gnuc_va_list __args) throw ();







extern void flockfile (FILE *__stream) throw ();



extern int ftrylockfile (FILE *__stream) throw ();


extern void funlockfile (FILE *__stream) throw ();
# 641 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 3
}
# 42 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 2 3
# 86 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 3
namespace std
{
  using ::FILE;
  using ::fpos_t;

  using ::clearerr;
  using ::fclose;
  using ::feof;
  using ::ferror;
  using ::fflush;
  using ::fgetc;
  using ::fgetpos;
  using ::fgets;
  using ::fopen;
  using ::fprintf;
  using ::fputc;
  using ::fputs;
  using ::fread;
  using ::freopen;
  using ::fscanf;
  using ::fseek;
  using ::fsetpos;
  using ::ftell;
  using ::fwrite;
  using ::getc;
  using ::getchar;
  using ::gets;
  using ::perror;
  using ::printf;
  using ::putc;
  using ::putchar;
  using ::puts;
  using ::remove;
  using ::rename;
  using ::rewind;
  using ::scanf;
  using ::setbuf;
  using ::setvbuf;
  using ::sprintf;
  using ::sscanf;
  using ::tmpfile;
  using ::tmpnam;
  using ::ungetc;
  using ::vfprintf;
  using ::vprintf;
  using ::vsprintf;
}
# 142 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 3
namespace __gnu_cxx
{
  using ::snprintf;
  using ::vfscanf;
  using ::vscanf;
  using ::vsnprintf;
  using ::vsscanf;
}

namespace std
{
  using __gnu_cxx::snprintf;
  using __gnu_cxx::vfscanf;
  using __gnu_cxx::vscanf;
  using __gnu_cxx::vsnprintf;
  using __gnu_cxx::vsscanf;
}
# 32 "/opt/egcs/include/g++-v3/cstdio" 2 3
# 36 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++io.h" 2 3
# 1 "/opt/egcs/include/g++-v3/cstddef" 1 3
# 37 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++io.h" 2 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr.h" 1 3
# 98 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr-default.h" 1 3
# 37 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr-default.h" 3
# 1 "/usr/include/pthread.h" 1 3
# 18 "/usr/include/pthread.h" 3
# 1 "/usr/include/features.h" 1 3
# 19 "/usr/include/pthread.h" 2 3

# 1 "/usr/include/sched.h" 1 3
# 23 "/usr/include/sched.h" 3
# 1 "/usr/include/features.h" 1 3
# 24 "/usr/include/sched.h" 2 3


# 1 "/usr/include/bits/types.h" 1 3
# 27 "/usr/include/sched.h" 2 3


# 1 "/usr/include/time.h" 1 3
# 106 "/usr/include/time.h" 3
struct timespec
  {
    long int tv_sec;
    long int tv_nsec;
  };
# 30 "/usr/include/sched.h" 2 3


# 1 "/usr/include/bits/sched.h" 1 3
# 47 "/usr/include/bits/sched.h" 3
struct sched_param
  {
    int __sched_priority;
  };

extern "C" {



extern int clone (int (*__fn) (void *__arg), void *__child_stack,
                  int __flags, void *__arg) throw ();


}
# 33 "/usr/include/sched.h" 2 3




extern "C" {


extern int sched_setparam (__pid_t __pid, __const struct sched_param *__param)
     throw ();


extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw ();


extern int sched_setscheduler (__pid_t __pid, int __policy,
                               __const struct sched_param *__param) throw ();


extern int sched_getscheduler (__pid_t __pid) throw ();


extern int sched_yield (void) throw ();


extern int sched_get_priority_max (int __algorithm) throw ();


extern int sched_get_priority_min (int __algorithm) throw ();


extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw ();

}
# 21 "/usr/include/pthread.h" 2 3
# 1 "/usr/include/time.h" 1 3
# 28 "/usr/include/time.h" 3
# 1 "/usr/include/features.h" 1 3
# 29 "/usr/include/time.h" 2 3

extern "C" {







# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 39 "/usr/include/time.h" 2 3



# 1 "/usr/include/bits/time.h" 1 3
# 43 "/usr/include/time.h" 2 3
# 56 "/usr/include/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 57 "/usr/include/time.h" 2 3


typedef __clock_t clock_t;







# 1 "/usr/include/bits/types.h" 1 3
# 68 "/usr/include/time.h" 2 3


typedef __time_t time_t;
# 79 "/usr/include/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 80 "/usr/include/time.h" 2 3


typedef __clockid_t clockid_t;
# 91 "/usr/include/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 92 "/usr/include/time.h" 2 3


typedef __timer_t timer_t;
# 118 "/usr/include/time.h" 3
struct tm
{
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;


  long int tm_gmtoff;
  __const char *tm_zone;




};




struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };


struct sigevent;





typedef __pid_t pid_t;







extern clock_t clock (void) throw ();


extern time_t time (time_t *__timer) throw ();


extern double difftime (time_t __time1, time_t __time0)
     throw () __attribute__ ((__const__));


extern time_t mktime (struct tm *__tp) throw ();





extern size_t strftime (char *__restrict __s, size_t __maxsize,
                        __const char *__restrict __format,
                        __const struct tm *__restrict __tp) throw ();




extern char *strptime (__const char *__restrict __s,
                       __const char *__restrict __fmt, struct tm *__tp)
     throw ();





extern struct tm *gmtime (__const time_t *__timer) throw ();



extern struct tm *localtime (__const time_t *__timer) throw ();




extern struct tm *gmtime_r (__const time_t *__restrict __timer,
                            struct tm *__restrict __tp) throw ();



extern struct tm *localtime_r (__const time_t *__restrict __timer,
                               struct tm *__restrict __tp) throw ();




extern char *asctime (__const struct tm *__tp) throw ();


extern char *ctime (__const time_t *__timer) throw ();






extern char *asctime_r (__const struct tm *__restrict __tp,
                        char *__restrict __buf) throw ();


extern char *ctime_r (__const time_t *__restrict __timer,
                      char *__restrict __buf) throw ();




extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;




extern char *tzname[2];



extern void tzset (void) throw ();



extern int daylight;
extern long int timezone;





extern int stime (__const time_t *__when) throw ();
# 271 "/usr/include/time.h" 3
extern time_t timegm (struct tm *__tp) throw ();


extern time_t timelocal (struct tm *__tp) throw ();


extern int dysize (int __year) throw () __attribute__ ((__const__));





extern int nanosleep (__const struct timespec *__requested_time,
                      struct timespec *__remaining) throw ();



extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();


extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();


extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
     throw ();



extern int clock_nanosleep (clockid_t __clock_id, int __flags,
                            __const struct timespec *__req,
                            struct timespec *__rem) throw ();


extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();




extern int timer_create (clockid_t __clock_id,
                         struct sigevent *__restrict __evp,
                         timer_t *__restrict __timerid) throw ();


extern int timer_delete (timer_t __timerid) throw ();


extern int timer_settime (timer_t __timerid, int __flags,
                          __const struct itimerspec *__restrict __value,
                          struct itimerspec *__restrict __ovalue) throw ();


extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     throw ();


extern int timer_getoverrun (timer_t __timerid) throw ();
# 342 "/usr/include/time.h" 3
extern int getdate_err;





extern struct tm *getdate (__const char *__string) throw ();
# 357 "/usr/include/time.h" 3
extern int getdate_r (__const char *__restrict __string,
                      struct tm *__restrict __resbufp) throw ();



}
# 22 "/usr/include/pthread.h" 2 3


# 1 "/usr/include/signal.h" 1 3
# 29 "/usr/include/signal.h" 3
# 1 "/usr/include/features.h" 1 3
# 30 "/usr/include/signal.h" 2 3

extern "C" {

# 1 "/usr/include/bits/sigset.h" 1 3
# 23 "/usr/include/bits/sigset.h" 3
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 34 "/usr/include/signal.h" 2 3
# 48 "/usr/include/signal.h" 3
typedef __sigset_t sigset_t;
# 371 "/usr/include/signal.h" 3
}
# 25 "/usr/include/pthread.h" 2 3
# 1 "/usr/include/bits/pthreadtypes.h" 1 3
# 26 "/usr/include/pthread.h" 2 3
# 1 "/usr/include/bits/initspin.h" 1 3
# 27 "/usr/include/pthread.h" 2 3


extern "C" {
# 59 "/usr/include/pthread.h" 3
enum
{
  PTHREAD_CREATE_JOINABLE,

  PTHREAD_CREATE_DETACHED

};

enum
{
  PTHREAD_INHERIT_SCHED,

  PTHREAD_EXPLICIT_SCHED

};

enum
{
  PTHREAD_SCOPE_SYSTEM,

  PTHREAD_SCOPE_PROCESS

};

enum
{
  PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_ADAPTIVE_NP

  ,
  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL



  , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_ADAPTIVE_NP

};

enum
{
  PTHREAD_PROCESS_PRIVATE,

  PTHREAD_PROCESS_SHARED

};


enum
{
  PTHREAD_RWLOCK_PREFER_READER_NP,
  PTHREAD_RWLOCK_PREFER_WRITER_NP,
  PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
  PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_WRITER_NP
};
# 131 "/usr/include/pthread.h" 3
struct _pthread_cleanup_buffer
{
  void (*__routine) (void *);
  void *__arg;
  int __canceltype;
  struct _pthread_cleanup_buffer *__prev;
};



enum
{
  PTHREAD_CANCEL_ENABLE,

  PTHREAD_CANCEL_DISABLE

};
enum
{
  PTHREAD_CANCEL_DEFERRED,

  PTHREAD_CANCEL_ASYNCHRONOUS

};
# 163 "/usr/include/pthread.h" 3
extern int pthread_create (pthread_t *__restrict __thread,
                           __const pthread_attr_t *__restrict __attr,
                           void *(*__start_routine) (void *),
                           void *__restrict __arg) throw ();


extern pthread_t pthread_self (void) throw ();


extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) throw ();


extern void pthread_exit (void *__retval)
     throw () __attribute__ ((__noreturn__));




extern int pthread_join (pthread_t __th, void **__thread_return) throw ();





extern int pthread_detach (pthread_t __th) throw ();







extern int pthread_attr_init (pthread_attr_t *__attr) throw ();


extern int pthread_attr_destroy (pthread_attr_t *__attr) throw ();


extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
                                        int __detachstate) throw ();


extern int pthread_attr_getdetachstate (__const pthread_attr_t *__attr,
                                        int *__detachstate) throw ();


extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
                                       __const struct sched_param *__restrict
                                       __param) throw ();


extern int pthread_attr_getschedparam (__const pthread_attr_t *__restrict
                                       __attr,
                                       struct sched_param *__restrict __param)
     throw ();


extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
     throw ();


extern int pthread_attr_getschedpolicy (__const pthread_attr_t *__restrict
                                        __attr, int *__restrict __policy)
     throw ();


extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
                                         int __inherit) throw ();


extern int pthread_attr_getinheritsched (__const pthread_attr_t *__restrict
                                         __attr, int *__restrict __inherit)
     throw ();


extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
     throw ();


extern int pthread_attr_getscope (__const pthread_attr_t *__restrict __attr,
                                  int *__restrict __scope) throw ();



extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
                                      size_t __guardsize) throw ();


extern int pthread_attr_getguardsize (__const pthread_attr_t *__restrict
                                      __attr, size_t *__restrict __guardsize)
     throw ();






extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
                                      void *__stackaddr) throw ();


extern int pthread_attr_getstackaddr (__const pthread_attr_t *__restrict
                                      __attr, void **__restrict __stackaddr)
     throw ();





extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
                                  size_t __stacksize) throw ();


extern int pthread_attr_getstack (__const pthread_attr_t *__restrict __attr,
                                  void **__restrict __stackaddr,
                                  size_t *__restrict __stacksize) throw ();





extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
                                      size_t __stacksize) throw ();


extern int pthread_attr_getstacksize (__const pthread_attr_t *__restrict
                                      __attr, size_t *__restrict __stacksize)
     throw ();





extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
                                  __const struct sched_param *__param)
     throw ();


extern int pthread_getschedparam (pthread_t __target_thread,
                                  int *__restrict __policy,
                                  struct sched_param *__restrict __param)
     throw ();



extern int pthread_getconcurrency (void) throw ();


extern int pthread_setconcurrency (int __level) throw ();







extern int pthread_yield (void) throw ();






extern int pthread_mutex_init (pthread_mutex_t *__restrict __mutex,
                               __const pthread_mutexattr_t *__restrict
                               __mutex_attr) throw ();


extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) throw ();


extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) throw ();


extern int pthread_mutex_lock (pthread_mutex_t *__mutex) throw ();



extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
                                    __const struct timespec *__restrict
                                    __abstime) throw ();



extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) throw ();






extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) throw ();


extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) throw ();


extern int pthread_mutexattr_getpshared (__const pthread_mutexattr_t *
                                         __restrict __attr,
                                         int *__restrict __pshared) throw ();


extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
                                         int __pshared) throw ();





extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
     throw ();


extern int pthread_mutexattr_gettype (__const pthread_mutexattr_t *__restrict
                                      __attr, int *__restrict __kind) throw ();







extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
                              __const pthread_condattr_t *__restrict
                              __cond_attr) throw ();


extern int pthread_cond_destroy (pthread_cond_t *__cond) throw ();


extern int pthread_cond_signal (pthread_cond_t *__cond) throw ();


extern int pthread_cond_broadcast (pthread_cond_t *__cond) throw ();



extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
                              pthread_mutex_t *__restrict __mutex) throw ();





extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
                                   pthread_mutex_t *__restrict __mutex,
                                   __const struct timespec *__restrict
                                   __abstime) throw ();




extern int pthread_condattr_init (pthread_condattr_t *__attr) throw ();


extern int pthread_condattr_destroy (pthread_condattr_t *__attr) throw ();


extern int pthread_condattr_getpshared (__const pthread_condattr_t *
                                        __restrict __attr,
                                        int *__restrict __pshared) throw ();


extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
                                        int __pshared) throw ();







extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
                                __const pthread_rwlockattr_t *__restrict
                                __attr) throw ();


extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) throw ();


extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) throw ();


extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) throw ();



extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
                                       __const struct timespec *__restrict
                                       __abstime) throw ();



extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) throw ();


extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) throw ();



extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
                                       __const struct timespec *__restrict
                                       __abstime) throw ();



extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) throw ();





extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) throw ();


extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) throw ();


extern int pthread_rwlockattr_getpshared (__const pthread_rwlockattr_t *
                                          __restrict __attr,
                                          int *__restrict __pshared) throw ();


extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
                                          int __pshared) throw ();


extern int pthread_rwlockattr_getkind_np (__const pthread_rwlockattr_t *__attr,
                                          int *__pref) throw ();


extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
                                          int __pref) throw ();
# 504 "/usr/include/pthread.h" 3
extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
     throw ();


extern int pthread_spin_destroy (pthread_spinlock_t *__lock) throw ();


extern int pthread_spin_lock (pthread_spinlock_t *__lock) throw ();


extern int pthread_spin_trylock (pthread_spinlock_t *__lock) throw ();


extern int pthread_spin_unlock (pthread_spinlock_t *__lock) throw ();




extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
                                 __const pthread_barrierattr_t *__restrict
                                 __attr, unsigned int __count) throw ();

extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) throw ();

extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) throw ();

extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) throw ();

extern int pthread_barrierattr_getpshared (__const pthread_barrierattr_t *
                                           __restrict __attr,
                                           int *__restrict __pshared) throw ();

extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
                                           int __pshared) throw ();

extern int pthread_barrier_wait (pthread_barrier_t *__barrier) throw ();
# 551 "/usr/include/pthread.h" 3
extern int pthread_key_create (pthread_key_t *__key,
                               void (*__destr_function) (void *)) throw ();


extern int pthread_key_delete (pthread_key_t __key) throw ();


extern int pthread_setspecific (pthread_key_t __key,
                                __const void *__pointer) throw ();


extern void *pthread_getspecific (pthread_key_t __key) throw ();
# 571 "/usr/include/pthread.h" 3
extern int pthread_once (pthread_once_t *__once_control,
                         void (*__init_routine) (void)) throw ();






extern int pthread_setcancelstate (int __state, int *__oldstate) throw ();



extern int pthread_setcanceltype (int __type, int *__oldtype) throw ();


extern int pthread_cancel (pthread_t __thread) throw ();




extern void pthread_testcancel (void) throw ();
# 605 "/usr/include/pthread.h" 3
extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *__buffer,
                                   void (*__routine) (void *),
                                   void *__arg) throw ();







extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *__buffer,
                                  int __execute) throw ();
# 626 "/usr/include/pthread.h" 3
extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *__buffer,
                                         void (*__routine) (void *),
                                         void *__arg) throw ();
# 637 "/usr/include/pthread.h" 3
extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *__buffer,
                                          int __execute) throw ();





extern int pthread_getcpuclockid (pthread_t __thread_id,
                                  clockid_t *__clock_id) throw ();




# 1 "/usr/include/bits/sigthread.h" 1 3
# 31 "/usr/include/bits/sigthread.h" 3
extern int pthread_sigmask (int __how,
                            __const __sigset_t *__restrict __newmask,
                            __sigset_t *__restrict __oldmask)throw ();


extern int pthread_kill (pthread_t __thread, int __signo) throw ();
# 651 "/usr/include/pthread.h" 2 3
# 666 "/usr/include/pthread.h" 3
extern int pthread_atfork (void (*__prepare) (void),
                           void (*__parent) (void),
                           void (*__child) (void)) throw ();




extern void pthread_kill_other_threads_np (void) throw ();

}
# 38 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr-default.h" 2 3

typedef pthread_key_t __gthread_key_t;
typedef pthread_once_t __gthread_once_t;
typedef pthread_mutex_t __gthread_mutex_t;






#pragma weak pthread_once
#pragma weak pthread_key_create
#pragma weak pthread_key_delete
#pragma weak pthread_getspecific
#pragma weak pthread_setspecific
#pragma weak pthread_create

#pragma weak pthread_mutex_lock
#pragma weak pthread_mutex_trylock
#pragma weak pthread_mutex_unlock
# 80 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr-default.h" 3
static void *__gthread_active_ptr = (void *) &pthread_create;

static inline int
__gthread_active_p (void)
{
  return __gthread_active_ptr != 0;
}
# 429 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr-default.h" 3
static inline int
__gthread_once (__gthread_once_t *once, void (*func) (void))
{
  if (__gthread_active_p ())
    return pthread_once (once, func);
  else
    return -1;
}

static inline int
__gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
{
  return pthread_key_create (key, dtor);
}

static inline int
__gthread_key_dtor (__gthread_key_t key, void *ptr)
{

  if (ptr)
    return pthread_setspecific (key, 0);
  else
    return 0;
}

static inline int
__gthread_key_delete (__gthread_key_t key)
{
  return pthread_key_delete (key);
}

static inline void *
__gthread_getspecific (__gthread_key_t key)
{
  return pthread_getspecific (key);
}

static inline int
__gthread_setspecific (__gthread_key_t key, const void *ptr)
{
  return pthread_setspecific (key, ptr);
}

static inline int
__gthread_mutex_lock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_lock (mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_trylock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_trylock (mutex);
  else
    return 0;
}

static inline int
__gthread_mutex_unlock (__gthread_mutex_t *mutex)
{
  if (__gthread_active_p ())
    return pthread_mutex_unlock (mutex);
  else
    return 0;
}
# 99 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr.h" 2 3
# 38 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++io.h" 2 3

namespace std
{

  typedef long streamoff;
  typedef ptrdiff_t streamsize;

  typedef ptrdiff_t wstreamsize;

  typedef fpos_t __c_streampos;

  typedef __gthread_mutex_t __c_lock;



  typedef FILE __c_file_type;


  struct __ios_flags
  {
    typedef short __int_type;

    static const __int_type _S_boolalpha = 0x0001;
    static const __int_type _S_dec = 0x0002;
    static const __int_type _S_fixed = 0x0004;
    static const __int_type _S_hex = 0x0008;
    static const __int_type _S_internal = 0x0010;
    static const __int_type _S_left = 0x0020;
    static const __int_type _S_oct = 0x0040;
    static const __int_type _S_right = 0x0080;
    static const __int_type _S_scientific = 0x0100;
    static const __int_type _S_showbase = 0x0200;
    static const __int_type _S_showpoint = 0x0400;
    static const __int_type _S_showpos = 0x0800;
    static const __int_type _S_skipws = 0x1000;
    static const __int_type _S_unitbuf = 0x2000;
    static const __int_type _S_uppercase = 0x4000;
    static const __int_type _S_adjustfield = 0x0020 | 0x0080 | 0x0010;
    static const __int_type _S_basefield = 0x0002 | 0x0040 | 0x0008;
    static const __int_type _S_floatfield = 0x0100 | 0x0004;


    static const __int_type _S_badbit = 0x01;
    static const __int_type _S_eofbit = 0x02;
    static const __int_type _S_failbit = 0x04;


    static const __int_type _S_app = 0x01;
    static const __int_type _S_ate = 0x02;
    static const __int_type _S_bin = 0x04;
    static const __int_type _S_in = 0x08;
    static const __int_type _S_out = 0x10;
    static const __int_type _S_trunc = 0x20;
  };
}
# 40 "/opt/egcs/include/g++-v3/bits/fpos.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 1 3
# 37 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 39 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_ctime.h" 1 3
# 37 "/opt/egcs/include/g++-v3/bits/std_ctime.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_ctime.h" 2 3
# 40 "/opt/egcs/include/g++-v3/bits/std_ctime.h" 3
# 1 "/usr/include/time.h" 1 3
# 41 "/opt/egcs/include/g++-v3/bits/std_ctime.h" 2 3
# 53 "/opt/egcs/include/g++-v3/bits/std_ctime.h" 3
namespace std
{
  using ::clock_t;
  using ::time_t;
  using ::tm;

  using ::clock;
  using ::difftime;
  using ::mktime;
  using ::time;
  using ::asctime;
  using ::ctime;
  using ::gmtime;
  using ::localtime;
  using ::strftime;
}
# 40 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 2 3
# 43 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 3
# 1 "/usr/include/wchar.h" 1 3
# 28 "/usr/include/wchar.h" 3
# 1 "/usr/include/features.h" 1 3
# 29 "/usr/include/wchar.h" 2 3
# 37 "/usr/include/wchar.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 1 3
# 38 "/usr/include/wchar.h" 2 3


# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdarg.h" 1 3
# 41 "/usr/include/wchar.h" 2 3







# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3

# 1 "/usr/include/bits/wchar.h" 1 3
# 51 "/usr/include/wchar.h" 2 3
# 85 "/usr/include/wchar.h" 3
typedef __mbstate_t mbstate_t;
# 105 "/usr/include/wchar.h" 3
struct tm;


extern "C" {


extern wchar_t *wcscpy (wchar_t *__restrict __dest,
                        __const wchar_t *__restrict __src) throw ();

extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
                         __const wchar_t *__restrict __src, size_t __n)
     throw ();


extern wchar_t *wcscat (wchar_t *__restrict __dest,
                        __const wchar_t *__restrict __src) throw ();

extern wchar_t *wcsncat (wchar_t *__restrict __dest,
                         __const wchar_t *__restrict __src, size_t __n)
     throw ();


extern int wcscmp (__const wchar_t *__s1, __const wchar_t *__s2)
     throw () __attribute__ ((__pure__));

extern int wcsncmp (__const wchar_t *__s1, __const wchar_t *__s2, size_t __n)
     throw () __attribute__ ((__pure__));



extern int wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2) throw ();


extern int wcsncasecmp (__const wchar_t *__s1, __const wchar_t *__s2,
                        size_t __n) throw ();



# 1 "/usr/include/xlocale.h" 1 3
# 28 "/usr/include/xlocale.h" 3
typedef struct __locale_struct
{

  struct locale_data *__locales[13];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;
} *__locale_t;
# 144 "/usr/include/wchar.h" 2 3

extern int __wcscasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
                           __locale_t __loc) throw ();

extern int __wcsncasecmp_l (__const wchar_t *__s1, __const wchar_t *__s2,
                            size_t __n, __locale_t __loc) throw ();




extern int wcscoll (__const wchar_t *__s1, __const wchar_t *__s2) throw ();



extern size_t wcsxfrm (wchar_t *__restrict __s1,
                       __const wchar_t *__restrict __s2, size_t __n) throw ();







extern int __wcscoll_l (__const wchar_t *__s1, __const wchar_t *__s2,
                        __locale_t __loc) throw ();



extern size_t __wcsxfrm_l (wchar_t *__s1, __const wchar_t *__s2,
                           size_t __n, __locale_t __loc) throw ();


extern wchar_t *wcsdup (__const wchar_t *__s) throw () __attribute__ ((__malloc__));



extern wchar_t *wcschr (__const wchar_t *__wcs, wchar_t __wc)
     throw () __attribute__ ((__pure__));

extern wchar_t *wcsrchr (__const wchar_t *__wcs, wchar_t __wc)
     throw () __attribute__ ((__pure__));




extern wchar_t *wcschrnul (__const wchar_t *__s, wchar_t __wc)
     throw () __attribute__ ((__pure__));




extern size_t wcscspn (__const wchar_t *__wcs, __const wchar_t *__reject)
     throw () __attribute__ ((__pure__));


extern size_t wcsspn (__const wchar_t *__wcs, __const wchar_t *__accept)
     throw () __attribute__ ((__pure__));

extern wchar_t *wcspbrk (__const wchar_t *__wcs, __const wchar_t *__accept)
     throw () __attribute__ ((__pure__));

extern wchar_t *wcsstr (__const wchar_t *__haystack, __const wchar_t *__needle)
     throw () __attribute__ ((__pure__));



extern wchar_t *wcswcs (__const wchar_t *__haystack, __const wchar_t *__needle)
     throw () __attribute__ ((__pure__));



extern wchar_t *wcstok (wchar_t *__restrict __s,
                        __const wchar_t *__restrict __delim,
                        wchar_t **__restrict __ptr) throw ();


extern size_t wcslen (__const wchar_t *__s) throw () __attribute__ ((__pure__));



extern size_t wcsnlen (__const wchar_t *__s, size_t __maxlen)
     throw () __attribute__ ((__pure__));




extern wchar_t *wmemchr (__const wchar_t *__s, wchar_t __c, size_t __n)
     throw () __attribute__ ((__pure__));


extern int wmemcmp (__const wchar_t *__restrict __s1,
                    __const wchar_t *__restrict __s2, size_t __n)
     throw () __attribute__ ((__pure__));


extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
                         __const wchar_t *__restrict __s2, size_t __n) throw ();



extern wchar_t *wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n)
     throw ();


extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ();




extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
                          __const wchar_t *__restrict __s2, size_t __n)
     throw ();





extern wint_t btowc (int __c) throw ();



extern int wctob (wint_t __c) throw ();



extern int mbsinit (__const mbstate_t *__ps) throw ();



extern size_t mbrtowc (wchar_t *__restrict __pwc,
                       __const char *__restrict __s, size_t __n,
                       mbstate_t *__p) throw ();


extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
                       mbstate_t *__restrict __ps) throw ();


extern size_t __mbrlen (__const char *__restrict __s, size_t __n,
                        mbstate_t *__restrict __ps) throw ();
extern size_t mbrlen (__const char *__restrict __s, size_t __n,
                      mbstate_t *__restrict __ps) throw ();
# 298 "/usr/include/wchar.h" 3
extern size_t mbsrtowcs (wchar_t *__restrict __dst,
                         __const char **__restrict __src, size_t __len,
                         mbstate_t *__restrict __ps) throw ();



extern size_t wcsrtombs (char *__restrict __dst,
                         __const wchar_t **__restrict __src, size_t __len,
                         mbstate_t *__restrict __ps) throw ();





extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
                          __const char **__restrict __src, size_t __nmc,
                          size_t __len, mbstate_t *__restrict __ps) throw ();



extern size_t wcsnrtombs (char *__restrict __dst,
                          __const wchar_t **__restrict __src,
                          size_t __nwc, size_t __len,
                          mbstate_t *__restrict __ps) throw ();






extern int wcwidth (wint_t __c) throw ();



extern int wcswidth (__const wchar_t *__s, size_t __n) throw ();





extern double wcstod (__const wchar_t *__restrict __nptr,
                      wchar_t **__restrict __endptr) throw ();



extern float wcstof (__const wchar_t *__restrict __nptr,
                     wchar_t **__restrict __endptr) throw ();
extern long double wcstold (__const wchar_t *__restrict __nptr,
                            wchar_t **__restrict __endptr) throw ();





extern long int wcstol (__const wchar_t *__restrict __nptr,
                        wchar_t **__restrict __endptr, int __base) throw ();



extern unsigned long int wcstoul (__const wchar_t *__restrict __nptr,
                                  wchar_t **__restrict __endptr, int __base)
     throw ();




__extension__
extern long long int wcstoq (__const wchar_t *__restrict __nptr,
                             wchar_t **__restrict __endptr, int __base)
     throw ();



__extension__
extern unsigned long long int wcstouq (__const wchar_t *__restrict __nptr,
                                       wchar_t **__restrict __endptr,
                                       int __base) throw ();





__extension__
extern long long int wcstoll (__const wchar_t *__restrict __nptr,
                              wchar_t **__restrict __endptr, int __base)
     throw ();



__extension__
extern unsigned long long int wcstoull (__const wchar_t *__restrict __nptr,
                                        wchar_t **__restrict __endptr,
                                        int __base) throw ();
# 407 "/usr/include/wchar.h" 3
# 1 "/usr/include/xlocale.h" 1 3
# 408 "/usr/include/wchar.h" 2 3



extern long int __wcstol_l (__const wchar_t *__restrict __nptr,
                            wchar_t **__restrict __endptr, int __base,
                            __locale_t __loc) throw ();

extern unsigned long int __wcstoul_l (__const wchar_t *__restrict __nptr,
                                      wchar_t **__restrict __endptr,
                                      int __base, __locale_t __loc) throw ();

__extension__
extern long long int __wcstoll_l (__const wchar_t *__restrict __nptr,
                                  wchar_t **__restrict __endptr,
                                  int __base, __locale_t __loc) throw ();

__extension__
extern unsigned long long int __wcstoull_l (__const wchar_t *__restrict __nptr,
                                            wchar_t **__restrict __endptr,
                                            int __base, __locale_t __loc)
     throw ();

extern double __wcstod_l (__const wchar_t *__restrict __nptr,
                          wchar_t **__restrict __endptr, __locale_t __loc)
     throw ();

extern float __wcstof_l (__const wchar_t *__restrict __nptr,
                         wchar_t **__restrict __endptr, __locale_t __loc)
     throw ();

extern long double __wcstold_l (__const wchar_t *__restrict __nptr,
                                wchar_t **__restrict __endptr,
                                __locale_t __loc) throw ();





extern double __wcstod_internal (__const wchar_t *__restrict __nptr,
                                 wchar_t **__restrict __endptr, int __group)
     throw ();
extern float __wcstof_internal (__const wchar_t *__restrict __nptr,
                                wchar_t **__restrict __endptr, int __group)
     throw ();
extern long double __wcstold_internal (__const wchar_t *__restrict __nptr,
                                       wchar_t **__restrict __endptr,
                                       int __group) throw ();


extern long int __wcstol_internal (__const wchar_t *__restrict __nptr,
                                   wchar_t **__restrict __endptr,
                                   int __base, int __group) throw ();



extern unsigned long int __wcstoul_internal (__const wchar_t *__restrict __npt,
                                             wchar_t **__restrict __endptr,
                                             int __base, int __group) throw ();



__extension__
extern long long int __wcstoll_internal (__const wchar_t *__restrict __nptr,
                                         wchar_t **__restrict __endptr,
                                         int __base, int __group) throw ();



__extension__
extern unsigned long long int __wcstoull_internal (__const wchar_t *
                                                   __restrict __nptr,
                                                   wchar_t **
                                                   __restrict __endptr,
                                                   int __base,
                                                   int __group) throw ();
# 529 "/usr/include/wchar.h" 3
extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) throw ();



extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
     throw ();







extern int fwide (__FILE *__fp, int __mode) throw ();



extern int fwprintf (__FILE *__restrict __stream,
                     __const wchar_t *__restrict __format, ...)
     throw () ;

extern int wprintf (__const wchar_t *__restrict __format, ...)
     throw () ;

extern int swprintf (wchar_t *__restrict __s, size_t __n,
                     __const wchar_t *__restrict __format, ...)
     throw () ;


extern int vfwprintf (__FILE *__restrict __s,
                      __const wchar_t *__restrict __format,
                      __gnuc_va_list __arg)
     throw () ;

extern int vwprintf (__const wchar_t *__restrict __format,
                     __gnuc_va_list __arg)
     throw () ;


extern int vswprintf (wchar_t *__restrict __s, size_t __n,
                      __const wchar_t *__restrict __format,
                      __gnuc_va_list __arg)
     throw () ;



extern int fwscanf (__FILE *__restrict __stream,
                    __const wchar_t *__restrict __format, ...)
     throw () ;

extern int wscanf (__const wchar_t *__restrict __format, ...)
     throw () ;

extern int swscanf (__const wchar_t *__restrict __s,
                    __const wchar_t *__restrict __format, ...)
     throw () ;




extern int vfwscanf (__FILE *__restrict __s,
                     __const wchar_t *__restrict __format,
                     __gnuc_va_list __arg)
     throw () ;

extern int vwscanf (__const wchar_t *__restrict __format,
                    __gnuc_va_list __arg)
     throw () ;

extern int vswscanf (__const wchar_t *__restrict __s,
                     __const wchar_t *__restrict __format,
                     __gnuc_va_list __arg)
     throw () ;




extern wint_t fgetwc (__FILE *__stream);
extern wint_t getwc (__FILE *__stream);


extern wint_t getwchar (void);



extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
extern wint_t putwc (wchar_t __wc, __FILE *__stream);


extern wint_t putwchar (wchar_t __wc);




extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
                        __FILE *__restrict __stream);


extern int fputws (__const wchar_t *__restrict __ws,
                   __FILE *__restrict __stream);



extern wint_t ungetwc (wint_t __wc, __FILE *__stream);





extern wint_t getwc_unlocked (__FILE *__stream);
extern wint_t getwchar_unlocked (void);


extern wint_t fgetwc_unlocked (__FILE *__stream);


extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);



extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
extern wint_t putwchar_unlocked (wchar_t __wc);



extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
                                 __FILE *__restrict __stream);


extern int fputws_unlocked (__const wchar_t *__restrict __ws,
                            __FILE *__restrict __stream);






extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
                        __const wchar_t *__restrict __format,
                        __const struct tm *__restrict __tp);
# 681 "/usr/include/wchar.h" 3
}
# 44 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 2 3
# 58 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 3
namespace std
{
  using ::mbstate_t;
}
# 122 "/opt/egcs/include/g++-v3/bits/std_cwchar.h" 3
namespace std
{
  using ::wint_t;

  using ::btowc;
  using ::fgetwc;
  using ::fgetws;
  using ::fputwc;
  using ::fputws;
  using ::fwide;
  using ::fwprintf;
  using ::fwscanf;
  using ::getwc;
  using ::getwchar;
  using ::mbrlen;
  using ::mbrtowc;
  using ::mbsinit;
  using ::mbsrtowcs;
  using ::putwc;
  using ::putwchar;
  using ::swprintf;
  using ::swscanf;
  using ::ungetwc;
  using ::vfwprintf;
  using ::vfwscanf;
  using ::vswprintf;
  using ::vswscanf;
  using ::vwprintf;
  using ::vwscanf;
  using ::wcrtomb;
  using ::wcscat;
  using ::wcscmp;
  using ::wcscoll;
  using ::wcscpy;
  using ::wcscspn;
  using ::wcsftime;
  using ::wcslen;
  using ::wcsncat;
  using ::wcsncmp;
  using ::wcsncpy;
  using ::wcsrtombs;
  using ::wcsspn;
  using ::wcstod;
  using ::wcstof;
  using ::wcstok;
  using ::wcstol;
  using ::wcstoul;
  using ::wcsxfrm;
  using ::wctob;
  using ::wmemcmp;
  using ::wmemcpy;
  using ::wmemmove;
  using ::wmemset;
  using ::wprintf;
  using ::wscanf;

  using ::wcschr;

  inline wchar_t*
  wcschr(wchar_t* __p, wchar_t __c)
  { return wcschr(const_cast<const wchar_t*>(__p), __c); }

  using ::wcspbrk;

  inline wchar_t*
  wcspbrk(wchar_t* __s1, wchar_t* __s2)
  { return wcspbrk(const_cast<const wchar_t*>(__s1), __s2); }

  using ::wcsrchr;

  inline wchar_t*
  wcsrchr(wchar_t* __p, wchar_t __c)
  { return wcsrchr(const_cast<const wchar_t*>(__p), __c); }

  using ::wcsstr;

  inline wchar_t*
  wcsstr(wchar_t* __s1, wchar_t* __s2)
  { return wcsstr(const_cast<const wchar_t*>(__s1), __s2); }

  using ::wmemchr;

  inline wchar_t*
  wmemchr(wchar_t* __p, wchar_t __c, size_t __n)
  { return wmemchr(const_cast<const wchar_t*>(__p), __c, __n); }
}







namespace __gnu_cxx
{
  using ::wcstold;
  using ::wcstoll;
  using ::wcstoull;
}

namespace std
{
  using __gnu_cxx::wcstold;
  using __gnu_cxx::wcstoll;
  using __gnu_cxx::wcstoull;
}
# 41 "/opt/egcs/include/g++-v3/bits/fpos.h" 2 3

namespace std
{



  template<typename _StateT>
    class fpos
    {
    public:

      typedef _StateT __state_type;

    private:
      streamoff _M_off;
      __state_type _M_st;

    public:
      __state_type
      state() const { return _M_st; }

      void
      state(__state_type __st) { _M_st = __st; }



      fpos(): _M_off(streamoff()), _M_st(__state_type()) { }

      fpos(streamoff __off, __state_type __st = __state_type())
      : _M_off(__off), _M_st(__st) { }

      operator streamoff() const { return _M_off; }

      fpos&
      operator+=(streamoff __off) { _M_off += __off; return *this; }

      fpos&
      operator-=(streamoff __off) { _M_off -= __off; return *this; }

      fpos
      operator+(streamoff __off)
      {
        fpos __t(*this);
        __t += __off;
        return __t;
      }

      fpos
      operator-(streamoff __off)
      {
        fpos __t(*this);
        __t -= __off;
        return __t;
      }

      bool
      operator==(const fpos& __pos) const
      { return _M_off == __pos._M_off; }

      bool
      operator!=(const fpos& __pos) const
      { return _M_off != __pos._M_off; }

      streamoff
      _M_position() const { return _M_off; }

      void
      _M_position(streamoff __off) { _M_off = __off; }
    };


  typedef fpos<mbstate_t> streampos;

  typedef fpos<mbstate_t> wstreampos;

}
# 42 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/functexcept.h" 3
# 1 "/opt/egcs/include/g++-v3/exception_defines.h" 1 3
# 35 "/opt/egcs/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 43 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 2 3

namespace std
{
  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ios;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_streambuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_istream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ostream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_iostream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
            typename _Alloc = allocator<_CharT> >
    class basic_stringbuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_istringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_ostringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT>,
           typename _Alloc = allocator<_CharT> >
    class basic_stringstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_filebuf;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ifstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_ofstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class basic_fstream;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class istreambuf_iterator;

  template<typename _CharT, typename _Traits = char_traits<_CharT> >
    class ostreambuf_iterator;



  class ios_base;


  typedef basic_ios<char> ios;
  typedef basic_streambuf<char> streambuf;
  typedef basic_istream<char> istream;
   typedef basic_ostream<char> ostream;
  typedef basic_iostream<char> iostream;
  typedef basic_stringbuf<char> stringbuf;
  typedef basic_istringstream<char> istringstream;
  typedef basic_ostringstream<char> ostringstream;
  typedef basic_stringstream<char> stringstream;
  typedef basic_filebuf<char> filebuf;
  typedef basic_ifstream<char> ifstream;
  typedef basic_ofstream<char> ofstream;
  typedef basic_fstream<char> fstream;


  typedef basic_ios<wchar_t> wios;
  typedef basic_streambuf<wchar_t> wstreambuf;
  typedef basic_istream<wchar_t> wistream;
  typedef basic_ostream<wchar_t> wostream;
  typedef basic_iostream<wchar_t> wiostream;
  typedef basic_stringbuf<wchar_t> wstringbuf;
  typedef basic_istringstream<wchar_t> wistringstream;
  typedef basic_ostringstream<wchar_t> wostringstream;
  typedef basic_stringstream<wchar_t> wstringstream;
  typedef basic_filebuf<wchar_t> wfilebuf;
  typedef basic_ifstream<wchar_t> wifstream;
  typedef basic_ofstream<wchar_t> wofstream;
  typedef basic_fstream<wchar_t> wfstream;

}
# 40 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/exception" 1 3
# 39 "/opt/egcs/include/g++-v3/exception" 3
extern "C++" {

namespace std
{






  class exception
  {
  public:
    exception() throw() { }
    virtual ~exception() throw();


    virtual const char* what() const throw();
  };



  class bad_exception : public exception
  {
  public:
    bad_exception() throw() { }
    virtual ~bad_exception() throw();
  };


  typedef void (*terminate_handler) ();

  typedef void (*unexpected_handler) ();


  terminate_handler set_terminate(terminate_handler) throw();


  void terminate() __attribute__ ((__noreturn__));


  unexpected_handler set_unexpected(unexpected_handler) throw();


  void unexpected() __attribute__ ((__noreturn__));
# 95 "/opt/egcs/include/g++-v3/exception" 3
  bool uncaught_exception() throw();
}

}
# 41 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/char_traits.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/char_traits.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 1 3
# 37 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 2 3
# 40 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 3
# 1 "/usr/include/string.h" 1 3
# 26 "/usr/include/string.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/string.h" 2 3

extern "C" {




# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 34 "/usr/include/string.h" 2 3



extern void *memcpy (void *__restrict __dest,
                     __const void *__restrict __src, size_t __n) throw ();


extern void *memmove (void *__dest, __const void *__src, size_t __n)
     throw ();





extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
                      int __c, size_t __n)
     throw ();




extern void *memset (void *__s, int __c, size_t __n) throw ();


extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
     throw () __attribute__ ((__pure__));


extern void *memchr (__const void *__s, int __c, size_t __n)
      throw () __attribute__ ((__pure__));




extern void *rawmemchr (__const void *__s, int __c) throw () __attribute__ ((__pure__));


extern void *memrchr (__const void *__s, int __c, size_t __n)
      throw () __attribute__ ((__pure__));




extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
     throw ();

extern char *strncpy (char *__restrict __dest,
                      __const char *__restrict __src, size_t __n) throw ();


extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
     throw ();

extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
                      size_t __n) throw ();


extern int strcmp (__const char *__s1, __const char *__s2)
     throw () __attribute__ ((__pure__));

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
     throw () __attribute__ ((__pure__));


extern int strcoll (__const char *__s1, __const char *__s2)
     throw () __attribute__ ((__pure__));

extern size_t strxfrm (char *__restrict __dest,
                       __const char *__restrict __src, size_t __n) throw ();





# 1 "/usr/include/xlocale.h" 1 3
# 109 "/usr/include/string.h" 2 3


extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
     throw () __attribute__ ((__pure__));

extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n,
                           __locale_t __l) throw ();




extern char *strdup (__const char *__s) throw () __attribute__ ((__malloc__));






extern char *strndup (__const char *__string, size_t __n)
     throw () __attribute__ ((__malloc__));
# 155 "/usr/include/string.h" 3
extern char *strchr (__const char *__s, int __c) throw () __attribute__ ((__pure__));

extern char *strrchr (__const char *__s, int __c) throw () __attribute__ ((__pure__));




extern char *strchrnul (__const char *__s, int __c) throw () __attribute__ ((__pure__));




extern size_t strcspn (__const char *__s, __const char *__reject)
     throw () __attribute__ ((__pure__));


extern size_t strspn (__const char *__s, __const char *__accept)
     throw () __attribute__ ((__pure__));

extern char *strpbrk (__const char *__s, __const char *__accept)
     throw () __attribute__ ((__pure__));

extern char *strstr (__const char *__haystack, __const char *__needle)
     throw () __attribute__ ((__pure__));



extern char *strcasestr (__const char *__haystack, __const char *__needle)
     throw () __attribute__ ((__pure__));



extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
     throw ();



extern char *__strtok_r (char *__restrict __s,
                         __const char *__restrict __delim,
                         char **__restrict __save_ptr) throw ();

extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
                       char **__restrict __save_ptr) throw ();






extern void *memmem (__const void *__haystack, size_t __haystacklen,
                     __const void *__needle, size_t __needlelen)
     throw () __attribute__ ((__pure__));



extern void *__mempcpy (void *__restrict __dest,
                        __const void *__restrict __src, size_t __n) throw ();
extern void *mempcpy (void *__restrict __dest,
                      __const void *__restrict __src, size_t __n) throw ();




extern size_t strlen (__const char *__s) throw () __attribute__ ((__pure__));




extern size_t strnlen (__const char *__string, size_t __maxlen)
     throw () __attribute__ ((__pure__));




extern char *strerror (int __errnum) throw ();



extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) throw ();




extern void __bzero (void *__s, size_t __n) throw ();



extern void bcopy (__const void *__src, void *__dest, size_t __n) throw ();


extern void bzero (void *__s, size_t __n) throw ();


extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     throw () __attribute__ ((__pure__));


extern char *index (__const char *__s, int __c) throw () __attribute__ ((__pure__));


extern char *rindex (__const char *__s, int __c) throw () __attribute__ ((__pure__));



extern int ffs (int __i) throw () __attribute__ ((const));




extern int ffsl (long int __l) throw () __attribute__ ((const));

__extension__ extern int ffsll (long long int __ll)
     throw () __attribute__ ((const));




extern int strcasecmp (__const char *__s1, __const char *__s2)
     throw () __attribute__ ((__pure__));


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     throw () __attribute__ ((__pure__));





extern int __strcasecmp_l (__const char *__s1, __const char *__s2,
                           __locale_t __loc) throw () __attribute__ ((__pure__));

extern int __strncasecmp_l (__const char *__s1, __const char *__s2,
                            size_t __n, __locale_t __loc)
     throw () __attribute__ ((__pure__));





extern char *strsep (char **__restrict __stringp,
                     __const char *__restrict __delim) throw ();




extern int strverscmp (__const char *__s1, __const char *__s2)
     throw () __attribute__ ((__pure__));


extern char *strsignal (int __sig) throw ();


extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
     throw ();
extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
     throw ();



extern char *__stpncpy (char *__restrict __dest,
                        __const char *__restrict __src, size_t __n) throw ();
extern char *stpncpy (char *__restrict __dest,
                      __const char *__restrict __src, size_t __n) throw ();


extern char *strfry (char *__string) throw ();


extern void *memfrob (void *__s, size_t __n) throw ();






extern char *basename (__const char *__filename) throw ();
# 363 "/usr/include/string.h" 3
}
# 41 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 2 3
# 66 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 3
namespace std
{
  using ::memcpy;
  using ::memmove;
  using ::strcpy;
  using ::strncpy;
  using ::strcat;
  using ::strncat;
  using ::memcmp;
  using ::strcmp;
  using ::strcoll;
  using ::strncmp;
  using ::strxfrm;
  using ::strcspn;
  using ::strspn;
  using ::strtok;
  using ::memset;
  using ::strerror;
  using ::strlen;

  using ::memchr;

  inline void*
  memchr(void* __p, int __c, size_t __n)
  { return memchr(const_cast<const void*>(__p), __c, __n); }

  using ::strchr;

  inline char*
  strchr(char* __s1, int __n)
  { return __builtin_strchr(const_cast<const char*>(__s1), __n); }

  using ::strpbrk;

  inline char*
  strpbrk(char* __s1, const char* __s2)
  { return __builtin_strpbrk(const_cast<const char*>(__s1), __s2); }

  using ::strrchr;

  inline char*
  strrchr(char* __s1, int __n)
  { return __builtin_strrchr(const_cast<const char*>(__s1), __n); }

  using ::strstr;

  inline char*
  strstr(char* __s1, const char* __s2)
  { return __builtin_strstr(const_cast<const char*>(__s1), __s2); }
}
# 40 "/opt/egcs/include/g++-v3/bits/char_traits.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/fpos.h" 1 3
# 41 "/opt/egcs/include/g++-v3/bits/char_traits.h" 2 3

namespace std
{



  template<class _CharT>
    struct char_traits
    {
      typedef _CharT char_type;

      typedef unsigned long int_type;
      typedef streampos pos_type;
      typedef streamoff off_type;
      typedef mbstate_t state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, size_t __n)
      {
        for (size_t __i = 0; __i < __n; ++__i)
          if (!eq(__s1[__i], __s2[__i]))
            return lt(__s1[__i], __s2[__i]) ? -1 : 1;
        return 0;
      }

      static size_t
      length(const char_type* __s)
      {
        const char_type* __p = __s;
        while (*__p) ++__p;
        return (__p - __s);
      }

      static const char_type*
      find(const char_type* __s, size_t __n, const char_type& __a)
      {
        for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
          if (*__p == __a) return __p;
        return 0;
      }

      static char_type*
      move(char_type* __s1, const char_type* __s2, size_t __n)
      { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }

      static char_type*
      copy(char_type* __s1, const char_type* __s2, size_t __n)
      { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }

      static char_type*
      assign(char_type* __s, size_t __n, char_type __a)
      {
        for (char_type* __p = __s; __p < __s + __n; ++__p)
          assign(*__p, __a);
        return __s;
      }

      static char_type
      to_char_type(const int_type& __c)
      { return char_type(__c); }

      static int_type
      to_int_type(const char_type& __c) { return int_type(__c); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof() { return static_cast<int_type>(-1); }

      static int_type
      not_eof(const int_type& __c)
      { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
    };



  template<>
    struct char_traits<char>
    {
      typedef char char_type;
      typedef int int_type;
      typedef streampos pos_type;
      typedef streamoff off_type;
      typedef mbstate_t state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, size_t __n)
      { return memcmp(__s1, __s2, __n); }

      static size_t
      length(const char_type* __s)
      { return strlen(__s); }

      static const char_type*
      find(const char_type* __s, size_t __n, const char_type& __a)
      { return static_cast<const char_type*>(memchr(__s, __a, __n)); }

      static char_type*
      move(char_type* __s1, const char_type* __s2, size_t __n)
      { return static_cast<char_type*>(memmove(__s1, __s2, __n)); }

      static char_type*
      copy(char_type* __s1, const char_type* __s2, size_t __n)
      { return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }

      static char_type*
      assign(char_type* __s, size_t __n, char_type __a)
      { return static_cast<char_type*>(memset(__s, __a, __n)); }

      static char_type
      to_char_type(const int_type& __c)
      { return static_cast<char_type>(__c); }



      static int_type
      to_int_type(const char_type& __c)
      { return static_cast<int_type>(static_cast<unsigned char>(__c)); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof() { return static_cast<int_type>((-1)); }

      static int_type
      not_eof(const int_type& __c)
      { return (__c == eof()) ? 0 : __c; }
  };



  template<>
    struct char_traits<wchar_t>
    {
      typedef wchar_t char_type;
      typedef wint_t int_type;
      typedef streamoff off_type;
      typedef wstreampos pos_type;
      typedef mbstate_t state_type;

      static void
      assign(char_type& __c1, const char_type& __c2)
      { __c1 = __c2; }

      static bool
      eq(const char_type& __c1, const char_type& __c2)
      { return __c1 == __c2; }

      static bool
      lt(const char_type& __c1, const char_type& __c2)
      { return __c1 < __c2; }

      static int
      compare(const char_type* __s1, const char_type* __s2, size_t __n)
      { return wmemcmp(__s1, __s2, __n); }

      static size_t
      length(const char_type* __s)
      { return wcslen(__s); }

      static const char_type*
      find(const char_type* __s, size_t __n, const char_type& __a)
      { return wmemchr(__s, __a, __n); }

      static char_type*
      move(char_type* __s1, const char_type* __s2, int_type __n)
      { return wmemmove(__s1, __s2, __n); }

      static char_type*
      copy(char_type* __s1, const char_type* __s2, size_t __n)
      { return wmemcpy(__s1, __s2, __n); }

      static char_type*
      assign(char_type* __s, size_t __n, char_type __a)
      { return wmemset(__s, __a, __n); }

      static char_type
      to_char_type(const int_type& __c) { return char_type(__c); }

      static int_type
      to_int_type(const char_type& __c) { return int_type(__c); }

      static bool
      eq_int_type(const int_type& __c1, const int_type& __c2)
      { return __c1 == __c2; }

      static int_type
      eof() { return static_cast<int_type>((0xffffffffu)); }

      static int_type
      not_eof(const int_type& __c)
      { return eq_int_type(__c, eof()) ? 0 : __c; }
  };


  template<typename _CharT, typename _Traits>
    struct _Char_traits_match
    {
      _CharT _M_c;
      _Char_traits_match(_CharT const& __c) : _M_c(__c) { }

      bool
      operator()(_CharT const& __a) { return _Traits::eq(_M_c, __a); }
    };
}
# 42 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 1 3
# 43 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/localefwd.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/localefwd.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++locale.h" 1 3
# 36 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++locale.h" 3
namespace std
{
  typedef int* __c_locale;
}
# 41 "/opt/egcs/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_climits.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_climits.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/limits.h" 1 3
# 11 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/limits.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/syslimits.h" 1 3






# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/limits.h" 1 3
# 137 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/limits.h" 3
# 1 "/usr/include/limits.h" 1 3
# 26 "/usr/include/limits.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/limits.h" 2 3
# 144 "/usr/include/limits.h" 3
# 1 "/usr/include/bits/posix1_lim.h" 1 3
# 126 "/usr/include/bits/posix1_lim.h" 3
# 1 "/usr/include/bits/local_lim.h" 1 3
# 36 "/usr/include/bits/local_lim.h" 3
# 1 "/usr/include/linux/limits.h" 1 3
# 37 "/usr/include/bits/local_lim.h" 2 3
# 127 "/usr/include/bits/posix1_lim.h" 2 3
# 145 "/usr/include/limits.h" 2 3



# 1 "/usr/include/bits/posix2_lim.h" 1 3
# 149 "/usr/include/limits.h" 2 3



# 1 "/usr/include/bits/xopen_lim.h" 1 3
# 34 "/usr/include/bits/xopen_lim.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 35 "/usr/include/bits/xopen_lim.h" 2 3
# 136 "/usr/include/bits/xopen_lim.h" 3
# 1 "/usr/include/bits/wordsize.h" 1 3
# 137 "/usr/include/bits/xopen_lim.h" 2 3
# 153 "/usr/include/limits.h" 2 3
# 138 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/limits.h" 2 3
# 8 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/syslimits.h" 2 3
# 12 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/limits.h" 2 3
# 39 "/opt/egcs/include/g++-v3/bits/std_climits.h" 2 3
# 42 "/opt/egcs/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_string.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_string.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stringfwd.h" 1 3
# 41 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/char_traits.h" 1 3
# 42 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_memory.h" 1 3
# 48 "/opt/egcs/include/g++-v3/bits/std_memory.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 1 3
# 64 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 65 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3

# 1 "/opt/egcs/include/g++-v3/bits/stl_pair.h" 1 3
# 64 "/opt/egcs/include/g++-v3/bits/stl_pair.h" 3
namespace std
{


template <class _T1, class _T2>
struct pair {
  typedef _T1 first_type;
  typedef _T2 second_type;

  _T1 first;
  _T2 second;




  pair() : first(), second() {}




  pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}


  template <class _U1, class _U2>
  pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}
};


template <class _T1, class _T2>
inline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{
  return __x.first == __y.first && __x.second == __y.second;
}


template <class _T1, class _T2>
inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
{
  return __x.first < __y.first ||
         (!(__y.first < __x.first) && __x.second < __y.second);
}


template <class _T1, class _T2>
inline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__x == __y);
}


template <class _T1, class _T2>
inline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return __y < __x;
}


template <class _T1, class _T2>
inline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__y < __x);
}


template <class _T1, class _T2>
inline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__x < __y);
}
# 139 "/opt/egcs/include/g++-v3/bits/stl_pair.h" 3
template <class _T1, class _T2>


inline pair<_T1, _T2> make_pair(_T1 __x, _T2 __y)



{
  return pair<_T1, _T2>(__x, __y);
}

}
# 67 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3


# 1 "/opt/egcs/include/g++-v3/bits/type_traits.h" 1 3
# 48 "/opt/egcs/include/g++-v3/bits/type_traits.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 50 "/opt/egcs/include/g++-v3/bits/type_traits.h" 2 3
# 86 "/opt/egcs/include/g++-v3/bits/type_traits.h" 3
template <bool _Truth> struct _Bool {};
typedef _Bool<true> __true_type;
typedef _Bool<false> __false_type;

template <class _Tp>
struct __type_traits {
   typedef __true_type this_dummy_member_must_be_first;
# 110 "/opt/egcs/include/g++-v3/bits/type_traits.h" 3
   typedef __false_type has_trivial_default_constructor;
   typedef __false_type has_trivial_copy_constructor;
   typedef __false_type has_trivial_assignment_operator;
   typedef __false_type has_trivial_destructor;
   typedef __false_type is_POD_type;
};




template<> struct __type_traits<bool> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<char> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<signed char> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned char> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<wchar_t> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<short> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned short> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<int> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned int> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};



template<> struct __type_traits<long long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<unsigned long long> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};



template<> struct __type_traits<float> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<double> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template<> struct __type_traits<long double> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};

template <class _Tp>
struct __type_traits<_Tp*> {
   typedef __true_type has_trivial_default_constructor;
   typedef __true_type has_trivial_copy_constructor;
   typedef __true_type has_trivial_assignment_operator;
   typedef __true_type has_trivial_destructor;
   typedef __true_type is_POD_type;
};





template <class _Tp> struct _Is_integer {
  typedef __false_type _Integral;
};

template<> struct _Is_integer<bool> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<char> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<signed char> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned char> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<wchar_t> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<short> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned short> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<int> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned int> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<long> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned long> {
  typedef __true_type _Integral;
};



template<> struct _Is_integer<long long> {
  typedef __true_type _Integral;
};

template<> struct _Is_integer<unsigned long long> {
  typedef __true_type _Integral;
};



template<typename _Tp> struct _Is_normal_iterator {
   typedef __false_type _Normal;
};


namespace std {
   template<typename _Iterator, typename _Container> class __normal_iterator;
};

template<typename _Iterator, typename _Container>
struct _Is_normal_iterator< std::__normal_iterator<_Iterator, _Container> > {
   typedef __true_type _Normal;
};
# 70 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3

# 1 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 1 3
# 72 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_climits.h" 1 3
# 73 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 1 3
# 37 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 39 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 2 3
# 41 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 3
# 1 "/usr/include/stdlib.h" 1 3
# 25 "/usr/include/stdlib.h" 3
# 1 "/usr/include/features.h" 1 3
# 26 "/usr/include/stdlib.h" 2 3







# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 34 "/usr/include/stdlib.h" 2 3

extern "C" {






# 1 "/usr/include/bits/waitflags.h" 1 3
# 43 "/usr/include/stdlib.h" 2 3
# 1 "/usr/include/bits/waitstatus.h" 1 3
# 63 "/usr/include/bits/waitstatus.h" 3
# 1 "/usr/include/endian.h" 1 3
# 22 "/usr/include/endian.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/endian.h" 2 3
# 37 "/usr/include/endian.h" 3
# 1 "/usr/include/bits/endian.h" 1 3
# 38 "/usr/include/endian.h" 2 3
# 64 "/usr/include/bits/waitstatus.h" 2 3

union wait
  {
    int w_status;
    struct
      {

        unsigned int __w_termsig:7;
        unsigned int __w_coredump:1;
        unsigned int __w_retcode:8;
        unsigned int:16;







      } __wait_terminated;
    struct
      {

        unsigned int __w_stopval:8;
        unsigned int __w_stopsig:8;
        unsigned int:16;






      } __wait_stopped;
  };
# 44 "/usr/include/stdlib.h" 2 3
# 94 "/usr/include/stdlib.h" 3
typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;





__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;
# 133 "/usr/include/stdlib.h" 3
extern size_t __ctype_get_mb_cur_max (void) throw ();



extern double atof (__const char *__nptr) throw () __attribute__ ((__pure__));

extern int atoi (__const char *__nptr) throw () __attribute__ ((__pure__));

extern long int atol (__const char *__nptr) throw () __attribute__ ((__pure__));



__extension__ extern long long int atoll (__const char *__nptr)
     throw () __attribute__ ((__pure__));



extern double strtod (__const char *__restrict __nptr,
                      char **__restrict __endptr) throw ();



extern float strtof (__const char *__restrict __nptr,
                     char **__restrict __endptr) throw ();

extern long double strtold (__const char *__restrict __nptr,
                            char **__restrict __endptr) throw ();



extern long int strtol (__const char *__restrict __nptr,
                        char **__restrict __endptr, int __base) throw ();

extern unsigned long int strtoul (__const char *__restrict __nptr,
                                  char **__restrict __endptr, int __base)
     throw ();



__extension__
extern long long int strtoq (__const char *__restrict __nptr,
                             char **__restrict __endptr, int __base) throw ();

__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
                                       char **__restrict __endptr, int __base)
     throw ();






__extension__
extern long long int strtoll (__const char *__restrict __nptr,
                              char **__restrict __endptr, int __base) throw ();

__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
                                        char **__restrict __endptr, int __base)
     throw ();
# 211 "/usr/include/stdlib.h" 3
# 1 "/usr/include/xlocale.h" 1 3
# 212 "/usr/include/stdlib.h" 2 3



extern long int __strtol_l (__const char *__restrict __nptr,
                            char **__restrict __endptr, int __base,
                            __locale_t __loc) throw ();

extern unsigned long int __strtoul_l (__const char *__restrict __nptr,
                                      char **__restrict __endptr,
                                      int __base, __locale_t __loc) throw ();

__extension__
extern long long int __strtoll_l (__const char *__restrict __nptr,
                                  char **__restrict __endptr, int __base,
                                  __locale_t __loc) throw ();

__extension__
extern unsigned long long int __strtoull_l (__const char *__restrict __nptr,
                                            char **__restrict __endptr,
                                            int __base, __locale_t __loc)
     throw ();

extern double __strtod_l (__const char *__restrict __nptr,
                          char **__restrict __endptr, __locale_t __loc)
     throw ();

extern float __strtof_l (__const char *__restrict __nptr,
                         char **__restrict __endptr, __locale_t __loc) throw ();

extern long double __strtold_l (__const char *__restrict __nptr,
                                char **__restrict __endptr,
                                __locale_t __loc) throw ();






extern double __strtod_internal (__const char *__restrict __nptr,
                                 char **__restrict __endptr, int __group)
     throw ();
extern float __strtof_internal (__const char *__restrict __nptr,
                                char **__restrict __endptr, int __group)
     throw ();
extern long double __strtold_internal (__const char *__restrict __nptr,
                                       char **__restrict __endptr,
                                       int __group) throw ();

extern long int __strtol_internal (__const char *__restrict __nptr,
                                   char **__restrict __endptr,
                                   int __base, int __group) throw ();



extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
                                             char **__restrict __endptr,
                                             int __base, int __group) throw ();




__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr,
                                         char **__restrict __endptr,
                                         int __base, int __group) throw ();



__extension__
extern unsigned long long int __strtoull_internal (__const char *
                                                   __restrict __nptr,
                                                   char **__restrict __endptr,
                                                   int __base, int __group)
     throw ();
# 385 "/usr/include/stdlib.h" 3
extern char *l64a (long int __n) throw ();


extern long int a64l (__const char *__s) throw () __attribute__ ((__pure__));


# 1 "/usr/include/sys/types.h" 1 3
# 26 "/usr/include/sys/types.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/sys/types.h" 2 3

extern "C" {

# 1 "/usr/include/bits/types.h" 1 3
# 31 "/usr/include/sys/types.h" 2 3


typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;


typedef __loff_t loff_t;



typedef __ino_t ino_t;






typedef __ino64_t ino64_t;




typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;






typedef __off64_t off64_t;
# 101 "/usr/include/sys/types.h" 3
typedef __id_t id_t;




typedef __ssize_t ssize_t;




typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;



typedef __key_t key_t;
# 126 "/usr/include/sys/types.h" 3
# 1 "/usr/include/time.h" 1 3
# 127 "/usr/include/sys/types.h" 2 3



typedef __useconds_t useconds_t;



typedef __suseconds_t suseconds_t;





# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 141 "/usr/include/sys/types.h" 2 3



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 184 "/usr/include/sys/types.h" 3
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 206 "/usr/include/sys/types.h" 3
# 1 "/usr/include/endian.h" 1 3
# 207 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/select.h" 1 3
# 25 "/usr/include/sys/select.h" 3
# 1 "/usr/include/features.h" 1 3
# 26 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/types.h" 1 3
# 29 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/select.h" 1 3
# 32 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/sigset.h" 1 3
# 35 "/usr/include/sys/select.h" 2 3
# 43 "/usr/include/sys/select.h" 3
# 1 "/usr/include/time.h" 1 3
# 44 "/usr/include/sys/select.h" 2 3

# 1 "/usr/include/bits/time.h" 1 3
# 63 "/usr/include/bits/time.h" 3
# 1 "/usr/include/bits/types.h" 1 3
# 64 "/usr/include/bits/time.h" 2 3



struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
# 46 "/usr/include/sys/select.h" 2 3



typedef long int __fd_mask;







typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];





  } fd_set;






typedef __fd_mask fd_mask;
# 89 "/usr/include/sys/select.h" 3
extern "C" {






extern int select (int __nfds, fd_set *__restrict __readfds,
                   fd_set *__restrict __writefds,
                   fd_set *__restrict __exceptfds,
                   struct timeval *__restrict __timeout) throw ();





extern int pselect (int __nfds, fd_set *__restrict __readfds,
                    fd_set *__restrict __writefds,
                    fd_set *__restrict __exceptfds,
                    const struct timespec *__restrict __timeout,
                    const __sigset_t *__restrict __sigmask) throw ();


}
# 210 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/sysmacros.h" 1 3
# 213 "/usr/include/sys/types.h" 2 3




typedef __blksize_t blksize_t;






typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 251 "/usr/include/sys/types.h" 3
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;


}
# 392 "/usr/include/stdlib.h" 2 3






extern long int random (void) throw ();


extern void srandom (unsigned int __seed) throw ();





extern char *initstate (unsigned int __seed, char *__statebuf,
                        size_t __statelen) throw ();



extern char *setstate (char *__statebuf) throw ();







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
                     int32_t *__restrict __result) throw ();

extern int srandom_r (unsigned int __seed, struct random_data *__buf) throw ();

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
                        size_t __statelen,
                        struct random_data *__restrict __buf) throw ();

extern int setstate_r (char *__restrict __statebuf,
                       struct random_data *__restrict __buf) throw ();





extern int rand (void) throw ();

extern void srand (unsigned int __seed) throw ();



extern int rand_r (unsigned int *__seed) throw ();







extern double drand48 (void) throw ();
extern double erand48 (unsigned short int __xsubi[3]) throw ();


extern long int lrand48 (void) throw ();
extern long int nrand48 (unsigned short int __xsubi[3]) throw ();


extern long int mrand48 (void) throw ();
extern long int jrand48 (unsigned short int __xsubi[3]) throw ();


extern void srand48 (long int __seedval) throw ();
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) throw ();
extern void lcong48 (unsigned short int __param[7]) throw ();





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    unsigned long long int __a;
  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
                      double *__restrict __result) throw ();
extern int erand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      double *__restrict __result) throw ();


extern int lrand48_r (struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) throw ();
extern int nrand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) throw ();


extern int mrand48_r (struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) throw ();
extern int jrand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) throw ();


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     throw ();

extern int seed48_r (unsigned short int __seed16v[3],
                     struct drand48_data *__buffer) throw ();

extern int lcong48_r (unsigned short int __param[7],
                      struct drand48_data *__buffer) throw ();
# 528 "/usr/include/stdlib.h" 3
extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__));

extern void *calloc (size_t __nmemb, size_t __size)
     throw () __attribute__ ((__malloc__));





extern void *realloc (void *__ptr, size_t __size) throw () __attribute__ ((__malloc__));

extern void free (void *__ptr) throw ();



extern void cfree (void *__ptr) throw ();



# 1 "/usr/include/alloca.h" 1 3
# 22 "/usr/include/alloca.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/alloca.h" 2 3


# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 26 "/usr/include/alloca.h" 2 3

extern "C" {





extern void *alloca (size_t __size) throw ();





}
# 548 "/usr/include/stdlib.h" 2 3




extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__));




extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     throw () __attribute__ ((__malloc__));



extern void abort (void) throw () __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) throw ();




extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     throw ();





extern void exit (int __status) throw () __attribute__ ((__noreturn__));




extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));




extern char *getenv (__const char *__name) throw ();



extern char *__secure_getenv (__const char *__name) throw ();





extern int putenv (char *__string) throw ();





extern int setenv (__const char *__name, __const char *__value, int __replace)
     throw ();


extern int unsetenv (__const char *__name) throw ();






extern int clearenv (void) throw ();
# 624 "/usr/include/stdlib.h" 3
extern char *mktemp (char *__template) throw ();







extern int mkstemp (char *__template) throw ();
# 641 "/usr/include/stdlib.h" 3
extern int mkstemp64 (char *__template) throw ();
# 651 "/usr/include/stdlib.h" 3
extern char *mkdtemp (char *__template) throw ();




extern int system (__const char *__command) throw ();






extern char *canonicalize_file_name (__const char *__name) throw ();
# 673 "/usr/include/stdlib.h" 3
extern char *realpath (__const char *__restrict __name,
                       char *__restrict __resolved) throw ();






typedef int (*__compar_fn_t) (__const void *, __const void *);


typedef __compar_fn_t comparison_fn_t;





extern void *bsearch (__const void *__key, __const void *__base,
                      size_t __nmemb, size_t __size, __compar_fn_t __compar);



extern void qsort (void *__base, size_t __nmemb, size_t __size,
                   __compar_fn_t __compar);



extern int abs (int __x) throw () __attribute__ ((__const__));
extern long int labs (long int __x) throw () __attribute__ ((__const__));

__extension__ extern long long int llabs (long long int __x)
     throw () __attribute__ ((__const__));






extern div_t div (int __numer, int __denom)
     throw () __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
     throw () __attribute__ ((__const__));

__extension__ extern lldiv_t lldiv (long long int __numer,
                                    long long int __denom)
     throw () __attribute__ ((__const__));
# 729 "/usr/include/stdlib.h" 3
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign) throw ();




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign) throw ();




extern char *gcvt (double __value, int __ndigit, char *__buf) throw ();




extern char *qecvt (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign) throw ();
extern char *qfcvt (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign) throw ();
extern char *qgcvt (long double __value, int __ndigit, char *__buf) throw ();




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign, char *__restrict __buf,
                   size_t __len) throw ();
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign, char *__restrict __buf,
                   size_t __len) throw ();

extern int qecvt_r (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign,
                    char *__restrict __buf, size_t __len) throw ();
extern int qfcvt_r (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign,
                    char *__restrict __buf, size_t __len) throw ();






extern int mblen (__const char *__s, size_t __n) throw ();


extern int mbtowc (wchar_t *__restrict __pwc,
                   __const char *__restrict __s, size_t __n) throw ();


extern int wctomb (char *__s, wchar_t __wchar) throw ();



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
                        __const char *__restrict __s, size_t __n) throw ();

extern size_t wcstombs (char *__restrict __s,
                        __const wchar_t *__restrict __pwcs, size_t __n)
     throw ();







extern int rpmatch (__const char *__response) throw ();
# 809 "/usr/include/stdlib.h" 3
extern int getsubopt (char **__restrict __optionp,
                      char *__const *__restrict __tokens,
                      char **__restrict __valuep) throw ();





extern void setkey (__const char *__key) throw ();







extern int posix_openpt (int __oflag) throw ();







extern int grantpt (int __fd) throw ();



extern int unlockpt (int __fd) throw ();




extern char *ptsname (int __fd) throw ();






extern int ptsname_r (int __fd, char *__buf, size_t __buflen) throw ();


extern int getpt (void) throw ();






extern int getloadavg (double __loadavg[], int __nelem) throw ();





}
# 42 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 2 3
# 73 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 3
namespace std
{
  using ::div_t;
  using ::ldiv_t;

  using ::abort;
  using ::abs;
  using ::atexit;
  using ::atof;
  using ::atoi;
  using ::atol;
  using ::bsearch;
  using ::calloc;
  using ::div;
  using ::exit;
  using ::free;
  using ::getenv;
  using ::labs;
  using ::ldiv;
  using ::malloc;
  using ::mblen;
  using ::mbstowcs;
  using ::mbtowc;
  using ::qsort;
  using ::rand;
  using ::realloc;
  using ::srand;
  using ::strtod;
  using ::strtol;
  using ::strtoul;
  using ::system;
  using ::wcstombs;
  using ::wctomb;

  inline long
  abs(long __i) { return labs(__i); }

  inline ldiv_t
  div(long __i, long __j) { return ldiv(__i, __j); }
}
# 125 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 3
namespace __gnu_cxx
{
  using ::lldiv_t;
  using ::_Exit;

  inline long long
  abs(long long __x) { return __x >= 0 ? __x : -__x; }

  inline long long
  llabs(long long __x) { return __x >= 0 ? __x : -__x; }

  inline lldiv_t
  div(long long __n, long long __d)
  { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }

  inline lldiv_t
  lldiv(long long __n, long long __d)
  { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }

  using ::atoll;
  using ::strtof;
  using ::strtoll;
  using ::strtoull;
  using ::strtold;
}

namespace std
{
  using __gnu_cxx::lldiv_t;
  using __gnu_cxx::_Exit;
  using __gnu_cxx::abs;
  using __gnu_cxx::llabs;
  using __gnu_cxx::div;
  using __gnu_cxx::lldiv;
  using __gnu_cxx::atoll;
  using __gnu_cxx::strtof;
  using __gnu_cxx::strtoll;
  using __gnu_cxx::strtoull;
  using __gnu_cxx::strtold;
}
# 74 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 75 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/new" 1 3
# 40 "/opt/egcs/include/g++-v3/new" 3
# 1 "/opt/egcs/include/g++-v3/cstddef" 1 3
# 41 "/opt/egcs/include/g++-v3/new" 2 3
# 1 "/opt/egcs/include/g++-v3/exception" 1 3
# 42 "/opt/egcs/include/g++-v3/new" 2 3

extern "C++" {

namespace std
{


  class bad_alloc : public exception
  {
  public:
    bad_alloc() throw() { }
    virtual ~bad_alloc() throw();
  };

  struct nothrow_t { };
  extern const nothrow_t nothrow;


  typedef void (*new_handler)();

  new_handler set_new_handler(new_handler);
}
# 76 "/opt/egcs/include/g++-v3/new" 3
void *operator new(std::size_t) throw (std::bad_alloc);
void *operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void *) throw();
void operator delete[](void *) throw();
void *operator new(std::size_t, const std::nothrow_t&) throw();
void *operator new[](std::size_t, const std::nothrow_t&) throw();
void operator delete(void *, const std::nothrow_t&) throw();
void operator delete[](void *, const std::nothrow_t&) throw();


inline void *operator new(std::size_t, void *place) throw() { return place; }
inline void *operator new[](std::size_t, void *place) throw() { return place; }

}
# 76 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3

# 1 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 1 3
# 78 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_types.h" 1 3
# 69 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_types.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 71 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_types.h" 2 3


namespace std
{

struct input_iterator_tag {};
struct output_iterator_tag {};
struct forward_iterator_tag : public input_iterator_tag {};
struct bidirectional_iterator_tag : public forward_iterator_tag {};
struct random_access_iterator_tag : public bidirectional_iterator_tag {};






template <class _Tp, class _Distance> struct input_iterator {
  typedef input_iterator_tag iterator_category;
  typedef _Tp value_type;
  typedef _Distance difference_type;
  typedef _Tp* pointer;
  typedef _Tp& reference;
};

struct output_iterator {
  typedef output_iterator_tag iterator_category;
  typedef void value_type;
  typedef void difference_type;
  typedef void pointer;
  typedef void reference;
};

template <class _Tp, class _Distance> struct forward_iterator {
  typedef forward_iterator_tag iterator_category;
  typedef _Tp value_type;
  typedef _Distance difference_type;
  typedef _Tp* pointer;
  typedef _Tp& reference;
};


template <class _Tp, class _Distance> struct bidirectional_iterator {
  typedef bidirectional_iterator_tag iterator_category;
  typedef _Tp value_type;
  typedef _Distance difference_type;
  typedef _Tp* pointer;
  typedef _Tp& reference;
};

template <class _Tp, class _Distance> struct random_access_iterator {
  typedef random_access_iterator_tag iterator_category;
  typedef _Tp value_type;
  typedef _Distance difference_type;
  typedef _Tp* pointer;
  typedef _Tp& reference;
};

template <class _Category, class _Tp, class _Distance = ptrdiff_t,
          class _Pointer = _Tp*, class _Reference = _Tp&>
struct iterator {
  typedef _Category iterator_category;
  typedef _Tp value_type;
  typedef _Distance difference_type;
  typedef _Pointer pointer;
  typedef _Reference reference;
};

template <class _Iterator>
struct iterator_traits {
  typedef typename _Iterator::iterator_category iterator_category;
  typedef typename _Iterator::value_type value_type;
  typedef typename _Iterator::difference_type difference_type;
  typedef typename _Iterator::pointer pointer;
  typedef typename _Iterator::reference reference;
};

template <class _Tp>
struct iterator_traits<_Tp*> {
  typedef random_access_iterator_tag iterator_category;
  typedef _Tp value_type;
  typedef ptrdiff_t difference_type;
  typedef _Tp* pointer;
  typedef _Tp& reference;
};

template <class _Tp>
struct iterator_traits<const _Tp*> {
  typedef random_access_iterator_tag iterator_category;
  typedef _Tp value_type;
  typedef ptrdiff_t difference_type;
  typedef const _Tp* pointer;
  typedef const _Tp& reference;
};
# 172 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_types.h" 3
template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
__iterator_category(const _Iter&)
{
  typedef typename iterator_traits<_Iter>::iterator_category _Category;
  return _Category();
}

template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
__distance_type(const _Iter&)
{
  return static_cast<typename iterator_traits<_Iter>::difference_type*>(0);
}

template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
__value_type(const _Iter&)
{
  return static_cast<typename iterator_traits<_Iter>::value_type*>(0);
}

template <class _Iter>
inline typename iterator_traits<_Iter>::iterator_category
iterator_category(const _Iter& __i) { return __iterator_category(__i); }


template <class _Iter>
inline typename iterator_traits<_Iter>::difference_type*
distance_type(const _Iter& __i) { return __distance_type(__i); }

template <class _Iter>
inline typename iterator_traits<_Iter>::value_type*
value_type(const _Iter& __i) { return __value_type(__i); }

}
# 79 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_funcs.h" 1 3
# 69 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_funcs.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/concept_check.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/concept_check.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 36 "/opt/egcs/include/g++-v3/bits/concept_check.h" 2 3
# 70 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_funcs.h" 2 3

namespace std
{





template <class _InputIterator, class _Distance>
inline void __distance(_InputIterator __first, _InputIterator __last,
                       _Distance& __n, input_iterator_tag)
{

                                                                    ;
  while (__first != __last) { ++__first; ++__n; }
}

template <class _RandomAccessIterator, class _Distance>
inline void __distance(_RandomAccessIterator __first,
                       _RandomAccessIterator __last,
                       _Distance& __n, random_access_iterator_tag)
{

                                                                                  ;
  __n += __last - __first;
}

template <class _InputIterator, class _Distance>
inline void distance(_InputIterator __first,
                     _InputIterator __last, _Distance& __n)
{

  __distance(__first, __last, __n, iterator_category(__first));
}

template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
__distance(_InputIterator __first, _InputIterator __last, input_iterator_tag)
{

                                                                    ;
  typename iterator_traits<_InputIterator>::difference_type __n = 0;
  while (__first != __last) {
    ++__first; ++__n;
  }
  return __n;
}

template <class _RandomAccessIterator>
inline typename iterator_traits<_RandomAccessIterator>::difference_type
__distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
           random_access_iterator_tag)
{

                                                                                  ;
  return __last - __first;
}

template <class _InputIterator>
inline typename iterator_traits<_InputIterator>::difference_type
distance(_InputIterator __first, _InputIterator __last)
{

  typedef typename iterator_traits<_InputIterator>::iterator_category
    _Category;
  return __distance(__first, __last, _Category());
}

template <class _InputIter, class _Distance>
inline void __advance(_InputIter& __i, _Distance __n, input_iterator_tag)
{

                                                                ;
  while (__n--) ++__i;
}

template <class _BidirectionalIterator, class _Distance>
inline void __advance(_BidirectionalIterator& __i, _Distance __n,
                      bidirectional_iterator_tag)
{

                                                                                  ;
  if (__n > 0)
    while (__n--) ++__i;
  else
    while (__n++) --__i;
}

template <class _RandomAccessIterator, class _Distance>
inline void __advance(_RandomAccessIterator& __i, _Distance __n,
                      random_access_iterator_tag)
{

                                                                                  ;
  __i += __n;
}

template <class _InputIterator, class _Distance>
inline void advance(_InputIterator& __i, _Distance __n)
{

  __advance(__i, __n, iterator_category(__i));
}

}
# 80 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_iterator.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_iterator.h" 3
namespace std
{

  template<typename _Iterator>
    class reverse_iterator
      : public iterator<typename iterator_traits<_Iterator>::iterator_category,
                        typename iterator_traits<_Iterator>::value_type,
                        typename iterator_traits<_Iterator>::difference_type,
                        typename iterator_traits<_Iterator>::pointer,
                        typename iterator_traits<_Iterator>::reference>
    {
    protected:
      _Iterator _M_current;

    public:
      typedef _Iterator iterator_type;
      typedef typename iterator_traits<_Iterator>::difference_type
                                                               difference_type;
      typedef typename iterator_traits<_Iterator>::reference reference;
      typedef typename iterator_traits<_Iterator>::pointer pointer;

    public:
      reverse_iterator() {}

      explicit
      reverse_iterator(iterator_type __x) : _M_current(__x) {}

      reverse_iterator(const reverse_iterator& __x)
        : _M_current(__x._M_current) { }

      template<typename _Iter>
        reverse_iterator(const reverse_iterator<_Iter>& __x)
        : _M_current(__x.base()) {}

      iterator_type
      base() const { return _M_current; }

      reference
      operator*() const
      {
        _Iterator __tmp = _M_current;
        return *--__tmp;
      }

      pointer
      operator->() const { return &(operator*()); }

      reverse_iterator&
      operator++()
      {
        --_M_current;
        return *this;
      }

      reverse_iterator
      operator++(int)
      {
        reverse_iterator __tmp = *this;
        --_M_current;
        return __tmp;
      }

      reverse_iterator&
      operator--()
      {
        ++_M_current;
        return *this;
      }

      reverse_iterator operator--(int)
      {
        reverse_iterator __tmp = *this;
        ++_M_current;
        return __tmp;
      }

      reverse_iterator
      operator+(difference_type __n) const
      { return reverse_iterator(_M_current - __n); }

      reverse_iterator&
      operator+=(difference_type __n)
      {
        _M_current -= __n;
        return *this;
      }

      reverse_iterator
      operator-(difference_type __n) const
      { return reverse_iterator(_M_current + __n); }

      reverse_iterator&
      operator-=(difference_type __n)
      {
        _M_current += __n;
        return *this;
      }

      reference
      operator[](difference_type __n) const { return *(*this + __n); }
    };

  template<typename _Iterator>
    inline bool
    operator==(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
    { return __x.base() == __y.base(); }

  template<typename _Iterator>
    inline bool
    operator<(const reverse_iterator<_Iterator>& __x,
              const reverse_iterator<_Iterator>& __y)
    { return __y.base() < __x.base(); }

  template<typename _Iterator>
    inline bool
    operator!=(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
    { return !(__x == __y); }

  template<typename _Iterator>
    inline bool
    operator>(const reverse_iterator<_Iterator>& __x,
              const reverse_iterator<_Iterator>& __y)
    { return __y < __x; }

  template<typename _Iterator>
    inline bool
    operator<=(const reverse_iterator<_Iterator>& __x,
                const reverse_iterator<_Iterator>& __y)
    { return !(__y < __x); }

  template<typename _Iterator>
    inline bool
    operator>=(const reverse_iterator<_Iterator>& __x,
               const reverse_iterator<_Iterator>& __y)
    { return !(__x < __y); }

  template<typename _Iterator>
    inline typename reverse_iterator<_Iterator>::difference_type
    operator-(const reverse_iterator<_Iterator>& __x,
              const reverse_iterator<_Iterator>& __y)
    { return __y.base() - __x.base(); }

  template<typename _Iterator>
    inline reverse_iterator<_Iterator>
    operator+(typename reverse_iterator<_Iterator>::difference_type __n,
              const reverse_iterator<_Iterator>& __x)
    { return reverse_iterator<_Iterator>(__x.base() - __n); }


  template<typename _Container>
  class back_insert_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:
      typedef _Container container_type;

      explicit
      back_insert_iterator(_Container& __x) : container(&__x) {}

      back_insert_iterator&
      operator=(const typename _Container::const_reference __value)
      {
        container->push_back(__value);
        return *this;
      }

      back_insert_iterator&
      operator*() { return *this; }

      back_insert_iterator&
      operator++() { return *this; }

      back_insert_iterator
      operator++(int) { return *this; }
    };

  template<typename _Container>
    inline back_insert_iterator<_Container>
    back_inserter(_Container& __x)
    { return back_insert_iterator<_Container>(__x); }

  template<typename _Container>
    class front_insert_iterator
      : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;

    public:
      typedef _Container container_type;

      explicit front_insert_iterator(_Container& __x) : container(&__x) {}

      front_insert_iterator&
      operator=(const typename _Container::const_reference __value)
      {
        container->push_front(__value);
        return *this;
      }

      front_insert_iterator&
      operator*() { return *this; }

      front_insert_iterator&
      operator++() { return *this; }

      front_insert_iterator
      operator++(int) { return *this; }
    };

  template<typename _Container>
  inline front_insert_iterator<_Container> front_inserter(_Container& __x)
  { return front_insert_iterator<_Container>(__x); }

  template<typename _Container>
    class insert_iterator
      : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _Container* container;
      typename _Container::iterator iter;

    public:
      typedef _Container container_type;

      insert_iterator(_Container& __x, typename _Container::iterator __i)
        : container(&__x), iter(__i) {}

      insert_iterator&
      operator=(const typename _Container::const_reference __value)
      {
        iter = container->insert(iter, __value);
        ++iter;
        return *this;
      }

      insert_iterator&
      operator*() { return *this; }

      insert_iterator&
      operator++() { return *this; }

      insert_iterator&
      operator++(int) { return *this; }
    };

  template<typename _Container, typename _Iterator>
    inline
    insert_iterator<_Container> inserter(_Container& __x, _Iterator __i)
    {
      typedef typename _Container::iterator __iter;
      return insert_iterator<_Container>(__x, __iter(__i));
    }
# 329 "/opt/egcs/include/g++-v3/bits/stl_iterator.h" 3
  template<typename _Iterator, typename _Container>
    class __normal_iterator
      : public iterator<typename iterator_traits<_Iterator>::iterator_category,
                        typename iterator_traits<_Iterator>::value_type,
                        typename iterator_traits<_Iterator>::difference_type,
                        typename iterator_traits<_Iterator>::pointer,
                        typename iterator_traits<_Iterator>::reference>
    {
    protected:
      _Iterator _M_current;

    public:
      typedef typename iterator_traits<_Iterator>::difference_type
                                                               difference_type;
      typedef typename iterator_traits<_Iterator>::reference reference;
      typedef typename iterator_traits<_Iterator>::pointer pointer;

      __normal_iterator() : _M_current(_Iterator()) { }

      explicit
      __normal_iterator(const _Iterator& __i) : _M_current(__i) { }


      template<typename _Iter>
      inline __normal_iterator(const __normal_iterator<_Iter, _Container>& __i)
        : _M_current(__i.base()) { }


      reference
      operator*() const { return *_M_current; }

      pointer
      operator->() const { return _M_current; }

      __normal_iterator&
      operator++() { ++_M_current; return *this; }

      __normal_iterator
      operator++(int) { return __normal_iterator(_M_current++); }


      __normal_iterator&
      operator--() { --_M_current; return *this; }

      __normal_iterator
      operator--(int) { return __normal_iterator(_M_current--); }


      reference
      operator[](const difference_type& __n) const
      { return _M_current[__n]; }

      __normal_iterator&
      operator+=(const difference_type& __n)
      { _M_current += __n; return *this; }

      __normal_iterator
      operator+(const difference_type& __n) const
      { return __normal_iterator(_M_current + __n); }

      __normal_iterator&
      operator-=(const difference_type& __n)
      { _M_current -= __n; return *this; }

      __normal_iterator
      operator-(const difference_type& __n) const
      { return __normal_iterator(_M_current - __n); }

      difference_type
      operator-(const __normal_iterator& __i) const
      { return _M_current - __i._M_current; }

      const _Iterator&
      base() const { return _M_current; }
    };


  template<typename _IteratorL, typename _IteratorR, typename _Container>
  inline bool
  operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return __lhs.base() == __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
  inline bool
  operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return !(__lhs == __rhs); }


  template<typename _IteratorL, typename _IteratorR, typename _Container>
  inline bool
  operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
            const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return __lhs.base() < __rhs.base(); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
  inline bool
  operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
            const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return __rhs < __lhs; }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
  inline bool
  operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return !(__rhs < __lhs); }

  template<typename _IteratorL, typename _IteratorR, typename _Container>
  inline bool
  operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
             const __normal_iterator<_IteratorR, _Container>& __rhs)
  { return !(__lhs < __rhs); }

  template<typename _Iterator, typename _Container>
  inline __normal_iterator<_Iterator, _Container>
  operator+(__normal_iterator<_Iterator, _Container>::difference_type __n,
            const __normal_iterator<_Iterator, _Container>& __i)
  { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
}
# 81 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/concept_check.h" 1 3
# 82 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 2 3

namespace std
{



template <class _ForwardIter1, class _ForwardIter2, class _Tp>
inline void __iter_swap(_ForwardIter1 __a, _ForwardIter2 __b, _Tp*)
{
  _Tp __tmp = *__a;
  *__a = *__b;
  *__b = __tmp;
}

template <class _ForwardIter1, class _ForwardIter2>
inline void iter_swap(_ForwardIter1 __a, _ForwardIter2 __b)
{

                                                                             ;
                                                                             ;
                                                             ;


                                                             ;



  __iter_swap(__a, __b, __value_type(__a));
}

template <class _Tp>
inline void swap(_Tp& __a, _Tp& __b)
{

                                                         ;

  _Tp __tmp = __a;
  __a = __b;
  __b = __tmp;
}







template <class _Tp>
inline const _Tp& min(const _Tp& __a, const _Tp& __b) {

                                                              ;

  if (__b < __a) return __b; return __a;
}

template <class _Tp>
inline const _Tp& max(const _Tp& __a, const _Tp& __b) {

                                                              ;

  if (__a < __b) return __b; return __a;
}

template <class _Tp, class _Compare>
inline const _Tp& min(const _Tp& __a, const _Tp& __b, _Compare __comp) {

  if (__comp(__b, __a)) return __b; return __a;
}

template <class _Tp, class _Compare>
inline const _Tp& max(const _Tp& __a, const _Tp& __b, _Compare __comp) {

  if (__comp(__a, __b)) return __b; return __a;
}
# 166 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 3
template <class _InputIter, class _OutputIter, class _Distance>
inline _OutputIter __copy(_InputIter __first, _InputIter __last,
                          _OutputIter __result,
                          input_iterator_tag, _Distance*)
{
  for ( ; __first != __last; ++__result, ++__first)
    *__result = *__first;
  return __result;
}

template <class _RandomAccessIter, class _OutputIter, class _Distance>
inline _OutputIter
__copy(_RandomAccessIter __first, _RandomAccessIter __last,
       _OutputIter __result, random_access_iterator_tag, _Distance*)
{
  for (_Distance __n = __last - __first; __n > 0; --__n) {
    *__result = *__first;
    ++__first;
    ++__result;
  }
  return __result;
}

template <class _Tp>
inline _Tp*
__copy_trivial(const _Tp* __first, const _Tp* __last, _Tp* __result)
{
  memmove(__result, __first, sizeof(_Tp) * (__last - __first));
  return __result + (__last - __first);
}


template <class _InputIter, class _OutputIter>
inline _OutputIter __copy_aux2(_InputIter __first, _InputIter __last,
                               _OutputIter __result, __false_type)
{
  return __copy(__first, __last, __result,
                __iterator_category(__first),
                __distance_type(__first));
}

template <class _InputIter, class _OutputIter>
inline _OutputIter __copy_aux2(_InputIter __first, _InputIter __last,
                               _OutputIter __result, __true_type)
{
  return __copy(__first, __last, __result,
                __iterator_category(__first),
                __distance_type(__first));
}

template <class _Tp>
inline _Tp* __copy_aux2(_Tp* __first, _Tp* __last, _Tp* __result,
                        __true_type)
{
  return __copy_trivial(__first, __last, __result);
}

template <class _Tp>
inline _Tp* __copy_aux2(const _Tp* __first, const _Tp* __last, _Tp* __result,
                        __true_type)
{
  return __copy_trivial(__first, __last, __result);
}


template <class _InputIter, class _OutputIter, class _Tp>
inline _OutputIter __copy_aux(_InputIter __first, _InputIter __last,
                              _OutputIter __result, _Tp*)
{
  typedef typename __type_traits<_Tp>::has_trivial_assignment_operator
          _Trivial;
  return __copy_aux2(__first, __last, __result, _Trivial());
}

template<typename _InputIter, typename _OutputIter>
inline _OutputIter __copy_ni2(_InputIter __first, _InputIter __last,
                               _OutputIter __result, __true_type)
{
  return _OutputIter(__copy_aux(__first, __last, __result.base(),
                                __value_type(__first)));
}

template<typename _InputIter, typename _OutputIter>
inline _OutputIter __copy_ni2(_InputIter __first, _InputIter __last,
                              _OutputIter __result, __false_type)
{
  return __copy_aux(__first, __last, __result, __value_type(__first));
}

template<typename _InputIter, typename _OutputIter>
inline _OutputIter __copy_ni1(_InputIter __first, _InputIter __last,
                               _OutputIter __result, __true_type)
{
  typedef typename _Is_normal_iterator<_OutputIter>::_Normal __Normal;
  return __copy_ni2(__first.base(), __last.base(), __result, __Normal());
}

template<typename _InputIter, typename _OutputIter>
inline _OutputIter __copy_ni1(_InputIter __first, _InputIter __last,
                               _OutputIter __result, __false_type)
{
  typedef typename _Is_normal_iterator<_OutputIter>::_Normal __Normal;
  return __copy_ni2(__first, __last, __result, __Normal());
}

template <class _InputIter, class _OutputIter>
inline _OutputIter copy(_InputIter __first, _InputIter __last,
                        _OutputIter __result)
{

                                                                ;
                                                          ;


   typedef typename _Is_normal_iterator<_InputIter>::_Normal __Normal;
   return __copy_ni1(__first, __last, __result, __Normal());
}




template <class _BidirectionalIter1, class _BidirectionalIter2,
          class _Distance>
inline _BidirectionalIter2 __copy_backward(_BidirectionalIter1 __first,
                                           _BidirectionalIter1 __last,
                                           _BidirectionalIter2 __result,
                                           bidirectional_iterator_tag,
                                           _Distance*)
{
  while (__first != __last)
    *--__result = *--__last;
  return __result;
}

template <class _RandomAccessIter, class _BidirectionalIter, class _Distance>
inline _BidirectionalIter __copy_backward(_RandomAccessIter __first,
                                          _RandomAccessIter __last,
                                          _BidirectionalIter __result,
                                          random_access_iterator_tag,
                                          _Distance*)
{
  for (_Distance __n = __last - __first; __n > 0; --__n)
    *--__result = *--__last;
  return __result;
}







template <class _BidirectionalIter1, class _BidirectionalIter2,
          class _BoolType>
struct __copy_backward_dispatch
{
  typedef typename iterator_traits<_BidirectionalIter1>::iterator_category
          _Cat;
  typedef typename iterator_traits<_BidirectionalIter1>::difference_type
          _Distance;

  static _BidirectionalIter2 copy(_BidirectionalIter1 __first,
                                  _BidirectionalIter1 __last,
                                  _BidirectionalIter2 __result) {
    return __copy_backward(__first, __last, __result, _Cat(), (_Distance*) 0);
  }
};

template <class _Tp>
struct __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
{
  static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
    const ptrdiff_t _Num = __last - __first;
    memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
    return __result - _Num;
  }
};

template <class _Tp>
struct __copy_backward_dispatch<const _Tp*, _Tp*, __true_type>
{
  static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
    return __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
      ::copy(__first, __last, __result);
  }
};

template <class _BI1, class _BI2>
inline _BI2 __copy_backward_aux(_BI1 __first, _BI1 __last, _BI2 __result) {
  typedef typename __type_traits<typename iterator_traits<_BI2>::value_type>
                        ::has_trivial_assignment_operator
          _Trivial;
  return __copy_backward_dispatch<_BI1, _BI2, _Trivial>
              ::copy(__first, __last, __result);
}

template <typename _BI1, typename _BI2>
inline _BI2 __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,
                                                   _BI2 __result, __true_type) {
  return _BI2(__copy_backward_aux(__first, __last, __result.base()));
}

template <typename _BI1, typename _BI2>
inline _BI2 __copy_backward_output_normal_iterator(_BI1 __first, _BI1 __last,
                                                   _BI2 __result, __false_type){
  return __copy_backward_aux(__first, __last, __result);
}

template <typename _BI1, typename _BI2>
inline _BI2 __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,
                                                  _BI2 __result, __true_type) {
  typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal;
  return __copy_backward_output_normal_iterator(__first.base(), __last.base(),
                                                __result, __Normal());
}

template <typename _BI1, typename _BI2>
inline _BI2 __copy_backward_input_normal_iterator(_BI1 __first, _BI1 __last,
                                                  _BI2 __result, __false_type) {
  typedef typename _Is_normal_iterator<_BI2>::_Normal __Normal;
  return __copy_backward_output_normal_iterator(__first, __last, __result,
                                                __Normal());
}

template <typename _BI1, typename _BI2>
inline _BI2 copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
{

                                                                  ;
                                                                          ;
                                                    ;



  typedef typename _Is_normal_iterator<_BI1>::_Normal __Normal;
  return __copy_backward_input_normal_iterator(__first, __last, __result,
                                               __Normal());
}




template <class _InputIter, class _Size, class _OutputIter>
pair<_InputIter, _OutputIter> __copy_n(_InputIter __first, _Size __count,
                                       _OutputIter __result,
                                       input_iterator_tag) {
  for ( ; __count > 0; --__count) {
    *__result = *__first;
    ++__first;
    ++__result;
  }
  return pair<_InputIter, _OutputIter>(__first, __result);
}

template <class _RAIter, class _Size, class _OutputIter>
inline pair<_RAIter, _OutputIter>
__copy_n(_RAIter __first, _Size __count,
         _OutputIter __result,
         random_access_iterator_tag) {
  _RAIter __last = __first + __count;
  return pair<_RAIter, _OutputIter>(__last, copy(__first, __last, __result));
}

template <class _InputIter, class _Size, class _OutputIter>
inline pair<_InputIter, _OutputIter>
__copy_n(_InputIter __first, _Size __count, _OutputIter __result) {
  return __copy_n(__first, __count, __result,
                  __iterator_category(__first));
}

template <class _InputIter, class _Size, class _OutputIter>
inline pair<_InputIter, _OutputIter>
copy_n(_InputIter __first, _Size __count, _OutputIter __result)
{

                                                                ;
                                                          ;


  return __copy_n(__first, __count, __result);
}





template <class _ForwardIter, class _Tp>
void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __value)
{

                                                                            ;

  for ( ; __first != __last; ++__first)
    *__first = __value;
}

template <class _OutputIter, class _Size, class _Tp>
_OutputIter fill_n(_OutputIter __first, _Size __n, const _Tp& __value)
{

                                                                      ;

  for ( ; __n > 0; --__n, ++__first)
    *__first = __value;
  return __first;
}



inline void fill(unsigned char* __first, unsigned char* __last,
                 const unsigned char& __c)
{
  unsigned char __tmp = __c;
  memset(__first, __tmp, __last - __first);
}

inline void fill(signed char* __first, signed char* __last,
                 const signed char& __c)
{
  signed char __tmp = __c;
  memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
}

inline void fill(char* __first, char* __last, const char& __c)
{
  char __tmp = __c;
  memset(__first, static_cast<unsigned char>(__tmp), __last - __first);
}

template <class _Size>
inline unsigned char* fill_n(unsigned char* __first, _Size __n,
                             const unsigned char& __c)
{
  fill(__first, __first + __n, __c);
  return __first + __n;
}

template <class _Size>
inline signed char* fill_n(char* __first, _Size __n,
                           const signed char& __c)
{
  fill(__first, __first + __n, __c);
  return __first + __n;
}

template <class _Size>
inline char* fill_n(char* __first, _Size __n, const char& __c)
{
  fill(__first, __first + __n, __c);
  return __first + __n;
}





template <class _InputIter1, class _InputIter2>
pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
                                        _InputIter1 __last1,
                                        _InputIter2 __first2)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


  while (__first1 != __last1 && *__first1 == *__first2) {
    ++__first1;
    ++__first2;
  }
  return pair<_InputIter1, _InputIter2>(__first1, __first2);
}

template <class _InputIter1, class _InputIter2, class _BinaryPredicate>
pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
                                        _InputIter1 __last1,
                                        _InputIter2 __first2,
                                        _BinaryPredicate __binary_pred)
{

                                                                 ;
                                                                 ;

  while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) {
    ++__first1;
    ++__first2;
  }
  return pair<_InputIter1, _InputIter2>(__first1, __first2);
}

template <class _InputIter1, class _InputIter2>
inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
                  _InputIter2 __first2)
{

                                                                 ;
                                                                 ;
                                                           ;



  for ( ; __first1 != __last1; ++__first1, ++__first2)
    if (!(*__first1 == *__first2))
      return false;
  return true;
}

template <class _InputIter1, class _InputIter2, class _BinaryPredicate>
inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
                  _InputIter2 __first2, _BinaryPredicate __binary_pred)
{

                                                                 ;
                                                                 ;

  for ( ; __first1 != __last1; ++__first1, ++__first2)
    if (!__binary_pred(*__first1, *__first2))
      return false;
  return true;
}





template <class _InputIter1, class _InputIter2>
bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


  for ( ; __first1 != __last1 && __first2 != __last2
        ; ++__first1, ++__first2) {
    if (*__first1 < *__first2)
      return true;
    if (*__first2 < *__first1)
      return false;
  }
  return __first1 == __last1 && __first2 != __last2;
}

template <class _InputIter1, class _InputIter2, class _Compare>
bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2,
                             _Compare __comp)
{

                                                                 ;
                                                                 ;

  for ( ; __first1 != __last1 && __first2 != __last2
        ; ++__first1, ++__first2) {
    if (__comp(*__first1, *__first2))
      return true;
    if (__comp(*__first2, *__first1))
      return false;
  }
  return __first1 == __last1 && __first2 != __last2;
}

inline bool
lexicographical_compare(const unsigned char* __first1,
                        const unsigned char* __last1,
                        const unsigned char* __first2,
                        const unsigned char* __last2)
{
  const size_t __len1 = __last1 - __first1;
  const size_t __len2 = __last2 - __first2;
  const int __result = memcmp(__first1, __first2, min(__len1, __len2));
  return __result != 0 ? __result < 0 : __len1 < __len2;
}

inline bool lexicographical_compare(const char* __first1, const char* __last1,
                                    const char* __first2, const char* __last2)
{

  return lexicographical_compare((const signed char*) __first1,
                                 (const signed char*) __last1,
                                 (const signed char*) __first2,
                                 (const signed char*) __last2);






}

template <class _InputIter1, class _InputIter2>
int __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
                                   _InputIter2 __first2, _InputIter2 __last2)
{
  while (__first1 != __last1 && __first2 != __last2) {
    if (*__first1 < *__first2)
      return -1;
    if (*__first2 < *__first1)
      return 1;
    ++__first1;
    ++__first2;
  }
  if (__first2 == __last2) {
    return !(__first1 == __last1);
  }
  else {
    return -1;
  }
}

inline int
__lexicographical_compare_3way(const unsigned char* __first1,
                               const unsigned char* __last1,
                               const unsigned char* __first2,
                               const unsigned char* __last2)
{
  const ptrdiff_t __len1 = __last1 - __first1;
  const ptrdiff_t __len2 = __last2 - __first2;
  const int __result = memcmp(__first1, __first2, min(__len1, __len2));
  return __result != 0 ? __result
                       : (__len1 == __len2 ? 0 : (__len1 < __len2 ? -1 : 1));
}

inline int
__lexicographical_compare_3way(const char* __first1, const char* __last1,
                               const char* __first2, const char* __last2)
{

  return __lexicographical_compare_3way(
                                (const signed char*) __first1,
                                (const signed char*) __last1,
                                (const signed char*) __first2,
                                (const signed char*) __last2);






}

template <class _InputIter1, class _InputIter2>
int lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
                                 _InputIter2 __first2, _InputIter2 __last2)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


  return __lexicographical_compare_3way(__first1, __last1, __first2, __last2);
}

}
# 50 "/opt/egcs/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 1 3
# 57 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/functexcept.h" 3
# 1 "/opt/egcs/include/g++-v3/exception_defines.h" 1 3
# 35 "/opt/egcs/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 58 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstddef.h" 1 3
# 59 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 1 3
# 60 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 1 3
# 61 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cassert.h" 1 3
# 37 "/opt/egcs/include/g++-v3/bits/std_cassert.h" 3
# 1 "/usr/include/assert.h" 1 3
# 36 "/usr/include/assert.h" 3
# 1 "/usr/include/features.h" 1 3
# 37 "/usr/include/assert.h" 2 3
# 65 "/usr/include/assert.h" 3
extern "C" {


extern void __assert_fail (__const char *__assertion, __const char *__file,
                           unsigned int __line, __const char *__function)
     throw () __attribute__ ((__noreturn__));


extern void __assert_perror_fail (int __errnum, __const char *__file,
                                  unsigned int __line,
                                  __const char *__function)
     throw () __attribute__ ((__noreturn__));




extern void __assert (const char *__assertion, const char *__file, int __line)
     throw () __attribute__ ((__noreturn__));


}
# 38 "/opt/egcs/include/g++-v3/bits/std_cassert.h" 2 3
# 62 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 2 3





# 1 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 1 3
# 62 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/gthr.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 2 3
# 80 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
namespace std
{
# 95 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
struct _Refcount_Base
{




  typedef size_t _RC_t;



   volatile _RC_t _M_ref_count;




  __gthread_mutex_t _M_ref_count_lock;
  _Refcount_Base(_RC_t __n) : _M_ref_count(__n)
    {

      __gthread_mutex_t __tmp = {0, 0, 0, PTHREAD_MUTEX_TIMED_NP, { 0, 0 }};
      _M_ref_count_lock = __tmp;





    }
# 141 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
  void _M_incr() {
    __gthread_mutex_lock(&_M_ref_count_lock);
    ++_M_ref_count;
    __gthread_mutex_unlock(&_M_ref_count_lock);
  }
  _RC_t _M_decr() {
    __gthread_mutex_lock(&_M_ref_count_lock);
    volatile _RC_t __tmp = --_M_ref_count;
    __gthread_mutex_unlock(&_M_ref_count_lock);
    return __tmp;
  }
# 192 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
};
# 313 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
template <int __inst>
struct _STL_mutex_spin {
  enum { __low_max = 30, __high_max = 1000 };


  static unsigned __max;
  static unsigned __last;
};

template <int __inst>
unsigned _STL_mutex_spin<__inst>::__max = _STL_mutex_spin<__inst>::__low_max;

template <int __inst>
unsigned _STL_mutex_spin<__inst>::__last = 0;
# 340 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
struct _STL_mutex_lock
{







  __gthread_mutex_t _M_lock;
  void _M_initialize() {
# 371 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
  }
  void _M_acquire_lock() {



    __gthread_mutex_lock(&_M_lock);
  }
  void _M_release_lock() {



    __gthread_mutex_unlock(&_M_lock);
  }
# 482 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
};
# 521 "/opt/egcs/include/g++-v3/bits/stl_threads.h" 3
struct _STL_auto_lock
{
  _STL_mutex_lock& _M_lock;

  _STL_auto_lock(_STL_mutex_lock& __lock) : _M_lock(__lock)
    { _M_lock._M_acquire_lock(); }
  ~_STL_auto_lock() { _M_lock._M_release_lock(); }

private:
  void operator=(const _STL_auto_lock&);
  _STL_auto_lock(const _STL_auto_lock&);
};

}
# 68 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 2 3
# 97 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 3
namespace std
{

  class __new_alloc
  {
  public:
    static void*
    allocate(size_t __n)
    { return ::operator new(__n); }

    static void
    deallocate(void* __p, size_t)
    { ::operator delete(__p); }
  };



  template <int __inst>
    class __malloc_alloc_template
    {
    private:
      static void* _S_oom_malloc(size_t);
      static void* _S_oom_realloc(void*, size_t);
      static void (* __malloc_alloc_oom_handler)();

    public:
      static void*
      allocate(size_t __n)
      {
        void* __result = malloc(__n);
        if (0 == __result) __result = _S_oom_malloc(__n);
        return __result;
      }

      static void
      deallocate(void* __p, size_t )
      { free(__p); }

      static void*
      reallocate(void* __p, size_t , size_t __new_sz)
      {
        void* __result = realloc(__p, __new_sz);
        if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
        return __result;
      }

      static void (* __set_malloc_handler(void (*__f)()))()
      {
        void (* __old)() = __malloc_alloc_oom_handler;
        __malloc_alloc_oom_handler = __f;
        return(__old);
      }
    };


  template <int __inst>
    void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0;

  template <int __inst>
    void*
    __malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
    {
      void (* __my_malloc_handler)();
      void* __result;

      for (;;)
        {
          __my_malloc_handler = __malloc_alloc_oom_handler;
          if (0 == __my_malloc_handler)
            std::__throw_bad_alloc();
          (*__my_malloc_handler)();
          __result = malloc(__n);
          if (__result)
            return(__result);
        }
    }

  template <int __inst>
    void*
    __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
    {
      void (* __my_malloc_handler)();
      void* __result;

      for (;;)
        {
          __my_malloc_handler = __malloc_alloc_oom_handler;
          if (0 == __my_malloc_handler)
            std::__throw_bad_alloc();
          (*__my_malloc_handler)();
          __result = realloc(__p, __n);
          if (__result)
            return(__result);
        }
    }





  typedef __new_alloc __mem_interface;


template<class _Tp, class _Alloc>
class simple_alloc {

public:
    static _Tp* allocate(size_t __n)
      { return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); }
    static _Tp* allocate(void)
      { return (_Tp*) _Alloc::allocate(sizeof (_Tp)); }
    static void deallocate(_Tp* __p, size_t __n)
      { if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); }
    static void deallocate(_Tp* __p)
      { _Alloc::deallocate(__p, sizeof (_Tp)); }
};






template <class _Alloc>
class debug_alloc {

private:

  enum {_S_extra = 8};



public:

  static void* allocate(size_t __n)
  {
    char* __result = (char*)_Alloc::allocate(__n + (int) _S_extra);
    *(size_t*)__result = __n;
    return __result + (int) _S_extra;
  }

  static void deallocate(void* __p, size_t __n)
  {
    char* __real_p = (char*)__p - (int) _S_extra;
    (static_cast<void> ((*(size_t*)__real_p == __n) ? 0 : (__assert_fail ("*(size_t*)__real_p == __n", "/opt/egcs/include/g++-v3/bits/stl_alloc.h", 240, __PRETTY_FUNCTION__), 0)));
    _Alloc::deallocate(__real_p, __n + (int) _S_extra);
  }

  static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
  {
    char* __real_p = (char*)__p - (int) _S_extra;
    (static_cast<void> ((*(size_t*)__real_p == __old_sz) ? 0 : (__assert_fail ("*(size_t*)__real_p == __old_sz", "/opt/egcs/include/g++-v3/bits/stl_alloc.h", 247, __PRETTY_FUNCTION__), 0)));
    char* __result = (char*)
      _Alloc::reallocate(__real_p, __old_sz + (int) _S_extra,
                                   __new_sz + (int) _S_extra);
    *(size_t*)__result = __new_sz;
    return __result + (int) _S_extra;
  }

};
# 291 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 3
template <bool threads, int inst>
class __default_alloc_template {

private:


  enum {_ALIGN = 8};
  enum {_MAX_BYTES = 128};
  enum {_NFREELISTS = 16};
  static size_t
  _S_round_up(size_t __bytes)
    { return (((__bytes) + (size_t) _ALIGN-1) & ~((size_t) _ALIGN - 1)); }

  union _Obj {
        union _Obj* _M_free_list_link;
        char _M_client_data[1];
  };

  static _Obj* volatile _S_free_list[];

  static size_t _S_freelist_index(size_t __bytes) {
        return (((__bytes) + (size_t)_ALIGN-1)/(size_t)_ALIGN - 1);
  }


  static void* _S_refill(size_t __n);


  static char* _S_chunk_alloc(size_t __size, int& __nobjs);


  static char* _S_start_free;
  static char* _S_end_free;
  static size_t _S_heap_size;


    static _STL_mutex_lock _S_node_allocator_lock;





    class _Lock;
    friend class _Lock;
    class _Lock {
        public:
            _Lock() { { if (threads) _S_node_allocator_lock._M_acquire_lock(); }; }
            ~_Lock() { { if (threads) _S_node_allocator_lock._M_release_lock(); }; }
    };

public:


  static void* allocate(size_t __n)
  {
    void* __ret = 0;

    if (__n > (size_t) _MAX_BYTES)
      __ret = __mem_interface::allocate(__n);
    else
      {
        _Obj* volatile* __my_free_list = _S_free_list + _S_freelist_index(__n);





        _Lock __lock_instance;

        _Obj* __result = *__my_free_list;
        if (__result == 0)
          __ret = _S_refill(_S_round_up(__n));
        else
          {
            *__my_free_list = __result -> _M_free_list_link;
            __ret = __result;
          }
      }

    return __ret;
  };


  static void deallocate(void* __p, size_t __n)
  {
    if (__n > (size_t) _MAX_BYTES)
      __mem_interface::deallocate(__p, __n);
    else
      {
        _Obj* volatile* __my_free_list
          = _S_free_list + _S_freelist_index(__n);
        _Obj* __q = (_Obj*)__p;




        _Lock __lock_instance;

        __q -> _M_free_list_link = *__my_free_list;
        *__my_free_list = __q;

      }
  }

  static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz);
};

typedef __default_alloc_template<true, 0> alloc;
typedef __default_alloc_template<false, 0> single_client_alloc;

template <bool __threads, int __inst>
inline bool operator==(const __default_alloc_template<__threads, __inst>&,
                       const __default_alloc_template<__threads, __inst>&)
{
  return true;
}

template <bool __threads, int __inst>
inline bool operator!=(const __default_alloc_template<__threads, __inst>&,
                       const __default_alloc_template<__threads, __inst>&)
{
  return false;
}







template <bool __threads, int __inst>
char*
__default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size,
                                                            int& __nobjs)
{
    char* __result;
    size_t __total_bytes = __size * __nobjs;
    size_t __bytes_left = _S_end_free - _S_start_free;

    if (__bytes_left >= __total_bytes)
      {
        __result = _S_start_free;
        _S_start_free += __total_bytes;
        return(__result);
      }
    else if (__bytes_left >= __size)
      {
        __nobjs = (int)(__bytes_left/__size);
        __total_bytes = __size * __nobjs;
        __result = _S_start_free;
        _S_start_free += __total_bytes;
        return(__result);
    }
    else
      {
        size_t __bytes_to_get =
          2 * __total_bytes + _S_round_up(_S_heap_size >> 4);

        if (__bytes_left > 0)
          {
            _Obj* volatile* __my_free_list =
              _S_free_list + _S_freelist_index(__bytes_left);

            ((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
            *__my_free_list = (_Obj*)_S_start_free;
          }
        _S_start_free = (char*) __mem_interface::allocate(__bytes_to_get);
        if (0 == _S_start_free)
          {
            size_t __i;
            _Obj* volatile* __my_free_list;
            _Obj* __p;



            __i = __size;
            for (; __i <= (size_t) _MAX_BYTES; __i += (size_t) _ALIGN)
              {
                __my_free_list = _S_free_list + _S_freelist_index(__i);
                __p = *__my_free_list;
                if (0 != __p)
                  {
                    *__my_free_list = __p -> _M_free_list_link;
                    _S_start_free = (char*)__p;
                    _S_end_free = _S_start_free + __i;
                    return(_S_chunk_alloc(__size, __nobjs));


                  }
              }
            _S_end_free = 0;
            _S_start_free = (char*)__mem_interface::allocate(__bytes_to_get);



          }
        _S_heap_size += __bytes_to_get;
        _S_end_free = _S_start_free + __bytes_to_get;
        return(_S_chunk_alloc(__size, __nobjs));
      }
}





template <bool __threads, int __inst>
void*
__default_alloc_template<__threads, __inst>::_S_refill(size_t __n)
{
    int __nobjs = 20;
    char* __chunk = _S_chunk_alloc(__n, __nobjs);
    _Obj* volatile* __my_free_list;
    _Obj* __result;
    _Obj* __current_obj;
    _Obj* __next_obj;
    int __i;

    if (1 == __nobjs) return(__chunk);
    __my_free_list = _S_free_list + _S_freelist_index(__n);


      __result = (_Obj*)__chunk;
      *__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
      for (__i = 1; ; __i++) {
        __current_obj = __next_obj;
        __next_obj = (_Obj*)((char*)__next_obj + __n);
        if (__nobjs - 1 == __i) {
            __current_obj -> _M_free_list_link = 0;
            break;
        } else {
            __current_obj -> _M_free_list_link = __next_obj;
        }
      }
    return(__result);
}

template <bool threads, int inst>
void*
__default_alloc_template<threads, inst>::reallocate(void* __p,
                                                    size_t __old_sz,
                                                    size_t __new_sz)
{
    void* __result;
    size_t __copy_sz;

    if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
        return(realloc(__p, __new_sz));
    }
    if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
    __result = allocate(__new_sz);
    __copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
    memcpy(__result, __p, __copy_sz);
    deallocate(__p, __old_sz);
    return(__result);
}


    template <bool __threads, int __inst>
    _STL_mutex_lock
    __default_alloc_template<__threads, __inst>::_S_node_allocator_lock
        = { {0, 0, 0, PTHREAD_MUTEX_TIMED_NP, { 0, 0 }} };



template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_start_free = 0;

template <bool __threads, int __inst>
char* __default_alloc_template<__threads, __inst>::_S_end_free = 0;

template <bool __threads, int __inst>
size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0;

template <bool __threads, int __inst>
typename __default_alloc_template<__threads, __inst>::_Obj* volatile
__default_alloc_template<__threads, __inst> ::_S_free_list[
    __default_alloc_template<__threads, __inst>::_NFREELISTS
] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
# 584 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 3
template <class _Tp>
class allocator {
  typedef alloc _Alloc;
public:
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef _Tp* pointer;
  typedef const _Tp* const_pointer;
  typedef _Tp& reference;
  typedef const _Tp& const_reference;
  typedef _Tp value_type;

  template <class _Tp1> struct rebind {
    typedef allocator<_Tp1> other;
  };

  allocator() throw() {}
  allocator(const allocator&) throw() {}
  template <class _Tp1> allocator(const allocator<_Tp1>&) throw() {}
  ~allocator() throw() {}

  pointer address(reference __x) const { return &__x; }
  const_pointer address(const_reference __x) const { return &__x; }



  _Tp* allocate(size_type __n, const void* = 0) {
    return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp)))
                    : 0;
  }


  void deallocate(pointer __p, size_type __n)
    { _Alloc::deallocate(__p, __n * sizeof(_Tp)); }

  size_type max_size() const throw()
    { return size_t(-1) / sizeof(_Tp); }

  void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
  void destroy(pointer __p) { __p->~_Tp(); }
};

template<>
class allocator<void> {
public:
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef void* pointer;
  typedef const void* const_pointer;
  typedef void value_type;

  template <class _Tp1> struct rebind {
    typedef allocator<_Tp1> other;
  };
};


template <class _T1, class _T2>
inline bool operator==(const allocator<_T1>&, const allocator<_T2>&)
{
  return true;
}

template <class _T1, class _T2>
inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&)
{
  return false;
}
# 660 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 3
template <class _Tp, class _Alloc>
struct __allocator {
  _Alloc __underlying_alloc;

  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef _Tp* pointer;
  typedef const _Tp* const_pointer;
  typedef _Tp& reference;
  typedef const _Tp& const_reference;
  typedef _Tp value_type;

  template <class _Tp1> struct rebind {
    typedef __allocator<_Tp1, _Alloc> other;
  };

  __allocator() throw() {}
  __allocator(const __allocator& __a) throw()
    : __underlying_alloc(__a.__underlying_alloc) {}
  template <class _Tp1>
  __allocator(const __allocator<_Tp1, _Alloc>& __a) throw()
    : __underlying_alloc(__a.__underlying_alloc) {}
  ~__allocator() throw() {}

  pointer address(reference __x) const { return &__x; }
  const_pointer address(const_reference __x) const { return &__x; }


  _Tp* allocate(size_type __n, const void* = 0) {
    return __n != 0
        ? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp)))
        : 0;
  }


  void deallocate(pointer __p, size_type __n)
    { __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); }

  size_type max_size() const throw()
    { return size_t(-1) / sizeof(_Tp); }

  void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
  void destroy(pointer __p) { __p->~_Tp(); }
};

template <class _Alloc>
class __allocator<void, _Alloc> {
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;
  typedef void* pointer;
  typedef const void* const_pointer;
  typedef void value_type;

  template <class _Tp1> struct rebind {
    typedef __allocator<_Tp1, _Alloc> other;
  };
};

template <class _Tp, class _Alloc>
inline bool operator==(const __allocator<_Tp, _Alloc>& __a1,
                       const __allocator<_Tp, _Alloc>& __a2)
{
  return __a1.__underlying_alloc == __a2.__underlying_alloc;
}

template <class _Tp, class _Alloc>
inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1,
                       const __allocator<_Tp, _Alloc>& __a2)
{
  return __a1.__underlying_alloc != __a2.__underlying_alloc;
}





template <int inst>
inline bool operator==(const __malloc_alloc_template<inst>&,
                       const __malloc_alloc_template<inst>&)
{
  return true;
}

template <int __inst>
inline bool operator!=(const __malloc_alloc_template<__inst>&,
                       const __malloc_alloc_template<__inst>&)
{
  return false;
}

template <class _Alloc>
inline bool operator==(const debug_alloc<_Alloc>&,
                       const debug_alloc<_Alloc>&) {
  return true;
}

template <class _Alloc>
inline bool operator!=(const debug_alloc<_Alloc>&,
                       const debug_alloc<_Alloc>&) {
  return false;
}
# 790 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 3
template <class _Tp, class _Allocator>
struct _Alloc_traits
{
  static const bool _S_instanceless = false;
  typedef typename _Allocator::template rebind<_Tp>::other allocator_type;
};

template <class _Tp, class _Allocator>
const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless;



template <class _Tp, class _Tp1>
struct _Alloc_traits<_Tp, allocator<_Tp1> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, alloc> _Alloc_type;
  typedef allocator<_Tp> allocator_type;
};



template <class _Tp, int __inst>
struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
  typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};


template <class _Tp, bool __threads, int __inst>
struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __default_alloc_template<__threads, __inst> >
          _Alloc_type;
  typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
          allocator_type;
};


template <class _Tp, class _Alloc>
struct _Alloc_traits<_Tp, debug_alloc<_Alloc> >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
  typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};




template <class _Tp, class _Tp1, int __inst>
struct _Alloc_traits<_Tp,
                     __allocator<_Tp1, __malloc_alloc_template<__inst> > >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
  typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
};


template <class _Tp, class _Tp1, bool __thr, int __inst>
struct _Alloc_traits<_Tp,
                      __allocator<_Tp1,
                                  __default_alloc_template<__thr, __inst> > >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, __default_alloc_template<__thr,__inst> >
          _Alloc_type;
  typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
          allocator_type;
};


template <class _Tp, class _Tp1, class _Alloc>
struct _Alloc_traits<_Tp, __allocator<_Tp1, debug_alloc<_Alloc> > >
{
  static const bool _S_instanceless = true;
  typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
  typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
};

}
# 51 "/opt/egcs/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/type_traits.h" 1 3
# 64 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 2 3
# 1 "/opt/egcs/include/g++-v3/new" 1 3
# 65 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 2 3

namespace std
{






  template <class _T1, class _T2>
    inline void
    _Construct(_T1* __p, const _T2& __value)
    { new (static_cast<void*>(__p)) _T1(__value); }







  template <class _T1>
    inline void
    _Construct(_T1* __p)
    { new (static_cast<void*>(__p)) _T1(); }






  template <class _ForwardIterator>
    inline void
    __destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
    { for ( ; __first != __last; ++__first) _Destroy(&*__first); }
# 107 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 3
  template <class _ForwardIterator>
    inline void
    __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type)
    { }







  template <class _Tp>
    inline void
    _Destroy(_Tp* __pointer)
    { __pointer->~_Tp(); }
# 131 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 3
  template <class _ForwardIterator>
    inline void
    _Destroy(_ForwardIterator __first, _ForwardIterator __last)
    {
      typedef typename iterator_traits<_ForwardIterator>::value_type
                       _Value_type;
      typedef typename __type_traits<_Value_type>::has_trivial_destructor
                       _Has_trivial_destructor;

      __destroy_aux(__first, __last, _Has_trivial_destructor());
    }
}
# 52 "/opt/egcs/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_types.h" 1 3
# 53 "/opt/egcs/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_tempbuf.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_tempbuf.h" 3
namespace std
{

template <class _Tp>
pair<_Tp*, ptrdiff_t>
__get_temporary_buffer(ptrdiff_t __len, _Tp*)
{
  if (__len > ptrdiff_t(2147483647 / sizeof(_Tp)))
    __len = 2147483647 / sizeof(_Tp);

  while (__len > 0) {
    _Tp* __tmp = (_Tp*) malloc((size_t)__len * sizeof(_Tp));
    if (__tmp != 0)
      return pair<_Tp*, ptrdiff_t>(__tmp, __len);
    __len /= 2;
  }

  return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0);
}

template <class _Tp>
inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len) {
  return __get_temporary_buffer(__len, (_Tp*) 0);
}






template <class _Tp>
inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len, _Tp*) {
  return __get_temporary_buffer(__len, (_Tp*) 0);
}

template <class _Tp>
void return_temporary_buffer(_Tp* __p) {
  free(__p);
}

template <class _ForwardIterator, class _Tp>
class _Temporary_buffer {
private:
  ptrdiff_t _M_original_len;
  ptrdiff_t _M_len;
  _Tp* _M_buffer;

  void _M_allocate_buffer() {
    _M_original_len = _M_len;
    _M_buffer = 0;

    if (_M_len > (ptrdiff_t)(2147483647 / sizeof(_Tp)))
      _M_len = 2147483647 / sizeof(_Tp);

    while (_M_len > 0) {
      _M_buffer = (_Tp*) malloc(_M_len * sizeof(_Tp));
      if (_M_buffer)
        break;
      _M_len /= 2;
    }
  }

  void _M_initialize_buffer(const _Tp&, __true_type) {}
  void _M_initialize_buffer(const _Tp& val, __false_type) {
    uninitialized_fill_n(_M_buffer, _M_len, val);
  }

public:
  ptrdiff_t size() const { return _M_len; }
  ptrdiff_t requested_size() const { return _M_original_len; }
  _Tp* begin() { return _M_buffer; }
  _Tp* end() { return _M_buffer + _M_len; }

  _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) {

    typedef typename __type_traits<_Tp>::has_trivial_default_constructor
            _Trivial;

    try {
      _M_len = 0;
      distance(__first, __last, _M_len);
      _M_allocate_buffer();
      if (_M_len > 0)
        _M_initialize_buffer(*__first, _Trivial());
    }
    catch(...) { free(_M_buffer); _M_buffer = 0; _M_len = 0; throw; };
  }

  ~_Temporary_buffer() {
    _Destroy(_M_buffer, _M_buffer + _M_len);
    free(_M_buffer);
  }

private:

  _Temporary_buffer(const _Temporary_buffer&) {}
  void operator=(const _Temporary_buffer&) {}
};



template <class _ForwardIterator,
          class _Tp
                    = typename iterator_traits<_ForwardIterator>::value_type
         >
struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp>
{
  temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
    : _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) {}
  ~temporary_buffer() {}
};

}
# 54 "/opt/egcs/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_uninitialized.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_uninitialized.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstring.h" 1 3
# 64 "/opt/egcs/include/g++-v3/bits/stl_uninitialized.h" 2 3

namespace std
{





template <class _InputIter, class _ForwardIter>
inline _ForwardIter
__uninitialized_copy_aux(_InputIter __first, _InputIter __last,
                         _ForwardIter __result,
                         __true_type)
{
  return copy(__first, __last, __result);
}

template <class _InputIter, class _ForwardIter>
_ForwardIter
__uninitialized_copy_aux(_InputIter __first, _InputIter __last,
                         _ForwardIter __result,
                         __false_type)
{
  _ForwardIter __cur = __result;
  try {
    for ( ; __first != __last; ++__first, ++__cur)
      _Construct(&*__cur, *__first);
    return __cur;
  }
  catch(...) { _Destroy(__result, __cur); throw; };
}


template <class _InputIter, class _ForwardIter, class _Tp>
inline _ForwardIter
__uninitialized_copy(_InputIter __first, _InputIter __last,
                     _ForwardIter __result, _Tp*)
{
  typedef typename __type_traits<_Tp>::is_POD_type _Is_POD;
  return __uninitialized_copy_aux(__first, __last, __result, _Is_POD());
}

template <class _InputIter, class _ForwardIter>
inline _ForwardIter
  uninitialized_copy(_InputIter __first, _InputIter __last,
                     _ForwardIter __result)
{
  return __uninitialized_copy(__first, __last, __result,
                              __value_type(__result));
}

inline char* uninitialized_copy(const char* __first, const char* __last,
                                char* __result) {
  memmove(__result, __first, __last - __first);
  return __result + (__last - __first);
}

inline wchar_t*
uninitialized_copy(const wchar_t* __first, const wchar_t* __last,
                   wchar_t* __result)
{
  memmove(__result, __first, sizeof(wchar_t) * (__last - __first));
  return __result + (__last - __first);
}



template <class _InputIter, class _Size, class _ForwardIter>
pair<_InputIter, _ForwardIter>
__uninitialized_copy_n(_InputIter __first, _Size __count,
                       _ForwardIter __result,
                       input_iterator_tag)
{
  _ForwardIter __cur = __result;
  try {
    for ( ; __count > 0 ; --__count, ++__first, ++__cur)
      _Construct(&*__cur, *__first);
    return pair<_InputIter, _ForwardIter>(__first, __cur);
  }
  catch(...) { _Destroy(__result, __cur); throw; };
}

template <class _RandomAccessIter, class _Size, class _ForwardIter>
inline pair<_RandomAccessIter, _ForwardIter>
__uninitialized_copy_n(_RandomAccessIter __first, _Size __count,
                       _ForwardIter __result,
                       random_access_iterator_tag) {
  _RandomAccessIter __last = __first + __count;
  return pair<_RandomAccessIter, _ForwardIter>(
                 __last,
                 uninitialized_copy(__first, __last, __result));
}

template <class _InputIter, class _Size, class _ForwardIter>
inline pair<_InputIter, _ForwardIter>
__uninitialized_copy_n(_InputIter __first, _Size __count,
                     _ForwardIter __result) {
  return __uninitialized_copy_n(__first, __count, __result,
                                __iterator_category(__first));
}

template <class _InputIter, class _Size, class _ForwardIter>
inline pair<_InputIter, _ForwardIter>
uninitialized_copy_n(_InputIter __first, _Size __count,
                     _ForwardIter __result) {
  return __uninitialized_copy_n(__first, __count, __result,
                                __iterator_category(__first));
}



template <class _ForwardIter, class _Tp>
inline void
__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
                         const _Tp& __x, __true_type)
{
  fill(__first, __last, __x);
}

template <class _ForwardIter, class _Tp>
void
__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
                         const _Tp& __x, __false_type)
{
  _ForwardIter __cur = __first;
  try {
    for ( ; __cur != __last; ++__cur)
      _Construct(&*__cur, __x);
  }
  catch(...) { _Destroy(__first, __cur); throw; };
}

template <class _ForwardIter, class _Tp, class _Tp1>
inline void __uninitialized_fill(_ForwardIter __first,
                                 _ForwardIter __last, const _Tp& __x, _Tp1*)
{
  typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD;
  __uninitialized_fill_aux(__first, __last, __x, _Is_POD());

}

template <class _ForwardIter, class _Tp>
inline void uninitialized_fill(_ForwardIter __first,
                               _ForwardIter __last,
                               const _Tp& __x)
{
  __uninitialized_fill(__first, __last, __x, __value_type(__first));
}



template <class _ForwardIter, class _Size, class _Tp>
inline _ForwardIter
__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
                           const _Tp& __x, __true_type)
{
  return fill_n(__first, __n, __x);
}

template <class _ForwardIter, class _Size, class _Tp>
_ForwardIter
__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
                           const _Tp& __x, __false_type)
{
  _ForwardIter __cur = __first;
  try {
    for ( ; __n > 0; --__n, ++__cur)
      _Construct(&*__cur, __x);
    return __cur;
  }
  catch(...) { _Destroy(__first, __cur); throw; };
}

template <class _ForwardIter, class _Size, class _Tp, class _Tp1>
inline _ForwardIter
__uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x, _Tp1*)
{
  typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD;
  return __uninitialized_fill_n_aux(__first, __n, __x, _Is_POD());
}

template <class _ForwardIter, class _Size, class _Tp>
inline _ForwardIter
uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x)
{
  return __uninitialized_fill_n(__first, __n, __x, __value_type(__first));
}
# 260 "/opt/egcs/include/g++-v3/bits/stl_uninitialized.h" 3
template <class _InputIter1, class _InputIter2, class _ForwardIter>
inline _ForwardIter
__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1,
                          _InputIter2 __first2, _InputIter2 __last2,
                          _ForwardIter __result)
{
  _ForwardIter __mid = uninitialized_copy(__first1, __last1, __result);
  try {
    return uninitialized_copy(__first2, __last2, __mid);
  }
  catch(...) { _Destroy(__result, __mid); throw; };
}




template <class _ForwardIter, class _Tp, class _InputIter>
inline _ForwardIter
__uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid,
                          const _Tp& __x,
                          _InputIter __first, _InputIter __last)
{
  uninitialized_fill(__result, __mid, __x);
  try {
    return uninitialized_copy(__first, __last, __mid);
  }
  catch(...) { _Destroy(__result, __mid); throw; };
}




template <class _InputIter, class _ForwardIter, class _Tp>
inline void
__uninitialized_copy_fill(_InputIter __first1, _InputIter __last1,
                          _ForwardIter __first2, _ForwardIter __last2,
                          const _Tp& __x)
{
  _ForwardIter __mid2 = uninitialized_copy(__first1, __last1, __first2);
  try {
    uninitialized_fill(__mid2, __last2, __x);
  }
  catch(...) { _Destroy(__first2, __mid2); throw; };
}

}
# 55 "/opt/egcs/include/g++-v3/bits/std_memory.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_raw_storage_iter.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_raw_storage_iter.h" 3
namespace std
{
  template <class _ForwardIterator, class _Tp>
  class raw_storage_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    protected:
      _ForwardIterator _M_iter;

    public:
      explicit
      raw_storage_iterator(_ForwardIterator __x) : _M_iter(__x) {}

      raw_storage_iterator&
      operator*() { return *this; }

      raw_storage_iterator&
      operator=(const _Tp& __element)
      {
        construct(&*_M_iter, __element);
        return *this;
      }

      raw_storage_iterator<_ForwardIterator, _Tp>&
      operator++()
      {
        ++_M_iter;
        return *this;
      }

      raw_storage_iterator<_ForwardIterator, _Tp>
      operator++(int)
      {
        raw_storage_iterator<_ForwardIterator, _Tp> __tmp = *this;
        ++_M_iter;
        return __tmp;
      }
    };
}
# 56 "/opt/egcs/include/g++-v3/bits/std_memory.h" 2 3

namespace std
{

 template<class _Tp1> struct auto_ptr_ref {
   _Tp1* _M_ptr;
   auto_ptr_ref(_Tp1* __p) : _M_ptr(__p) {}
};

template <class _Tp> class auto_ptr {
private:
  _Tp* _M_ptr;

public:
  typedef _Tp element_type;

  explicit auto_ptr(_Tp* __p = 0) throw() : _M_ptr(__p) {}
  auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) {}

  template <class _Tp1> auto_ptr(auto_ptr<_Tp1>& __a) throw()
    : _M_ptr(__a.release()) {}

  auto_ptr& operator=(auto_ptr& __a) throw() {
    reset(__a.release());
    return *this;
  }

  template <class _Tp1>
  auto_ptr& operator=(auto_ptr<_Tp1>& __a) throw() {
    reset(__a.release());
    return *this;
  }





  ~auto_ptr() { delete _M_ptr; }

  _Tp& operator*() const throw() {
    return *_M_ptr;
  }
  _Tp* operator->() const throw() {
    return _M_ptr;
  }
  _Tp* get() const throw() {
    return _M_ptr;
  }
  _Tp* release() throw() {
    _Tp* __tmp = _M_ptr;
    _M_ptr = 0;
    return __tmp;
  }
  void reset(_Tp* __p = 0) throw() {
    if (__p != _M_ptr) {
      delete _M_ptr;
      _M_ptr = __p;
    }
  }





public:
  auto_ptr(auto_ptr_ref<_Tp> __ref) throw()
    : _M_ptr(__ref._M_ptr) {}

  auto_ptr& operator=(auto_ptr_ref<_Tp> __ref) throw() {
    if (__ref._M_ptr != this->get()) {
      delete _M_ptr;
      _M_ptr = __ref._M_ptr;
    }
    return *this;
  }

  template <class _Tp1> operator auto_ptr_ref<_Tp1>() throw()
    { return auto_ptr_ref<_Tp>(this->release()); }
  template <class _Tp1> operator auto_ptr<_Tp1>() throw()
    { return auto_ptr<_Tp1>(this->release()); }
};

}
# 43 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/type_traits.h" 1 3
# 44 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 1 3
# 45 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_iterator.h" 1 3
# 46 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/basic_string.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/basic_string.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/atomicity.h" 1 3
# 33 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/atomicity.h" 3
typedef int _Atomic_word;

static inline _Atomic_word
__attribute__ ((__unused__))
__exchange_and_add (volatile _Atomic_word *__mem, int __val)
{
  register _Atomic_word __result;
  __asm__ __volatile__ ("lock; xaddl %0,%2"
                        : "=r" (__result)
                        : "0" (__val), "m" (*__mem)
                        : "memory");
  return __result;
}

static inline void
__attribute__ ((__unused__))
__atomic_add (volatile _Atomic_word* __mem, int __val)
{
  __asm__ __volatile__ ("lock; addl %0,%1"
                        : : "ir" (__val), "m" (*__mem) : "memory");
}

static inline char
__attribute__ ((__unused__))
__compare_and_swap (volatile long* __p, long __oldval, long __newval)
{
  char __ret;
  long __readval;

  __asm__ __volatile__ ("lock; cmpxchgl %3, %1; sete %0"
                        : "=q" (__ret), "=m" (*__p), "=a" (__readval)
                        : "r" (__newval), "m" (*__p), "a" (__oldval));
  return __ret;
}
# 40 "/opt/egcs/include/g++-v3/bits/basic_string.h" 2 3

namespace std
{
# 83 "/opt/egcs/include/g++-v3/bits/basic_string.h" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    class basic_string
    {

    public:
      typedef _Traits traits_type;
      typedef typename _Traits::char_type value_type;
      typedef _Alloc allocator_type;
      typedef typename _Alloc::size_type size_type;
      typedef typename _Alloc::difference_type difference_type;
      typedef typename _Alloc::reference reference;
      typedef typename _Alloc::const_reference const_reference;
      typedef typename _Alloc::pointer pointer;
      typedef typename _Alloc::const_pointer const_pointer;
      typedef __normal_iterator<pointer, basic_string> iterator;
      typedef __normal_iterator<const_pointer, basic_string> const_iterator;
      typedef reverse_iterator<const_iterator> const_reverse_iterator;
      typedef reverse_iterator<iterator> reverse_iterator;

    private:
# 118 "/opt/egcs/include/g++-v3/bits/basic_string.h" 3
      struct _Rep
      {

        typedef typename _Alloc::rebind<char>::other _Raw_bytes_alloc;
# 136 "/opt/egcs/include/g++-v3/bits/basic_string.h" 3
        static const size_type _S_max_size;
        static const _CharT _S_terminal;

        size_type _M_length;
        size_type _M_capacity;
        _Atomic_word _M_references;

        bool
        _M_is_leaked() const
        { return _M_references < 0; }

        bool
        _M_is_shared() const
        { return _M_references > 0; }

        void
        _M_set_leaked()
        { _M_references = -1; }

        void
        _M_set_sharable()
        { _M_references = 0; }

        _CharT*
        _M_refdata() throw()
        { return reinterpret_cast<_CharT*> (this + 1); }

        _CharT&
        operator[](size_t __s) throw()
        { return _M_refdata() [__s]; }

        _CharT*
        _M_grab(const _Alloc& __alloc1, const _Alloc& __alloc2)
        { return (!_M_is_leaked() && __alloc1 == __alloc2) ?
            _M_refcopy() : _M_clone(__alloc1); }


        static _Rep*
        _S_create(size_t, const _Alloc&);

        void
        _M_dispose(const _Alloc& __a)
        {
          if (__exchange_and_add(&_M_references, -1) <= 0)
            _M_destroy(__a);
        }

        void
        _M_destroy(const _Alloc&) throw();

        _CharT*
        _M_refcopy() throw()
        {
          __atomic_add(&_M_references, 1);
          return _M_refdata();
        }

        _CharT*
        _M_clone(const _Alloc&, size_type __res = 0);
# 208 "/opt/egcs/include/g++-v3/bits/basic_string.h" 3
        inline static bool
        _S_excess_slop(size_t, size_t);

      };


      struct _Alloc_hider : _Alloc
      {
        _Alloc_hider(_CharT* __dat, const _Alloc& __a)
        : _Alloc(__a), _M_p(__dat) { }

        _CharT* _M_p;
      };

    public:



      static const size_type npos = static_cast<size_type>(-1);

    private:

      mutable _Alloc_hider _M_dataplus;



      static size_type _S_empty_rep_storage[(sizeof(_Rep) + sizeof(_CharT) + sizeof(size_type) - 1)/sizeof(size_type)];

      _CharT*
      _M_data() const
      { return _M_dataplus._M_p; }

      _CharT*
      _M_data(_CharT* __p)
      { return (_M_dataplus._M_p = __p); }

      _Rep*
      _M_rep() const
      { return &((reinterpret_cast<_Rep*> (_M_data()))[-1]); }



      iterator
      _M_ibegin() const { return iterator(_M_data()); }

      iterator
      _M_iend() const { return iterator(_M_data() + this->size()); }

      void
      _M_leak()
      {
        if (!_M_rep()->_M_is_leaked())
          _M_leak_hard();
      }

      iterator
      _M_check(size_type __pos) const
      {
        if (__pos > this->size())
          __throw_out_of_range("basic_string::_M_check");
        return _M_ibegin() + __pos;
      }


      iterator
      _M_fold(size_type __pos, size_type __off) const
      {
        bool __testoff = __off < this->size() - __pos;
        size_type __newoff = __testoff ? __off : this->size() - __pos;
        return (_M_ibegin() + __pos + __newoff);
      }



      template<class _Iterator>
        static void
        _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
        {
          for (; __k1 != __k2; ++__k1, ++__p)
            traits_type::assign(*__p, *__k1);
        }

      static void
      _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2)
      { _S_copy_chars(__p, __k1.base(), __k2.base()); }

      static void
      _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
      { _S_copy_chars(__p, __k1.base(), __k2.base()); }

      static void
      _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2)
      { traits_type::copy(__p, __k1, __k2 - __k1); }

      static void
      _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
      { traits_type::copy(__p, __k1, __k2 - __k1); }

      void
      _M_mutate(size_type __pos, size_type __len1, size_type __len2);

      void
      _M_leak_hard();

      static _Rep&
      _S_empty_rep()
      { return *reinterpret_cast<_Rep*>(&_S_empty_rep_storage); }

    public:




      inline
      basic_string();

      explicit
      basic_string(const _Alloc& __a);


      basic_string(const basic_string& __str);
      basic_string(const basic_string& __str, size_type __pos,
                   size_type __n = npos);
      basic_string(const basic_string& __str, size_type __pos,
                   size_type __n, const _Alloc& __a);

      basic_string(const _CharT* __s, size_type __n,
                   const _Alloc& __a = _Alloc());
      basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
      basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc());

      template<class _InputIterator>
        basic_string(_InputIterator __begin, _InputIterator __end,
                     const _Alloc& __a = _Alloc());

      ~basic_string()
      { _M_rep()->_M_dispose(this->get_allocator()); }

      basic_string&
      operator=(const basic_string& __str) { return this->assign(__str); }

      basic_string&
      operator=(const _CharT* __s) { return this->assign(__s); }

      basic_string&
      operator=(_CharT __c) { return this->assign(1, __c); }


      iterator
      begin()
      {
        _M_leak();
        return iterator(_M_data());
      }

      const_iterator
      begin() const
      { return const_iterator(_M_data()); }

      iterator
      end()
      {
         _M_leak();
         return iterator(_M_data() + this->size());
      }

      const_iterator
      end() const
      { return const_iterator(_M_data() + this->size()); }

      reverse_iterator
      rbegin()
      { return reverse_iterator(this->end()); }

      const_reverse_iterator
      rbegin() const
      { return const_reverse_iterator(this->end()); }

      reverse_iterator
      rend()
      { return reverse_iterator(this->begin()); }

      const_reverse_iterator
      rend() const
      { return const_reverse_iterator(this->begin()); }

    public:

      size_type
      size() const { return _M_rep()->_M_length; }

      size_type
      length() const { return _M_rep()->_M_length; }

      size_type
      max_size() const { return _Rep::_S_max_size; }

      void
      resize(size_type __n, _CharT __c);

      void
      resize(size_type __n) { this->resize(__n, _CharT()); }

      size_type
      capacity() const { return _M_rep()->_M_capacity; }

      void
      reserve(size_type __res_arg = 0);

      void
      clear() { _M_mutate(0, this->size(), 0); }

      bool
      empty() const { return this->size() == 0; }


      const_reference
      operator[] (size_type __pos) const
      { return _M_data()[__pos]; }

      reference
      operator[](size_type __pos)
      {
        _M_leak();
        return _M_data()[__pos];
      }

      const_reference
      at(size_type __n) const
      {
        if (__n >= this->size())
          __throw_out_of_range("basic_string::at");
        return _M_data()[__n];
      }

      reference
      at(size_type __n)
      {
        if (__n >= size())
          __throw_out_of_range("basic_string::at");
        _M_leak();
        return _M_data()[__n];
      }


      basic_string&
      operator+=(const basic_string& __str) { return this->append(__str); }

      basic_string&
      operator+=(const _CharT* __s) { return this->append(__s); }

      basic_string&
      operator+=(_CharT __c) { return this->append(size_type(1), __c); }

      basic_string&
      append(const basic_string& __str);

      basic_string&
      append(const basic_string& __str, size_type __pos, size_type __n);

      basic_string&
      append(const _CharT* __s, size_type __n);

      basic_string&
      append(const _CharT* __s)
      { return this->append(__s, traits_type::length(__s)); }

      basic_string&
      append(size_type __n, _CharT __c);

      template<class _InputIterator>
        basic_string&
        append(_InputIterator __first, _InputIterator __last)
        { return this->replace(_M_iend(), _M_iend(), __first, __last); }

      void
      push_back(_CharT __c)
      { this->replace(_M_iend(), _M_iend(), 1, __c); }

      basic_string&
      assign(const basic_string& __str);

      basic_string&
      assign(const basic_string& __str, size_type __pos, size_type __n)
      {
        return this->assign(__str._M_check(__pos), __str._M_fold(__pos, __n));
      }

      basic_string&
      assign(const _CharT* __s, size_type __n)
      { return this->assign(__s, __s + __n); }

      basic_string&
      assign(const _CharT* __s)
      { return this->assign(__s, __s + traits_type::length(__s)); }

      basic_string&
      assign(size_type __n, _CharT __c)
      { return this->replace(_M_ibegin(), _M_iend(), __n, __c); }

      template<class _InputIterator>
        basic_string&
        assign(_InputIterator __first, _InputIterator __last)
        { return this->replace(_M_ibegin(), _M_iend(), __first, __last); }

      void
      insert(iterator __p, size_type __n, _CharT __c)
      { this->replace(__p, __p, __n, __c); }

      template<class _InputIterator>
        void insert(iterator __p, _InputIterator __beg, _InputIterator __end)
        { this->replace(__p, __p, __beg, __end); }

      basic_string&
      insert(size_type __pos1, const basic_string& __str)
      {
        iterator __p = _M_check(__pos1);
        this->replace(__p, __p, __str._M_ibegin(), __str._M_iend());
        return *this;
      }

      basic_string&
      insert(size_type __pos1, const basic_string& __str,
             size_type __pos2, size_type __n)
      {
        iterator __p = _M_check(__pos1);
        this->replace(__p, __p, __str._M_check(__pos2),
                      __str._M_fold(__pos2, __n));
        return *this;
      }

      basic_string&
      insert(size_type __pos, const _CharT* __s, size_type __n)
      {
        iterator __p = _M_check(__pos);
        this->replace(__p, __p, __s, __s + __n);
        return *this;
      }

      basic_string&
      insert(size_type __pos, const _CharT* __s)
      { return this->insert(__pos, __s, traits_type::length(__s)); }

      basic_string&
      insert(size_type __pos, size_type __n, _CharT __c)
      {
        this->insert(_M_check(__pos), __n, __c);
        return *this;
      }

      iterator
      insert(iterator __p, _CharT __c = _CharT())
      {
        size_type __pos = __p - _M_ibegin();
        this->insert(_M_check(__pos), size_type(1), __c);
        _M_rep()->_M_set_leaked();
        return this->_M_ibegin() + __pos;
      }

      basic_string&
      erase(size_type __pos = 0, size_type __n = npos)
      {
        return this->replace(_M_check(__pos), _M_fold(__pos, __n),
                             _M_data(), _M_data());
      }

      iterator
      erase(iterator __position)
      {
        size_type __i = __position - _M_ibegin();
        this->replace(__position, __position + 1, _M_data(), _M_data());
        _M_rep()->_M_set_leaked();
        return _M_ibegin() + __i;
      }

      iterator
      erase(iterator __first, iterator __last)
      {
        size_type __i = __first - _M_ibegin();
        this->replace(__first, __last, _M_data(), _M_data());
        _M_rep()->_M_set_leaked();
       return _M_ibegin() + __i;
      }

      basic_string&
      replace(size_type __pos, size_type __n, const basic_string& __str)
      {
        return this->replace(_M_check(__pos), _M_fold(__pos, __n),
                              __str.begin(), __str.end());
      }

      basic_string&
      replace(size_type __pos1, size_type __n1, const basic_string& __str,
              size_type __pos2, size_type __n2);

      basic_string&
      replace(size_type __pos, size_type __n1, const _CharT* __s,
              size_type __n2)
      {
        return this->replace(_M_check(__pos), _M_fold(__pos, __n1),
                             __s, __s + __n2);
      }

      basic_string&
      replace(size_type __pos, size_type __n1, const _CharT* __s)
      {
        return this->replace(_M_check(__pos), _M_fold(__pos, __n1),
                             __s, __s + traits_type::length(__s));
      }

      basic_string&
      replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
      {
        return this->replace(_M_check(__pos), _M_fold(__pos, __n1), __n2, __c);
      }

      basic_string&
      replace(iterator __i1, iterator __i2, const basic_string& __str)
      { return this->replace(__i1, __i2, __str.begin(), __str.end()); }

      basic_string&
      replace(iterator __i1, iterator __i2,
                           const _CharT* __s, size_type __n)
      { return this->replace(__i1, __i2, __s, __s + __n); }

      basic_string&
      replace(iterator __i1, iterator __i2, const _CharT* __s)
      { return this->replace(__i1, __i2, __s,
                             __s + traits_type::length(__s)); }

      basic_string&
      replace(iterator __i1, iterator __i2, size_type __n, _CharT __c);

      template<class _InputIterator>
        basic_string&
        replace(iterator __i1, iterator __i2,
                _InputIterator __k1, _InputIterator __k2)
        { return _M_replace(__i1, __i2, __k1, __k2,
             typename iterator_traits<_InputIterator>::iterator_category()); }

    private:
      template<class _InputIterator>
        basic_string&
        _M_replace(iterator __i1, iterator __i2, _InputIterator __k1,
                   _InputIterator __k2, input_iterator_tag);

      template<class _FwdIterator>
        basic_string&
        _M_replace(iterator __i1, iterator __i2, _FwdIterator __k1,
                   _FwdIterator __k2, forward_iterator_tag);



      template<class _InIter>
        static _CharT*
        _S_construct_aux(_InIter __beg, _InIter __end, const _Alloc& __a,
                         __false_type)
        {
          typedef typename iterator_traits<_InIter>::iterator_category _Tag;
          return _S_construct(__beg, __end, __a, _Tag());
        }

      template<class _InIter>
        static _CharT*
        _S_construct_aux(_InIter __beg, _InIter __end, const _Alloc& __a,
                         __true_type)
        {
          return _S_construct(static_cast<size_type>(__beg),
                              static_cast<value_type>(__end), __a);
        }

      template<class _InIter>
        static _CharT*
        _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a)
        {
          typedef typename _Is_integer<_InIter>::_Integral _Integral;
          return _S_construct_aux(__beg, __end, __a, _Integral());
        }


      template<class _InIter>
        static _CharT*
         _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                      input_iterator_tag);



      template<class _FwdIter>
        static _CharT*
        _S_construct(_FwdIter __end, _FwdIter __beg, const _Alloc& __a,
                     forward_iterator_tag);

      static _CharT*
      _S_construct(size_type __req, _CharT __c, const _Alloc& __a);

    public:

      size_type
      copy(_CharT* __s, size_type __n, size_type __pos = 0) const;

      void
      swap(basic_string<_CharT, _Traits, _Alloc>& __s);


      const _CharT*
      c_str() const
      {

        size_type __n = this->size();
        traits_type::assign(_M_data()[__n], _Rep::_S_terminal);
        return _M_data();
      }

      const _CharT*
      data() const { return _M_data(); }

      allocator_type
      get_allocator() const { return _M_dataplus; }

      size_type
      find(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      find(const basic_string& __str, size_type __pos = 0) const
      { return this->find(__str.data(), __pos, __str.size()); }

      size_type
      find(const _CharT* __s, size_type __pos = 0) const
      { return this->find(__s, __pos, traits_type::length(__s)); }

      size_type
      find(_CharT __c, size_type __pos = 0) const;

      size_type
      rfind(const basic_string& __str, size_type __pos = npos) const
      { return this->rfind(__str.data(), __pos, __str.size()); }

      size_type
      rfind(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      rfind(const _CharT* __s, size_type __pos = npos) const
      { return this->rfind(__s, __pos, traits_type::length(__s)); }

      size_type
      rfind(_CharT __c, size_type __pos = npos) const;

      size_type
      find_first_of(const basic_string& __str, size_type __pos = 0) const
      { return this->find_first_of(__str.data(), __pos, __str.size()); }

      size_type
      find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      find_first_of(const _CharT* __s, size_type __pos = 0) const
      { return this->find_first_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_first_of(_CharT __c, size_type __pos = 0) const
      { return this->find(__c, __pos); }

      size_type
      find_last_of(const basic_string& __str, size_type __pos = npos) const
      { return this->find_last_of(__str.data(), __pos, __str.size()); }

      size_type
      find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;

      size_type
      find_last_of(const _CharT* __s, size_type __pos = npos) const
      { return this->find_last_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_last_of(_CharT __c, size_type __pos = npos) const
      { return this->rfind(__c, __pos); }

      size_type
      find_first_not_of(const basic_string& __str, size_type __pos = 0) const
      { return this->find_first_not_of(__str.data(), __pos, __str.size()); }

      size_type
      find_first_not_of(const _CharT* __s, size_type __pos,
                        size_type __n) const;

      size_type
      find_first_not_of(const _CharT* __s, size_type __pos = 0) const
      { return this->find_first_not_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_first_not_of(_CharT __c, size_type __pos = 0) const;

      size_type
      find_last_not_of(const basic_string& __str, size_type __pos = npos) const
      { return this->find_last_not_of(__str.data(), __pos, __str.size()); }

      size_type
      find_last_not_of(const _CharT* __s, size_type __pos,
                       size_type __n) const;
      size_type
      find_last_not_of(const _CharT* __s, size_type __pos = npos) const
      { return this->find_last_not_of(__s, __pos, traits_type::length(__s)); }

      size_type
      find_last_not_of(_CharT __c, size_type __pos = npos) const;

      basic_string
      substr(size_type __pos = 0, size_type __n = npos) const
      {
        if (__pos > this->size())
          __throw_out_of_range("basic_string::substr");
        return basic_string(*this, __pos, __n);
      }

      int
      compare(const basic_string& __str) const
      {
        size_type __size = this->size();
        size_type __osize = __str.size();
        size_type __len = min(__size, __osize);

        int __r = traits_type::compare(_M_data(), __str.data(), __len);
        if (!__r)
          __r = __size - __osize;
        return __r;
      }

      int
      compare(size_type __pos, size_type __n, const basic_string& __str) const;

      int
      compare(size_type __pos1, size_type __n1, const basic_string& __str,
              size_type __pos2, size_type __n2) const;

      int
      compare(const _CharT* __s) const;



      int
      compare(size_type __pos, size_type __n1, const _CharT* __s) const;

      int
      compare(size_type __pos, size_type __n1, const _CharT* __s,
              size_type __n2) const;

  };


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>::
    basic_string()
    : _M_dataplus(_S_empty_rep()._M_refcopy(), _Alloc()) { }


  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    {
      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
      __str.append(__rhs);
      return __str;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(const _CharT* __lhs,
              const basic_string<_CharT,_Traits,_Alloc>& __rhs);

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
             const _CharT* __rhs)
    {
      basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
      __str.append(__rhs);
      return __str;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_string<_CharT, _Traits, _Alloc>
    operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;
      __string_type __str(__lhs);
      __str.append(__size_type(1), __rhs);
      return __str;
    }


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) == 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) == 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) == 0; }


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) != 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator!=(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) != 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) != 0; }


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) < 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const _CharT* __rhs)
    { return __lhs.compare(__rhs) < 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<(const _CharT* __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) > 0; }


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) > 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const _CharT* __rhs)
    { return __lhs.compare(__rhs) > 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>(const _CharT* __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) < 0; }


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) <= 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) <= 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator<=(const _CharT* __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
  { return __rhs.compare(__lhs) >= 0; }


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __lhs.compare(__rhs) >= 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
               const _CharT* __rhs)
    { return __lhs.compare(__rhs) >= 0; }

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline bool
    operator>=(const _CharT* __lhs,
             const basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { return __rhs.compare(__lhs) <= 0; }


  template<typename _CharT, typename _Traits, typename _Alloc>
    inline void
    swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
         basic_string<_CharT, _Traits, _Alloc>& __rhs)
    { __lhs.swap(__rhs); }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __is,
               basic_string<_CharT, _Traits, _Alloc>& __str);

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __os,
               const basic_string<_CharT, _Traits, _Alloc>& __str);

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_istream<_CharT,_Traits>&
    getline(basic_istream<_CharT, _Traits>& __is,
            basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);

  template<typename _CharT, typename _Traits, typename _Alloc>
    inline basic_istream<_CharT,_Traits>&
    getline(basic_istream<_CharT, _Traits>& __is,
            basic_string<_CharT, _Traits, _Alloc>& __str);
}
# 47 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3


# 1 "/opt/egcs/include/g++-v3/bits/std_algorithm.h" 1 3
# 60 "/opt/egcs/include/g++-v3/bits/std_algorithm.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 1 3
# 62 "/opt/egcs/include/g++-v3/bits/std_algorithm.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/std_algorithm.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_uninitialized.h" 1 3
# 64 "/opt/egcs/include/g++-v3/bits/std_algorithm.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_tempbuf.h" 1 3
# 65 "/opt/egcs/include/g++-v3/bits/std_algorithm.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_algo.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_algo.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_heap.h" 1 3
# 62 "/opt/egcs/include/g++-v3/bits/stl_heap.h" 3
namespace std
{



template <class _RandomAccessIterator, class _Distance, class _Tp>
void
__push_heap(_RandomAccessIterator __first,
            _Distance __holeIndex, _Distance __topIndex, _Tp __value)
{
  _Distance __parent = (__holeIndex - 1) / 2;
  while (__holeIndex > __topIndex && *(__first + __parent) < __value) {
    *(__first + __holeIndex) = *(__first + __parent);
    __holeIndex = __parent;
    __parent = (__holeIndex - 1) / 2;
  }
  *(__first + __holeIndex) = __value;
}

template <class _RandomAccessIterator, class _Distance, class _Tp>
inline void
__push_heap_aux(_RandomAccessIterator __first,
                _RandomAccessIterator __last, _Distance*, _Tp*)
{
  __push_heap(__first, _Distance((__last - __first) - 1), _Distance(0),
              _Tp(*(__last - 1)));
}

template <class _RandomAccessIterator>
inline void
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{

                               ;

                                                                     ;


  __push_heap_aux(__first, __last,
                  __distance_type(__first), __value_type(__first));
}

template <class _RandomAccessIterator, class _Distance, class _Tp,
          class _Compare>
void
__push_heap(_RandomAccessIterator __first, _Distance __holeIndex,
            _Distance __topIndex, _Tp __value, _Compare __comp)
{
  _Distance __parent = (__holeIndex - 1) / 2;
  while (__holeIndex > __topIndex && __comp(*(__first + __parent), __value)) {
    *(__first + __holeIndex) = *(__first + __parent);
    __holeIndex = __parent;
    __parent = (__holeIndex - 1) / 2;
  }
  *(__first + __holeIndex) = __value;
}

template <class _RandomAccessIterator, class _Compare,
          class _Distance, class _Tp>
inline void
__push_heap_aux(_RandomAccessIterator __first,
                _RandomAccessIterator __last, _Compare __comp,
                _Distance*, _Tp*)
{
  __push_heap(__first, _Distance((__last - __first) - 1), _Distance(0),
              _Tp(*(__last - 1)), __comp);
}

template <class _RandomAccessIterator, class _Compare>
inline void
push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
          _Compare __comp)
{

                               ;


  __push_heap_aux(__first, __last, __comp,
                  __distance_type(__first), __value_type(__first));
}

template <class _RandomAccessIterator, class _Distance, class _Tp>
void
__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
              _Distance __len, _Tp __value)
{
  _Distance __topIndex = __holeIndex;
  _Distance __secondChild = 2 * __holeIndex + 2;
  while (__secondChild < __len) {
    if (*(__first + __secondChild) < *(__first + (__secondChild - 1)))
      __secondChild--;
    *(__first + __holeIndex) = *(__first + __secondChild);
    __holeIndex = __secondChild;
    __secondChild = 2 * (__secondChild + 1);
  }
  if (__secondChild == __len) {
    *(__first + __holeIndex) = *(__first + (__secondChild - 1));
    __holeIndex = __secondChild - 1;
  }
  __push_heap(__first, __holeIndex, __topIndex, __value);
}

template <class _RandomAccessIterator, class _Tp, class _Distance>
inline void
__pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
           _RandomAccessIterator __result, _Tp __value, _Distance*)
{
  *__result = *__first;
  __adjust_heap(__first, _Distance(0), _Distance(__last - __first), __value);
}

template <class _RandomAccessIterator, class _Tp>
inline void
__pop_heap_aux(_RandomAccessIterator __first, _RandomAccessIterator __last,
               _Tp*)
{
  __pop_heap(__first, __last - 1, __last - 1,
             _Tp(*(__last - 1)), __distance_type(__first));
}

template <class _RandomAccessIterator>
inline void pop_heap(_RandomAccessIterator __first,
                     _RandomAccessIterator __last)
{

                               ;

                                                                     ;


  __pop_heap_aux(__first, __last, __value_type(__first));
}

template <class _RandomAccessIterator, class _Distance,
          class _Tp, class _Compare>
void
__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
              _Distance __len, _Tp __value, _Compare __comp)
{
  _Distance __topIndex = __holeIndex;
  _Distance __secondChild = 2 * __holeIndex + 2;
  while (__secondChild < __len) {
    if (__comp(*(__first + __secondChild), *(__first + (__secondChild - 1))))
      __secondChild--;
    *(__first + __holeIndex) = *(__first + __secondChild);
    __holeIndex = __secondChild;
    __secondChild = 2 * (__secondChild + 1);
  }
  if (__secondChild == __len) {
    *(__first + __holeIndex) = *(__first + (__secondChild - 1));
    __holeIndex = __secondChild - 1;
  }
  __push_heap(__first, __holeIndex, __topIndex, __value, __comp);
}

template <class _RandomAccessIterator, class _Tp, class _Compare,
          class _Distance>
inline void
__pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
           _RandomAccessIterator __result, _Tp __value, _Compare __comp,
           _Distance*)
{
  *__result = *__first;
  __adjust_heap(__first, _Distance(0), _Distance(__last - __first),
                __value, __comp);
}

template <class _RandomAccessIterator, class _Tp, class _Compare>
inline void
__pop_heap_aux(_RandomAccessIterator __first,
               _RandomAccessIterator __last, _Tp*, _Compare __comp)
{
  __pop_heap(__first, __last - 1, __last - 1, _Tp(*(__last - 1)), __comp,
             __distance_type(__first));
}

template <class _RandomAccessIterator, class _Compare>
inline void
pop_heap(_RandomAccessIterator __first,
         _RandomAccessIterator __last, _Compare __comp)
{

                               ;


  __pop_heap_aux(__first, __last, __value_type(__first), __comp);
}

template <class _RandomAccessIterator, class _Tp, class _Distance>
void
__make_heap(_RandomAccessIterator __first,
            _RandomAccessIterator __last, _Tp*, _Distance*)
{
  if (__last - __first < 2) return;
  _Distance __len = __last - __first;
  _Distance __parent = (__len - 2)/2;

  while (true) {
    __adjust_heap(__first, __parent, __len, _Tp(*(__first + __parent)));
    if (__parent == 0) return;
    __parent--;
  }
}

template <class _RandomAccessIterator>
inline void
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{

                               ;

                                                                     ;


  __make_heap(__first, __last,
              __value_type(__first), __distance_type(__first));
}

template <class _RandomAccessIterator, class _Compare,
          class _Tp, class _Distance>
void
__make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
            _Compare __comp, _Tp*, _Distance*)
{
  if (__last - __first < 2) return;
  _Distance __len = __last - __first;
  _Distance __parent = (__len - 2)/2;

  while (true) {
    __adjust_heap(__first, __parent, __len, _Tp(*(__first + __parent)),
                  __comp);
    if (__parent == 0) return;
    __parent--;
  }
}

template <class _RandomAccessIterator, class _Compare>
inline void
make_heap(_RandomAccessIterator __first,
          _RandomAccessIterator __last, _Compare __comp)
{

                               ;


  __make_heap(__first, __last, __comp,
              __value_type(__first), __distance_type(__first));
}

template <class _RandomAccessIterator>
void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
{

                               ;

                                                                     ;


  while (__last - __first > 1)
    pop_heap(__first, __last--);
}

template <class _RandomAccessIterator, class _Compare>
void
sort_heap(_RandomAccessIterator __first,
          _RandomAccessIterator __last, _Compare __comp)
{

                               ;


  while (__last - __first > 1)
    pop_heap(__first, __last--, __comp);
}

}
# 64 "/opt/egcs/include/g++-v3/bits/stl_algo.h" 2 3



namespace std
{



template <class _Tp>
inline const _Tp& __median(const _Tp& __a, const _Tp& __b, const _Tp& __c)
{

                                                              ;
  if (__a < __b)
    if (__b < __c)
      return __b;
    else if (__a < __c)
      return __c;
    else
      return __a;
  else if (__a < __c)
    return __a;
  else if (__b < __c)
    return __c;
  else
    return __b;
}

template <class _Tp, class _Compare>
inline const _Tp&
__median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp)
{

                                                                               ;
  if (__comp(__a, __b))
    if (__comp(__b, __c))
      return __b;
    else if (__comp(__a, __c))
      return __c;
    else
      return __a;
  else if (__comp(__a, __c))
    return __a;
  else if (__comp(__b, __c))
    return __c;
  else
    return __b;
}


template <class _InputIter, class _Function>
_Function for_each(_InputIter __first, _InputIter __last, _Function __f)
{

                                                                ;
  for ( ; __first != __last; ++__first)
    __f(*__first);
  return __f;
}



template <class _InputIter, class _Tp>
inline _InputIter find(_InputIter __first, _InputIter __last,
                       const _Tp& __val,
                       input_iterator_tag)
{
  while (__first != __last && !(*__first == __val))
    ++__first;
  return __first;
}

template <class _InputIter, class _Predicate>
inline _InputIter find_if(_InputIter __first, _InputIter __last,
                          _Predicate __pred,
                          input_iterator_tag)
{
  while (__first != __last && !__pred(*__first))
    ++__first;
  return __first;
}

template <class _RandomAccessIter, class _Tp>
_RandomAccessIter find(_RandomAccessIter __first, _RandomAccessIter __last,
                       const _Tp& __val,
                       random_access_iterator_tag)
{
  typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
    = (__last - __first) >> 2;

  for ( ; __trip_count > 0 ; --__trip_count) {
    if (*__first == __val) return __first;
    ++__first;

    if (*__first == __val) return __first;
    ++__first;

    if (*__first == __val) return __first;
    ++__first;

    if (*__first == __val) return __first;
    ++__first;
  }

  switch(__last - __first) {
  case 3:
    if (*__first == __val) return __first;
    ++__first;
  case 2:
    if (*__first == __val) return __first;
    ++__first;
  case 1:
    if (*__first == __val) return __first;
    ++__first;
  case 0:
  default:
    return __last;
  }
}

template <class _RandomAccessIter, class _Predicate>
_RandomAccessIter find_if(_RandomAccessIter __first, _RandomAccessIter __last,
                          _Predicate __pred,
                          random_access_iterator_tag)
{
  typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
    = (__last - __first) >> 2;

  for ( ; __trip_count > 0 ; --__trip_count) {
    if (__pred(*__first)) return __first;
    ++__first;

    if (__pred(*__first)) return __first;
    ++__first;

    if (__pred(*__first)) return __first;
    ++__first;

    if (__pred(*__first)) return __first;
    ++__first;
  }

  switch(__last - __first) {
  case 3:
    if (__pred(*__first)) return __first;
    ++__first;
  case 2:
    if (__pred(*__first)) return __first;
    ++__first;
  case 1:
    if (__pred(*__first)) return __first;
    ++__first;
  case 0:
  default:
    return __last;
  }
}

template <class _InputIter, class _Tp>
inline _InputIter find(_InputIter __first, _InputIter __last,
                       const _Tp& __val)
{

                                                                ;
                                                                   ;

  return find(__first, __last, __val, __iterator_category(__first));
}

template <class _InputIter, class _Predicate>
inline _InputIter find_if(_InputIter __first, _InputIter __last,
                          _Predicate __pred)
{

                                                                ;
                                                            ;

  return find_if(__first, __last, __pred, __iterator_category(__first));
}



template <class _ForwardIter>
_ForwardIter adjacent_find(_ForwardIter __first, _ForwardIter __last)
{

                                                                    ;
                                                            ;

  if (__first == __last)
    return __last;
  _ForwardIter __next = __first;
  while(++__next != __last) {
    if (*__first == *__next)
      return __first;
    __first = __next;
  }
  return __last;
}

template <class _ForwardIter, class _BinaryPredicate>
_ForwardIter adjacent_find(_ForwardIter __first, _ForwardIter __last,
                           _BinaryPredicate __binary_pred)
{

                                                                    ;
                                                            ;


  if (__first == __last)
    return __last;
  _ForwardIter __next = __first;
  while(++__next != __last) {
    if (__binary_pred(*__first, *__next))
      return __first;
    __first = __next;
  }
  return __last;
}







template <class _InputIter, class _Tp, class _Size>
void count(_InputIter __first, _InputIter __last, const _Tp& __value,
           _Size& __n)
{

                                                                ;
                                                           ;

                                                              ;
  for ( ; __first != __last; ++__first)
    if (*__first == __value)
      ++__n;
}

template <class _InputIter, class _Predicate, class _Size>
void count_if(_InputIter __first, _InputIter __last, _Predicate __pred,
              _Size& __n)
{

                                                                ;
                                                          ;

  for ( ; __first != __last; ++__first)
    if (__pred(*__first))
      ++__n;
}

template <class _InputIter, class _Tp>
typename iterator_traits<_InputIter>::difference_type
count(_InputIter __first, _InputIter __last, const _Tp& __value)
{

                                                                ;
                                                           ;

                                                              ;
  typename iterator_traits<_InputIter>::difference_type __n = 0;
  for ( ; __first != __last; ++__first)
    if (*__first == __value)
      ++__n;
  return __n;
}

template <class _InputIter, class _Predicate>
typename iterator_traits<_InputIter>::difference_type
count_if(_InputIter __first, _InputIter __last, _Predicate __pred)
{

                                                                ;
                                                          ;

  typename iterator_traits<_InputIter>::difference_type __n = 0;
  for ( ; __first != __last; ++__first)
    if (__pred(*__first))
      ++__n;
  return __n;
}




template <class _ForwardIter1, class _ForwardIter2>
_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
                     _ForwardIter2 __first2, _ForwardIter2 __last2)
{

                                                                     ;
                                                                     ;
                                                             ;




  if (__first1 == __last1 || __first2 == __last2)
    return __first1;


  _ForwardIter2 __tmp(__first2);
  ++__tmp;
  if (__tmp == __last2)
    return find(__first1, __last1, *__first2);



  _ForwardIter2 __p1, __p;

  __p1 = __first2; ++__p1;

  _ForwardIter1 __current = __first1;

  while (__first1 != __last1) {
    __first1 = find(__first1, __last1, *__first2);
    if (__first1 == __last1)
      return __last1;

    __p = __p1;
    __current = __first1;
    if (++__current == __last1)
      return __last1;

    while (*__current == *__p) {
      if (++__p == __last2)
        return __first1;
      if (++__current == __last1)
        return __last1;
    }

    ++__first1;
  }
  return __first1;
}

template <class _ForwardIter1, class _ForwardIter2, class _BinaryPred>
_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
                     _ForwardIter2 __first2, _ForwardIter2 __last2,
                     _BinaryPred __predicate)
{

                                                                     ;
                                                                     ;
                                                             ;




  if (__first1 == __last1 || __first2 == __last2)
    return __first1;


  _ForwardIter2 __tmp(__first2);
  ++__tmp;
  if (__tmp == __last2) {
    while (__first1 != __last1 && !__predicate(*__first1, *__first2))
      ++__first1;
    return __first1;
  }



  _ForwardIter2 __p1, __p;

  __p1 = __first2; ++__p1;

  _ForwardIter1 __current = __first1;

  while (__first1 != __last1) {
    while (__first1 != __last1) {
      if (__predicate(*__first1, *__first2))
        break;
      ++__first1;
    }
    while (__first1 != __last1 && !__predicate(*__first1, *__first2))
      ++__first1;
    if (__first1 == __last1)
      return __last1;

    __p = __p1;
    __current = __first1;
    if (++__current == __last1) return __last1;

    while (__predicate(*__current, *__p)) {
      if (++__p == __last2)
        return __first1;
      if (++__current == __last1)
        return __last1;
    }

    ++__first1;
  }
  return __first1;
}



template <class _ForwardIter, class _Integer, class _Tp>
_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
                      _Integer __count, const _Tp& __val)
{

                                                                    ;
                                                            ;

                                                              ;

  if (__count <= 0)
    return __first;
  else {
    __first = find(__first, __last, __val);
    while (__first != __last) {
      _Integer __n = __count - 1;
      _ForwardIter __i = __first;
      ++__i;
      while (__i != __last && __n != 0 && *__i == __val) {
        ++__i;
        --__n;
      }
      if (__n == 0)
        return __first;
      else
        __first = find(__i, __last, __val);
    }
    return __last;
  }
}

template <class _ForwardIter, class _Integer, class _Tp, class _BinaryPred>
_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
                      _Integer __count, const _Tp& __val,
                      _BinaryPred __binary_pred)
{

                                                                    ;
                                                                 ;


  if (__count <= 0)
    return __first;
  else {
    while (__first != __last) {
      if (__binary_pred(*__first, __val))
        break;
      ++__first;
    }
    while (__first != __last) {
      _Integer __n = __count - 1;
      _ForwardIter __i = __first;
      ++__i;
      while (__i != __last && __n != 0 && __binary_pred(*__i, __val)) {
        ++__i;
        --__n;
      }
      if (__n == 0)
        return __first;
      else {
        while (__i != __last) {
          if (__binary_pred(*__i, __val))
            break;
          ++__i;
        }
        __first = __i;
      }
    }
    return __last;
  }
}



template <class _ForwardIter1, class _ForwardIter2>
_ForwardIter2 swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1,
                          _ForwardIter2 __first2)
{

                                                                             ;
                                                                             ;
                                                             ;


                                                             ;



  for ( ; __first1 != __last1; ++__first1, ++__first2)
    iter_swap(__first1, __first2);
  return __first2;
}



template <class _InputIter, class _OutputIter, class _UnaryOperation>
_OutputIter transform(_InputIter __first, _InputIter __last,
                      _OutputIter __result, _UnaryOperation __unary_op)
{

                                                                ;






  for ( ; __first != __last; ++__first, ++__result)
    *__result = __unary_op(*__first);
  return __result;
}

template <class _InputIter1, class _InputIter2, class _OutputIter,
          class _BinaryOperation>
_OutputIter transform(_InputIter1 __first1, _InputIter1 __last1,
                      _InputIter2 __first2, _OutputIter __result,
                      _BinaryOperation __binary_op)
{

                                                                 ;
                                                                 ;






  for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
    *__result = __binary_op(*__first1, *__first2);
  return __result;
}



template <class _ForwardIter, class _Tp>
void replace(_ForwardIter __first, _ForwardIter __last,
             const _Tp& __old_value, const _Tp& __new_value)
{

                                                                            ;
                                                                 ;

                                                            ;


  for ( ; __first != __last; ++__first)
    if (*__first == __old_value)
      *__first = __new_value;
}

template <class _ForwardIter, class _Predicate, class _Tp>
void replace_if(_ForwardIter __first, _ForwardIter __last,
                _Predicate __pred, const _Tp& __new_value)
{

                                                                            ;
                                                            ;

                                                            ;


  for ( ; __first != __last; ++__first)
    if (__pred(*__first))
      *__first = __new_value;
}

template <class _InputIter, class _OutputIter, class _Tp>
_OutputIter replace_copy(_InputIter __first, _InputIter __last,
                         _OutputIter __result,
                         const _Tp& __old_value, const _Tp& __new_value)
{

                                                                ;
                                                          ;

                                                               ;


  for ( ; __first != __last; ++__first, ++__result)
    *__result = *__first == __old_value ? __new_value : *__first;
  return __result;
}

template <class _InputIter, class _OutputIter, class _Predicate, class _Tp>
_OutputIter replace_copy_if(_InputIter __first, _InputIter __last,
                            _OutputIter __result,
                            _Predicate __pred, const _Tp& __new_value)
{

                                                                ;
                                                          ;

                                                          ;


  for ( ; __first != __last; ++__first, ++__result)
    *__result = __pred(*__first) ? __new_value : *__first;
  return __result;
}



template <class _ForwardIter, class _Generator>
void generate(_ForwardIter __first, _ForwardIter __last, _Generator __gen)
{

                                                                    ;
                                                            ;


  for ( ; __first != __last; ++__first)
    *__first = __gen();
}

template <class _OutputIter, class _Size, class _Generator>
_OutputIter generate_n(_OutputIter __first, _Size __n, _Generator __gen)
{






  for ( ; __n > 0; --__n, ++__first)
    *__first = __gen();
  return __first;
}



template <class _InputIter, class _OutputIter, class _Tp>
_OutputIter remove_copy(_InputIter __first, _InputIter __last,
                        _OutputIter __result, const _Tp& __value)
{

                                                                ;
                                                          ;

                                                               ;


  for ( ; __first != __last; ++__first)
    if (!(*__first == __value)) {
      *__result = *__first;
      ++__result;
    }
  return __result;
}

template <class _InputIter, class _OutputIter, class _Predicate>
_OutputIter remove_copy_if(_InputIter __first, _InputIter __last,
                           _OutputIter __result, _Predicate __pred)
{

                                                                ;
                                                          ;

                                                          ;


  for ( ; __first != __last; ++__first)
    if (!__pred(*__first)) {
      *__result = *__first;
      ++__result;
    }
  return __result;
}

template <class _ForwardIter, class _Tp>
_ForwardIter remove(_ForwardIter __first, _ForwardIter __last,
                    const _Tp& __value)
{

                                                                            ;
                                                            ;

                                                                 ;


  __first = find(__first, __last, __value);
  _ForwardIter __i = __first;
  return __first == __last ? __first
                           : remove_copy(++__i, __last, __first, __value);
}

template <class _ForwardIter, class _Predicate>
_ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last,
                       _Predicate __pred)
{

                                                                            ;
                                                            ;


  __first = find_if(__first, __last, __pred);
  _ForwardIter __i = __first;
  return __first == __last ? __first
                           : remove_copy_if(++__i, __last, __first, __pred);
}



template <class _InputIter, class _OutputIter, class _Tp>
_OutputIter __unique_copy(_InputIter __first, _InputIter __last,
                          _OutputIter __result, _Tp*)
{

  _Tp __value = *__first;
  *__result = __value;
  while (++__first != __last)
    if (!(__value == *__first)) {
      __value = *__first;
      *++__result = __value;
    }
  return ++__result;
}

template <class _InputIter, class _OutputIter>
inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,
                                 _OutputIter __result,
                                 output_iterator_tag)
{

  return __unique_copy(__first, __last, __result, __value_type(__first));
}

template <class _InputIter, class _ForwardIter>
_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,
                           _ForwardIter __result, forward_iterator_tag)
{

  *__result = *__first;
  while (++__first != __last)
    if (!(*__result == *__first))
      *++__result = *__first;
  return ++__result;
}

template <class _InputIter, class _OutputIter>
inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,
                               _OutputIter __result)
{

                                                                ;
                                                          ;

                                                          ;


  if (__first == __last) return __result;
  return __unique_copy(__first, __last, __result,
                       __iterator_category(__result));
}

template <class _InputIter, class _OutputIter, class _BinaryPredicate,
          class _Tp>
_OutputIter __unique_copy(_InputIter __first, _InputIter __last,
                          _OutputIter __result,
                          _BinaryPredicate __binary_pred, _Tp*)
{

                                                                                  ;

  _Tp __value = *__first;
  *__result = __value;
  while (++__first != __last)
    if (!__binary_pred(__value, *__first)) {
      __value = *__first;
      *++__result = __value;
    }
  return ++__result;
}

template <class _InputIter, class _OutputIter, class _BinaryPredicate>
inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,
                                 _OutputIter __result,
                                 _BinaryPredicate __binary_pred,
                                 output_iterator_tag)
{

  return __unique_copy(__first, __last, __result, __binary_pred,
                       __value_type(__first));
}

template <class _InputIter, class _ForwardIter, class _BinaryPredicate>
_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,
                           _ForwardIter __result,
                           _BinaryPredicate __binary_pred,
                           forward_iterator_tag)
{

                                                          ;



  *__result = *__first;
  while (++__first != __last)
    if (!__binary_pred(*__result, *__first)) *++__result = *__first;
  return ++__result;
}

template <class _InputIter, class _OutputIter, class _BinaryPredicate>
inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,
                               _OutputIter __result,
                               _BinaryPredicate __binary_pred)
{

                                                                ;
                                                          ;


  if (__first == __last) return __result;
  return __unique_copy(__first, __last, __result, __binary_pred,
                       __iterator_category(__result));
}

template <class _ForwardIter>
_ForwardIter unique(_ForwardIter __first, _ForwardIter __last)
{

                                                                            ;
                                                            ;


  __first = adjacent_find(__first, __last);
  return unique_copy(__first, __last, __first);
}

template <class _ForwardIter, class _BinaryPredicate>
_ForwardIter unique(_ForwardIter __first, _ForwardIter __last,
                    _BinaryPredicate __binary_pred)
{

                                                                            ;
                                                            ;



  __first = adjacent_find(__first, __last, __binary_pred);
  return unique_copy(__first, __last, __first, __binary_pred);
}



template <class _BidirectionalIter>
void __reverse(_BidirectionalIter __first, _BidirectionalIter __last,
               bidirectional_iterator_tag) {
  while (true)
    if (__first == __last || __first == --__last)
      return;
    else
      iter_swap(__first++, __last);
}

template <class _RandomAccessIter>
void __reverse(_RandomAccessIter __first, _RandomAccessIter __last,
               random_access_iterator_tag) {
  while (__first < __last)
    iter_swap(__first++, --__last);
}

template <class _BidirectionalIter>
inline void reverse(_BidirectionalIter __first, _BidirectionalIter __last)
{

                            ;

  __reverse(__first, __last, __iterator_category(__first));
}

template <class _BidirectionalIter, class _OutputIter>
_OutputIter reverse_copy(_BidirectionalIter __first,
                         _BidirectionalIter __last,
                         _OutputIter __result)
{

                                                                                ;
                                                                  ;


  while (__first != __last) {
    --__last;
    *__result = *__last;
    ++__result;
  }
  return __result;
}



template <class _EuclideanRingElement>
_EuclideanRingElement __gcd(_EuclideanRingElement __m,
                            _EuclideanRingElement __n)
{
  while (__n != 0) {
    _EuclideanRingElement __t = __m % __n;
    __m = __n;
    __n = __t;
  }
  return __m;
}

template <class _ForwardIter, class _Distance>
_ForwardIter __rotate(_ForwardIter __first,
                      _ForwardIter __middle,
                      _ForwardIter __last,
                      _Distance*,
                      forward_iterator_tag)
{
  if (__first == __middle)
    return __last;
  if (__last == __middle)
    return __first;

  _ForwardIter __first2 = __middle;
  do {
    swap(*__first++, *__first2++);
    if (__first == __middle)
      __middle = __first2;
  } while (__first2 != __last);

  _ForwardIter __new_middle = __first;

  __first2 = __middle;

  while (__first2 != __last) {
    swap (*__first++, *__first2++);
    if (__first == __middle)
      __middle = __first2;
    else if (__first2 == __last)
      __first2 = __middle;
  }

  return __new_middle;
}


template <class _BidirectionalIter, class _Distance>
_BidirectionalIter __rotate(_BidirectionalIter __first,
                            _BidirectionalIter __middle,
                            _BidirectionalIter __last,
                            _Distance*,
                            bidirectional_iterator_tag)
{

                            ;


  if (__first == __middle)
    return __last;
  if (__last == __middle)
    return __first;

  __reverse(__first, __middle, bidirectional_iterator_tag());
  __reverse(__middle, __last, bidirectional_iterator_tag());

  while (__first != __middle && __middle != __last)
    swap (*__first++, *--__last);

  if (__first == __middle) {
    __reverse(__middle, __last, bidirectional_iterator_tag());
    return __last;
  }
  else {
    __reverse(__first, __middle, bidirectional_iterator_tag());
    return __first;
  }
}

template <class _RandomAccessIter, class _Distance, class _Tp>
_RandomAccessIter __rotate(_RandomAccessIter __first,
                           _RandomAccessIter __middle,
                           _RandomAccessIter __last,
                           _Distance *, _Tp *)
{

                           ;


  _Distance __n = __last - __first;
  _Distance __k = __middle - __first;
  _Distance __l = __n - __k;
  _RandomAccessIter __result = __first + (__last - __middle);

  if (__k == 0)
    return __last;

  else if (__k == __l) {
    swap_ranges(__first, __middle, __middle);
    return __result;
  }

  _Distance __d = __gcd(__n, __k);

  for (_Distance __i = 0; __i < __d; __i++) {
    _Tp __tmp = *__first;
    _RandomAccessIter __p = __first;

    if (__k < __l) {
      for (_Distance __j = 0; __j < __l/__d; __j++) {
        if (__p > __first + __l) {
          *__p = *(__p - __l);
          __p -= __l;
        }

        *__p = *(__p + __k);
        __p += __k;
      }
    }

    else {
      for (_Distance __j = 0; __j < __k/__d - 1; __j ++) {
        if (__p < __last - __k) {
          *__p = *(__p + __k);
          __p += __k;
        }

        *__p = * (__p - __l);
        __p -= __l;
      }
    }

    *__p = __tmp;
    ++__first;
  }

  return __result;
}

template <class _ForwardIter>
inline _ForwardIter rotate(_ForwardIter __first, _ForwardIter __middle,
                           _ForwardIter __last)
{

                                                                            ;

  return __rotate(__first, __middle, __last,
                  __distance_type(__first),
                  __iterator_category(__first));
}

template <class _ForwardIter, class _OutputIter>
_OutputIter rotate_copy(_ForwardIter __first, _ForwardIter __middle,
                        _ForwardIter __last, _OutputIter __result)
{

                                                                    ;
                                                            ;


  return copy(__first, __middle, copy(__middle, __last, __result));
}




template <class _Distance>
inline _Distance __random_number(_Distance __n) {

  return lrand48() % __n;



}



template <class _RandomAccessIter>
inline void random_shuffle(_RandomAccessIter __first,
                           _RandomAccessIter __last)
{

                           ;


  if (__first == __last) return;
  for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
    iter_swap(__i, __first + __random_number((__i - __first) + 1));
}

template <class _RandomAccessIter, class _RandomNumberGenerator>
void random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last,
                    _RandomNumberGenerator& __rand)
{

                           ;


  if (__first == __last) return;
  for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
    iter_swap(__i, __first + __rand((__i - __first) + 1));
}



template <class _ForwardIter, class _OutputIter, class _Distance>
_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
                            _OutputIter __out, const _Distance __n)
{

                                                                    ;
                                                            ;


  _Distance __remaining = 0;
  distance(__first, __last, __remaining);
  _Distance __m = min(__n, __remaining);

  while (__m > 0) {
    if (__random_number(__remaining) < __m) {
      *__out = *__first;
      ++__out;
      --__m;
    }

    --__remaining;
    ++__first;
  }
  return __out;
}

template <class _ForwardIter, class _OutputIter, class _Distance,
          class _RandomNumberGenerator>
_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
                            _OutputIter __out, const _Distance __n,
                            _RandomNumberGenerator& __rand)
{

                                                                    ;
                                                            ;

                                                      ;


  _Distance __remaining = 0;
  distance(__first, __last, __remaining);
  _Distance __m = min(__n, __remaining);

  while (__m > 0) {
    if (__rand(__remaining) < __m) {
      *__out = *__first;
      ++__out;
      --__m;
    }

    --__remaining;
    ++__first;
  }
  return __out;
}

template <class _InputIter, class _RandomAccessIter, class _Distance>
_RandomAccessIter __random_sample(_InputIter __first, _InputIter __last,
                                  _RandomAccessIter __out,
                                  const _Distance __n)
{
  _Distance __m = 0;
  _Distance __t = __n;
  for ( ; __first != __last && __m < __n; ++__m, ++__first)
    __out[__m] = *__first;

  while (__first != __last) {
    ++__t;
    _Distance __M = __random_number(__t);
    if (__M < __n)
      __out[__M] = *__first;
    ++__first;
  }

  return __out + __m;
}

template <class _InputIter, class _RandomAccessIter,
          class _RandomNumberGenerator, class _Distance>
_RandomAccessIter __random_sample(_InputIter __first, _InputIter __last,
                                  _RandomAccessIter __out,
                                  _RandomNumberGenerator& __rand,
                                  const _Distance __n)
{

                                                      ;


  _Distance __m = 0;
  _Distance __t = __n;
  for ( ; __first != __last && __m < __n; ++__m, ++__first)
    __out[__m] = *__first;

  while (__first != __last) {
    ++__t;
    _Distance __M = __rand(__t);
    if (__M < __n)
      __out[__M] = *__first;
    ++__first;
  }

  return __out + __m;
}

template <class _InputIter, class _RandomAccessIter>
inline _RandomAccessIter
random_sample(_InputIter __first, _InputIter __last,
              _RandomAccessIter __out_first, _RandomAccessIter __out_last)
{

                                                                ;
                           ;


  return __random_sample(__first, __last,
                         __out_first, __out_last - __out_first);
}


template <class _InputIter, class _RandomAccessIter,
          class _RandomNumberGenerator>
inline _RandomAccessIter
random_sample(_InputIter __first, _InputIter __last,
              _RandomAccessIter __out_first, _RandomAccessIter __out_last,
              _RandomNumberGenerator& __rand)
{

                                                                ;
                           ;


  return __random_sample(__first, __last,
                         __out_first, __rand,
                         __out_last - __out_first);
}



template <class _ForwardIter, class _Predicate>
_ForwardIter __partition(_ForwardIter __first,
                         _ForwardIter __last,
                         _Predicate __pred,
                         forward_iterator_tag)
{
  if (__first == __last) return __first;

  while (__pred(*__first))
    if (++__first == __last) return __first;

  _ForwardIter __next = __first;

  while (++__next != __last)
    if (__pred(*__next)) {
      swap(*__first, *__next);
      ++__first;
    }

  return __first;
}

template <class _BidirectionalIter, class _Predicate>
_BidirectionalIter __partition(_BidirectionalIter __first,
                               _BidirectionalIter __last,
                               _Predicate __pred,
                               bidirectional_iterator_tag)
{
  while (true) {
    while (true)
      if (__first == __last)
        return __first;
      else if (__pred(*__first))
        ++__first;
      else
        break;
    --__last;
    while (true)
      if (__first == __last)
        return __first;
      else if (!__pred(*__last))
        --__last;
      else
        break;
    iter_swap(__first, __last);
    ++__first;
  }
}

template <class _ForwardIter, class _Predicate>
inline _ForwardIter partition(_ForwardIter __first,
                              _ForwardIter __last,
                              _Predicate __pred)
{

                                                                            ;
                                                            ;


  return __partition(__first, __last, __pred, __iterator_category(__first));
}


template <class _ForwardIter, class _Predicate, class _Distance>
_ForwardIter __inplace_stable_partition(_ForwardIter __first,
                                        _ForwardIter __last,
                                        _Predicate __pred, _Distance __len)
{
  if (__len == 1)
    return __pred(*__first) ? __last : __first;
  _ForwardIter __middle = __first;
  advance(__middle, __len / 2);
  return rotate(__inplace_stable_partition(__first, __middle, __pred,
                                           __len / 2),
                __middle,
                __inplace_stable_partition(__middle, __last, __pred,
                                           __len - __len / 2));
}

template <class _ForwardIter, class _Pointer, class _Predicate,
          class _Distance>
_ForwardIter __stable_partition_adaptive(_ForwardIter __first,
                                         _ForwardIter __last,
                                         _Predicate __pred, _Distance __len,
                                         _Pointer __buffer,
                                         _Distance __buffer_size)
{
  if (__len <= __buffer_size) {
    _ForwardIter __result1 = __first;
    _Pointer __result2 = __buffer;
    for ( ; __first != __last ; ++__first)
      if (__pred(*__first)) {
        *__result1 = *__first;
        ++__result1;
      }
      else {
        *__result2 = *__first;
        ++__result2;
      }
    copy(__buffer, __result2, __result1);
    return __result1;
  }
  else {
    _ForwardIter __middle = __first;
    advance(__middle, __len / 2);
    return rotate(__stable_partition_adaptive(
                          __first, __middle, __pred,
                          __len / 2, __buffer, __buffer_size),
                    __middle,
                    __stable_partition_adaptive(
                          __middle, __last, __pred,
                          __len - __len / 2, __buffer, __buffer_size));
  }
}

template <class _ForwardIter, class _Predicate, class _Tp, class _Distance>
inline _ForwardIter
__stable_partition_aux(_ForwardIter __first, _ForwardIter __last,
                       _Predicate __pred, _Tp*, _Distance*)
{
  _Temporary_buffer<_ForwardIter, _Tp> __buf(__first, __last);
  if (__buf.size() > 0)
    return __stable_partition_adaptive(__first, __last, __pred,
                                       _Distance(__buf.requested_size()),
                                       __buf.begin(), __buf.size());
  else
    return __inplace_stable_partition(__first, __last, __pred,
                                      _Distance(__buf.requested_size()));
}

template <class _ForwardIter, class _Predicate>
inline _ForwardIter stable_partition(_ForwardIter __first,
                                     _ForwardIter __last,
                                     _Predicate __pred)
{

                                                                            ;
                                                            ;


  if (__first == __last)
    return __first;
  else
    return __stable_partition_aux(__first, __last, __pred,
                                  __value_type(__first),
                                  __distance_type(__first));
}

template <class _RandomAccessIter, class _Tp>
_RandomAccessIter __unguarded_partition(_RandomAccessIter __first,
                                        _RandomAccessIter __last,
                                        _Tp __pivot)
{
  while (true) {
    while (*__first < __pivot)
      ++__first;
    --__last;
    while (__pivot < *__last)
      --__last;
    if (!(__first < __last))
      return __first;
    iter_swap(__first, __last);
    ++__first;
  }
}

template <class _RandomAccessIter, class _Tp, class _Compare>
_RandomAccessIter __unguarded_partition(_RandomAccessIter __first,
                                        _RandomAccessIter __last,
                                        _Tp __pivot, _Compare __comp)
{
  while (true) {
    while (__comp(*__first, __pivot))
      ++__first;
    --__last;
    while (__comp(__pivot, *__last))
      --__last;
    if (!(__first < __last))
      return __first;
    iter_swap(__first, __last);
    ++__first;
  }
}

const int __stl_threshold = 16;



template <class _RandomAccessIter, class _Tp>
void __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val)
{
  _RandomAccessIter __next = __last;
  --__next;
  while (__val < *__next) {
    *__last = *__next;
    __last = __next;
    --__next;
  }
  *__last = __val;
}

template <class _RandomAccessIter, class _Tp, class _Compare>
void __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val,
                               _Compare __comp)
{
  _RandomAccessIter __next = __last;
  --__next;
  while (__comp(__val, *__next)) {
    *__last = *__next;
    __last = __next;
    --__next;
  }
  *__last = __val;
}

template <class _RandomAccessIter, class _Tp>
inline void __linear_insert(_RandomAccessIter __first,
                            _RandomAccessIter __last, _Tp*)
{
  _Tp __val = *__last;
  if (__val < *__first) {
    copy_backward(__first, __last, __last + 1);
    *__first = __val;
  }
  else
    __unguarded_linear_insert(__last, __val);
}

template <class _RandomAccessIter, class _Tp, class _Compare>
inline void __linear_insert(_RandomAccessIter __first,
                            _RandomAccessIter __last, _Tp*, _Compare __comp)
{
  _Tp __val = *__last;
  if (__comp(__val, *__first)) {
    copy_backward(__first, __last, __last + 1);
    *__first = __val;
  }
  else
    __unguarded_linear_insert(__last, __val, __comp);
}

template <class _RandomAccessIter>
void __insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last)
{
  if (__first == __last) return;
  for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
    __linear_insert(__first, __i, __value_type(__first));
}

template <class _RandomAccessIter, class _Compare>
void __insertion_sort(_RandomAccessIter __first,
                      _RandomAccessIter __last, _Compare __comp)
{
  if (__first == __last) return;
  for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
    __linear_insert(__first, __i, __value_type(__first), __comp);
}

template <class _RandomAccessIter, class _Tp>
void __unguarded_insertion_sort_aux(_RandomAccessIter __first,
                                    _RandomAccessIter __last, _Tp*)
{
  for (_RandomAccessIter __i = __first; __i != __last; ++__i)
    __unguarded_linear_insert(__i, _Tp(*__i));
}

template <class _RandomAccessIter>
inline void __unguarded_insertion_sort(_RandomAccessIter __first,
                                _RandomAccessIter __last) {
  __unguarded_insertion_sort_aux(__first, __last, __value_type(__first));
}

template <class _RandomAccessIter, class _Tp, class _Compare>
void __unguarded_insertion_sort_aux(_RandomAccessIter __first,
                                    _RandomAccessIter __last,
                                    _Tp*, _Compare __comp)
{
  for (_RandomAccessIter __i = __first; __i != __last; ++__i)
    __unguarded_linear_insert(__i, _Tp(*__i), __comp);
}

template <class _RandomAccessIter, class _Compare>
inline void __unguarded_insertion_sort(_RandomAccessIter __first,
                                       _RandomAccessIter __last,
                                       _Compare __comp)
{
  __unguarded_insertion_sort_aux(__first, __last, __value_type(__first),
                                 __comp);
}

template <class _RandomAccessIter>
void __final_insertion_sort(_RandomAccessIter __first,
                            _RandomAccessIter __last)
{
  if (__last - __first > __stl_threshold) {
    __insertion_sort(__first, __first + __stl_threshold);
    __unguarded_insertion_sort(__first + __stl_threshold, __last);
  }
  else
    __insertion_sort(__first, __last);
}

template <class _RandomAccessIter, class _Compare>
void __final_insertion_sort(_RandomAccessIter __first,
                            _RandomAccessIter __last, _Compare __comp)
{
  if (__last - __first > __stl_threshold) {
    __insertion_sort(__first, __first + __stl_threshold, __comp);
    __unguarded_insertion_sort(__first + __stl_threshold, __last, __comp);
  }
  else
    __insertion_sort(__first, __last, __comp);
}

template <class _Size>
inline _Size __lg(_Size __n)
{
  _Size __k;
  for (__k = 0; __n != 1; __n >>= 1) ++__k;
  return __k;
}

template <class _RandomAccessIter, class _Tp, class _Size>
void __introsort_loop(_RandomAccessIter __first,
                      _RandomAccessIter __last, _Tp*,
                      _Size __depth_limit)
{
  while (__last - __first > __stl_threshold) {
    if (__depth_limit == 0) {
      partial_sort(__first, __last, __last);
      return;
    }
    --__depth_limit;
    _RandomAccessIter __cut =
      __unguarded_partition(__first, __last,
                            _Tp(__median(*__first,
                                         *(__first + (__last - __first)/2),
                                         *(__last - 1))));
    __introsort_loop(__cut, __last, (_Tp*) 0, __depth_limit);
    __last = __cut;
  }
}

template <class _RandomAccessIter, class _Tp, class _Size, class _Compare>
void __introsort_loop(_RandomAccessIter __first,
                      _RandomAccessIter __last, _Tp*,
                      _Size __depth_limit, _Compare __comp)
{
  while (__last - __first > __stl_threshold) {
    if (__depth_limit == 0) {
      partial_sort(__first, __last, __last, __comp);
      return;
    }
    --__depth_limit;
    _RandomAccessIter __cut =
      __unguarded_partition(__first, __last,
                            _Tp(__median(*__first,
                                         *(__first + (__last - __first)/2),
                                         *(__last - 1), __comp)),
       __comp);
    __introsort_loop(__cut, __last, (_Tp*) 0, __depth_limit, __comp);
    __last = __cut;
  }
}

template <class _RandomAccessIter>
inline void sort(_RandomAccessIter __first, _RandomAccessIter __last)
{

                           ;

                                                                 ;


  if (__first != __last) {
    __introsort_loop(__first, __last,
                     __value_type(__first),
                     __lg(__last - __first) * 2);
    __final_insertion_sort(__first, __last);
  }
}

template <class _RandomAccessIter, class _Compare>
inline void sort(_RandomAccessIter __first, _RandomAccessIter __last,
                 _Compare __comp)
{

                           ;

                                                                 ;



  if (__first != __last) {
    __introsort_loop(__first, __last,
                     __value_type(__first),
                     __lg(__last - __first) * 2,
                     __comp);
    __final_insertion_sort(__first, __last, __comp);
  }
}



template <class _RandomAccessIter>
void __inplace_stable_sort(_RandomAccessIter __first,
                           _RandomAccessIter __last)
{
  if (__last - __first < 15) {
    __insertion_sort(__first, __last);
    return;
  }
  _RandomAccessIter __middle = __first + (__last - __first) / 2;
  __inplace_stable_sort(__first, __middle);
  __inplace_stable_sort(__middle, __last);
  __merge_without_buffer(__first, __middle, __last,
                         __middle - __first,
                         __last - __middle);
}

template <class _RandomAccessIter, class _Compare>
void __inplace_stable_sort(_RandomAccessIter __first,
                           _RandomAccessIter __last, _Compare __comp)
{
  if (__last - __first < 15) {
    __insertion_sort(__first, __last, __comp);
    return;
  }
  _RandomAccessIter __middle = __first + (__last - __first) / 2;
  __inplace_stable_sort(__first, __middle, __comp);
  __inplace_stable_sort(__middle, __last, __comp);
  __merge_without_buffer(__first, __middle, __last,
                         __middle - __first,
                         __last - __middle,
                         __comp);
}

template <class _RandomAccessIter1, class _RandomAccessIter2,
          class _Distance>
void __merge_sort_loop(_RandomAccessIter1 __first,
                       _RandomAccessIter1 __last,
                       _RandomAccessIter2 __result, _Distance __step_size)
{
  _Distance __two_step = 2 * __step_size;

  while (__last - __first >= __two_step) {
    __result = merge(__first, __first + __step_size,
                     __first + __step_size, __first + __two_step,
                     __result);
    __first += __two_step;
  }

  __step_size = min(_Distance(__last - __first), __step_size);
  merge(__first, __first + __step_size, __first + __step_size, __last,
        __result);
}

template <class _RandomAccessIter1, class _RandomAccessIter2,
          class _Distance, class _Compare>
void __merge_sort_loop(_RandomAccessIter1 __first,
                       _RandomAccessIter1 __last,
                       _RandomAccessIter2 __result, _Distance __step_size,
                       _Compare __comp)
{
  _Distance __two_step = 2 * __step_size;

  while (__last - __first >= __two_step) {
    __result = merge(__first, __first + __step_size,
                     __first + __step_size, __first + __two_step,
                     __result,
                     __comp);
    __first += __two_step;
  }
  __step_size = min(_Distance(__last - __first), __step_size);

  merge(__first, __first + __step_size,
        __first + __step_size, __last,
        __result,
        __comp);
}

const int __stl_chunk_size = 7;

template <class _RandomAccessIter, class _Distance>
void __chunk_insertion_sort(_RandomAccessIter __first,
                            _RandomAccessIter __last, _Distance __chunk_size)
{
  while (__last - __first >= __chunk_size) {
    __insertion_sort(__first, __first + __chunk_size);
    __first += __chunk_size;
  }
  __insertion_sort(__first, __last);
}

template <class _RandomAccessIter, class _Distance, class _Compare>
void __chunk_insertion_sort(_RandomAccessIter __first,
                            _RandomAccessIter __last,
                            _Distance __chunk_size, _Compare __comp)
{
  while (__last - __first >= __chunk_size) {
    __insertion_sort(__first, __first + __chunk_size, __comp);
    __first += __chunk_size;
  }
  __insertion_sort(__first, __last, __comp);
}

template <class _RandomAccessIter, class _Pointer, class _Distance>
void __merge_sort_with_buffer(_RandomAccessIter __first,
                              _RandomAccessIter __last,
                              _Pointer __buffer, _Distance*)
{
  _Distance __len = __last - __first;
  _Pointer __buffer_last = __buffer + __len;

  _Distance __step_size = __stl_chunk_size;
  __chunk_insertion_sort(__first, __last, __step_size);

  while (__step_size < __len) {
    __merge_sort_loop(__first, __last, __buffer, __step_size);
    __step_size *= 2;
    __merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
    __step_size *= 2;
  }
}

template <class _RandomAccessIter, class _Pointer, class _Distance,
          class _Compare>
void __merge_sort_with_buffer(_RandomAccessIter __first,
                              _RandomAccessIter __last, _Pointer __buffer,
                              _Distance*, _Compare __comp)
{
  _Distance __len = __last - __first;
  _Pointer __buffer_last = __buffer + __len;

  _Distance __step_size = __stl_chunk_size;
  __chunk_insertion_sort(__first, __last, __step_size, __comp);

  while (__step_size < __len) {
    __merge_sort_loop(__first, __last, __buffer, __step_size, __comp);
    __step_size *= 2;
    __merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp);
    __step_size *= 2;
  }
}

template <class _RandomAccessIter, class _Pointer, class _Distance>
void __stable_sort_adaptive(_RandomAccessIter __first,
                            _RandomAccessIter __last, _Pointer __buffer,
                            _Distance __buffer_size)
{
  _Distance __len = (__last - __first + 1) / 2;
  _RandomAccessIter __middle = __first + __len;
  if (__len > __buffer_size) {
    __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size);
    __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size);
  }
  else {
    __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0);
    __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0);
  }
  __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
                   _Distance(__last - __middle), __buffer, __buffer_size);
}

template <class _RandomAccessIter, class _Pointer, class _Distance,
          class _Compare>
void __stable_sort_adaptive(_RandomAccessIter __first,
                            _RandomAccessIter __last, _Pointer __buffer,
                            _Distance __buffer_size, _Compare __comp)
{
  _Distance __len = (__last - __first + 1) / 2;
  _RandomAccessIter __middle = __first + __len;
  if (__len > __buffer_size) {
    __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size,
                           __comp);
    __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size,
                           __comp);
  }
  else {
    __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0,
                               __comp);
    __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0,
                               __comp);
  }
  __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
                   _Distance(__last - __middle), __buffer, __buffer_size,
                   __comp);
}

template <class _RandomAccessIter, class _Tp, class _Distance>
inline void __stable_sort_aux(_RandomAccessIter __first,
                              _RandomAccessIter __last, _Tp*, _Distance*)
{
  _Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
  if (buf.begin() == 0)
    __inplace_stable_sort(__first, __last);
  else
    __stable_sort_adaptive(__first, __last, buf.begin(),
                           _Distance(buf.size()));
}

template <class _RandomAccessIter, class _Tp, class _Distance, class _Compare>
inline void __stable_sort_aux(_RandomAccessIter __first,
                              _RandomAccessIter __last, _Tp*, _Distance*,
                              _Compare __comp)
{
  _Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
  if (buf.begin() == 0)
    __inplace_stable_sort(__first, __last, __comp);
  else
    __stable_sort_adaptive(__first, __last, buf.begin(),
                           _Distance(buf.size()),
                           __comp);
}

template <class _RandomAccessIter>
inline void stable_sort(_RandomAccessIter __first,
                        _RandomAccessIter __last)
{

                           ;

                                                                 ;


  __stable_sort_aux(__first, __last,
                    __value_type(__first),
                    __distance_type(__first));
}

template <class _RandomAccessIter, class _Compare>
inline void stable_sort(_RandomAccessIter __first,
                        _RandomAccessIter __last, _Compare __comp)
{

                           ;

                                                                 ;



  __stable_sort_aux(__first, __last,
                    __value_type(__first),
                    __distance_type(__first),
                    __comp);
}



template <class _RandomAccessIter, class _Tp>
void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
                    _RandomAccessIter __last, _Tp*)
{
  make_heap(__first, __middle);
  for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
    if (*__i < *__first)
      __pop_heap(__first, __middle, __i, _Tp(*__i),
                 __distance_type(__first));
  sort_heap(__first, __middle);
}

template <class _RandomAccessIter>
inline void partial_sort(_RandomAccessIter __first,
                         _RandomAccessIter __middle,
                         _RandomAccessIter __last)
{

                           ;

                                                                 ;


  __partial_sort(__first, __middle, __last, __value_type(__first));
}

template <class _RandomAccessIter, class _Tp, class _Compare>
void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
                    _RandomAccessIter __last, _Tp*, _Compare __comp)
{
  make_heap(__first, __middle, __comp);
  for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
    if (__comp(*__i, *__first))
      __pop_heap(__first, __middle, __i, _Tp(*__i), __comp,
                 __distance_type(__first));
  sort_heap(__first, __middle, __comp);
}

template <class _RandomAccessIter, class _Compare>
inline void partial_sort(_RandomAccessIter __first,
                         _RandomAccessIter __middle,
                         _RandomAccessIter __last, _Compare __comp)
{

                           ;

                                                                 ;



  __partial_sort(__first, __middle, __last, __value_type(__first), __comp);
}

template <class _InputIter, class _RandomAccessIter, class _Distance,
          class _Tp>
_RandomAccessIter __partial_sort_copy(_InputIter __first,
                                      _InputIter __last,
                                      _RandomAccessIter __result_first,
                                      _RandomAccessIter __result_last,
                                      _Distance*, _Tp*)
{
  if (__result_first == __result_last) return __result_last;
  _RandomAccessIter __result_real_last = __result_first;
  while(__first != __last && __result_real_last != __result_last) {
    *__result_real_last = *__first;
    ++__result_real_last;
    ++__first;
  }
  make_heap(__result_first, __result_real_last);
  while (__first != __last) {
    if (*__first < *__result_first)
      __adjust_heap(__result_first, _Distance(0),
                    _Distance(__result_real_last - __result_first),
                    _Tp(*__first));
    ++__first;
  }
  sort_heap(__result_first, __result_real_last);
  return __result_real_last;
}

template <class _InputIter, class _RandomAccessIter>
inline _RandomAccessIter
partial_sort_copy(_InputIter __first, _InputIter __last,
                  _RandomAccessIter __result_first,
                  _RandomAccessIter __result_last)
{

                                                                ;
                                                                 ;


                                                                 ;

                                                          ;


  return __partial_sort_copy(__first, __last, __result_first, __result_last,
                             __distance_type(__result_first),
                             __value_type(__first));
}

template <class _InputIter, class _RandomAccessIter, class _Compare,
          class _Distance, class _Tp>
_RandomAccessIter __partial_sort_copy(_InputIter __first,
                                         _InputIter __last,
                                         _RandomAccessIter __result_first,
                                         _RandomAccessIter __result_last,
                                         _Compare __comp, _Distance*, _Tp*)
{
  if (__result_first == __result_last) return __result_last;
  _RandomAccessIter __result_real_last = __result_first;
  while(__first != __last && __result_real_last != __result_last) {
    *__result_real_last = *__first;
    ++__result_real_last;
    ++__first;
  }
  make_heap(__result_first, __result_real_last, __comp);
  while (__first != __last) {
    if (__comp(*__first, *__result_first))
      __adjust_heap(__result_first, _Distance(0),
                    _Distance(__result_real_last - __result_first),
                    _Tp(*__first),
                    __comp);
    ++__first;
  }
  sort_heap(__result_first, __result_real_last, __comp);
  return __result_real_last;
}

template <class _InputIter, class _RandomAccessIter, class _Compare>
inline _RandomAccessIter
partial_sort_copy(_InputIter __first, _InputIter __last,
                  _RandomAccessIter __result_first,
                  _RandomAccessIter __result_last, _Compare __comp)
{

                                                                ;
                           ;

                                                                 ;


                                                                 ;



  return __partial_sort_copy(__first, __last, __result_first, __result_last,
                             __comp,
                             __distance_type(__result_first),
                             __value_type(__first));
}



template <class _RandomAccessIter, class _Tp>
void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
                   _RandomAccessIter __last, _Tp*)
{
  while (__last - __first > 3) {
    _RandomAccessIter __cut =
      __unguarded_partition(__first, __last,
                            _Tp(__median(*__first,
                                         *(__first + (__last - __first)/2),
                                         *(__last - 1))));
    if (__cut <= __nth)
      __first = __cut;
    else
      __last = __cut;
  }
  __insertion_sort(__first, __last);
}

template <class _RandomAccessIter>
inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
                        _RandomAccessIter __last)
{

                           ;

                                                                 ;


  __nth_element(__first, __nth, __last, __value_type(__first));
}

template <class _RandomAccessIter, class _Tp, class _Compare>
void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
                   _RandomAccessIter __last, _Tp*, _Compare __comp)
{
  while (__last - __first > 3) {
    _RandomAccessIter __cut =
      __unguarded_partition(__first, __last,
                            _Tp(__median(*__first,
                                         *(__first + (__last - __first)/2),
                                         *(__last - 1),
                                         __comp)),
                            __comp);
    if (__cut <= __nth)
      __first = __cut;
    else
      __last = __cut;
  }
  __insertion_sort(__first, __last, __comp);
}

template <class _RandomAccessIter, class _Compare>
inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
                        _RandomAccessIter __last, _Compare __comp)
{

                           ;

                                                                 ;



  __nth_element(__first, __nth, __last, __value_type(__first), __comp);
}




template <class _ForwardIter, class _Tp, class _Distance>
_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
                           const _Tp& __val, _Distance*)
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (*__middle < __val) {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
    else
      __len = __half;
  }
  return __first;
}

template <class _ForwardIter, class _Tp>
inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
                                const _Tp& __val)
{

                                                                    ;
                                                            ;

                                                              ;

  return __lower_bound(__first, __last, __val,
                       __distance_type(__first));
}

template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
                              const _Tp& __val, _Compare __comp, _Distance*)
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (__comp(*__middle, __val)) {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
    else
      __len = __half;
  }
  return __first;
}

template <class _ForwardIter, class _Tp, class _Compare>
inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
                                const _Tp& __val, _Compare __comp)
{

                                                                    ;
                                                            ;

                                                                          ;

  return __lower_bound(__first, __last, __val, __comp,
                       __distance_type(__first));
}

template <class _ForwardIter, class _Tp, class _Distance>
_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,
                           const _Tp& __val, _Distance*)
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (__val < *__middle)
      __len = __half;
    else {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
  }
  return __first;
}

template <class _ForwardIter, class _Tp>
inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
                                const _Tp& __val)
{

                                                                    ;
                                                            ;

                                                              ;

  return __upper_bound(__first, __last, __val,
                       __distance_type(__first));
}

template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,
                           const _Tp& __val, _Compare __comp, _Distance*)
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (__comp(__val, *__middle))
      __len = __half;
    else {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
  }
  return __first;
}

template <class _ForwardIter, class _Tp, class _Compare>
inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
                                const _Tp& __val, _Compare __comp)
{

                                                                    ;
                                                            ;

                                                                          ;

  return __upper_bound(__first, __last, __val, __comp,
                       __distance_type(__first));
}

template <class _ForwardIter, class _Tp, class _Distance>
pair<_ForwardIter, _ForwardIter>
__equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
              _Distance*)
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle, __left, __right;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (*__middle < __val) {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
    else if (__val < *__middle)
      __len = __half;
    else {
      __left = lower_bound(__first, __middle, __val);
      advance(__first, __len);
      __right = upper_bound(++__middle, __first, __val);
      return pair<_ForwardIter, _ForwardIter>(__left, __right);
    }
  }
  return pair<_ForwardIter, _ForwardIter>(__first, __first);
}

template <class _ForwardIter, class _Tp>
inline pair<_ForwardIter, _ForwardIter>
equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val)
{

                                                                    ;
                                                            ;

                                                              ;

  return __equal_range(__first, __last, __val,
                       __distance_type(__first));
}

template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
pair<_ForwardIter, _ForwardIter>
__equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
              _Compare __comp, _Distance*)
{
  _Distance __len = 0;
  distance(__first, __last, __len);
  _Distance __half;
  _ForwardIter __middle, __left, __right;

  while (__len > 0) {
    __half = __len >> 1;
    __middle = __first;
    advance(__middle, __half);
    if (__comp(*__middle, __val)) {
      __first = __middle;
      ++__first;
      __len = __len - __half - 1;
    }
    else if (__comp(__val, *__middle))
      __len = __half;
    else {
      __left = lower_bound(__first, __middle, __val, __comp);
      advance(__first, __len);
      __right = upper_bound(++__middle, __first, __val, __comp);
      return pair<_ForwardIter, _ForwardIter>(__left, __right);
    }
  }
  return pair<_ForwardIter, _ForwardIter>(__first, __first);
}

template <class _ForwardIter, class _Tp, class _Compare>
inline pair<_ForwardIter, _ForwardIter>
equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
            _Compare __comp)
{

                                                                    ;
                                                            ;

                                                                          ;

  return __equal_range(__first, __last, __val, __comp,
                       __distance_type(__first));
}

template <class _ForwardIter, class _Tp>
bool binary_search(_ForwardIter __first, _ForwardIter __last,
                   const _Tp& __val)
{

                                                                    ;
                                                            ;

                                                              ;

  _ForwardIter __i = lower_bound(__first, __last, __val);
  return __i != __last && !(__val < *__i);
}

template <class _ForwardIter, class _Tp, class _Compare>
bool binary_search(_ForwardIter __first, _ForwardIter __last,
                   const _Tp& __val,
                   _Compare __comp)
{

                                                                    ;
                                                            ;

                                                                          ;

  _ForwardIter __i = lower_bound(__first, __last, __val, __comp);
  return __i != __last && !__comp(__val, *__i);
}



template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
                  _InputIter2 __first2, _InputIter2 __last2,
                  _OutputIter __result)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


                                                           ;


  while (__first1 != __last1 && __first2 != __last2) {
    if (*__first2 < *__first1) {
      *__result = *__first2;
      ++__first2;
    }
    else {
      *__result = *__first1;
      ++__first1;
    }
    ++__result;
  }
  return copy(__first2, __last2, copy(__first1, __last1, __result));
}

template <class _InputIter1, class _InputIter2, class _OutputIter,
          class _Compare>
_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
                  _InputIter2 __first2, _InputIter2 __last2,
                  _OutputIter __result, _Compare __comp)
{

                                                                 ;
                                                                 ;
                                                           ;


                                                           ;

                                                           ;



  while (__first1 != __last1 && __first2 != __last2) {
    if (__comp(*__first2, *__first1)) {
      *__result = *__first2;
      ++__first2;
    }
    else {
      *__result = *__first1;
      ++__first1;
    }
    ++__result;
  }
  return copy(__first2, __last2, copy(__first1, __last1, __result));
}



template <class _BidirectionalIter, class _Distance>
void __merge_without_buffer(_BidirectionalIter __first,
                            _BidirectionalIter __middle,
                            _BidirectionalIter __last,
                            _Distance __len1, _Distance __len2)
{
  if (__len1 == 0 || __len2 == 0)
    return;
  if (__len1 + __len2 == 2) {
    if (*__middle < *__first)
      iter_swap(__first, __middle);
    return;
  }
  _BidirectionalIter __first_cut = __first;
  _BidirectionalIter __second_cut = __middle;
  _Distance __len11 = 0;
  _Distance __len22 = 0;
  if (__len1 > __len2) {
    __len11 = __len1 / 2;
    advance(__first_cut, __len11);
    __second_cut = lower_bound(__middle, __last, *__first_cut);
    distance(__middle, __second_cut, __len22);
  }
  else {
    __len22 = __len2 / 2;
    advance(__second_cut, __len22);
    __first_cut = upper_bound(__first, __middle, *__second_cut);
    distance(__first, __first_cut, __len11);
  }
  _BidirectionalIter __new_middle
    = rotate(__first_cut, __middle, __second_cut);
  __merge_without_buffer(__first, __first_cut, __new_middle,
                         __len11, __len22);
  __merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,
                         __len2 - __len22);
}

template <class _BidirectionalIter, class _Distance, class _Compare>
void __merge_without_buffer(_BidirectionalIter __first,
                            _BidirectionalIter __middle,
                            _BidirectionalIter __last,
                            _Distance __len1, _Distance __len2,
                            _Compare __comp)
{
  if (__len1 == 0 || __len2 == 0)
    return;
  if (__len1 + __len2 == 2) {
    if (__comp(*__middle, *__first))
      iter_swap(__first, __middle);
    return;
  }
  _BidirectionalIter __first_cut = __first;
  _BidirectionalIter __second_cut = __middle;
  _Distance __len11 = 0;
  _Distance __len22 = 0;
  if (__len1 > __len2) {
    __len11 = __len1 / 2;
    advance(__first_cut, __len11);
    __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
    distance(__middle, __second_cut, __len22);
  }
  else {
    __len22 = __len2 / 2;
    advance(__second_cut, __len22);
    __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
    distance(__first, __first_cut, __len11);
  }
  _BidirectionalIter __new_middle
    = rotate(__first_cut, __middle, __second_cut);
  __merge_without_buffer(__first, __first_cut, __new_middle, __len11, __len22,
                         __comp);
  __merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,
                         __len2 - __len22, __comp);
}

template <class _BidirectionalIter1, class _BidirectionalIter2,
          class _Distance>
_BidirectionalIter1 __rotate_adaptive(_BidirectionalIter1 __first,
                                      _BidirectionalIter1 __middle,
                                      _BidirectionalIter1 __last,
                                      _Distance __len1, _Distance __len2,
                                      _BidirectionalIter2 __buffer,
                                      _Distance __buffer_size)
{
  _BidirectionalIter2 __buffer_end;
  if (__len1 > __len2 && __len2 <= __buffer_size) {
    __buffer_end = copy(__middle, __last, __buffer);
    copy_backward(__first, __middle, __last);
    return copy(__buffer, __buffer_end, __first);
  }
  else if (__len1 <= __buffer_size) {
    __buffer_end = copy(__first, __middle, __buffer);
    copy(__middle, __last, __first);
    return copy_backward(__buffer, __buffer_end, __last);
  }
  else
    return rotate(__first, __middle, __last);
}

template <class _BidirectionalIter1, class _BidirectionalIter2,
          class _BidirectionalIter3>
_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,
                                     _BidirectionalIter1 __last1,
                                     _BidirectionalIter2 __first2,
                                     _BidirectionalIter2 __last2,
                                     _BidirectionalIter3 __result)
{
  if (__first1 == __last1)
    return copy_backward(__first2, __last2, __result);
  if (__first2 == __last2)
    return copy_backward(__first1, __last1, __result);
  --__last1;
  --__last2;
  while (true) {
    if (*__last2 < *__last1) {
      *--__result = *__last1;
      if (__first1 == __last1)
        return copy_backward(__first2, ++__last2, __result);
      --__last1;
    }
    else {
      *--__result = *__last2;
      if (__first2 == __last2)
        return copy_backward(__first1, ++__last1, __result);
      --__last2;
    }
  }
}

template <class _BidirectionalIter1, class _BidirectionalIter2,
          class _BidirectionalIter3, class _Compare>
_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,
                                     _BidirectionalIter1 __last1,
                                     _BidirectionalIter2 __first2,
                                     _BidirectionalIter2 __last2,
                                     _BidirectionalIter3 __result,
                                     _Compare __comp)
{
  if (__first1 == __last1)
    return copy_backward(__first2, __last2, __result);
  if (__first2 == __last2)
    return copy_backward(__first1, __last1, __result);
  --__last1;
  --__last2;
  while (true) {
    if (__comp(*__last2, *__last1)) {
      *--__result = *__last1;
      if (__first1 == __last1)
        return copy_backward(__first2, ++__last2, __result);
      --__last1;
    }
    else {
      *--__result = *__last2;
      if (__first2 == __last2)
        return copy_backward(__first1, ++__last1, __result);
      --__last2;
    }
  }
}

template <class _BidirectionalIter, class _Distance, class _Pointer>
void __merge_adaptive(_BidirectionalIter __first,
                      _BidirectionalIter __middle,
                      _BidirectionalIter __last,
                      _Distance __len1, _Distance __len2,
                      _Pointer __buffer, _Distance __buffer_size)
{
  if (__len1 <= __len2 && __len1 <= __buffer_size) {
    _Pointer __buffer_end = copy(__first, __middle, __buffer);
    merge(__buffer, __buffer_end, __middle, __last, __first);
  }
  else if (__len2 <= __buffer_size) {
    _Pointer __buffer_end = copy(__middle, __last, __buffer);
    __merge_backward(__first, __middle, __buffer, __buffer_end, __last);
  }
  else {
    _BidirectionalIter __first_cut = __first;
    _BidirectionalIter __second_cut = __middle;
    _Distance __len11 = 0;
    _Distance __len22 = 0;
    if (__len1 > __len2) {
      __len11 = __len1 / 2;
      advance(__first_cut, __len11);
      __second_cut = lower_bound(__middle, __last, *__first_cut);
      distance(__middle, __second_cut, __len22);
    }
    else {
      __len22 = __len2 / 2;
      advance(__second_cut, __len22);
      __first_cut = upper_bound(__first, __middle, *__second_cut);
      distance(__first, __first_cut, __len11);
    }
    _BidirectionalIter __new_middle =
      __rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
                        __len22, __buffer, __buffer_size);
    __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                     __len22, __buffer, __buffer_size);
    __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                     __len2 - __len22, __buffer, __buffer_size);
  }
}

template <class _BidirectionalIter, class _Distance, class _Pointer,
          class _Compare>
void __merge_adaptive(_BidirectionalIter __first,
                      _BidirectionalIter __middle,
                      _BidirectionalIter __last,
                      _Distance __len1, _Distance __len2,
                      _Pointer __buffer, _Distance __buffer_size,
                      _Compare __comp)
{
  if (__len1 <= __len2 && __len1 <= __buffer_size) {
    _Pointer __buffer_end = copy(__first, __middle, __buffer);
    merge(__buffer, __buffer_end, __middle, __last, __first, __comp);
  }
  else if (__len2 <= __buffer_size) {
    _Pointer __buffer_end = copy(__middle, __last, __buffer);
    __merge_backward(__first, __middle, __buffer, __buffer_end, __last,
                     __comp);
  }
  else {
    _BidirectionalIter __first_cut = __first;
    _BidirectionalIter __second_cut = __middle;
    _Distance __len11 = 0;
    _Distance __len22 = 0;
    if (__len1 > __len2) {
      __len11 = __len1 / 2;
      advance(__first_cut, __len11);
      __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
      distance(__middle, __second_cut, __len22);
    }
    else {
      __len22 = __len2 / 2;
      advance(__second_cut, __len22);
      __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
      distance(__first, __first_cut, __len11);
    }
    _BidirectionalIter __new_middle =
      __rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
                        __len22, __buffer, __buffer_size);
    __merge_adaptive(__first, __first_cut, __new_middle, __len11,
                     __len22, __buffer, __buffer_size, __comp);
    __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
                     __len2 - __len22, __buffer, __buffer_size, __comp);
  }
}

template <class _BidirectionalIter, class _Tp, class _Distance>
inline void __inplace_merge_aux(_BidirectionalIter __first,
                                _BidirectionalIter __middle,
                                _BidirectionalIter __last, _Tp*, _Distance*)
{
  _Distance __len1 = 0;
  distance(__first, __middle, __len1);
  _Distance __len2 = 0;
  distance(__middle, __last, __len2);

  _Temporary_buffer<_BidirectionalIter, _Tp> __buf(__first, __last);
  if (__buf.begin() == 0)
    __merge_without_buffer(__first, __middle, __last, __len1, __len2);
  else
    __merge_adaptive(__first, __middle, __last, __len1, __len2,
                     __buf.begin(), _Distance(__buf.size()));
}

template <class _BidirectionalIter, class _Tp,
          class _Distance, class _Compare>
inline void __inplace_merge_aux(_BidirectionalIter __first,
                                _BidirectionalIter __middle,
                                _BidirectionalIter __last, _Tp*, _Distance*,
                                _Compare __comp)
{
  _Distance __len1 = 0;
  distance(__first, __middle, __len1);
  _Distance __len2 = 0;
  distance(__middle, __last, __len2);

  _Temporary_buffer<_BidirectionalIter, _Tp> __buf(__first, __last);
  if (__buf.begin() == 0)
    __merge_without_buffer(__first, __middle, __last, __len1, __len2, __comp);
  else
    __merge_adaptive(__first, __middle, __last, __len1, __len2,
                     __buf.begin(), _Distance(__buf.size()),
                     __comp);
}

template <class _BidirectionalIter>
inline void inplace_merge(_BidirectionalIter __first,
                          _BidirectionalIter __middle,
                          _BidirectionalIter __last)
{

                            ;

                                                                  ;


  if (__first == __middle || __middle == __last)
    return;
  __inplace_merge_aux(__first, __middle, __last,
                      __value_type(__first), __distance_type(__first));
}

template <class _BidirectionalIter, class _Compare>
inline void inplace_merge(_BidirectionalIter __first,
                          _BidirectionalIter __middle,
                          _BidirectionalIter __last, _Compare __comp)
{

                            ;

                                                                  ;



  if (__first == __middle || __middle == __last)
    return;
  __inplace_merge_aux(__first, __middle, __last,
                      __value_type(__first), __distance_type(__first),
                      __comp);
}






template <class _InputIter1, class _InputIter2>
bool includes(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2, _InputIter2 __last2)
{

                                                                 ;
                                                                 ;
                                                           ;


                                                           ;


  while (__first1 != __last1 && __first2 != __last2)
    if (*__first2 < *__first1)
      return false;
    else if(*__first1 < *__first2)
      ++__first1;
    else
      ++__first1, ++__first2;

  return __first2 == __last2;
}

template <class _InputIter1, class _InputIter2, class _Compare>
bool includes(_InputIter1 __first1, _InputIter1 __last1,
              _InputIter2 __first2, _InputIter2 __last2, _Compare __comp)
{

                                                                 ;
                                                                 ;
                                                           ;


                                                           ;



  while (__first1 != __last1 && __first2 != __last2)
    if (__comp(*__first2, *__first1))
      return false;
    else if(__comp(*__first1, *__first2))
      ++__first1;
    else
      ++__first1, ++__first2;

  return __first2 == __last2;
}

template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
                      _InputIter2 __first2, _InputIter2 __last2,
                      _OutputIter __result)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


                                                           ;


  while (__first1 != __last1 && __first2 != __last2) {
    if (*__first1 < *__first2) {
      *__result = *__first1;
      ++__first1;
    }
    else if (*__first2 < *__first1) {
      *__result = *__first2;
      ++__first2;
    }
    else {
      *__result = *__first1;
      ++__first1;
      ++__first2;
    }
    ++__result;
  }
  return copy(__first2, __last2, copy(__first1, __last1, __result));
}

template <class _InputIter1, class _InputIter2, class _OutputIter,
          class _Compare>
_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
                      _InputIter2 __first2, _InputIter2 __last2,
                      _OutputIter __result, _Compare __comp)
{

                                                                 ;
                                                                 ;
                                                           ;


                                                           ;

                                                           ;



  while (__first1 != __last1 && __first2 != __last2) {
    if (__comp(*__first1, *__first2)) {
      *__result = *__first1;
      ++__first1;
    }
    else if (__comp(*__first2, *__first1)) {
      *__result = *__first2;
      ++__first2;
    }
    else {
      *__result = *__first1;
      ++__first1;
      ++__first2;
    }
    ++__result;
  }
  return copy(__first2, __last2, copy(__first1, __last1, __result));
}

template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2,
                             _OutputIter __result)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


                                                           ;


  while (__first1 != __last1 && __first2 != __last2)
    if (*__first1 < *__first2)
      ++__first1;
    else if (*__first2 < *__first1)
      ++__first2;
    else {
      *__result = *__first1;
      ++__first1;
      ++__first2;
      ++__result;
    }
  return __result;
}

template <class _InputIter1, class _InputIter2, class _OutputIter,
          class _Compare>
_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
                             _InputIter2 __first2, _InputIter2 __last2,
                             _OutputIter __result, _Compare __comp)
{

                                                                 ;
                                                                 ;
                                                           ;


                                                           ;

                                                           ;



  while (__first1 != __last1 && __first2 != __last2)
    if (__comp(*__first1, *__first2))
      ++__first1;
    else if (__comp(*__first2, *__first1))
      ++__first2;
    else {
      *__result = *__first1;
      ++__first1;
      ++__first2;
      ++__result;
    }
  return __result;
}

template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
                           _InputIter2 __first2, _InputIter2 __last2,
                           _OutputIter __result)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


                                                           ;


  while (__first1 != __last1 && __first2 != __last2)
    if (*__first1 < *__first2) {
      *__result = *__first1;
      ++__first1;
      ++__result;
    }
    else if (*__first2 < *__first1)
      ++__first2;
    else {
      ++__first1;
      ++__first2;
    }
  return copy(__first1, __last1, __result);
}

template <class _InputIter1, class _InputIter2, class _OutputIter,
          class _Compare>
_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
                           _InputIter2 __first2, _InputIter2 __last2,
                           _OutputIter __result, _Compare __comp)
{

                                                                 ;
                                                                 ;
                                                           ;


                                                           ;

                                                           ;



  while (__first1 != __last1 && __first2 != __last2)
    if (__comp(*__first1, *__first2)) {
      *__result = *__first1;
      ++__first1;
      ++__result;
    }
    else if (__comp(*__first2, *__first1))
      ++__first2;
    else {
      ++__first1;
      ++__first2;
    }
  return copy(__first1, __last1, __result);
}

template <class _InputIter1, class _InputIter2, class _OutputIter>
_OutputIter
set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
                         _InputIter2 __first2, _InputIter2 __last2,
                         _OutputIter __result)
{

                                                                 ;
                                                                 ;
                                                           ;

                                                           ;


                                                           ;


  while (__first1 != __last1 && __first2 != __last2)
    if (*__first1 < *__first2) {
      *__result = *__first1;
      ++__first1;
      ++__result;
    }
    else if (*__first2 < *__first1) {
      *__result = *__first2;
      ++__first2;
      ++__result;
    }
    else {
      ++__first1;
      ++__first2;
    }
  return copy(__first2, __last2, copy(__first1, __last1, __result));
}

template <class _InputIter1, class _InputIter2, class _OutputIter,
          class _Compare>
_OutputIter
set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
                         _InputIter2 __first2, _InputIter2 __last2,
                         _OutputIter __result,
                         _Compare __comp)
{

                                                                 ;
                                                                 ;
                                                           ;


                                                           ;

                                                           ;



  while (__first1 != __last1 && __first2 != __last2)
    if (__comp(*__first1, *__first2)) {
      *__result = *__first1;
      ++__first1;
      ++__result;
    }
    else if (__comp(*__first2, *__first1)) {
      *__result = *__first2;
      ++__first2;
      ++__result;
    }
    else {
      ++__first1;
      ++__first2;
    }
  return copy(__first2, __last2, copy(__first1, __last1, __result));
}




template <class _ForwardIter>
_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last)
{

                                                                    ;
                                                            ;


  if (__first == __last) return __first;
  _ForwardIter __result = __first;
  while (++__first != __last)
    if (*__result < *__first)
      __result = __first;
  return __result;
}

template <class _ForwardIter, class _Compare>
_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last,
                         _Compare __comp)
{

                                                                    ;
                                                            ;



  if (__first == __last) return __first;
  _ForwardIter __result = __first;
  while (++__first != __last)
    if (__comp(*__result, *__first)) __result = __first;
  return __result;
}

template <class _ForwardIter>
_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last)
{

                                                                    ;
                                                            ;


  if (__first == __last) return __first;
  _ForwardIter __result = __first;
  while (++__first != __last)
    if (*__first < *__result)
      __result = __first;
  return __result;
}

template <class _ForwardIter, class _Compare>
_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last,
                         _Compare __comp)
{

                                                                    ;
                                                            ;



  if (__first == __last) return __first;
  _ForwardIter __result = __first;
  while (++__first != __last)
    if (__comp(*__first, *__result))
      __result = __first;
  return __result;
}




template <class _BidirectionalIter>
bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
{

                                                                                ;
                                                                  ;


  if (__first == __last)
    return false;
  _BidirectionalIter __i = __first;
  ++__i;
  if (__i == __last)
    return false;
  __i = __last;
  --__i;

  for(;;) {
    _BidirectionalIter __ii = __i;
    --__i;
    if (*__i < *__ii) {
      _BidirectionalIter __j = __last;
      while (!(*__i < *--__j))
        {}
      iter_swap(__i, __j);
      reverse(__ii, __last);
      return true;
    }
    if (__i == __first) {
      reverse(__first, __last);
      return false;
    }
  }
}

template <class _BidirectionalIter, class _Compare>
bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
                      _Compare __comp)
{

                                                                                ;
                                                                  ;



  if (__first == __last)
    return false;
  _BidirectionalIter __i = __first;
  ++__i;
  if (__i == __last)
    return false;
  __i = __last;
  --__i;

  for(;;) {
    _BidirectionalIter __ii = __i;
    --__i;
    if (__comp(*__i, *__ii)) {
      _BidirectionalIter __j = __last;
      while (!__comp(*__i, *--__j))
        {}
      iter_swap(__i, __j);
      reverse(__ii, __last);
      return true;
    }
    if (__i == __first) {
      reverse(__first, __last);
      return false;
    }
  }
}

template <class _BidirectionalIter>
bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last)
{

                                                                                ;
                                                                  ;


  if (__first == __last)
    return false;
  _BidirectionalIter __i = __first;
  ++__i;
  if (__i == __last)
    return false;
  __i = __last;
  --__i;

  for(;;) {
    _BidirectionalIter __ii = __i;
    --__i;
    if (*__ii < *__i) {
      _BidirectionalIter __j = __last;
      while (!(*--__j < *__i))
        {}
      iter_swap(__i, __j);
      reverse(__ii, __last);
      return true;
    }
    if (__i == __first) {
      reverse(__first, __last);
      return false;
    }
  }
}

template <class _BidirectionalIter, class _Compare>
bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
                      _Compare __comp)
{

                                                                                ;
                                                                  ;



  if (__first == __last)
    return false;
  _BidirectionalIter __i = __first;
  ++__i;
  if (__i == __last)
    return false;
  __i = __last;
  --__i;

  for(;;) {
    _BidirectionalIter __ii = __i;
    --__i;
    if (__comp(*__ii, *__i)) {
      _BidirectionalIter __j = __last;
      while (!__comp(*--__j, *__i))
        {}
      iter_swap(__i, __j);
      reverse(__ii, __last);
      return true;
    }
    if (__i == __first) {
      reverse(__first, __last);
      return false;
    }
  }
}



template <class _InputIter, class _ForwardIter>
_InputIter find_first_of(_InputIter __first1, _InputIter __last1,
                         _ForwardIter __first2, _ForwardIter __last2)
{

                                                                ;
                                                                    ;
                                                            ;



  for ( ; __first1 != __last1; ++__first1)
    for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
      if (*__first1 == *__iter)
        return __first1;
  return __last1;
}

template <class _InputIter, class _ForwardIter, class _BinaryPredicate>
_InputIter find_first_of(_InputIter __first1, _InputIter __last1,
                         _ForwardIter __first2, _ForwardIter __last2,
                         _BinaryPredicate __comp)
{

                                                                ;
                                                                    ;
                                                            ;


                                                            ;



  for ( ; __first1 != __last1; ++__first1)
    for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
      if (__comp(*__first1, *__iter))
        return __first1;
  return __last1;
}
# 3419 "/opt/egcs/include/g++-v3/bits/stl_algo.h" 3
template <class _ForwardIter1, class _ForwardIter2>
_ForwardIter1 __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
                         _ForwardIter2 __first2, _ForwardIter2 __last2,
                         forward_iterator_tag, forward_iterator_tag)
{
  if (__first2 == __last2)
    return __last1;
  else {
    _ForwardIter1 __result = __last1;
    while (1) {
      _ForwardIter1 __new_result
        = search(__first1, __last1, __first2, __last2);
      if (__new_result == __last1)
        return __result;
      else {
        __result = __new_result;
        __first1 = __new_result;
        ++__first1;
      }
    }
  }
}

template <class _ForwardIter1, class _ForwardIter2,
          class _BinaryPredicate>
_ForwardIter1 __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
                         _ForwardIter2 __first2, _ForwardIter2 __last2,
                         forward_iterator_tag, forward_iterator_tag,
                         _BinaryPredicate __comp)
{
  if (__first2 == __last2)
    return __last1;
  else {
    _ForwardIter1 __result = __last1;
    while (1) {
      _ForwardIter1 __new_result
        = search(__first1, __last1, __first2, __last2, __comp);
      if (__new_result == __last1)
        return __result;
      else {
        __result = __new_result;
        __first1 = __new_result;
        ++__first1;
      }
    }
  }
}


template <class _BidirectionalIter1, class _BidirectionalIter2>
_BidirectionalIter1
__find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
           _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
           bidirectional_iterator_tag, bidirectional_iterator_tag)
{

                                                                                 ;
                                                                                 ;

  typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
  typedef reverse_iterator<_BidirectionalIter2> _RevIter2;

  _RevIter1 __rlast1(__first1);
  _RevIter2 __rlast2(__first2);
  _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
                               _RevIter2(__last2), __rlast2);

  if (__rresult == __rlast1)
    return __last1;
  else {
    _BidirectionalIter1 __result = __rresult.base();
    advance(__result, -distance(__first2, __last2));
    return __result;
  }
}

template <class _BidirectionalIter1, class _BidirectionalIter2,
          class _BinaryPredicate>
_BidirectionalIter1
__find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
           _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
           bidirectional_iterator_tag, bidirectional_iterator_tag,
           _BinaryPredicate __comp)
{

                                                                                 ;
                                                                                 ;

  typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
  typedef reverse_iterator<_BidirectionalIter2> _RevIter2;

  _RevIter1 __rlast1(__first1);
  _RevIter2 __rlast2(__first2);
  _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
                               _RevIter2(__last2), __rlast2,
                               __comp);

  if (__rresult == __rlast1)
    return __last1;
  else {
    _BidirectionalIter1 __result = __rresult.base();
    advance(__result, -distance(__first2, __last2));
    return __result;
  }
}



template <class _ForwardIter1, class _ForwardIter2>
inline _ForwardIter1
find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
         _ForwardIter2 __first2, _ForwardIter2 __last2)
{

                                                                     ;
                                                                     ;
                                                             ;



  return __find_end(__first1, __last1, __first2, __last2,
                    __iterator_category(__first1),
                    __iterator_category(__first2));
}

template <class _ForwardIter1, class _ForwardIter2,
          class _BinaryPredicate>
inline _ForwardIter1
find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
         _ForwardIter2 __first2, _ForwardIter2 __last2,
         _BinaryPredicate __comp)
{

                                                                     ;
                                                                     ;
                                                             ;



  return __find_end(__first1, __last1, __first2, __last2,
                    __iterator_category(__first1),
                    __iterator_category(__first2),
                    __comp);
}





template <class _RandomAccessIter, class _Distance>
bool __is_heap(_RandomAccessIter __first, _Distance __n)
{
  _Distance __parent = 0;
  for (_Distance __child = 1; __child < __n; ++__child) {
    if (__first[__parent] < __first[__child])
      return false;
    if ((__child & 1) == 0)
      ++__parent;
  }
  return true;
}

template <class _RandomAccessIter, class _Distance, class _StrictWeakOrdering>
bool __is_heap(_RandomAccessIter __first, _StrictWeakOrdering __comp,
               _Distance __n)
{
  _Distance __parent = 0;
  for (_Distance __child = 1; __child < __n; ++__child) {
    if (__comp(__first[__parent], __first[__child]))
      return false;
    if ((__child & 1) == 0)
      ++__parent;
  }
  return true;
}

template <class _RandomAccessIter>
inline bool is_heap(_RandomAccessIter __first, _RandomAccessIter __last)
{

                                                                              ;
                                                                 ;


  return __is_heap(__first, __last - __first);
}


template <class _RandomAccessIter, class _StrictWeakOrdering>
inline bool is_heap(_RandomAccessIter __first, _RandomAccessIter __last,
                    _StrictWeakOrdering __comp)
{

                                                                              ;
                                                                 ;



  return __is_heap(__first, __comp, __last - __first);
}





template <class _ForwardIter>
bool is_sorted(_ForwardIter __first, _ForwardIter __last)
{

                                                                    ;
                                                            ;


  if (__first == __last)
    return true;

  _ForwardIter __next = __first;
  for (++__next; __next != __last; __first = __next, ++__next) {
    if (*__next < *__first)
      return false;
  }

  return true;
}

template <class _ForwardIter, class _StrictWeakOrdering>
bool is_sorted(_ForwardIter __first, _ForwardIter __last,
               _StrictWeakOrdering __comp)
{

                                                                    ;
                                                            ;



  if (__first == __last)
    return true;

  _ForwardIter __next = __first;
  for (++__next; __next != __last; __first = __next, ++__next) {
    if (__comp(*__next, *__first))
      return false;
  }

  return true;
}

}
# 66 "/opt/egcs/include/g++-v3/bits/std_algorithm.h" 2 3
# 50 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/basic_string.tcc" 1 3
# 43 "/opt/egcs/include/g++-v3/bits/basic_string.tcc" 3
namespace std
{
  template<typename _CharT, typename _Traits, typename _Alloc>
    const _CharT
    basic_string<_CharT, _Traits, _Alloc>::
    _Rep::_S_terminal = _CharT();

  template<typename _CharT, typename _Traits, typename _Alloc>
    const typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    _Rep::_S_max_size = (((npos - sizeof(_Rep))/sizeof(_CharT)) - 1) / 4;

  template<typename _CharT, typename _Traits, typename _Alloc>
    const typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::npos;



  template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::_S_empty_rep_storage[
    (sizeof(_Rep) + sizeof(_CharT) + sizeof(size_type) - 1)/sizeof(size_type)];





  template<typename _CharT, typename _Traits, typename _Alloc>
    template<typename _InIter>
      _CharT*
      basic_string<_CharT, _Traits, _Alloc>::
      _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                   input_iterator_tag)
      {
        if (__beg == __end && __a == _Alloc())
          return _S_empty_rep()._M_refcopy();

        _CharT __buf[100];
        size_type __i = 0;
        while (__beg != __end && __i < sizeof(__buf) / sizeof(_CharT))
          {
            __buf[__i++] = *__beg;
            ++__beg;
          }
        _Rep* __r = _Rep::_S_create(__i, __a);
        traits_type::copy(__r->_M_refdata(), __buf, __i);
        __r->_M_length = __i;
        try
          {



            for (;;)
              {
                _CharT* __p = __r->_M_refdata() + __r->_M_length;
                _CharT* __last = __r->_M_refdata() + __r->_M_capacity;
                for (;;)
                  {
                    if (__beg == __end)
                      {
                        __r->_M_length = __p - __r->_M_refdata();
                        *__p = _Rep::_S_terminal;
                        return __r->_M_refdata();
                      }
                    if (__p == __last)
                      break;
                    *__p++ = *__beg;
                    ++__beg;
                  }

                size_type __len = __p - __r->_M_refdata();
                _Rep* __another = _Rep::_S_create(__len + 1, __a);
                traits_type::copy(__another->_M_refdata(),
                                  __r->_M_refdata(), __len);
                __r->_M_destroy(__a);
                __r = __another;
                __r->_M_length = __len;
              }
          }
        catch(...)
          {
            __r->_M_destroy(__a);
            throw;
          }
        return 0;
      }

  template<typename _CharT, typename _Traits, typename _Alloc>
    template <class _InIter>
      _CharT*
      basic_string<_CharT,_Traits,_Alloc>::
      _S_construct(_InIter __beg, _InIter __end, const _Alloc& __a,
                   forward_iterator_tag)
      {
        size_type __dnew = static_cast<size_type>(distance(__beg, __end));

        if (__beg == __end && __a == _Alloc())
          return _S_empty_rep()._M_refcopy();


        _Rep* __r = _Rep::_S_create(__dnew, __a);
        try
          { _S_copy_chars(__r->_M_refdata(), __beg, __end); }
        catch(...)
          {
            __r->_M_destroy(__a);
            throw;
          }
        __r->_M_length = __dnew;

        __r->_M_refdata()[__dnew] = _Rep::_S_terminal;
        return __r->_M_refdata();
      }

  template<typename _CharT, typename _Traits, typename _Alloc>
    _CharT*
    basic_string<_CharT,_Traits, _Alloc>::
    _S_construct(size_type __n, _CharT __c, const _Alloc& __a)
    {
      if (__n == 0 && __a == _Alloc())
        return _S_empty_rep()._M_refcopy();


      _Rep* __r = _Rep::_S_create(__n, __a);
      try
        {
          if (__n)
            traits_type::assign(__r->_M_refdata(), __n, __c);
        }
      catch(...)
        {
          __r->_M_destroy(__a);
          throw;
        }
      __r->_M_length = __n;
      __r->_M_refdata()[__n] = _Rep::_S_terminal;
      return __r->_M_refdata();
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str)
    : _M_dataplus(__str._M_rep()->_M_grab(_Alloc(), __str.get_allocator()),
                 __str.get_allocator())
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _Alloc& __a)
    : _M_dataplus(_S_construct(size_type(), _CharT(), __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str, size_type __pos, size_type __n)
    : _M_dataplus(_S_construct(__str._M_check(__pos),
                               __str._M_fold(__pos, __n), _Alloc()), _Alloc())
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const basic_string& __str, size_type __pos,
                 size_type __n, const _Alloc& __a)
    : _M_dataplus(_S_construct(__str._M_check(__pos),
                               __str._M_fold(__pos, __n), __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _CharT* __s, size_type __n, const _Alloc& __a)
    : _M_dataplus(_S_construct(__s, __s + __n, __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(const _CharT* __s, const _Alloc& __a)
    : _M_dataplus(_S_construct(__s, __s + traits_type::length(__s), __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(size_type __n, _CharT __c, const _Alloc& __a)
    : _M_dataplus(_S_construct(__n, __c, __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    template<typename _InputIter>
    basic_string<_CharT, _Traits, _Alloc>::
    basic_string(_InputIter __beg, _InputIter __end, const _Alloc& __a)
    : _M_dataplus(_S_construct(__beg, __end, __a), __a)
    { }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::assign(const basic_string& __str)
    {
      if (_M_rep() != __str._M_rep())
        {

          allocator_type __a = this->get_allocator();
          _CharT* __tmp = __str._M_rep()->_M_grab(__a, __str.get_allocator());
          _M_rep()->_M_dispose(__a);
          _M_data(__tmp);
        }
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _M_destroy(const _Alloc& __a) throw ()
    {
      size_type __size = sizeof(_Rep) + (_M_capacity + 1) * sizeof(_CharT);
      _Raw_bytes_alloc(__a).deallocate(reinterpret_cast<char*>(this), __size);
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::_M_leak_hard()
    {
      if (_M_rep()->_M_is_shared())
        _M_mutate(0, 0, 0);
      _M_rep()->_M_set_leaked();
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::
    _M_mutate(size_type __pos, size_type __len1, size_type __len2)
    {
      size_type __old_size = this->size();
      const size_type __new_size = __old_size + __len2 - __len1;
      const _CharT* __src = _M_data() + __pos + __len1;
      const size_type __how_much = __old_size - __pos - __len1;

      if (_M_rep()->_M_is_shared() || __new_size > capacity())
        {

          allocator_type __a = get_allocator();
          _Rep* __r = _Rep::_S_create(__new_size, __a);
          try
            {
              if (__pos)
                traits_type::copy(__r->_M_refdata(), _M_data(), __pos);
              if (__how_much)
                traits_type::copy(__r->_M_refdata() + __pos + __len2,
                                  __src, __how_much);
            }
          catch(...)
            {
              __r->_M_dispose(get_allocator());
              throw;
            }
          _M_rep()->_M_dispose(__a);
          _M_data(__r->_M_refdata());
      }
      else if (__how_much && __len1 != __len2)
        {

          traits_type::move(_M_data() + __pos + __len2, __src, __how_much);
        }
      _M_rep()->_M_set_sharable();
      _M_rep()->_M_length = __new_size;
      _M_data()[__new_size] = _Rep::_S_terminal;

    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::reserve(size_type __res)
    {
      if (__res > this->capacity() || _M_rep()->_M_is_shared())
        {
          if (__res > this->max_size())
            __throw_length_error("basic_string::reserve");
          allocator_type __a = get_allocator();
          _CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
          _M_rep()->_M_dispose(__a);
          _M_data(__tmp);
        }
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void basic_string<_CharT, _Traits, _Alloc>::swap(basic_string& __s)
    {
      if (_M_rep()->_M_is_leaked())
        _M_rep()->_M_set_sharable();
      if (__s._M_rep()->_M_is_leaked())
        __s._M_rep()->_M_set_sharable();
      if (this->get_allocator() == __s.get_allocator())
        {
          _CharT* __tmp = _M_data();
          _M_data(__s._M_data());
          __s._M_data(__tmp);
        }

      else
        {
          basic_string __tmp1(_M_ibegin(), _M_iend(), __s.get_allocator());
          basic_string __tmp2(__s._M_ibegin(), __s._M_iend(),
                              this->get_allocator());
          *this = __tmp2;
          __s = __tmp1;
        }
    }
# 356 "/opt/egcs/include/g++-v3/bits/basic_string.tcc" 3
  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::_Rep*
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _S_create(size_t __capacity, const _Alloc& __alloc)
    {
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;


      if (__capacity > _S_max_size)



        __throw_length_error("basic_string::_S_create");




      size_t __size = (__capacity + 1) * sizeof(_CharT) + sizeof(_Rep);


      void* __place = _Raw_bytes_alloc(__alloc).allocate(__size);
      _Rep *__p = new (__place) _Rep;
      __p->_M_capacity = __capacity;
      __p->_M_set_sharable();
      __p->_M_length = 0;
      return __p;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    _CharT*
    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _M_clone(const _Alloc& __alloc, size_type __res)
    {
      _Rep* __r = _Rep::_S_create(_M_length + __res, __alloc);
      if (_M_length)
        {
          try
            { traits_type::copy(__r->_M_refdata(), _M_refdata(), _M_length); }
          catch(...)
            {
              __r->_M_destroy(__alloc);
              throw;
            }
        }
      __r->_M_length = _M_length;
      return __r->_M_refdata();
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
  inline bool




    basic_string<_CharT, _Traits, _Alloc>::_Rep::
    _S_excess_slop(size_t __s, size_t __r)

    {
      return 2 * (__s <= 16 ? 16 : __s) < __r;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    void
    basic_string<_CharT, _Traits, _Alloc>::resize(size_type __n, _CharT __c)
    {
      if (__n > max_size())
        __throw_length_error("basic_string::resize");
      size_type __size = this->size();
      if (__size < __n)
        this->append(__n - __size, __c);
      else if (__n < __size)
        this->erase(__n);

    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    template<typename _InputIter>
      basic_string<_CharT, _Traits, _Alloc>&
      basic_string<_CharT, _Traits, _Alloc>::
      _M_replace(iterator __i1, iterator __i2, _InputIter __k1,
                 _InputIter __k2, input_iterator_tag)
      {
        basic_string __s(__k1, __k2);
        return this->replace(__i1, __i2, __s._M_ibegin(), __s._M_iend());
      }

  template<typename _CharT, typename _Traits, typename _Alloc>
    template<typename _ForwardIter>
      basic_string<_CharT, _Traits, _Alloc>&
      basic_string<_CharT, _Traits, _Alloc>::
      _M_replace(iterator __i1, iterator __i2, _ForwardIter __k1,
                 _ForwardIter __k2, forward_iterator_tag)
      {
        size_type __dold = __i2 - __i1;
        size_type __dmax = this->max_size();
        size_type __dnew = static_cast<size_type>(distance(__k1, __k2));

        if (__dmax <= __dnew)
          __throw_length_error("basic_string::_M_replace");
        size_type __off = __i1 - _M_ibegin();
        _M_mutate(__off, __dold, __dnew);

        if (__dnew)
          _S_copy_chars(_M_data() + __off, __k1, __k2);

        return *this;
      }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    replace(size_type __pos1, size_type __n1, const basic_string& __str,
            size_type __pos2, size_type __n2)
    {
      return this->replace(_M_check(__pos1), _M_fold(__pos1, __n1),
                           __str._M_check(__pos2),
                           __str._M_fold(__pos2, __n2));
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>&
    basic_string<_CharT,_Traits,_Alloc>::
    append(const basic_string& __str)
    {



      size_type __size = __str.size();
      size_type __len = __size + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
      return this->replace(_M_iend(), _M_iend(), __str._M_ibegin(),
                           __str._M_iend());
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>&
    basic_string<_CharT,_Traits,_Alloc>::
    append(const basic_string& __str, size_type __pos, size_type __n)
    {



      size_type __len = min(__str.size() - __pos, __n) + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
      return this->replace(_M_iend(), _M_iend(), __str._M_check(__pos),
                           __str._M_fold(__pos, __n));
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>&
    basic_string<_CharT,_Traits,_Alloc>::
    append(const _CharT* __s, size_type __n)
    {
      size_type __len = __n + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
      return this->replace(_M_iend(), _M_iend(), __s, __s + __n);
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>&
    basic_string<_CharT,_Traits,_Alloc>::
    append(size_type __n, _CharT __c)
    {
      size_type __len = __n + this->size();
      if (__len > this->capacity())
        this->reserve(__len);
       return this->replace(_M_iend(), _M_iend(), __n, __c);
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(const _CharT* __lhs,
             const basic_string<_CharT,_Traits,_Alloc>& __rhs)
    {
      typedef basic_string<_CharT,_Traits,_Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;
      __size_type __len = _Traits::length(__lhs);
      __string_type __str;
      __str.reserve(__len + __rhs.size());
      __str.append(__lhs, __lhs + __len);
      __str.append(__rhs);
      return __str;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT,_Traits,_Alloc>
    operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs)
    {
      typedef basic_string<_CharT,_Traits,_Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;
      __string_type __str;
      __size_type __len = __rhs.size();
      __str.reserve(__len + 1);
      __str.append(__size_type(1), __lhs);
      __str.append(__rhs);
      return __str;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>&
    basic_string<_CharT, _Traits, _Alloc>::
    replace(iterator __i1, iterator __i2, size_type __n2, _CharT __c)
    {
      size_type __n1 = __i2 - __i1;
      size_type __off1 = __i1 - _M_ibegin();
      if (max_size() - (this->size() - __n1) <= __n2)
        __throw_length_error("basic_string::replace");
      _M_mutate (__off1, __n1, __n2);

      if (__n2)
        traits_type::assign(_M_data() + __off1, __n2, __c);
      return *this;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    copy(_CharT* __s, size_type __n, size_type __pos) const
    {
      if (__pos > this->size())
        __throw_out_of_range("basic_string::copy");

      if (__n > this->size() - __pos)
        __n = this->size() - __pos;

      traits_type::copy(__s, _M_data() + __pos, __n);

      return __n;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      size_t __xpos = __pos;
      const _CharT* __data = _M_data();
      for (; __xpos + __n <= __size; ++__xpos)
        if (traits_type::compare(__data + __xpos, __s, __n) == 0)
          return __xpos;
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      size_type __ret = npos;
      if (__pos < __size)
        {
          const _CharT* __data = _M_data();
          size_type __n = __size - __pos;
          const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
          if (__p)
            __ret = __p - __data;
        }
      return __ret;
    }


  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    rfind(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      if (__n <= __size)
        {
          __pos = std::min(__size - __n ,__pos);
          const _CharT* __data = _M_data();
          do
            {
              if (traits_type::compare(__data + __pos, __s, __n) == 0)
                return __pos;
            }
          while (__pos-- > 0);
        }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    rfind(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      if (__size)
        {
          size_t __xpos = __size - 1;
          if (__xpos > __pos)
            __xpos = __pos;

          for (++__xpos; __xpos-- > 0; )
            if (traits_type::eq(_M_data()[__xpos], __c))
              return __xpos;
        }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      for (; __n && __pos < this->size(); ++__pos)
        {
          const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
          if (__p)
            return __pos;
        }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      if (__size && __n)
        {
          if (--__size > __pos)
            __size = __pos;
          do
            {
              if (traits_type::find(__s, __n, _M_data()[__size]))
                return __size;
            }
          while (__size-- != 0);
        }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_t __xpos = __pos;
      for (; __n && __xpos < this->size(); ++__xpos)
        if (!traits_type::find(__s, __n, _M_data()[__xpos]))
          return __xpos;
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_first_not_of(_CharT __c, size_type __pos) const
    {
      size_t __xpos = __pos;
      for (; __xpos < this->size(); ++__xpos)
        if (!traits_type::eq(_M_data()[__xpos], __c))
          return __xpos;
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
    {
      size_type __size = this->size();
      if (__size && __n)
        {
          if (--__size > __pos)
            __size = __pos;
          do
            {
              if (!traits_type::find(__s, __n, _M_data()[__size]))
                return __size;
            }
          while (__size--);
        }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find_last_not_of(_CharT __c, size_type __pos) const
    {
      size_type __size = this->size();
      if (__size)
        {
          if (--__size > __pos)
            __size = __pos;
          do
            {
              if (!traits_type::eq(_M_data()[__size], __c))
                return __size;
            }
          while (__size--);
        }
      return npos;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(size_type __pos, size_type __n, const basic_string& __str) const
    {
      size_type __size = this->size();
      size_type __osize = __str.size();
      if (__pos > __size)
        __throw_out_of_range("basic_string::compare");

      size_type __rsize= min(__size - __pos, __n);
      size_type __len = min(__rsize, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
      if (!__r)
        __r = __rsize - __osize;
      return __r;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(size_type __pos1, size_type __n1, const basic_string& __str,
            size_type __pos2, size_type __n2) const
    {
      size_type __size = this->size();
      size_type __osize = __str.size();
      if (__pos1 > __size || __pos2 > __osize)
        __throw_out_of_range("basic_string::compare");

      size_type __rsize = min(__size - __pos1, __n1);
      size_type __rosize = min(__osize - __pos2, __n2);
      size_type __len = min(__rsize, __rosize);
      int __r = traits_type::compare(_M_data() + __pos1,
                                     __str.data() + __pos2, __len);
      if (!__r)
        __r = __rsize - __rosize;
      return __r;
    }


  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string<_CharT, _Traits, _Alloc>::
    compare(const _CharT* __s) const
    {
      size_type __size = this->size();
      int __r = traits_type::compare(_M_data(), __s, __size);
      if (!__r)
        __r = __size - traits_type::length(__s);
      return __r;
    }


  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string <_CharT,_Traits,_Alloc>::
    compare(size_type __pos, size_type __n1, const _CharT* __s) const
    {
      size_type __size = this->size();
      if (__pos > __size)
        __throw_out_of_range("basic_string::compare");

      size_type __osize = traits_type::length(__s);
      size_type __rsize = min(__size - __pos, __n1);
      size_type __len = min(__rsize, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
      if (!__r)
        __r = __rsize - __osize;
      return __r;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    int
    basic_string <_CharT,_Traits,_Alloc>::
    compare(size_type __pos, size_type __n1, const _CharT* __s,
            size_type __n2) const
    {
      size_type __size = this->size();
      if (__pos > __size)
        __throw_out_of_range("basic_string::compare");

      size_type __osize = min(traits_type::length(__s), __n2);
      size_type __rsize = min(__size - __pos, __n1);
      size_type __len = min(__rsize, __osize);
      int __r = traits_type::compare(_M_data() + __pos, __s, __len);
      if (!__r)
        __r = __rsize - __osize;
      return __r;
    }

  template <class _CharT, class _Traits, class _Alloc>
    void
    _S_string_copy(const basic_string<_CharT, _Traits, _Alloc>& __str,
                   _CharT* __buf, typename _Alloc::size_type __bufsiz)
    {
      typedef typename _Alloc::size_type size_type;
      size_type __strsize = __str.size();
      size_type __bytes = min(__strsize, __bufsiz - 1);
      _Traits::copy(__buf, __str.data(), __bytes);
      __buf[__bytes] = _CharT();
    }
}
# 51 "/opt/egcs/include/g++-v3/bits/std_string.h" 2 3
# 43 "/opt/egcs/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cctype.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cctype.h" 3
# 1 "/usr/include/ctype.h" 1 3
# 26 "/usr/include/ctype.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/ctype.h" 2 3
# 1 "/usr/include/bits/types.h" 1 3
# 28 "/usr/include/ctype.h" 2 3

extern "C" {
# 40 "/usr/include/ctype.h" 3
# 1 "/usr/include/endian.h" 1 3
# 41 "/usr/include/ctype.h" 2 3






enum
{
  _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
  _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
  _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
  _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
  _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
  _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
  _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
  _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
  _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
  _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
  _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
  _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
};
# 75 "/usr/include/ctype.h" 3
extern __const unsigned short int *__ctype_b;
extern __const __int32_t *__ctype_tolower;
extern __const __int32_t *__ctype_toupper;
# 91 "/usr/include/ctype.h" 3
extern int isalnum (int) throw ();
extern int isalpha (int) throw ();
extern int iscntrl (int) throw ();
extern int isdigit (int) throw ();
extern int islower (int) throw ();
extern int isgraph (int) throw ();
extern int isprint (int) throw ();
extern int ispunct (int) throw ();
extern int isspace (int) throw ();
extern int isupper (int) throw ();
extern int isxdigit (int) throw ();


extern int isblank (int) throw ();




extern int tolower (int __c) throw ();


extern int toupper (int __c) throw ();






extern int isascii (int __c) throw ();



extern int toascii (int __c) throw ();



extern int _toupper (int) throw ();
extern int _tolower (int) throw ();
# 211 "/usr/include/ctype.h" 3
# 1 "/usr/include/xlocale.h" 1 3
# 212 "/usr/include/ctype.h" 2 3
# 224 "/usr/include/ctype.h" 3
extern int __isalnum_l (int, __locale_t) throw ();
extern int __isalpha_l (int, __locale_t) throw ();
extern int __iscntrl_l (int, __locale_t) throw ();
extern int __isdigit_l (int, __locale_t) throw ();
extern int __islower_l (int, __locale_t) throw ();
extern int __isgraph_l (int, __locale_t) throw ();
extern int __isprint_l (int, __locale_t) throw ();
extern int __ispunct_l (int, __locale_t) throw ();
extern int __isspace_l (int, __locale_t) throw ();
extern int __isupper_l (int, __locale_t) throw ();
extern int __isxdigit_l (int, __locale_t) throw ();

extern int __isblank_l (int, __locale_t) throw ();



extern int __tolower_l (int __c, __locale_t __l) throw ();


extern int __toupper_l (int __c, __locale_t __l) throw ();
# 277 "/usr/include/ctype.h" 3
}
# 39 "/opt/egcs/include/g++-v3/bits/std_cctype.h" 2 3
# 55 "/opt/egcs/include/g++-v3/bits/std_cctype.h" 3
namespace std
{
  using ::isalnum;
  using ::isalpha;
  using ::iscntrl;
  using ::isdigit;
  using ::isgraph;
  using ::islower;
  using ::isprint;
  using ::ispunct;
  using ::isspace;
  using ::isupper;
  using ::isxdigit;
  using ::tolower;
  using ::toupper;
}
# 44 "/opt/egcs/include/g++-v3/bits/localefwd.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/functexcept.h" 3
# 1 "/opt/egcs/include/g++-v3/exception_defines.h" 1 3
# 35 "/opt/egcs/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 45 "/opt/egcs/include/g++-v3/bits/localefwd.h" 2 3

namespace std
{
# 56 "/opt/egcs/include/g++-v3/bits/localefwd.h" 3
  template<typename _Tp, typename _Alloc>
    class vector;
  class locale;


  template<typename _CharT>
    inline bool
    isspace(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    isprint(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    iscntrl(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    isupper(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    islower(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    isalpha(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    isdigit(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    ispunct(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    isxdigit(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    isalnum(_CharT, const locale&);

  template<typename _CharT>
    inline bool
    isgraph(_CharT, const locale&);

  template<typename _CharT>
    inline _CharT
    toupper(_CharT, const locale&);

  template<typename _CharT>
    inline _CharT
    tolower(_CharT, const locale&);



  class ctype_base;
  template<typename _CharT>
    class ctype;
  template<> class ctype<char>;

  template<> class ctype<wchar_t>;

  template<typename _CharT>
    class ctype_byname;


  class codecvt_base;
  template<typename _InternT, typename _ExternT, typename _StateT>
    class codecvt;
  template<> class codecvt<char, char, mbstate_t>;

  template<> class codecvt<wchar_t, char, mbstate_t>;

  template<typename _InternT, typename _ExternT, typename _StateT>
    class codecvt_byname;


  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
    class num_get;
  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
    class num_put;
  template<typename _CharT> class numpunct;
  template<typename _CharT> class numpunct_byname;


  template<typename _CharT>
    class collate;
  template<typename _CharT> class
    collate_byname;


  class time_base;
  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
    class time_get;
  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
    class time_get_byname;
  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
    class time_put;
  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
    class time_put_byname;


  class money_base;
  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
    class money_get;
  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
    class money_put;
  template<typename _CharT, bool _Intl = false>
    class moneypunct;
  template<typename _CharT, bool _Intl = false>
    class moneypunct_byname;


  class messages_base;
  template<typename _CharT>
    class messages;
  template<typename _CharT>
    class messages_byname;


  class locale
  {
  public:

    typedef unsigned int category;


    class facet;
    class id;
    class _Impl;

    friend class facet;
    friend class _Impl;

    template<typename _Facet>
      friend const _Facet&
      use_facet(const locale&);

    template<typename _Facet>
      friend bool
      has_facet(const locale&) throw();



    static const category none = 0;
    static const category ctype = 1L << 0;
    static const category numeric = 1L << 1;
    static const category collate = 1L << 2;
    static const category time = 1L << 3;
    static const category monetary = 1L << 4;
    static const category messages = 1L << 5;
    static const category all = (collate | ctype | monetary |
                                           numeric | time | messages);


    locale() throw();

    locale(const locale& __other) throw();

    explicit
    locale(const char* __std_name);

    locale(const locale& __base, const char* __s, category __cat);

    locale(const locale& __base, const locale& __add, category __cat);

    template<typename _Facet>
      locale(const locale& __other, _Facet* __f);

    ~locale() throw();

    const locale&
    operator=(const locale& __other) throw();

    template<typename _Facet>
      locale
      combine(const locale& __other);


    string
    name() const;

    bool
    operator==(const locale& __other) const throw ();

    inline bool
    operator!=(const locale& __other) const throw ()
    { return !(this->operator==(__other)); }

    template<typename _Char, typename _Traits, typename _Alloc>
      bool
      operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,
                 const basic_string<_Char, _Traits, _Alloc>& __s2) const;


    static locale
    global(const locale&);

    static const locale&
    classic();

  private:

    _Impl* _M_impl;


    static _Impl* _S_classic;


    static _Impl* _S_global;

    static const size_t _S_num_categories = 6;
    static const size_t _S_num_facets = 26;

    explicit
    locale(_Impl*) throw();

    static inline void
    _S_initialize()
    { if (!_S_classic) classic(); }

    static category
    _S_normalize_category(category);

    void
    _M_coalesce(const locale& __base, const locale& __add, category __cat);
  };



  class locale::_Impl
  {
  public:

    typedef vector<facet*, allocator<facet*> > __vec_facet;


    friend class locale;
    friend class locale::facet;

    template<typename _Facet>
      friend const _Facet&
      use_facet(const locale&);

    template<typename _Facet>
      friend bool
      has_facet(const locale&) throw();

  private:

    size_t _M_references;
    __vec_facet* _M_facets;
    string _M_names[_S_num_categories];
    __c_locale _M_c_locale;
    static const locale::id* const _S_id_ctype[];
    static const locale::id* const _S_id_numeric[];
    static const locale::id* const _S_id_collate[];
    static const locale::id* const _S_id_time[];
    static const locale::id* const _S_id_monetary[];
    static const locale::id* const _S_id_messages[];
    static const locale::id* const* const _S_facet_categories[];

    inline void
    _M_add_reference() throw()
    { ++_M_references; }

    inline void
    _M_remove_reference() throw()
    {
      if (--_M_references == 0)
        {
          try
            { delete this; }
          catch(...)
            { }
        }
    }

    _Impl(const _Impl&, size_t);
    _Impl(string __name, size_t);
   ~_Impl() throw();

    bool
    _M_check_same_name()
    {
      bool __ret = true;
      for (size_t i = 0; i < _S_num_categories - 1; ++i)
        __ret &= _M_names[i] == _M_names[i + 1];
      return __ret;
    }
    void
    _M_replace_categories(const _Impl*, category);

    void
    _M_replace_category(const _Impl*, const locale::id* const*);

    void
    _M_replace_facet(const _Impl*, const locale::id*);

    void
    _M_install_facet(const locale::id*, facet*);

    template<typename _Facet>
      inline void
      _M_init_facet(_Facet* __facet)
      { _M_install_facet(&_Facet::id, __facet); }
  };

  template<typename _Facet>
    locale::locale(const locale& __other, _Facet* __f)
    {
      _M_impl = new _Impl(*__other._M_impl, 1);
      _M_impl->_M_install_facet(&_Facet::id, __f);
      for (size_t __i = 0; __i < _S_num_categories; ++__i)
        _M_impl->_M_names[__i] = "*";
    }


  class locale::facet
  {
    friend class locale;
    friend class locale::_Impl;

  protected:
    explicit
    facet(size_t __refs = 0) throw();

    virtual
    ~facet() { };

    static void
    _S_create_c_locale(__c_locale& __cloc, const char* __s);

    static void
    _S_destroy_c_locale(__c_locale& __cloc);

  private:
    size_t _M_references;

    void
    _M_add_reference() throw();

    void
    _M_remove_reference() throw();

    facet(const facet&);

    void
    operator=(const facet&);
  };



  class locale::id
  {
  private:
    friend class locale;
    friend class locale::_Impl;
    template<typename _Facet>
      friend const _Facet&
      use_facet(const locale&);
    template<typename _Facet>
      friend bool
      has_facet(const locale&) throw ();




    mutable size_t _M_index;


    static size_t _S_highwater;

    void
    operator=(const id&);

    id(const id&);

  public:



    id() { }
  };

  template<typename _Facet>
    const _Facet&
    use_facet(const locale& __loc);

  template<typename _Facet>
    bool
    has_facet(const locale& __loc) throw();
}
# 44 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/ios_base.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/ios_base.h" 3

namespace std
{




  enum _Ios_Fmtflags { _M_ios_fmtflags_end = 1L << 16 };

  inline _Ios_Fmtflags
  operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
  { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }

  inline _Ios_Fmtflags
  operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
  { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }

  inline _Ios_Fmtflags
  operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
  { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }

  inline _Ios_Fmtflags
  operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
  { return __a = __a | __b; }

  inline _Ios_Fmtflags
  operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
  { return __a = __a & __b; }

  inline _Ios_Fmtflags
  operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
  { return __a = __a ^ __b; }

  inline _Ios_Fmtflags
  operator~(_Ios_Fmtflags __a)
  { return _Ios_Fmtflags(~static_cast<int>(__a)); }


  enum _Ios_Openmode { _M_ios_openmode_end = 1L << 16 };

  inline _Ios_Openmode
  operator&(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }

  inline _Ios_Openmode
  operator|(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }

  inline _Ios_Openmode
  operator^(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }

  inline _Ios_Openmode
  operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
  { return __a = __a | __b; }

  inline _Ios_Openmode
  operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
  { return __a = __a & __b; }

  inline _Ios_Openmode
  operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
  { return __a = __a ^ __b; }

  inline _Ios_Openmode
  operator~(_Ios_Openmode __a)
  { return _Ios_Openmode(~static_cast<int>(__a)); }


  enum _Ios_Iostate { _M_ios_iostate_end = 1L << 16 };

  inline _Ios_Iostate
  operator&(_Ios_Iostate __a, _Ios_Iostate __b)
  { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }

  inline _Ios_Iostate
  operator|(_Ios_Iostate __a, _Ios_Iostate __b)
  { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }

  inline _Ios_Iostate
  operator^(_Ios_Iostate __a, _Ios_Iostate __b)
  { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }

  inline _Ios_Iostate
  operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
  { return __a = __a | __b; }

  inline _Ios_Iostate
  operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
  { return __a = __a & __b; }

  inline _Ios_Iostate
  operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
  { return __a = __a ^ __b; }

  inline _Ios_Iostate
  operator~(_Ios_Iostate __a)
  { return _Ios_Iostate(~static_cast<int>(__a)); }

  enum _Ios_Seekdir { _M_ios_seekdir_end = 1L << 16 };


  class ios_base
  {
  public:


    class failure : public exception
    {
    public:


      explicit
      failure(const string& __str) throw();

      virtual
      ~failure() throw();

      virtual const char*
      what() const throw();

    private:
      enum { _M_bufsize = 256 };
      char _M_name[_M_bufsize];

    };


    typedef _Ios_Fmtflags fmtflags;

    static const fmtflags boolalpha = fmtflags(__ios_flags::_S_boolalpha);
    static const fmtflags dec = fmtflags(__ios_flags::_S_dec);
    static const fmtflags fixed = fmtflags(__ios_flags::_S_fixed);
    static const fmtflags hex = fmtflags(__ios_flags::_S_hex);
    static const fmtflags internal = fmtflags(__ios_flags::_S_internal);
    static const fmtflags left = fmtflags(__ios_flags::_S_left);
    static const fmtflags oct = fmtflags(__ios_flags::_S_oct);
    static const fmtflags right = fmtflags(__ios_flags::_S_right);
    static const fmtflags scientific = fmtflags(__ios_flags::_S_scientific);
    static const fmtflags showbase = fmtflags(__ios_flags::_S_showbase);
    static const fmtflags showpoint = fmtflags(__ios_flags::_S_showpoint);
    static const fmtflags showpos = fmtflags(__ios_flags::_S_showpos);
    static const fmtflags skipws = fmtflags(__ios_flags::_S_skipws);
    static const fmtflags unitbuf = fmtflags(__ios_flags::_S_unitbuf);
    static const fmtflags uppercase = fmtflags(__ios_flags::_S_uppercase);
    static const fmtflags adjustfield = fmtflags(__ios_flags::_S_adjustfield);
    static const fmtflags basefield = fmtflags(__ios_flags::_S_basefield);
    static const fmtflags floatfield = fmtflags(__ios_flags::_S_floatfield);


    typedef _Ios_Iostate iostate;
    static const iostate badbit = iostate(__ios_flags::_S_badbit);
    static const iostate eofbit = iostate(__ios_flags::_S_eofbit);
    static const iostate failbit = iostate(__ios_flags::_S_failbit);
    static const iostate goodbit = iostate(0);


    typedef _Ios_Openmode openmode;
    static const openmode app = openmode(__ios_flags::_S_app);
    static const openmode ate = openmode(__ios_flags::_S_ate);
    static const openmode binary = openmode(__ios_flags::_S_bin);
    static const openmode in = openmode(__ios_flags::_S_in);
    static const openmode out = openmode(__ios_flags::_S_out);
    static const openmode trunc = openmode(__ios_flags::_S_trunc);


    typedef _Ios_Seekdir seekdir;
    static const seekdir beg = seekdir(0);
    static const seekdir cur = seekdir(1);
    static const seekdir end = seekdir(2);
# 216 "/opt/egcs/include/g++-v3/bits/ios_base.h" 3
    enum event
    {
      erase_event,
      imbue_event,
      copyfmt_event
    };

    typedef void (*event_callback) (event, ios_base&, int);

    void
    register_callback(event_callback __fn, int __index);

  protected:

    streamsize _M_precision;
    streamsize _M_width;
    fmtflags _M_flags;



    struct _Callback_list
    {

      _Callback_list* _M_next;
      ios_base::event_callback _M_fn;
      int _M_index;
      int _M_refcount;

      _Callback_list(ios_base::event_callback __fn, int __index,
                     _Callback_list* __cb)
      : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }

      void
      _M_add_reference() { ++_M_refcount; }

      int
      _M_remove_reference() { return _M_refcount--; }
    };

     _Callback_list* _M_callbacks;

    void
    _M_call_callbacks(event __ev) throw();

    void
    _M_dispose_callbacks(void);


    struct _Words
    {
      void* _M_pword;
      long _M_iword;
    };

    static const int _S_local_words = 8;
    _Words _M_word_array[_S_local_words];
    _Words _M_dummy;
    _Words* _M_words;
    int _M_word_limit;

    _Words&
    _M_grow_words(int __index);


    locale _M_ios_locale;

    void
    _M_init();

  public:





    class Init
    {
      friend class ios_base;
    public:
      Init();
      ~Init();

      static void
      _S_ios_create(bool __sync);

      static void
      _S_ios_destroy();

    private:
      static int _S_ios_base_init;
      static bool _S_synced_with_stdio;
    };


    inline fmtflags
    flags() const { return _M_flags; }

    inline fmtflags
    flags(fmtflags __fmtfl)
    {
      fmtflags __old = _M_flags;
      _M_flags = __fmtfl;
      return __old;
    }

    inline fmtflags
    setf(fmtflags __fmtfl)
    {
      fmtflags __old = _M_flags;
      _M_flags |= __fmtfl;
      return __old;
    }

    inline fmtflags
    setf(fmtflags __fmtfl, fmtflags __mask)
    {
      fmtflags __old = _M_flags;
      _M_flags &= ~__mask;
      _M_flags |= (__fmtfl & __mask);
      return __old;
    }

    inline void
    unsetf(fmtflags __mask) { _M_flags &= ~__mask; }

    inline streamsize
    precision() const { return _M_precision; }

    inline streamsize
    precision(streamsize __prec)
    {
      streamsize __old = _M_precision;
      _M_precision = __prec;
      return __old;
    }

    inline streamsize
    width() const { return _M_width; }

    inline streamsize
    width(streamsize __wide)
    {
      streamsize __old = _M_width;
      _M_width = __wide;
      return __old;
    }

    static bool
    sync_with_stdio(bool __sync = true);


    locale
    imbue(const locale& __loc);

    inline locale
    getloc() const { return _M_ios_locale; }


    static int
    xalloc() throw();

    inline long&
    iword(int __ix)
    {
      _Words& __word = (__ix < _M_word_limit)
                        ? _M_words[__ix] : _M_grow_words(__ix);
      return __word._M_iword;
    }

    inline void*&
    pword(int __ix)
    {
      _Words& __word = (__ix < _M_word_limit)
                        ? _M_words[__ix] : _M_grow_words(__ix);
      return __word._M_pword;
    }


    ~ios_base();

  protected:
    ios_base();


  private:
    ios_base(const ios_base&);

    ios_base&
    operator=(const ios_base&);

  };


  inline ios_base&
  boolalpha(ios_base& __base)
  {
    __base.setf(ios_base::boolalpha);
    return __base;
  }

  inline ios_base&
  noboolalpha(ios_base& __base)
  {
    __base.unsetf(ios_base::boolalpha);
    return __base;
  }

  inline ios_base&
  showbase(ios_base& __base)
  {
    __base.setf(ios_base::showbase);
    return __base;
  }

  inline ios_base&
  noshowbase(ios_base& __base)
  {
    __base.unsetf(ios_base::showbase);
    return __base;
  }

  inline ios_base&
  showpoint(ios_base& __base)
  {
    __base.setf(ios_base::showpoint);
    return __base;
  }

  inline ios_base&
  noshowpoint(ios_base& __base)
  {
    __base.unsetf(ios_base::showpoint);
    return __base;
  }

  inline ios_base&
  showpos(ios_base& __base)
  {
    __base.setf(ios_base::showpos);
    return __base;
  }

  inline ios_base&
  noshowpos(ios_base& __base)
  {
    __base.unsetf(ios_base::showpos);
    return __base;
  }

  inline ios_base&
  skipws(ios_base& __base)
  {
    __base.setf(ios_base::skipws);
    return __base;
  }

  inline ios_base&
  noskipws(ios_base& __base)
  {
    __base.unsetf(ios_base::skipws);
    return __base;
  }

  inline ios_base&
  uppercase(ios_base& __base)
  {
    __base.setf(ios_base::uppercase);
    return __base;
  }

  inline ios_base&
  nouppercase(ios_base& __base)
  {
    __base.unsetf(ios_base::uppercase);
    return __base;
  }

  inline ios_base&
  unitbuf(ios_base& __base)
  {
     __base.setf(ios_base::unitbuf);
     return __base;
  }

  inline ios_base&
  nounitbuf(ios_base& __base)
  {
     __base.unsetf(ios_base::unitbuf);
     return __base;
  }


  inline ios_base&
  internal(ios_base& __base)
  {
     __base.setf(ios_base::internal, ios_base::adjustfield);
     return __base;
  }

  inline ios_base&
  left(ios_base& __base)
  {
    __base.setf(ios_base::left, ios_base::adjustfield);
    return __base;
  }

  inline ios_base&
  right(ios_base& __base)
  {
    __base.setf(ios_base::right, ios_base::adjustfield);
    return __base;
  }


  inline ios_base&
  dec(ios_base& __base)
  {
    __base.setf(ios_base::dec, ios_base::basefield);
    return __base;
  }

  inline ios_base&
  hex(ios_base& __base)
  {
    __base.setf(ios_base::hex, ios_base::basefield);
    return __base;
  }

  inline ios_base&
  oct(ios_base& __base)
  {
    __base.setf(ios_base::oct, ios_base::basefield);
    return __base;
  }


  inline ios_base&
  fixed(ios_base& __base)
  {
    __base.setf(ios_base::fixed, ios_base::floatfield);
    return __base;
  }

  inline ios_base&
  scientific(ios_base& __base)
  {
    __base.setf(ios_base::scientific, ios_base::floatfield);
    return __base;
  }

}
# 45 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 3

# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 1 3
# 41 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstdio.h" 1 3
# 42 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/localefwd.h" 1 3
# 43 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/ios_base.h" 1 3
# 44 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 2 3

namespace std
{
  template<typename _CharT, typename _Traits>
    streamsize
    __copy_streambufs(basic_ios<_CharT, _Traits>& _ios,
                      basic_streambuf<_CharT, _Traits>* __sbin,
                      basic_streambuf<_CharT, _Traits>* __sbout);


  template<typename _CharT, typename _Traits>
    class basic_streambuf
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef typename traits_type::int_type int_type;
      typedef typename traits_type::pos_type pos_type;
      typedef typename traits_type::off_type off_type;


      typedef ctype<char_type> __ctype_type;
      typedef basic_streambuf<char_type, traits_type> __streambuf_type;

      friend class basic_ios<char_type, traits_type>;
      friend class basic_istream<char_type, traits_type>;
      friend class basic_ostream<char_type, traits_type>;
      friend class istreambuf_iterator<char_type, traits_type>;
      friend class ostreambuf_iterator<char_type, traits_type>;

      friend streamsize
      __copy_streambufs<>(basic_ios<char_type, traits_type>& __ios,
                          __streambuf_type* __sbin,__streambuf_type* __sbout);

    protected:






      char_type* _M_buf;


      int_type _M_buf_size;


      int_type _M_buf_size_opt;



      bool _M_buf_unified;






      char_type* _M_in_beg;
      char_type* _M_in_cur;
      char_type* _M_in_end;
      char_type* _M_out_beg;
      char_type* _M_out_cur;
      char_type* _M_out_end;


      ios_base::openmode _M_mode;


      locale _M_buf_locale;


      bool _M_buf_locale_init;






      int_type _M_pback_size;
      char_type* _M_pback;
      char_type* _M_pback_cur_save;
      char_type* _M_pback_end_save;
      bool _M_pback_init;




      void
      _M_pback_create()
      {
        if (!_M_pback_init)
          {
            int_type __dist = _M_in_end - _M_in_cur;
            int_type __len = min(_M_pback_size, __dist);
            traits_type::copy(_M_pback, _M_in_cur, __len);
            _M_pback_cur_save = _M_in_cur;
            _M_pback_end_save = _M_in_end;
            this->setg(_M_pback, _M_pback, _M_pback + __len);
            _M_pback_init = true;
          }
      }




      void
      _M_pback_destroy()
      {
        if (_M_pback_init)
          {

            int_type __off_cur = _M_in_cur - _M_pback;


            int_type __off_end = 0;
            int_type __pback_len = _M_in_end - _M_pback;
            int_type __save_len = _M_pback_end_save - _M_buf;
            if (__pback_len > __save_len)
              __off_end = __pback_len - __save_len;

            this->setg(_M_buf, _M_pback_cur_save + __off_cur,
                       _M_pback_end_save + __off_end);
            _M_pback_cur_save = __null;
            _M_pback_end_save = __null;
            _M_pback_init = false;
          }
      }



      void
      _M_in_cur_move(off_type __n)
      {
        bool __testout = _M_out_cur;
        _M_in_cur += __n;
        if (__testout && _M_buf_unified)
          _M_out_cur += __n;
      }
# 193 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 3
      void
      _M_out_cur_move(off_type __n)
      {
        bool __testin = _M_in_cur;

        _M_out_cur += __n;
        if (__testin && _M_buf_unified)
          _M_in_cur += __n;
        if (_M_out_cur > _M_out_end)
          {
            _M_out_end = _M_out_cur;

            if (__testin)
              _M_in_end += __n;
          }
      }




      off_type
      _M_out_buf_size()
      {
        off_type __ret = 0;
        if (_M_out_cur)
          {

            if (_M_out_beg == _M_buf)
              __ret = _M_out_beg + _M_buf_size - _M_out_cur;

            else
              __ret = _M_out_end - _M_out_cur;
          }
        return __ret;
      }
# 236 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 3
      void
      _M_set_indeterminate(void)
      {
        if (_M_mode & ios_base::in)
          this->setg(_M_buf, _M_buf, _M_buf);
        if (_M_mode & ios_base::out)
          this->setp(_M_buf, _M_buf);
      }

      void
      _M_set_determinate(off_type __off)
      {
        bool __testin = _M_mode & ios_base::in;
        bool __testout = _M_mode & ios_base::out;
        if (__testin)
          this->setg(_M_buf, _M_buf, _M_buf + __off);
        if (__testout)
          this->setp(_M_buf, _M_buf + __off);
      }

      bool
      _M_is_indeterminate(void)
      {
        bool __ret = false;

        if (_M_buf)
          {
            if (_M_mode & ios_base::in)
              __ret = _M_in_beg == _M_in_cur && _M_in_cur == _M_in_end;
            if (_M_mode & ios_base::out)
              __ret = _M_out_beg == _M_out_cur && _M_out_cur == _M_out_end;
          }
        return __ret;
      }

  public:
      virtual
      ~basic_streambuf()
      {
        _M_buf_unified = false;
        _M_buf_size = 0;
        _M_buf_size_opt = 0;
        _M_mode = ios_base::openmode(0);
        _M_buf_locale_init = false;
      }


      locale
      pubimbue(const locale &__loc)
      {
        locale __tmp(this->getloc());
        this->imbue(__loc);
        return __tmp;
      }

      locale
      getloc() const
      {
        if (_M_buf_locale_init)
          return _M_buf_locale;
        else
          return locale();
      }


      __streambuf_type*
      pubsetbuf(char_type* __s, streamsize __n)
      { return this->setbuf(__s, __n); }

      pos_type
      pubseekoff(off_type __off, ios_base::seekdir __way,
                 ios_base::openmode __mode = ios_base::in | ios_base::out)
      { return this->seekoff(__off, __way, __mode); }

      pos_type
      pubseekpos(pos_type __sp,
                 ios_base::openmode __mode = ios_base::in | ios_base::out)
      { return this->seekpos(__sp, __mode); }

      int
      pubsync() { return this->sync(); }



      streamsize
      in_avail()
      {
        streamsize __ret;
        if (_M_in_cur && _M_in_cur < _M_in_end)
          {
            if (_M_pback_init)
              {
                int_type __save_len = _M_pback_end_save - _M_pback_cur_save;
                int_type __pback_len = _M_in_cur - _M_pback;
                __ret = __save_len - __pback_len;
              }
            else
              __ret = this->egptr() - this->gptr();
          }
        else
          __ret = this->showmanyc();
        return __ret;
      }

      int_type
      snextc()
      {
        int_type __eof = traits_type::eof();
        return (this->sbumpc() == __eof ? __eof : this->sgetc());
      }

      int_type
      sbumpc();

      int_type
      sgetc()
      {
        int_type __ret;
        if (_M_in_cur && _M_in_cur < _M_in_end)
          __ret = traits_type::to_int_type(*(this->gptr()));
        else
          __ret = this->underflow();
        return __ret;
      }

      streamsize
      sgetn(char_type* __s, streamsize __n)
      { return this->xsgetn(__s, __n); }


      int_type
      sputbackc(char_type __c);

      int_type
      sungetc();


      int_type
      sputc(char_type __c);

      streamsize
      sputn(const char_type* __s, streamsize __n)
      { return this->xsputn(__s, __n); }

    protected:
      basic_streambuf()
      : _M_buf(__null), _M_buf_size(0),
      _M_buf_size_opt(static_cast<int_type>(8192)), _M_buf_unified(false),
      _M_in_beg(0), _M_in_cur(0), _M_in_end(0), _M_out_beg(0), _M_out_cur(0),
      _M_out_end(0), _M_mode(ios_base::openmode(0)), _M_buf_locale(locale()),
      _M_buf_locale_init(false), _M_pback_size(1), _M_pback(__null),
      _M_pback_cur_save(__null), _M_pback_end_save(__null), _M_pback_init(false)
      { }


      char_type*
      eback() const { return _M_in_beg; }

      char_type*
      gptr() const { return _M_in_cur; }

      char_type*
      egptr() const { return _M_in_end; }

      void
      gbump(int __n) { _M_in_cur += __n; }

      void
      setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
      {
        _M_in_beg = __gbeg;
        _M_in_cur = __gnext;
        _M_in_end = __gend;
        if (!(_M_mode & ios_base::in) && __gbeg && __gnext && __gend)
          _M_mode = _M_mode | ios_base::in;
      }


      char_type*
      pbase() const { return _M_out_beg; }

      char_type*
      pptr() const { return _M_out_cur; }

      char_type*
      epptr() const { return _M_out_end; }

      void
      pbump(int __n) { _M_out_cur += __n; }

      void
      setp(char_type* __pbeg, char_type* __pend)
      {
        _M_out_beg = _M_out_cur = __pbeg;
        _M_out_end = __pend;
        if (!(_M_mode & ios_base::out) && __pbeg && __pend)
          _M_mode = _M_mode | ios_base::out;
      }



      virtual void
      imbue(const locale& __loc)
      {
        _M_buf_locale_init = true;
        if (_M_buf_locale != __loc)
          _M_buf_locale = __loc;
      }


      virtual basic_streambuf<char_type,_Traits>*
      setbuf(char_type*, streamsize)
      { return this; }

      virtual pos_type
      seekoff(off_type, ios_base::seekdir,
              ios_base::openmode = ios_base::in | ios_base::out)
      { return pos_type(off_type(-1)); }

      virtual pos_type
      seekpos(pos_type,
              ios_base::openmode = ios_base::in | ios_base::out)
      { return pos_type(off_type(-1)); }

      virtual int
      sync() { return 0; }


      virtual streamsize
      showmanyc() { return 0; }

      virtual streamsize
      xsgetn(char_type* __s, streamsize __n);

      virtual int_type
      underflow()
      { return traits_type::eof(); }

      virtual int_type
      uflow()
      {
        int_type __ret = traits_type::eof();
        bool __testeof = this->underflow() == __ret;
        bool __testpending = _M_in_cur && _M_in_cur < _M_in_end;
        if (!__testeof && __testpending)
          {
            __ret = traits_type::to_int_type(*_M_in_cur);
            ++_M_in_cur;
            if (_M_buf_unified && _M_mode & ios_base::out)
              ++_M_out_cur;
          }
        return __ret;
      }


      virtual int_type
      pbackfail(int_type = traits_type::eof())
      { return traits_type::eof(); }


      virtual streamsize
      xsputn(const char_type* __s, streamsize __n);

      virtual int_type
      overflow(int_type = traits_type::eof())
      { return traits_type::eof(); }
# 516 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 3
    private:
      basic_streambuf(const __streambuf_type&);

      __streambuf_type&
      operator=(const __streambuf_type&);

    };

}




# 1 "/opt/egcs/include/g++-v3/bits/streambuf.tcc" 1 3
# 37 "/opt/egcs/include/g++-v3/bits/streambuf.tcc" 3
namespace std {

  template<typename _CharT, typename _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sbumpc()
    {
      int_type __ret;
      if (_M_in_cur && _M_in_cur < _M_in_end)
        {
          char_type __c = *gptr();
          _M_in_cur_move(1);
          __ret = traits_type::to_int_type(__c);
        }
      else
        __ret = this->uflow();
      return __ret;
    }

  template<typename _CharT, typename _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sputbackc(char_type __c)
    {
      int_type __ret;
      bool __testpos = _M_in_cur && _M_in_beg < _M_in_cur;
      bool __testne = _M_in_cur && !traits_type::eq(__c, this->gptr()[-1]);
      if (!__testpos || __testne)
        __ret = pbackfail(traits_type::to_int_type(__c));
      else
        {
          _M_in_cur_move(-1);
          __ret = traits_type::to_int_type(*this->gptr());
        }
      return __ret;
    }

  template<typename _CharT, typename _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sungetc()
    {
      int_type __ret;
      if (_M_in_cur && _M_in_beg < _M_in_cur)
        {
          _M_in_cur_move(-1);
          __ret = traits_type::to_int_type(*_M_in_cur);
        }
      else
        __ret = this->pbackfail();
      return __ret;
    }






  template<typename _CharT, typename _Traits>
    basic_streambuf<_CharT, _Traits>::int_type
    basic_streambuf<_CharT, _Traits>::
    sputc(char_type __c)
    {
      int_type __ret;
      if (_M_out_buf_size())
        {
          *_M_out_cur = __c;
          _M_out_cur_move(1);
          __ret = traits_type::to_int_type(__c);
        }
      else
        __ret = this->overflow(traits_type::to_int_type(__c));
      return __ret;
    }

  template<typename _CharT, typename _Traits>
    streamsize
    basic_streambuf<_CharT, _Traits>::
    xsgetn(char_type* __s, streamsize __n)
    {
      streamsize __ret = 0;
      while (__ret < __n)
        {
          size_t __buf_len = _M_in_end - _M_in_cur;
          if (__buf_len > 0)
            {
              size_t __remaining = __n - __ret;
              size_t __len = min(__buf_len, __remaining);
              traits_type::copy(__s, _M_in_cur, __len);
              __ret += __len;
              __s += __len;
              _M_in_cur_move(__len);
            }

          if (__ret < __n)
            {
              int_type __c = this->uflow();
              if (__c != traits_type::eof())
                {
                  traits_type::assign(*__s++, traits_type::to_char_type(__c));
                  ++__ret;
                }
              else
                break;
            }
        }
      return __ret;
    }






  template<typename _CharT, typename _Traits>
    streamsize
    basic_streambuf<_CharT, _Traits>::
    xsputn(const char_type* __s, streamsize __n)
    {
      streamsize __ret = 0;
      while (__ret < __n)
        {
          off_type __buf_len = _M_out_buf_size();
          if (__buf_len > 0)
            {
              off_type __remaining = __n - __ret;
              off_type __len = min(__buf_len, __remaining);
              traits_type::copy(_M_out_cur, __s, __len);
              __ret += __len;
              __s += __len;
              _M_out_cur_move(__len);
            }

          if (__ret < __n)
            {
              int_type __c = this->overflow(traits_type::to_int_type(*__s));
              if (__c != traits_type::eof())
                {
                  ++__ret;
                  ++__s;
                }
              else
                break;
            }
        }
      return __ret;
    }





  template<typename _CharT, typename _Traits>
    streamsize
    __copy_streambufs(basic_ios<_CharT, _Traits>& __ios,
                      basic_streambuf<_CharT, _Traits>* __sbin,
                      basic_streambuf<_CharT, _Traits>* __sbout)
  {
      typedef typename _Traits::int_type int_type;

      streamsize __ret = 0;
      streamsize __bufsize = __sbin->in_avail();
      streamsize __xtrct;
      bool __testput = __sbout->_M_mode & ios_base::out;
      try {
        while (__testput && __bufsize != -1)
          {
            __xtrct = __sbout->sputn(__sbin->gptr(), __bufsize);
            __ret += __xtrct;
            __sbin->_M_in_cur_move(__xtrct);
            if (__xtrct == __bufsize)
              {
                if (__sbin->sgetc() == _Traits::eof())
                  break;
                __bufsize = __sbin->in_avail();
              }
            else
              break;
          }
      }
      catch(exception& __fail) {
        if ((__ios.exceptions() & ios_base::failbit) != 0)
          throw;
      }
      return __ret;
    }
}
# 530 "/opt/egcs/include/g++-v3/bits/std_streambuf.h" 2 3
# 46 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/basic_ios.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/basic_ios.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/streambuf_iterator.h" 1 3
# 36 "/opt/egcs/include/g++-v3/bits/streambuf_iterator.h" 3

namespace std
{
  template<typename _CharT, typename _Traits>
    class ostreambuf_iterator
    : public iterator<output_iterator_tag, void, void, void, void>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef basic_streambuf<_CharT, _Traits> streambuf_type;
      typedef basic_ostream<_CharT, _Traits> ostream_type;

    private:
      streambuf_type* _M_sbuf;
      bool _M_failed;

    public:
      inline
      ostreambuf_iterator(ostream_type& __s) throw ()
      : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }

      ostreambuf_iterator(streambuf_type* __s) throw ()
      : _M_sbuf(__s), _M_failed(!_M_sbuf) { }

      ostreambuf_iterator&
      operator=(_CharT __c);

      ostreambuf_iterator&
      operator*() throw()
      { return *this; }

      ostreambuf_iterator&
      operator++(int) throw()
      { return *this; }

      ostreambuf_iterator&
      operator++() throw()
      { return *this; }

      bool
      failed() const throw()
      { return _M_failed; }
    };

  template<typename _CharT, typename _Traits>
    inline ostreambuf_iterator<_CharT, _Traits>&
    ostreambuf_iterator<_CharT, _Traits>::operator=(_CharT __c)
    {
      if (!_M_failed &&
          _Traits::eq_int_type(_M_sbuf->sputc(__c),_Traits::eof()))
      _M_failed = true;
      return *this;
    }



  template<typename _CharT, typename _Traits>
    class istreambuf_iterator
    : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
                      _CharT*, _CharT&>
    {
    public:

      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef typename _Traits::int_type int_type;
      typedef basic_streambuf<_CharT, _Traits> streambuf_type;
      typedef basic_istream<_CharT, _Traits> istream_type;

    private:







      streambuf_type* _M_sbuf;
      int_type _M_c;

    public:
      istreambuf_iterator() throw()
      : _M_sbuf(__null), _M_c(-2) { }

      istreambuf_iterator(istream_type& __s) throw()
      : _M_sbuf(__s.rdbuf()), _M_c(-2) { }

      istreambuf_iterator(streambuf_type* __s) throw()
      : _M_sbuf(__s), _M_c(-2) { }




      char_type
      operator*() const
      {

        char_type __ret;
        if (_M_sbuf && _M_c != static_cast<int_type>(-2))
          __ret = _M_c;
        else if (_M_sbuf)
          __ret = traits_type::to_char_type(_M_sbuf->sgetc());
        else
          __ret = static_cast<char_type>(traits_type::eof());
        return __ret;
      }

      istreambuf_iterator&
      operator++()
      {
        if (_M_sbuf)
          _M_sbuf->sbumpc();
        _M_c = -2;
        return *this;
      }

      istreambuf_iterator
      operator++(int)
      {
        istreambuf_iterator __old = *this;
        if (_M_sbuf)
          __old._M_c = _M_sbuf->sbumpc();
        _M_c = -2;
        return __old;
      }

      bool
      equal(const istreambuf_iterator& __b)
      {
        int_type __eof = traits_type::eof();
        bool __thiseof = !_M_sbuf || _M_sbuf->sgetc() == __eof;
        bool __beof = !__b._M_sbuf
                      || __b._M_sbuf->sgetc() == __eof;
        return (__thiseof && __beof || (!__thiseof && !__beof));
      }




      bool
      equal(const istreambuf_iterator& __b) const
      {
        int_type __eof = traits_type::eof();
        bool __thiseof = !_M_sbuf || _M_sbuf->sgetc() == __eof;
        bool __beof = !__b._M_sbuf
                      || __b._M_sbuf->sgetc() == __eof;
        return (__thiseof && __beof || (!__thiseof && !__beof));
      }

    };

  template<typename _CharT, typename _Traits>
    inline bool
    operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
               const istreambuf_iterator<_CharT, _Traits>& __b)
    { return __a.equal(__b); }

  template<typename _CharT, typename _Traits>
    inline bool
    operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
               const istreambuf_iterator<_CharT, _Traits>& __b)
    { return !__a.equal(__b); }
}
# 36 "/opt/egcs/include/g++-v3/bits/basic_ios.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/std_ctime.h" 1 3
# 42 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_ios.h" 1 3
# 43 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3

# 1 "/usr/include/langinfo.h" 1 3
# 24 "/usr/include/langinfo.h" 3
# 1 "/usr/include/nl_types.h" 1 3
# 22 "/usr/include/nl_types.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/nl_types.h" 2 3
# 31 "/usr/include/nl_types.h" 3
extern "C" {


typedef void *nl_catd;


typedef int nl_item;


extern nl_catd catopen (__const char *__cat_name, int __flag) throw ();



extern char *catgets (nl_catd __catalog, int __set, int __number,
                      __const char *__string) throw ();


extern int catclose (nl_catd __catalog) throw ();

}
# 25 "/usr/include/langinfo.h" 2 3

# 1 "/usr/include/bits/locale.h" 1 3
# 27 "/usr/include/bits/locale.h" 3
enum
{
  __LC_CTYPE = 0,
  __LC_NUMERIC = 1,
  __LC_TIME = 2,
  __LC_COLLATE = 3,
  __LC_MONETARY = 4,
  __LC_MESSAGES = 5,
  __LC_ALL = 6,
  __LC_PAPER = 7,
  __LC_NAME = 8,
  __LC_ADDRESS = 9,
  __LC_TELEPHONE = 10,
  __LC_MEASUREMENT = 11,
  __LC_IDENTIFICATION = 12
};
# 27 "/usr/include/langinfo.h" 2 3


extern "C" {
# 43 "/usr/include/langinfo.h" 3
enum
{



  ABDAY_1 = (((__LC_TIME) << 16) | (0)),

  ABDAY_2,

  ABDAY_3,

  ABDAY_4,

  ABDAY_5,

  ABDAY_6,

  ABDAY_7,



  DAY_1,

  DAY_2,

  DAY_3,

  DAY_4,

  DAY_5,

  DAY_6,

  DAY_7,



  ABMON_1,

  ABMON_2,

  ABMON_3,

  ABMON_4,

  ABMON_5,

  ABMON_6,

  ABMON_7,

  ABMON_8,

  ABMON_9,

  ABMON_10,

  ABMON_11,

  ABMON_12,



  MON_1,

  MON_2,

  MON_3,

  MON_4,

  MON_5,

  MON_6,

  MON_7,

  MON_8,

  MON_9,

  MON_10,

  MON_11,

  MON_12,


  AM_STR,

  PM_STR,


  D_T_FMT,

  D_FMT,

  T_FMT,

  T_FMT_AMPM,


  ERA,

  __ERA_YEAR,



  ERA_D_FMT,

  ALT_DIGITS,

  ERA_D_T_FMT,

  ERA_T_FMT,


  _NL_TIME_ERA_NUM_ENTRIES,
  _NL_TIME_ERA_ENTRIES,

  _NL_WABDAY_1,
  _NL_WABDAY_2,
  _NL_WABDAY_3,
  _NL_WABDAY_4,
  _NL_WABDAY_5,
  _NL_WABDAY_6,
  _NL_WABDAY_7,


  _NL_WDAY_1,
  _NL_WDAY_2,
  _NL_WDAY_3,
  _NL_WDAY_4,
  _NL_WDAY_5,
  _NL_WDAY_6,
  _NL_WDAY_7,


  _NL_WABMON_1,
  _NL_WABMON_2,
  _NL_WABMON_3,
  _NL_WABMON_4,
  _NL_WABMON_5,
  _NL_WABMON_6,
  _NL_WABMON_7,
  _NL_WABMON_8,
  _NL_WABMON_9,
  _NL_WABMON_10,
  _NL_WABMON_11,
  _NL_WABMON_12,


  _NL_WMON_1,
  _NL_WMON_2,
  _NL_WMON_3,
  _NL_WMON_4,
  _NL_WMON_5,
  _NL_WMON_6,
  _NL_WMON_7,
  _NL_WMON_8,
  _NL_WMON_9,
  _NL_WMON_10,
  _NL_WMON_11,
  _NL_WMON_12,

  _NL_WAM_STR,
  _NL_WPM_STR,

  _NL_WD_T_FMT,
  _NL_WD_FMT,
  _NL_WT_FMT,
  _NL_WT_FMT_AMPM,

  _NL_WERA_YEAR,
  _NL_WERA_D_FMT,
  _NL_WALT_DIGITS,
  _NL_WERA_D_T_FMT,
  _NL_WERA_T_FMT,

  _NL_TIME_WEEK_NDAYS,
  _NL_TIME_WEEK_1STDAY,
  _NL_TIME_WEEK_1STWEEK,
  _NL_TIME_FIRST_WEEKDAY,
  _NL_TIME_FIRST_WORKDAY,
  _NL_TIME_CAL_DIRECTION,
  _NL_TIME_TIMEZONE,

  _DATE_FMT,

  _NL_W_DATE_FMT,

  _NL_NUM_LC_TIME,




  _NL_COLLATE_NRULES = (((__LC_COLLATE) << 16) | (0)),
  _NL_COLLATE_RULESETS,
  _NL_COLLATE_TABLEMB,
  _NL_COLLATE_WEIGHTMB,
  _NL_COLLATE_EXTRAMB,
  _NL_COLLATE_INDIRECTMB,
  _NL_COLLATE_GAP1,
  _NL_COLLATE_GAP2,
  _NL_COLLATE_GAP3,
  _NL_COLLATE_TABLEWC,
  _NL_COLLATE_WEIGHTWC,
  _NL_COLLATE_EXTRAWC,
  _NL_COLLATE_INDIRECTWC,
  _NL_COLLATE_SYMB_HASH_SIZEMB,
  _NL_COLLATE_SYMB_TABLEMB,
  _NL_COLLATE_SYMB_EXTRAMB,
  _NL_COLLATE_COLLSEQMB,
  _NL_COLLATE_COLLSEQWC,
  _NL_NUM_LC_COLLATE,




  _NL_CTYPE_CLASS = (((__LC_CTYPE) << 16) | (0)),
  _NL_CTYPE_TOUPPER,
  _NL_CTYPE_GAP1,
  _NL_CTYPE_TOLOWER,
  _NL_CTYPE_GAP2,
  _NL_CTYPE_CLASS32,
  _NL_CTYPE_GAP3,
  _NL_CTYPE_GAP4,
  _NL_CTYPE_GAP5,
  _NL_CTYPE_GAP6,
  _NL_CTYPE_CLASS_NAMES,
  _NL_CTYPE_MAP_NAMES,
  _NL_CTYPE_WIDTH,
  _NL_CTYPE_MB_CUR_MAX,
  _NL_CTYPE_CODESET_NAME,
  CODESET = _NL_CTYPE_CODESET_NAME,

  _NL_CTYPE_TOUPPER32,
  _NL_CTYPE_TOLOWER32,
  _NL_CTYPE_CLASS_OFFSET,
  _NL_CTYPE_MAP_OFFSET,
  _NL_CTYPE_INDIGITS_MB_LEN,
  _NL_CTYPE_INDIGITS0_MB,
  _NL_CTYPE_INDIGITS1_MB,
  _NL_CTYPE_INDIGITS2_MB,
  _NL_CTYPE_INDIGITS3_MB,
  _NL_CTYPE_INDIGITS4_MB,
  _NL_CTYPE_INDIGITS5_MB,
  _NL_CTYPE_INDIGITS6_MB,
  _NL_CTYPE_INDIGITS7_MB,
  _NL_CTYPE_INDIGITS8_MB,
  _NL_CTYPE_INDIGITS9_MB,
  _NL_CTYPE_INDIGITS_WC_LEN,
  _NL_CTYPE_INDIGITS0_WC,
  _NL_CTYPE_INDIGITS1_WC,
  _NL_CTYPE_INDIGITS2_WC,
  _NL_CTYPE_INDIGITS3_WC,
  _NL_CTYPE_INDIGITS4_WC,
  _NL_CTYPE_INDIGITS5_WC,
  _NL_CTYPE_INDIGITS6_WC,
  _NL_CTYPE_INDIGITS7_WC,
  _NL_CTYPE_INDIGITS8_WC,
  _NL_CTYPE_INDIGITS9_WC,
  _NL_CTYPE_OUTDIGIT0_MB,
  _NL_CTYPE_OUTDIGIT1_MB,
  _NL_CTYPE_OUTDIGIT2_MB,
  _NL_CTYPE_OUTDIGIT3_MB,
  _NL_CTYPE_OUTDIGIT4_MB,
  _NL_CTYPE_OUTDIGIT5_MB,
  _NL_CTYPE_OUTDIGIT6_MB,
  _NL_CTYPE_OUTDIGIT7_MB,
  _NL_CTYPE_OUTDIGIT8_MB,
  _NL_CTYPE_OUTDIGIT9_MB,
  _NL_CTYPE_OUTDIGIT0_WC,
  _NL_CTYPE_OUTDIGIT1_WC,
  _NL_CTYPE_OUTDIGIT2_WC,
  _NL_CTYPE_OUTDIGIT3_WC,
  _NL_CTYPE_OUTDIGIT4_WC,
  _NL_CTYPE_OUTDIGIT5_WC,
  _NL_CTYPE_OUTDIGIT6_WC,
  _NL_CTYPE_OUTDIGIT7_WC,
  _NL_CTYPE_OUTDIGIT8_WC,
  _NL_CTYPE_OUTDIGIT9_WC,
  _NL_CTYPE_TRANSLIT_TAB_SIZE,
  _NL_CTYPE_TRANSLIT_FROM_IDX,
  _NL_CTYPE_TRANSLIT_FROM_TBL,
  _NL_CTYPE_TRANSLIT_TO_IDX,
  _NL_CTYPE_TRANSLIT_TO_TBL,
  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING_LEN,
  _NL_CTYPE_TRANSLIT_DEFAULT_MISSING,
  _NL_CTYPE_TRANSLIT_IGNORE_LEN,
  _NL_CTYPE_TRANSLIT_IGNORE,
  _NL_CTYPE_EXTRA_MAP_1,
  _NL_CTYPE_EXTRA_MAP_2,
  _NL_CTYPE_EXTRA_MAP_3,
  _NL_CTYPE_EXTRA_MAP_4,
  _NL_CTYPE_EXTRA_MAP_5,
  _NL_CTYPE_EXTRA_MAP_6,
  _NL_CTYPE_EXTRA_MAP_7,
  _NL_CTYPE_EXTRA_MAP_8,
  _NL_CTYPE_EXTRA_MAP_9,
  _NL_CTYPE_EXTRA_MAP_10,
  _NL_CTYPE_EXTRA_MAP_11,
  _NL_CTYPE_EXTRA_MAP_12,
  _NL_CTYPE_EXTRA_MAP_13,
  _NL_CTYPE_EXTRA_MAP_14,
  _NL_NUM_LC_CTYPE,




  __INT_CURR_SYMBOL = (((__LC_MONETARY) << 16) | (0)),



  __CURRENCY_SYMBOL,



  __MON_DECIMAL_POINT,



  __MON_THOUSANDS_SEP,



  __MON_GROUPING,



  __POSITIVE_SIGN,



  __NEGATIVE_SIGN,



  __INT_FRAC_DIGITS,



  __FRAC_DIGITS,



  __P_CS_PRECEDES,



  __P_SEP_BY_SPACE,



  __N_CS_PRECEDES,



  __N_SEP_BY_SPACE,



  __P_SIGN_POSN,



  __N_SIGN_POSN,



  _NL_MONETARY_CRNCYSTR,

  __INT_P_CS_PRECEDES,



  __INT_P_SEP_BY_SPACE,



  __INT_N_CS_PRECEDES,



  __INT_N_SEP_BY_SPACE,



  __INT_P_SIGN_POSN,



  __INT_N_SIGN_POSN,



  _NL_MONETARY_DUO_INT_CURR_SYMBOL,
  _NL_MONETARY_DUO_CURRENCY_SYMBOL,
  _NL_MONETARY_DUO_INT_FRAC_DIGITS,
  _NL_MONETARY_DUO_FRAC_DIGITS,
  _NL_MONETARY_DUO_P_CS_PRECEDES,
  _NL_MONETARY_DUO_P_SEP_BY_SPACE,
  _NL_MONETARY_DUO_N_CS_PRECEDES,
  _NL_MONETARY_DUO_N_SEP_BY_SPACE,
  _NL_MONETARY_DUO_INT_P_CS_PRECEDES,
  _NL_MONETARY_DUO_INT_P_SEP_BY_SPACE,
  _NL_MONETARY_DUO_INT_N_CS_PRECEDES,
  _NL_MONETARY_DUO_INT_N_SEP_BY_SPACE,
  _NL_MONETARY_DUO_P_SIGN_POSN,
  _NL_MONETARY_DUO_N_SIGN_POSN,
  _NL_MONETARY_DUO_INT_P_SIGN_POSN,
  _NL_MONETARY_DUO_INT_N_SIGN_POSN,
  _NL_MONETARY_UNO_VALID_FROM,
  _NL_MONETARY_UNO_VALID_TO,
  _NL_MONETARY_DUO_VALID_FROM,
  _NL_MONETARY_DUO_VALID_TO,
  _NL_MONETARY_CONVERSION_RATE,
  _NL_MONETARY_DECIMAL_POINT_WC,
  _NL_MONETARY_THOUSANDS_SEP_WC,
  _NL_NUM_LC_MONETARY,



  __DECIMAL_POINT = (((__LC_NUMERIC) << 16) | (0)),



  RADIXCHAR = __DECIMAL_POINT,

  __THOUSANDS_SEP,



  THOUSEP = __THOUSANDS_SEP,

  __GROUPING,



  _NL_NUMERIC_DECIMAL_POINT_WC,
  _NL_NUMERIC_THOUSANDS_SEP_WC,
  _NL_NUM_LC_NUMERIC,

  __YESEXPR = (((__LC_MESSAGES) << 16) | (0)),

  __NOEXPR,

  __YESSTR,



  __NOSTR,



  _NL_NUM_LC_MESSAGES,

  _NL_PAPER_HEIGHT = (((__LC_PAPER) << 16) | (0)),
  _NL_PAPER_WIDTH,
  _NL_NUM_LC_PAPER,

  _NL_NAME_NAME_FMT = (((__LC_NAME) << 16) | (0)),
  _NL_NAME_NAME_GEN,
  _NL_NAME_NAME_MR,
  _NL_NAME_NAME_MRS,
  _NL_NAME_NAME_MISS,
  _NL_NAME_NAME_MS,
  _NL_NUM_LC_NAME,

  _NL_ADDRESS_POSTAL_FMT = (((__LC_ADDRESS) << 16) | (0)),
  _NL_ADDRESS_COUNTRY_NAME,
  _NL_ADDRESS_COUNTRY_POST,
  _NL_ADDRESS_COUNTRY_AB2,
  _NL_ADDRESS_COUNTRY_AB3,
  _NL_ADDRESS_COUNTRY_CAR,
  _NL_ADDRESS_COUNTRY_NUM,
  _NL_ADDRESS_COUNTRY_ISBN,
  _NL_ADDRESS_LANG_NAME,
  _NL_ADDRESS_LANG_AB,
  _NL_ADDRESS_LANG_TERM,
  _NL_ADDRESS_LANG_LIB,
  _NL_NUM_LC_ADDRESS,

  _NL_TELEPHONE_TEL_INT_FMT = (((__LC_TELEPHONE) << 16) | (0)),
  _NL_TELEPHONE_TEL_DOM_FMT,
  _NL_TELEPHONE_INT_SELECT,
  _NL_TELEPHONE_INT_PREFIX,
  _NL_NUM_LC_TELEPHONE,

  _NL_MEASUREMENT_MEASUREMENT = (((__LC_MEASUREMENT) << 16) | (0)),
  _NL_NUM_LC_MEASUREMENT,

  _NL_IDENTIFICATION_TITLE = (((__LC_IDENTIFICATION) << 16) | (0)),
  _NL_IDENTIFICATION_SOURCE,
  _NL_IDENTIFICATION_ADDRESS,
  _NL_IDENTIFICATION_CONTACT,
  _NL_IDENTIFICATION_EMAIL,
  _NL_IDENTIFICATION_TEL,
  _NL_IDENTIFICATION_FAX,
  _NL_IDENTIFICATION_LANGUAGE,
  _NL_IDENTIFICATION_TERRITORY,
  _NL_IDENTIFICATION_AUDIENCE,
  _NL_IDENTIFICATION_APPLICATION,
  _NL_IDENTIFICATION_ABBREVIATION,
  _NL_IDENTIFICATION_REVISION,
  _NL_IDENTIFICATION_DATE,
  _NL_IDENTIFICATION_CATEGORY,
  _NL_NUM_LC_IDENTIFICATION,


  _NL_NUM
};
# 563 "/usr/include/langinfo.h" 3
extern char *nl_langinfo (nl_item __item) throw ();







# 1 "/usr/include/xlocale.h" 1 3
# 572 "/usr/include/langinfo.h" 2 3


extern char *__nl_langinfo_l (nl_item __item, __locale_t l);


}
# 45 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cwctype.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cwctype.h" 3
# 1 "/usr/include/wctype.h" 1 3
# 26 "/usr/include/wctype.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/wctype.h" 2 3
# 1 "/usr/include/bits/types.h" 1 3
# 28 "/usr/include/wctype.h" 2 3







# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 36 "/usr/include/wctype.h" 2 3
# 61 "/usr/include/wctype.h" 3
typedef unsigned long int wctype_t;






# 1 "/usr/include/endian.h" 1 3
# 69 "/usr/include/wctype.h" 2 3
# 79 "/usr/include/wctype.h" 3
enum
{
  __ISwupper = 0,
  __ISwlower = 1,
  __ISwalpha = 2,
  __ISwdigit = 3,
  __ISwxdigit = 4,
  __ISwspace = 5,
  __ISwprint = 6,
  __ISwgraph = 7,
  __ISwblank = 8,
  __ISwcntrl = 9,
  __ISwpunct = 10,
  __ISwalnum = 11,

  _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))),
  _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))),
  _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))),
  _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))),
  _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))),
  _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))),
  _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))),
  _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))),
  _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))),
  _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))),
  _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))),
  _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24))))
};



extern "C" {







extern int iswalnum (wint_t __wc) throw ();





extern int iswalpha (wint_t __wc) throw ();


extern int iswcntrl (wint_t __wc) throw ();



extern int iswdigit (wint_t __wc) throw ();



extern int iswgraph (wint_t __wc) throw ();




extern int iswlower (wint_t __wc) throw ();


extern int iswprint (wint_t __wc) throw ();




extern int iswpunct (wint_t __wc) throw ();




extern int iswspace (wint_t __wc) throw ();




extern int iswupper (wint_t __wc) throw ();




extern int iswxdigit (wint_t __wc) throw ();





extern int iswblank (wint_t __wc) throw ();
# 178 "/usr/include/wctype.h" 3
extern wctype_t wctype (__const char *__property) throw ();



extern int iswctype (wint_t __wc, wctype_t __desc) throw ();
# 249 "/usr/include/wctype.h" 3
typedef __const __int32_t *wctrans_t;


extern wint_t towlower (wint_t __wc) throw ();


extern wint_t towupper (wint_t __wc) throw ();
# 275 "/usr/include/wctype.h" 3
}
# 288 "/usr/include/wctype.h" 3
extern "C" {



extern wctrans_t wctrans (__const char *__property) throw ();


extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw ();



# 1 "/usr/include/xlocale.h" 1 3
# 300 "/usr/include/wctype.h" 2 3



extern int __iswalnum_l (wint_t __wc, __locale_t __locale) throw ();





extern int __iswalpha_l (wint_t __wc, __locale_t __locale) throw ();


extern int __iswcntrl_l (wint_t __wc, __locale_t __locale) throw ();



extern int __iswdigit_l (wint_t __wc, __locale_t __locale) throw ();



extern int __iswgraph_l (wint_t __wc, __locale_t __locale) throw ();




extern int __iswlower_l (wint_t __wc, __locale_t __locale) throw ();


extern int __iswprint_l (wint_t __wc, __locale_t __locale) throw ();




extern int __iswpunct_l (wint_t __wc, __locale_t __locale) throw ();




extern int __iswspace_l (wint_t __wc, __locale_t __locale) throw ();




extern int __iswupper_l (wint_t __wc, __locale_t __locale) throw ();




extern int __iswxdigit_l (wint_t __wc, __locale_t __locale) throw ();




extern int __iswblank_l (wint_t __wc, __locale_t __locale) throw ();



extern wctype_t __wctype_l (__const char *__property, __locale_t __locale)
     throw ();



extern int __iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
     throw ();







extern wint_t __towlower_l (wint_t __wc, __locale_t __locale) throw ();


extern wint_t __towupper_l (wint_t __wc, __locale_t __locale) throw ();



extern wctrans_t __wctrans_l (__const char *__property, __locale_t __locale)
     throw ();


extern wint_t __towctrans_l (wint_t __wc, wctrans_t __desc,
                             __locale_t __locale) throw ();



}
# 39 "/opt/egcs/include/g++-v3/bits/std_cwctype.h" 2 3
# 61 "/opt/egcs/include/g++-v3/bits/std_cwctype.h" 3
namespace std
{
  using ::wint_t;

  using ::wctype_t;
  using ::wctrans_t;

  using ::iswalnum;
  using ::iswalpha;
  using ::iswblank;
  using ::iswcntrl;
  using ::iswdigit;
  using ::iswgraph;
  using ::iswlower;
  using ::iswprint;
  using ::iswprint;
  using ::iswpunct;
  using ::iswspace;
  using ::iswupper;
  using ::iswxdigit;
  using ::iswctype;
  using ::towlower;
  using ::towupper;
  using ::towctrans;
  using ::wctrans;
  using ::wctype;
}
# 46 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3
# 1 "/usr/include/iconv.h" 1 3
# 22 "/usr/include/iconv.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/iconv.h" 2 3

# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 25 "/usr/include/iconv.h" 2 3


extern "C" {


typedef void *iconv_t;




extern iconv_t iconv_open (__const char *__tocode, __const char *__fromcode)
     throw ();




extern size_t iconv (iconv_t __cd, char **__restrict __inbuf,
                     size_t *__restrict __inbytesleft,
                     char **__restrict __outbuf,
                     size_t *__restrict __outbytesleft);


extern int iconv_close (iconv_t __cd) throw ();

}
# 47 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3


namespace std
{


# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/ctype_base.h" 1 3
# 50 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/ctype_base.h" 3
  struct ctype_base
  {

    typedef const int* __to_type;



    typedef unsigned short mask;
    static const mask upper = _ISupper;
    static const mask lower = _ISlower;
    static const mask alpha = _ISalpha;
    static const mask digit = _ISdigit;
    static const mask xdigit = _ISxdigit;
    static const mask space = _ISspace;
    static const mask print = _ISprint;
    static const mask graph = _ISgraph;
    static const mask cntrl = _IScntrl;
    static const mask punct = _ISpunct;
    static const mask alnum = _ISalnum;
  };
# 54 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3


  template<typename _CharT>
    class __ctype_abstract_base : public locale::facet, public ctype_base
    {
    public:

      typedef _CharT char_type;

      bool
      is(mask __m, char_type __c) const
      { return this->do_is(__m, __c); }

      const char_type*
      is(const char_type *__lo, const char_type *__hi, mask *__vec) const
      { return this->do_is(__lo, __hi, __vec); }

      const char_type*
      scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
      { return this->do_scan_is(__m, __lo, __hi); }

      const char_type*
      scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
      { return this->do_scan_not(__m, __lo, __hi); }

      char_type
      toupper(char_type __c) const
      { return this->do_toupper(__c); }

      const char_type*
      toupper(char_type *__lo, const char_type* __hi) const
      { return this->do_toupper(__lo, __hi); }

      char_type
      tolower(char_type __c) const
      { return this->do_tolower(__c); }

      const char_type*
      tolower(char_type* __lo, const char_type* __hi) const
      { return this->do_tolower(__lo, __hi); }

      char_type
      widen(char __c) const
      { return this->do_widen(__c); }

      const char*
      widen(const char* __lo, const char* __hi, char_type* __to) const
      { return this->do_widen(__lo, __hi, __to); }

      char
      narrow(char_type __c, char __dfault) const
      { return this->do_narrow(__c, __dfault); }

      const char_type*
      narrow(const char_type* __lo, const char_type* __hi,
              char __dfault, char *__to) const
      { return this->do_narrow(__lo, __hi, __dfault, __to); }

    protected:
      explicit
      __ctype_abstract_base(size_t __refs = 0): locale::facet(__refs) { }

      virtual
      ~__ctype_abstract_base() { }

      virtual bool
      do_is(mask __m, char_type __c) const = 0;

      virtual const char_type*
      do_is(const char_type* __lo, const char_type* __hi,
            mask* __vec) const = 0;

      virtual const char_type*
      do_scan_is(mask __m, const char_type* __lo,
                 const char_type* __hi) const = 0;

      virtual const char_type*
      do_scan_not(mask __m, const char_type* __lo,
                  const char_type* __hi) const = 0;

      virtual char_type
      do_toupper(char_type) const = 0;

      virtual const char_type*
      do_toupper(char_type* __lo, const char_type* __hi) const = 0;

      virtual char_type
      do_tolower(char_type) const = 0;

      virtual const char_type*
      do_tolower(char_type* __lo, const char_type* __hi) const = 0;

      virtual char_type
      do_widen(char) const = 0;

      virtual const char*
      do_widen(const char* __lo, const char* __hi,
               char_type* __dest) const = 0;

      virtual char
      do_narrow(char_type, char __dfault) const = 0;

      virtual const char_type*
      do_narrow(const char_type* __lo, const char_type* __hi,
                 char __dfault, char* __dest) const = 0;
    };


  template<typename _CharT>
    class ctype : public __ctype_abstract_base<_CharT>
    {
    public:

      typedef _CharT char_type;
      typedef typename ctype::mask mask;

      explicit
      ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }

      static locale::id id;

   protected:
      virtual
      ~ctype() { }

      virtual bool
      do_is(mask __m, char_type __c) const
      { return false; }

      virtual const char_type*
      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const
      { return __hi; }

      virtual const char_type*
      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
      { return __hi; }

      virtual const char_type*
      do_scan_not(mask __m, const char_type* __lo,
                  const char_type* __hi) const
      { return __hi; }

      virtual char_type
      do_toupper(char_type __c) const
      { return __c; }

      virtual const char_type*
      do_toupper(char_type* __lo, const char_type* __hi) const
      { return __hi; }

      virtual char_type
      do_tolower(char_type __c) const
      { return __c; }

      virtual const char_type*
      do_tolower(char_type* __lo, const char_type* __hi) const
      { return __hi; }

      virtual char_type
      do_widen(char __c) const
      { return char_type(); }

      virtual const char*
      do_widen(const char* __lo, const char* __hi, char_type* __dest) const
      { return __hi; }

      virtual char
      do_narrow(char_type, char __dfault) const
      { return __dfault; }

      virtual const char_type*
      do_narrow(const char_type* __lo, const char_type* __hi,
                char __dfault, char* __dest) const
      { return __hi; }
    };

  template<typename _CharT>
    locale::id ctype<_CharT>::id;


  template<>
    class ctype<char> : public __ctype_abstract_base<char>
    {
    public:

      typedef char char_type;

    private:

      bool _M_del;
      __to_type const& _M_toupper;
      __to_type const& _M_tolower;
      const mask* const& _M_ctable;
      const mask* _M_table;

    public:
      static locale::id id;
      static const size_t table_size = 1 + static_cast<unsigned char>(-1);

      explicit
      ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);

      inline bool
      is(mask __m, char __c) const;

      inline const char*
      is(const char* __lo, const char* __hi, mask* __vec) const;

      inline const char*
      scan_is(mask __m, const char* __lo, const char* __hi) const;

      inline const char*
      scan_not(mask __m, const char* __lo, const char* __hi) const;

    protected:
      virtual
      ~ctype();

      const mask*
      table() const throw()
      { return _M_table; }

      const mask*
      classic_table() throw()
      { return _M_ctable; }

      virtual bool
      do_is(mask __m, char_type __c) const;

      virtual const char_type*
      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;

      virtual const char_type*
      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;

      virtual const char_type*
      do_scan_not(mask __m, const char_type* __lo,
                  const char_type* __hi) const;

      virtual char_type
      do_toupper(char_type) const;

      virtual const char_type*
      do_toupper(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_tolower(char_type) const;

      virtual const char_type*
      do_tolower(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_widen(char) const;

      virtual const char*
      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;

      virtual char
      do_narrow(char_type, char __dfault) const;

      virtual const char_type*
      do_narrow(const char_type* __lo, const char_type* __hi,
                 char __dfault, char* __dest) const;
    };

  template<>
    const ctype<char>&
    use_facet<ctype<char> >(const locale& __loc);



  template<>
    class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
    {
    public:

      typedef wchar_t char_type;
      typedef wctype_t __wmask_type;


      static locale::id id;

      explicit
      ctype(size_t __refs = 0);

    protected:
      __wmask_type
      _M_convert_to_wmask(const mask __m) const;

      virtual
      ~ctype();

      virtual bool
      do_is(mask __m, char_type __c) const;

      virtual const char_type*
      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;

      virtual const char_type*
      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;

      virtual const char_type*
      do_scan_not(mask __m, const char_type* __lo,
                  const char_type* __hi) const;

      virtual char_type
      do_toupper(char_type) const;

      virtual const char_type*
      do_toupper(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_tolower(char_type) const;

      virtual const char_type*
      do_tolower(char_type* __lo, const char_type* __hi) const;

      virtual char_type
      do_widen(char) const;

      virtual const char*
      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;

      virtual char
      do_narrow(char_type, char __dfault) const;

      virtual const char_type*
      do_narrow(const char_type* __lo, const char_type* __hi,
                 char __dfault, char* __dest) const;

    };

  template<>
    const ctype<wchar_t>&
    use_facet<ctype<wchar_t> >(const locale& __loc);



# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/ctype_inline.h" 1 3
# 37 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/ctype_inline.h" 3
  bool
  ctype<char>::
  is(mask __m, char __c) const
  { return _M_table[__c] & __m; }

  const char*
  ctype<char>::
  is(const char* __low, const char* __high, mask* __vec) const
  {
    while (__low < __high)
      *__vec++ = _M_table[*__low++];
    return __high;
  }

  const char*
  ctype<char>::
  scan_is(mask __m, const char* __low, const char* __high) const
  {
    while (__low < __high && !(_M_table[*__low] & __m))
      ++__low;
    return __low;
  }

  const char*
  ctype<char>::
  scan_not(mask __m, const char* __low, const char* __high) const
  {
    while (__low < __high
           && (_M_table[*__low] & __m) != 0)
      ++__low;
    return __low;
  }
# 393 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3


  template<typename _CharT>
    class ctype_byname : public ctype<_CharT>
    {
    public:
      typedef _CharT char_type;

      explicit
      ctype_byname(const char*, size_t __refs = 0);

    protected:
      virtual
      ~ctype_byname() { }
    };


  template<>
    ctype_byname<char>::ctype_byname(const char*, size_t refs);



# 1 "/opt/egcs/include/g++-v3/bits/codecvt.h" 1 3
# 42 "/opt/egcs/include/g++-v3/bits/codecvt.h" 3
# 57 "/opt/egcs/include/g++-v3/bits/codecvt.h" 3
  class __enc_traits
  {
  public:



    typedef iconv_t __desc_type;

  protected:


    static const int _S_max_size = 32;

    char _M_int_enc[_S_max_size];

    char _M_ext_enc[_S_max_size];


    __desc_type _M_in_desc;

    __desc_type _M_out_desc;


    int _M_ext_bom;


    int _M_int_bom;

  public:
    __enc_traits()
    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
    {




      strcpy(_M_int_enc, "UCS4");


      strcpy(_M_ext_enc, nl_langinfo(CODESET));
    }

    __enc_traits(const char* __int, const char* __ext, int __ibom = 0,
                 int __ebom = 0)
    : _M_in_desc(0), _M_out_desc(0), _M_ext_bom(0), _M_int_bom(0)
    {
      strncpy(_M_int_enc, __int, _S_max_size);
      strncpy(_M_ext_enc, __ext, _S_max_size);
    }






    __enc_traits(const __enc_traits& __obj)
    {
      strncpy(_M_int_enc, __obj._M_int_enc, _S_max_size);
      strncpy(_M_ext_enc, __obj._M_ext_enc, _S_max_size);
      _M_ext_bom = __obj._M_ext_bom;
      _M_int_bom = __obj._M_int_bom;
    }

    ~__enc_traits()
    {
      iconv_close(_M_in_desc);
      iconv_close(_M_out_desc);
    }


    void
    _M_init()
    {
      _M_in_desc = iconv_open(_M_int_enc, _M_ext_enc);
      _M_out_desc = iconv_open(_M_ext_enc, _M_int_enc);
      if (_M_out_desc == iconv_t(-1) || _M_in_desc == iconv_t(-1))
        {

        }
    }

    bool
    _M_good()
    {
      return _M_out_desc && _M_in_desc
             && _M_out_desc != iconv_t(-1) && _M_in_desc != iconv_t(-1);
    }

    const __desc_type*
    _M_get_in_descriptor()
    { return &_M_in_desc; }

    const __desc_type*
    _M_get_out_descriptor()
    { return &_M_out_desc; }

   const char*
    _M_get_internal_enc()
    { return _M_int_enc; }

    const char*
    _M_get_external_enc()
    { return _M_ext_enc; }

    int
    _M_get_external_bom()
    { return _M_ext_bom; }

    int
    _M_get_internal_bom()
    { return _M_int_bom; }
  };




  class codecvt_base
  {
  public:
    enum result
    {
      ok,
      partial,
      error,
      noconv
    };
  };





  template<typename _InternT, typename _ExternT, typename _StateT>
    class __codecvt_abstract_base
    : public locale::facet, public codecvt_base
    {
    public:

      typedef codecvt_base::result result;
      typedef _InternT intern_type;
      typedef _ExternT extern_type;
      typedef _StateT state_type;


      result
      out(state_type& __state, const intern_type* __from,
          const intern_type* __from_end, const intern_type*& __from_next,
          extern_type* __to, extern_type* __to_end,
          extern_type*& __to_next) const
      {
        return this->do_out(__state, __from, __from_end, __from_next,
                            __to, __to_end, __to_next);
      }

      result
      unshift(state_type& __state, extern_type* __to, extern_type* __to_end,
              extern_type*& __to_next) const
      { return this->do_unshift(__state, __to,__to_end,__to_next); }

      result
      in(state_type& __state, const extern_type* __from,
         const extern_type* __from_end, const extern_type*& __from_next,
         intern_type* __to, intern_type* __to_end,
         intern_type*& __to_next) const
      {
        return this->do_in(__state, __from, __from_end, __from_next,
                           __to, __to_end, __to_next);
      }

      int
      encoding() const throw()
      { return this->do_encoding(); }

      bool
      always_noconv() const throw()
      { return this->do_always_noconv(); }

      int
      length(const state_type& __state, const extern_type* __from,
             const extern_type* __end, size_t __max) const
      { return this->do_length(__state, __from, __end, __max); }

      int
      max_length() const throw()
      { return this->do_max_length(); }

    protected:
      explicit
      __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { }

      virtual
      ~__codecvt_abstract_base() { }

      virtual result
      do_out(state_type& __state, const intern_type* __from,
             const intern_type* __from_end, const intern_type*& __from_next,
             extern_type* __to, extern_type* __to_end,
             extern_type*& __to_next) const = 0;

      virtual result
      do_unshift(state_type& __state, extern_type* __to,
                 extern_type* __to_end, extern_type*& __to_next) const = 0;

      virtual result
      do_in(state_type& __state, const extern_type* __from,
            const extern_type* __from_end, const extern_type*& __from_next,
            intern_type* __to, intern_type* __to_end,
            intern_type*& __to_next) const = 0;

      virtual int
      do_encoding() const throw() = 0;

      virtual bool
      do_always_noconv() const throw() = 0;

      virtual int
      do_length(const state_type&, const extern_type* __from,
                const extern_type* __end, size_t __max) const = 0;

      virtual int
      do_max_length() const throw() = 0;
    };



  template<typename _InternT, typename _ExternT, typename _StateT>
    class codecvt
    : public __codecvt_abstract_base<_InternT, _ExternT, _StateT>
    {
    public:

      typedef codecvt_base::result result;
      typedef _InternT intern_type;
      typedef _ExternT extern_type;
      typedef _StateT state_type;


      static locale::id id;

      explicit
      codecvt(size_t __refs = 0)
      : __codecvt_abstract_base<_InternT,_ExternT,_StateT> (__refs) { }

    protected:
      virtual
      ~codecvt() { }
    };

  template<typename _InternT, typename _ExternT, typename _StateT>
    locale::id codecvt<_InternT, _ExternT, _StateT>::id;





  template<typename _InternT, typename _ExternT>
    class codecvt<_InternT, _ExternT, __enc_traits>
    : public __codecvt_abstract_base<_InternT, _ExternT, __enc_traits>
    {
    public:

      typedef codecvt_base::result result;
      typedef _InternT intern_type;
      typedef _ExternT extern_type;
      typedef __enc_traits state_type;
      typedef __enc_traits::__desc_type __desc_type;
      typedef __enc_traits __enc_type;


      static locale::id id;

      explicit
      codecvt(size_t __refs = 0)
      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
      { }

      explicit
      codecvt(__enc_type* __enc, size_t __refs = 0)
      : __codecvt_abstract_base<intern_type, extern_type, state_type>(__refs)
      { }

    protected:
      virtual
      ~codecvt() { }

      virtual result
      do_out(state_type& __state, const intern_type* __from,
             const intern_type* __from_end, const intern_type*& __from_next,
             extern_type* __to, extern_type* __to_end,
             extern_type*& __to_next) const;

      virtual result
      do_unshift(state_type& __state, extern_type* __to,
                 extern_type* __to_end, extern_type*& __to_next) const;

      virtual result
      do_in(state_type& __state, const extern_type* __from,
            const extern_type* __from_end, const extern_type*& __from_next,
            intern_type* __to, intern_type* __to_end,
            intern_type*& __to_next) const;

      virtual int
      do_encoding() const throw();

      virtual bool
      do_always_noconv() const throw();

      virtual int
      do_length(const state_type&, const extern_type* __from,
                const extern_type* __end, size_t __max) const;

      virtual int
      do_max_length() const throw();
    };

  template<typename _InternT, typename _ExternT>
    locale::id
    codecvt<_InternT, _ExternT, __enc_traits>::id;





  template<typename _T>
    inline size_t
    __iconv_adaptor(size_t(*iconv_func)(iconv_t, _T, size_t*, char**, size_t*),
                    iconv_t cd, char** inbuf, size_t* inbytesleft,
                    char** outbuf, size_t* outbytesleft)
    {
      return iconv_func(cd, (_T)inbuf, inbytesleft, outbuf, outbytesleft);
    }

  template<typename _InternT, typename _ExternT>
    codecvt_base::result
    codecvt<_InternT, _ExternT, __enc_traits>::
    do_out(state_type& __state, const intern_type* __from,
           const intern_type* __from_end, const intern_type*& __from_next,
           extern_type* __to, extern_type* __to_end,
           extern_type*& __to_next) const
    {
      result __ret = error;
      if (__state._M_good())
        {
          typedef state_type::__desc_type __desc_type;
          const __desc_type* __desc = __state._M_get_out_descriptor();
          const size_t __fmultiple = sizeof(intern_type) / sizeof(char);
          size_t __flen = __fmultiple * (__from_end - __from);
          const size_t __tmultiple = sizeof(extern_type) / sizeof(char);
          size_t __tlen = __tmultiple * (__to_end - __to);



          char* __cto = reinterpret_cast<char*>(__to);
          char* __cfrom;
          size_t __conv;






          int __int_bom = __state._M_get_internal_bom();
          if (__int_bom)
            {
              size_t __size = __from_end - __from;
              intern_type* __cfixed = static_cast<intern_type*>(__builtin_alloca(sizeof(intern_type) * (__size + 1)));
              __cfixed[0] = static_cast<intern_type>(__int_bom);
              char_traits<intern_type>::copy(__cfixed + 1, __from, __size);
              __cfrom = reinterpret_cast<char*>(__cfixed);
              __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
                                        &__flen, &__cto, &__tlen);
            }
          else
            {
              intern_type* __cfixed = const_cast<intern_type*>(__from);
              __cfrom = reinterpret_cast<char*>(__cfixed);
              __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
                                       &__flen, &__cto, &__tlen);
            }

          if (__conv != size_t(-1))
            {
              __from_next = reinterpret_cast<const intern_type*>(__cfrom);
              __to_next = reinterpret_cast<extern_type*>(__cto);
              __ret = ok;
            }
          else
            {
              if (__flen < static_cast<size_t>(__from_end - __from))
                {
                  __from_next = reinterpret_cast<const intern_type*>(__cfrom);
                  __to_next = reinterpret_cast<extern_type*>(__cto);
                  __ret = partial;
                }
              else
                __ret = error;
            }
        }
      return __ret;
    }

  template<typename _InternT, typename _ExternT>
    codecvt_base::result
    codecvt<_InternT, _ExternT, __enc_traits>::
    do_unshift(state_type& __state, extern_type* __to,
               extern_type* __to_end, extern_type*& __to_next) const
    {
      result __ret = error;
      if (__state._M_good())
        {
          typedef state_type::__desc_type __desc_type;
          const __desc_type* __desc = __state._M_get_in_descriptor();
          const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
          size_t __tlen = __tmultiple * (__to_end - __to);



          char* __cto = reinterpret_cast<char*>(__to);
          size_t __conv = __iconv_adaptor(iconv,*__desc, __null, __null,
                                          &__cto, &__tlen);

          if (__conv != size_t(-1))
            {
              __to_next = reinterpret_cast<extern_type*>(__cto);
              if (__tlen == __tmultiple * (__to_end - __to))
                __ret = noconv;
              else if (__tlen == 0)
                __ret = ok;
              else
                __ret = partial;
            }
          else
            __ret = error;
        }
      return __ret;
    }

  template<typename _InternT, typename _ExternT>
    codecvt_base::result
    codecvt<_InternT, _ExternT, __enc_traits>::
    do_in(state_type& __state, const extern_type* __from,
          const extern_type* __from_end, const extern_type*& __from_next,
          intern_type* __to, intern_type* __to_end,
          intern_type*& __to_next) const
    {
      result __ret = error;
      if (__state._M_good())
        {
          typedef state_type::__desc_type __desc_type;
          const __desc_type* __desc = __state._M_get_in_descriptor();
          const size_t __fmultiple = sizeof(extern_type) / sizeof(char);
          size_t __flen = __fmultiple * (__from_end - __from);
          const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
          size_t __tlen = __tmultiple * (__to_end - __to);



          char* __cto = reinterpret_cast<char*>(__to);
          char* __cfrom;
          size_t __conv;






          int __ext_bom = __state._M_get_external_bom();
          if (__ext_bom)
            {
              size_t __size = __from_end - __from;
              extern_type* __cfixed = static_cast<extern_type*>(__builtin_alloca(sizeof(extern_type) * (__size + 1)));
              __cfixed[0] = static_cast<extern_type>(__ext_bom);
              char_traits<extern_type>::copy(__cfixed + 1, __from, __size);
              __cfrom = reinterpret_cast<char*>(__cfixed);
              __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
                                       &__flen, &__cto, &__tlen);
            }
          else
            {
              extern_type* __cfixed = const_cast<extern_type*>(__from);
              __cfrom = reinterpret_cast<char*>(__cfixed);
              __conv = __iconv_adaptor(iconv, *__desc, &__cfrom,
                                       &__flen, &__cto, &__tlen);
            }


          if (__conv != size_t(-1))
            {
              __from_next = reinterpret_cast<const extern_type*>(__cfrom);
              __to_next = reinterpret_cast<intern_type*>(__cto);
              __ret = ok;
            }
          else
            {
              if (__flen < static_cast<size_t>(__from_end - __from))
                {
                  __from_next = reinterpret_cast<const extern_type*>(__cfrom);
                  __to_next = reinterpret_cast<intern_type*>(__cto);
                  __ret = partial;
                }
              else
                __ret = error;
            }
        }
      return __ret;
    }

  template<typename _InternT, typename _ExternT>
    int
    codecvt<_InternT, _ExternT, __enc_traits>::
    do_encoding() const throw()
    { return 0; }

  template<typename _InternT, typename _ExternT>
    bool
    codecvt<_InternT, _ExternT, __enc_traits>::
    do_always_noconv() const throw()
    { return false; }

  template<typename _InternT, typename _ExternT>
    int
    codecvt<_InternT, _ExternT, __enc_traits>::
    do_length(const state_type&, const extern_type* __from,
              const extern_type* __end, size_t __max) const
    { return min(__max, static_cast<size_t>(__end - __from)); }



  template<typename _InternT, typename _ExternT>
    int
    codecvt<_InternT, _ExternT, __enc_traits>::
    do_max_length() const throw()
    { return 1; }




  template<>
    class codecvt<char, char, mbstate_t>
    : public __codecvt_abstract_base<char, char, mbstate_t>
    {
    public:

      typedef char intern_type;
      typedef char extern_type;
      typedef mbstate_t state_type;


      static locale::id id;

      explicit
      codecvt(size_t __refs = 0);

    protected:
      virtual
      ~codecvt();

      virtual result
      do_out(state_type& __state, const intern_type* __from,
             const intern_type* __from_end, const intern_type*& __from_next,
             extern_type* __to, extern_type* __to_end,
             extern_type*& __to_next) const;

      virtual result
      do_unshift(state_type& __state, extern_type* __to,
                 extern_type* __to_end, extern_type*& __to_next) const;

      virtual result
      do_in(state_type& __state, const extern_type* __from,
            const extern_type* __from_end, const extern_type*& __from_next,
            intern_type* __to, intern_type* __to_end,
            intern_type*& __to_next) const;

      virtual int
      do_encoding() const throw();

      virtual bool
      do_always_noconv() const throw();

      virtual int
      do_length(const state_type&, const extern_type* __from,
                const extern_type* __end, size_t __max) const;

      virtual int
      do_max_length() const throw();
  };



  template<>
    class codecvt<wchar_t, char, mbstate_t>
    : public __codecvt_abstract_base<wchar_t, char, mbstate_t>
    {
    public:

      typedef wchar_t intern_type;
      typedef char extern_type;
      typedef mbstate_t state_type;


      static locale::id id;

      explicit
      codecvt(size_t __refs = 0);

    protected:
      virtual
      ~codecvt();

      virtual result
      do_out(state_type& __state, const intern_type* __from,
             const intern_type* __from_end, const intern_type*& __from_next,
             extern_type* __to, extern_type* __to_end,
             extern_type*& __to_next) const;

      virtual result
      do_unshift(state_type& __state,
                 extern_type* __to, extern_type* __to_end,
                 extern_type*& __to_next) const;

      virtual result
      do_in(state_type& __state,
             const extern_type* __from, const extern_type* __from_end,
             const extern_type*& __from_next,
             intern_type* __to, intern_type* __to_end,
             intern_type*& __to_next) const;

      virtual
      int do_encoding() const throw();

      virtual
      bool do_always_noconv() const throw();

      virtual
      int do_length(const state_type&, const extern_type* __from,
                    const extern_type* __end, size_t __max) const;

      virtual int
      do_max_length() const throw();
    };



  template<typename _InternT, typename _ExternT, typename _StateT>
    class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT>
    {
    public:
      explicit
      codecvt_byname(const char*, size_t __refs = 0)
      : codecvt<_InternT, _ExternT, _StateT>(__refs) { }
    protected:
      virtual
      ~codecvt_byname() { }
    };
# 416 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 2 3

  template<typename _CharT, typename _InIter>
    class _Numeric_get;






  template<typename _CharT>
    class _Format_cache
    {
    public:

      typedef _CharT char_type;
      typedef char_traits<_CharT> traits_type;
      typedef basic_string<_CharT> string_type;
      typedef typename string_type::size_type size_type;


      friend class locale;
      template<typename _Char, typename _InIter>
        friend class _Numeric_get;
      friend class num_get<_CharT>;
      friend class num_put<_CharT>;
      friend class time_get<_CharT>;
      friend class money_get<_CharT>;
      friend class time_put<_CharT>;
      friend class money_put<_CharT>;




      static int _S_pword_ix;



      bool _M_valid;



      static const char _S_literals[];




      enum
      {
        _S_minus,
        _S_plus,
        _S_x,
        _S_X,
        _S_digits,
        _S_digits_end = _S_digits + 16,
        _S_udigits = _S_digits_end,
        _S_udigits_end = _S_udigits + 16,
        _S_ee = _S_digits + 14,
        _S_Ee = _S_udigits + 14
      };




      char_type _M_decimal_point;





      char_type _M_thousands_sep;



      string_type _M_truename;
      string_type _M_falsename;



      bool _M_use_grouping;



      string _M_grouping;

      _Format_cache();

      ~_Format_cache() throw() { }




      static _Format_cache<_CharT>*
      _S_get(ios_base& __ios);

      void
      _M_populate(ios_base&);

      static void
      _S_callback(ios_base::event __event, ios_base& __ios, int __ix) throw();
    };

  template<typename _CharT>
    int _Format_cache<_CharT>::_S_pword_ix;

  template<typename _CharT>
    const char _Format_cache<_CharT>::
    _S_literals[] = "-+xX0123456789abcdef0123456789ABCDEF";

   template<> _Format_cache<char>::_Format_cache();

   template<> _Format_cache<wchar_t>::_Format_cache();




  template<typename _CharT, typename _InIter>
    class _Numeric_get
    {
    public:

      typedef _CharT char_type;
      typedef _InIter iter_type;


      template<typename _Char, typename _InIterT>
      friend class num_get;
      template<typename _Char, typename _InIterT>
      friend class time_get;
      template<typename _Char, typename _InIterT>
      friend class money_get;
      template<typename _Char, typename _InIterT>
      friend class num_put;
      template<typename _Char, typename _InIterT>
      friend class time_put;
      template<typename _Char, typename _InIterT>
      friend class money_put;

    private:
      explicit
      _Numeric_get() { }

      virtual
      ~_Numeric_get() { }

      iter_type
      _M_get_digits(iter_type __in, iter_type __end) const;
    };

  template<typename _CharT, typename _InIter>
    class num_get : public locale::facet
    {
    public:

      typedef _CharT char_type;
      typedef _InIter iter_type;
      typedef char_traits<_CharT> __traits_type;

      static locale::id id;

      explicit
      num_get(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, bool& __v) const
      { return do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, short& __v) const
      { return do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, int& __v) const
      { return do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, long& __v) const
      { return do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, long long& __v) const
      { return do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned short& __v) const
      { return do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned int& __v) const
      { return do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned long& __v) const
      { return do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, unsigned long long& __v) const
      { return do_get(__in, __end, __io, __err, __v); }


      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, float& __v) const
      { return do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, double& __v) const
      { return do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, long double& __v) const
      { return do_get(__in, __end, __io, __err, __v); }

      iter_type
      get(iter_type __in, iter_type __end, ios_base& __io,
          ios_base::iostate& __err, void*& __v) const
      { return do_get(__in, __end, __io, __err, __v); }

    protected:
      virtual ~num_get() { }





      void
      _M_extract(iter_type __beg, iter_type __end, ios_base& __io,
                 ios_base::iostate& __err, char* __xtrc,
                 int& __base, bool __fp = true) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;


      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, short&) const;
      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, int&) const;

      virtual iter_type
      do_get (iter_type, iter_type, ios_base&, ios_base::iostate&, long&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             long long&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
              unsigned short&) const;
      virtual iter_type
      do_get(iter_type, iter_type, ios_base&,
              ios_base::iostate& __err, unsigned int&) const;
      virtual iter_type
      do_get(iter_type, iter_type, ios_base&,
              ios_base::iostate& __err, unsigned long&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&,
             ios_base::iostate& __err, unsigned long long&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             float&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             double&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&,
             ios_base::iostate& __err, long double&) const;

      virtual iter_type
      do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
             void*&) const;
    };

  template<typename _CharT, typename _InIter>
    locale::id num_get<_CharT, _InIter>::id;


  template<>
    void
    num_get<char, istreambuf_iterator<char> >::
    _M_extract(istreambuf_iterator<char> __beg,
               istreambuf_iterator<char> __end, ios_base& __io,
               ios_base::iostate& __err, char* __xtrc,
               int& __base, bool __fp) const;



  template<typename _CharT, typename _OutIter>
    class _Numeric_put
    {
    public:
      typedef _CharT char_type;
      typedef _OutIter iter_type;
    protected:
      explicit
      _Numeric_put() { }

      virtual
      ~_Numeric_put() { }
    };

  template<typename _CharT, typename _OutIter>
    class num_put : public locale::facet
    {
    public:

      typedef _CharT char_type;
      typedef _OutIter iter_type;

      static locale::id id;

      explicit
      num_put(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, bool __v) const
      { return do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, long __v) const
      { return do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          unsigned long __v) const
      { return do_put(__s, __f, __fill, __v); }


      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, long long __v) const
      { return do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          unsigned long long __v) const
      { return do_put(__s, __f, __fill, __v); }


      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill, double __v) const
      { return do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          long double __v) const
      { return do_put(__s, __f, __fill, __v); }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          const void* __v) const
      { return do_put(__s, __f, __fill, __v); }

    protected:
      virtual
      ~num_put() { };

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, bool __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, long __v) const;


      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, long long __v) const;


      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, unsigned long) const;


      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, unsigned long long) const;


      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, double __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, long double __v) const;

      virtual iter_type
      do_put(iter_type, ios_base&, char_type __fill, const void* __v) const;
    };

  template <typename _CharT, typename _OutIter>
    locale::id num_put<_CharT, _OutIter>::id;

  template<typename _CharT>
    class numpunct : public locale::facet
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

    private:
      char_type _M_decimal_point;
      char_type _M_thousands_sep;
      string _M_grouping;
      string_type _M_truename;
      string_type _M_falsename;

    public:
      explicit
      numpunct(size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_numpunct(); }

      explicit
      numpunct(__c_locale __cloc, size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_numpunct(__cloc); }

      char_type
      decimal_point() const
      { return do_decimal_point(); }

      char_type
      thousands_sep() const
      { return do_thousands_sep(); }

      string
      grouping() const
      { return do_grouping(); }

      string_type
      truename() const
      { return do_truename(); }

      string_type
      falsename() const
      { return do_falsename(); }

    protected:
      virtual
      ~numpunct() { }

      virtual char_type
      do_decimal_point() const
      { return _M_decimal_point; }

      virtual char_type
      do_thousands_sep() const
      { return _M_thousands_sep; }

      virtual string
      do_grouping() const
      { return _M_grouping; }

      virtual string_type
      do_truename() const
      { return _M_truename; }

      virtual string_type
      do_falsename() const
      { return _M_falsename; }


      void
      _M_initialize_numpunct(__c_locale __cloc = __null);
    };

  template<typename _CharT>
    locale::id numpunct<_CharT>::id;

  template<typename _CharT>
    void
    numpunct<_CharT>::_M_initialize_numpunct(__c_locale )
    {

    }

  template<>
    void
    numpunct<char>::_M_initialize_numpunct(__c_locale __cloc);

  template<>
    void
    numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc);



  template<typename _CharT>
    class numpunct_byname : public numpunct<_CharT>
    {
      __c_locale _M_c_locale_numpunct;
    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      explicit
      numpunct_byname(const char* __s, size_t __refs = 0)
      : numpunct<_CharT>(__refs)
      {
        _S_create_c_locale(_M_c_locale_numpunct, __s);
        _M_initialize_numpunct(_M_c_locale_numpunct);
      }

    protected:
      virtual
      ~numpunct_byname()
      { _S_destroy_c_locale(_M_c_locale_numpunct); }
    };


  template<typename _CharT>
    class collate : public locale::facet
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

      explicit
      collate(size_t __refs = 0) : locale::facet(__refs) { }

      int
      compare(const _CharT* __lo1, const _CharT* __hi1,
              const _CharT* __lo2, const _CharT* __hi2) const
      { return this->do_compare(__lo1, __hi1, __lo2, __hi2); }

      string_type
      transform(const _CharT* __lo, const _CharT* __hi) const
      { return this->do_transform(__lo, __hi); }

      long
      hash(const _CharT* __lo, const _CharT* __hi) const
      { return this->do_hash(__lo, __hi); }

  protected:
      ~collate() { }

      virtual int
      do_compare(const _CharT* __lo1, const _CharT* __hi1,
                 const _CharT* __lo2, const _CharT* __hi2) const;

      virtual string_type
      do_transform(const _CharT* __lo, const _CharT* __hi) const;

      virtual long
      do_hash(const _CharT* __lo, const _CharT* __hi) const;
    };

  template<typename _CharT>
    locale::id collate<_CharT>::id;


  template<>
    int
    collate<char>::do_compare(const char* __lo1, const char* __hi1,
                              const char* __lo2, const char* __hi2) const;

  template<>
    string
    collate<char>::do_transform(const char* __lo, const char* __hi) const;

  template<>
    long
    collate<char>::do_hash(const char* __lo, const char* __hi) const;

  template<>
    int
    collate<wchar_t>::do_compare(const wchar_t* __lo1, const wchar_t* __hi1,
                                 const wchar_t* __lo2,
                                 const wchar_t* __hi2) const;

  template<>
    wstring
    collate<wchar_t>::do_transform(const wchar_t* __lo,
                                   const wchar_t* __hi) const;

  template<>
    long
    collate<wchar_t>::do_hash(const wchar_t* __lo, const wchar_t* __hi) const;


  template<typename _CharT>
    class collate_byname : public collate<_CharT>
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      explicit
      collate_byname(const char*, size_t __refs = 0);

    protected:
      virtual
      ~collate_byname() { }
    };

  template<>
    collate_byname<char>::collate_byname(const char*, size_t __refs);

  template<>
    collate_byname<wchar_t>::collate_byname(const char*, size_t __refs);


  class time_base
  {
  public:
    enum dateorder { no_order, dmy, mdy, ymd, ydm };
  };

  template<typename _CharT, typename _InIter>
    class time_get : public locale::facet, public time_base
    {
    public:

      typedef _CharT char_type;
      typedef _InIter iter_type;

      static locale::id id;

      explicit
      time_get(size_t __refs = 0)
      : locale::facet (__refs), _M_daynames(0), _M_monthnames(0) { }

      dateorder
      date_order() const
      { return do_date_order(); }

      iter_type
      get_time(iter_type __s, iter_type __end, ios_base& __f,
               ios_base::iostate& __err, tm* __t) const
      { return do_get_time(__s, __end, __f, __err, __t); }

      iter_type
      get_date(iter_type __s, iter_type __end, ios_base& __f,
               ios_base::iostate& __err, tm* __t) const
      { return do_get_date(__s, __end, __f, __err, __t); }

      iter_type
      get_weekday(iter_type __s, iter_type __end, ios_base& __f,
                  ios_base::iostate& __err, tm* __t) const
      { return do_get_weekday(__s,__end,__f,__err,__t); }

      iter_type
      get_monthname(iter_type __s, iter_type __end, ios_base& __f,
                    ios_base::iostate& __err, tm* __t) const
      { return do_get_monthname(__s,__end,__f,__err,__t); }

      iter_type
      get_year(iter_type __s, iter_type __end, ios_base& __f,
               ios_base::iostate& __err, tm* __t) const
      { return do_get_year(__s,__end,__f,__err,__t); }

    protected:
      virtual
      ~time_get()
      {
        delete [] _M_monthnames;
        delete [] _M_daynames;
      }

      virtual dateorder
      do_date_order() const
      { return time_base::ymd; }

      virtual iter_type
      do_get_time(iter_type __s, iter_type , ios_base&,
                  ios_base::iostate& , tm* ) const
      { return __s; }

      virtual iter_type
      do_get_date(iter_type __s, iter_type , ios_base&,
                  ios_base::iostate& , tm* ) const
      { return __s; }

      virtual iter_type
      do_get_weekday(iter_type __s, iter_type __end, ios_base&,
                     ios_base::iostate& __err, tm* __t) const;

      virtual iter_type
      do_get_monthname(iter_type __s, iter_type __end, ios_base&,
                       ios_base::iostate& __err, tm* __t) const;

      virtual iter_type
      do_get_year(iter_type __s, iter_type , ios_base&,
                   ios_base::iostate& , tm* ) const
      { return __s; }

      mutable basic_string<_CharT>* _M_daynames;
      mutable basic_string<_CharT>* _M_monthnames;
    };

  template<typename _CharT, typename _InIter>
    locale::id time_get<_CharT, _InIter>::id;

  template<typename _CharT, typename _InIter>
    class time_get_byname : public time_get<_CharT, _InIter>
    {
    public:
      typedef _CharT char_type;
      typedef _InIter iter_type;

      explicit
      time_get_byname(const char*, size_t __refs = 0)
      : time_get<_CharT, _InIter>(__refs) { }
    protected:
      virtual
      ~time_get_byname() { }
    };

  template<typename _CharT, typename _OutIter>
    class time_put : public locale::facet, public time_base
    {
    public:
      typedef _CharT char_type;
      typedef _OutIter iter_type;

      static locale::id id;

      explicit
      time_put(size_t __refs = 0) : locale::facet (__refs) { }


      iter_type
      put(iter_type __s, ios_base& , char_type ,
          const tm* , const _CharT* ,
          const _CharT* ) const
      { return __s; }

      iter_type
      put(iter_type __s, ios_base& __f, char_type __fill,
          const tm* __tmb, char __format, char __modifier = 0) const
      { return do_put(__s, __f, __fill, __tmb, __format, __modifier); }

    protected:
      virtual
      ~time_put() { }

      virtual iter_type
      do_put(iter_type __s, ios_base&, char_type, const tm* ,
             char , char ) const
      { return __s; }
    };

  template<typename _CharT, typename _OutIter>
    locale::id time_put<_CharT, _OutIter>::id;

  template<typename _CharT, typename _OutIter>
    class time_put_byname : public time_put<_CharT, _OutIter>
    {
    public:
      typedef _CharT char_type;
      typedef _OutIter iter_type;

      explicit
      time_put_byname(const char*, size_t __refs = 0)
      : time_put<_CharT, _OutIter> (__refs) { }

    protected:
      virtual
      ~time_put_byname() { }
    };


  template<typename _CharT, typename _InIter>
    class money_get : public locale::facet
    {
    public:
      typedef _CharT char_type;
      typedef _InIter iter_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

      explicit
      money_get(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      get(iter_type __s, iter_type __end, bool __intl,
          ios_base& __f, ios_base::iostate& __err, long double& __units) const
      { return do_get(__s, __end, __intl, __f, __err, __units); }

      iter_type
      get(iter_type __s, iter_type __end, bool __intl, ios_base& __f,
           ios_base::iostate& __err, string_type& __digits) const
      { return do_get(__s, __end, __intl, __f, __err, __digits); }

    protected:
      virtual
      ~money_get() { }

      virtual iter_type
      do_get(iter_type __s, iter_type , bool ,
             ios_base& , ios_base::iostate& ,
             long double& ) const
      { return __s; }

      virtual iter_type
      do_get(iter_type __s, iter_type , bool ,
             ios_base& , ios_base::iostate& ,
             string_type& ) const
      { return __s; }
    };

  template<typename _CharT, typename _InIter>
    locale::id money_get<_CharT, _InIter>::id;

  template<typename _CharT, typename _OutIter>
    class money_put : public locale::facet
    {
    public:
      typedef _CharT char_type;
      typedef _OutIter iter_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

      explicit
      money_put(size_t __refs = 0) : locale::facet(__refs) { }

      iter_type
      put(iter_type __s, bool __intl, ios_base& __f,
          char_type __fill, long double __units) const
      { return do_put(__s, __intl, __f, __fill, __units); }

      iter_type
      put(iter_type __s, bool __intl, ios_base& __f,
          char_type __fill, const string_type& __digits) const
      { return do_put(__s, __intl, __f, __fill, __digits); }

    protected:
      virtual
      ~money_put() { }

      virtual iter_type
      do_put(iter_type __s, bool, ios_base& , char_type ,
             long double ) const
      { return __s; }

      virtual iter_type
      do_put(iter_type __s, bool, ios_base& , char_type ,
             const string_type& ) const
      { return __s; }
    };

  template<typename _CharT, typename _OutIter>
    locale::id money_put<_CharT, _OutIter>::id;

  struct money_base
  {
    enum part { none, space, symbol, sign, value };
    struct pattern { char field[4]; };

    static const pattern _S_default_pattern;



    static pattern
    _S_construct_pattern(char __preceeds, char __space, char __posn);
  };

  template<typename _CharT, bool _Intl>
    class moneypunct : public locale::facet, public money_base
    {
    public:

      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static const bool intl = _Intl;
      static locale::id id;

    private:
      char_type _M_decimal_point;
      char_type _M_thousands_sep;
      string _M_grouping;
      string_type _M_curr_symbol;
      string_type _M_positive_sign;
      string_type _M_negative_sign;
      int _M_frac_digits;
      pattern _M_pos_format;
      pattern _M_neg_format;

    public:
      explicit
      moneypunct(size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_moneypunct(); }

      explicit
      moneypunct(__c_locale __cloc, size_t __refs = 0) : locale::facet(__refs)
      { _M_initialize_moneypunct(__cloc); }

      char_type
      decimal_point() const
      { return this->do_decimal_point(); }

      char_type
      thousands_sep() const
      { return this->do_thousands_sep(); }

      string
      grouping() const
      { return this->do_grouping(); }

      string_type
      curr_symbol() const
      { return this->do_curr_symbol(); }

      string_type
      positive_sign() const
      { return this->do_positive_sign(); }

      string_type
      negative_sign() const
      { return this->do_negative_sign(); }

      int
      frac_digits() const
      { return this->do_frac_digits(); }

      pattern
      pos_format() const
      { return this->do_pos_format(); }

      pattern
      neg_format() const
      { return this->do_neg_format(); }

    protected:
      virtual
      ~moneypunct() { }

      virtual char_type
      do_decimal_point() const
      { return _M_decimal_point; }

      virtual char_type
      do_thousands_sep() const
      { return _M_thousands_sep; }

      virtual string
      do_grouping() const
      { return _M_grouping; }

      virtual string_type
      do_curr_symbol() const
      { return _M_curr_symbol; }

      virtual string_type
      do_positive_sign() const
      { return _M_positive_sign; }

      virtual string_type
      do_negative_sign() const
      { return _M_negative_sign; }

      virtual int
      do_frac_digits() const
      { return _M_frac_digits; }

      virtual pattern
      do_pos_format() const
      { return _M_pos_format; }

      virtual pattern
      do_neg_format() const
      { return _M_neg_format; }


      void
      _M_initialize_moneypunct(__c_locale __cloc = __null);
    };

  template<typename _CharT, bool _Intl>
    locale::id moneypunct<_CharT, _Intl>::id;

  template<typename _CharT, bool _Intl>
    const bool moneypunct<_CharT, _Intl>::intl;

  template<typename _CharT, bool _Intl>
    void
    moneypunct<_CharT, _Intl>::_M_initialize_moneypunct(__c_locale )
    {

    }

  template<>
    void
    moneypunct<char>::_M_initialize_moneypunct(__c_locale __cloc);

  template<>
    void
    moneypunct<wchar_t>::_M_initialize_moneypunct(__c_locale __cloc);


  template<typename _CharT, bool _Intl>
    class moneypunct_byname : public moneypunct<_CharT, _Intl>
    {
      __c_locale _M_c_locale_moneypunct;
    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static const bool intl = _Intl;

      explicit
      moneypunct_byname(const char* __s, size_t __refs = 0)
      : moneypunct<_CharT, _Intl>(__refs)
      {
        _S_create_c_locale(_M_c_locale_moneypunct, __s);
        _M_initialize_moneypunct(_M_c_locale_moneypunct);
      }

    protected:
      virtual
      ~moneypunct_byname()
      { _S_destroy_c_locale(_M_c_locale_moneypunct); }
    };

  template<typename _CharT, bool _Intl>
    const bool moneypunct_byname<_CharT, _Intl>::intl;


  struct messages_base
  {
    typedef int catalog;
  };

  template<typename _CharT>
    class messages : public locale::facet, public messages_base
    {
    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      static locale::id id;

      explicit
      messages(size_t __refs = 0) : locale::facet(__refs) { }

      catalog
      open(const basic_string<char>& __s, const locale& __loc) const
      { return do_open(__s, __loc); }

      string_type
      get(catalog __c, int __set, int __msgid, const string_type& __s) const
      { return do_get(__c,__set,__msgid,__s); }

      void
      close(catalog __c) const
      { return do_close(__c); }

    protected:
      virtual
      ~messages() { }



      virtual catalog
      do_open(const basic_string<char>&, const locale&) const
      { return 0; }

      virtual string_type
      do_get(catalog, int, int , const string_type& __dfault) const
      { return __dfault; }

      virtual void
      do_close(catalog) const { }
    };

  template<typename _CharT>
    locale::id messages<_CharT>::id;

  template<typename _CharT>
    class messages_byname : public messages<_CharT>
    {
    public:
      typedef _CharT char_type;
      typedef basic_string<_CharT> string_type;

      explicit
      messages_byname(const char*, size_t __refs = 0);

    protected:
      virtual
      ~messages_byname() { }
    };

  template<>
    messages_byname<char>::messages_byname(const char*, size_t __refs);

  template<>
    messages_byname<wchar_t>::messages_byname(const char*, size_t __refs);






  template<typename _CharT>
    inline bool
    isspace(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); }

  template<typename _CharT>
    inline bool
    isprint(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); }

  template<typename _CharT>
    inline bool
    iscntrl(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); }

  template<typename _CharT>
    inline bool
    isupper(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); }

  template<typename _CharT>
    inline bool islower(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); }

  template<typename _CharT>
    inline bool
    isalpha(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); }

  template<typename _CharT>
    inline bool
    isdigit(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); }

  template<typename _CharT>
    inline bool
    ispunct(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); }

  template<typename _CharT>
    inline bool
    isxdigit(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); }

  template<typename _CharT>
    inline bool
    isalnum(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); }

  template<typename _CharT>
    inline bool
    isgraph(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }

  template<typename _CharT>
    inline _CharT
    toupper(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).toupper(__c); }

  template<typename _CharT>
    inline _CharT
    tolower(_CharT __c, const locale& __loc)
    { return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
}
# 37 "/opt/egcs/include/g++-v3/bits/basic_ios.h" 2 3

namespace std
{

  template<typename _CharT, typename _Traits>
    class basic_ios : public ios_base
    {
    public:

      typedef _CharT char_type;
      typedef typename _Traits::int_type int_type;
      typedef typename _Traits::pos_type pos_type;
      typedef typename _Traits::off_type off_type;
      typedef _Traits traits_type;


      typedef ctype<_CharT> __ctype_type;
      typedef ostreambuf_iterator<_CharT, _Traits> __ostreambuf_iter;
      typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
      typedef istreambuf_iterator<_CharT, _Traits> __istreambuf_iter;
      typedef num_get<_CharT, __istreambuf_iter> __numget_type;


    private:
      basic_ostream<_CharT, _Traits>* _M_tie;
      char_type _M_fill;
      iostate _M_exception;

    protected:
      basic_streambuf<_CharT, _Traits>* _M_streambuf;
      iostate _M_streambuf_state;


      const __ctype_type* _M_ios_fctype;

      const __numput_type* _M_fnumput;

      const __numget_type* _M_fnumget;

    public:
      inline const __ctype_type*
      _M_get_fctype_ios(void)
      { return _M_ios_fctype; }

      operator void*() const
      { return this->fail() ? 0 : const_cast<basic_ios*>(this); }

      inline bool
      operator!() const
      { return this->fail(); }

      inline iostate
      rdstate() const
      { return _M_streambuf_state; }

      inline void
      clear(iostate __state = goodbit)
      {
        if (this->rdbuf())
          _M_streambuf_state = __state;
        else
          _M_streambuf_state = __state | badbit;
        if ((this->rdstate() & this->exceptions()))
          __throw_ios_failure("basic_ios::clear(iostate) caused exception");
      }

      inline void
      setstate(iostate __state)
      { this->clear(this->rdstate() | __state); }

      inline bool
      good() const
      { return this->rdstate() == 0; }

      inline bool
      eof() const
      { return (this->rdstate() & eofbit) != 0; }

      inline bool
      fail() const
      { return (this->rdstate() & (badbit | failbit)) != 0; }

      inline bool
      bad() const
      { return (this->rdstate() & badbit) != 0; }

      inline iostate
      exceptions() const
      { return _M_exception; }

      inline void
      exceptions(iostate __except)
      {
        _M_exception = __except;
        this->clear(_M_streambuf_state);
      }


      explicit
      basic_ios(basic_streambuf<_CharT, _Traits>* __sb) : ios_base()
      { this->init(__sb); }

      virtual
      ~basic_ios() { }


      inline basic_ostream<_CharT, _Traits>*
      tie() const
      { return _M_tie; }

      inline basic_ostream<_CharT, _Traits>*
      tie(basic_ostream<_CharT, _Traits>* __tiestr)
      {
        basic_ostream<_CharT, _Traits>* __old = _M_tie;
        _M_tie = __tiestr;
        return __old;
      }

      inline basic_streambuf<_CharT, _Traits>*
      rdbuf() const
      { return _M_streambuf; }

      basic_streambuf<_CharT, _Traits>*
      rdbuf(basic_streambuf<_CharT, _Traits>* __sb);

      basic_ios&
      copyfmt(const basic_ios& __rhs);

      inline char_type
      fill() const
      { return _M_fill; }

      inline char_type
      fill(char_type __ch)
      {
        char_type __old = _M_fill;
        _M_fill = __ch;
        return __old;
      }


      locale
      imbue(const locale& __loc);

      char
      narrow(char_type __c, char __dfault) const;

      char_type
      widen(char __c) const;

    protected:

      basic_ios() : ios_base()
      { }

      void
      init(basic_streambuf<_CharT, _Traits>* __sb);

      bool
      _M_check_facet(const locale::facet* __f)
      {
        bool __ret = false;
        if (__f)
          __ret = true;
        else
          __throw_bad_cast();
        return __ret;
      }

      void
      _M_cache_facets(const locale& __loc);
    };
}



# 1 "/opt/egcs/include/g++-v3/bits/basic_ios.tcc" 1 3
# 33 "/opt/egcs/include/g++-v3/bits/basic_ios.tcc" 3
namespace std
{
  template<typename _CharT, typename _Traits>
    basic_streambuf<_CharT, _Traits>*
    basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
    {
      basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
      _M_streambuf = __sb;
      this->clear();
      return __old;
    }

  template<typename _CharT, typename _Traits>
    basic_ios<_CharT, _Traits>&
    basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
    {




      _Words* __words = (__rhs._M_word_limit <= _S_local_words) ?
        _M_word_array : new _Words[__rhs._M_word_limit];
# 63 "/opt/egcs/include/g++-v3/bits/basic_ios.tcc" 3
      _Callback_list* __cb = __rhs._M_callbacks;
      if (__cb)
        __cb->_M_add_reference();
      _M_call_callbacks(erase_event);
      if (_M_words != _M_word_array)
        delete [] _M_words;
      _M_dispose_callbacks();

      _M_callbacks = __cb;
      for (int __i = 0; __i < __rhs._M_word_limit; ++__i)
        __words[__i] = __rhs._M_words[__i];
      if (_M_words != _M_word_array)
        delete [] _M_words;
      _M_words = __words;
      _M_word_limit = __rhs._M_word_limit;

      this->flags(__rhs.flags());
      this->width(__rhs.width());
      this->precision(__rhs.precision());
      this->tie(__rhs.tie());
      this->fill(__rhs.fill());

      this->exceptions(__rhs.exceptions());

      _M_call_callbacks(copyfmt_event);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    char
    basic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const
    { return _M_ios_fctype->narrow(__c, __dfault); }

  template<typename _CharT, typename _Traits>
    _CharT
    basic_ios<_CharT, _Traits>::widen(char __c) const
    { return _M_ios_fctype->widen(__c); }


  template<typename _CharT, typename _Traits>
    locale
    basic_ios<_CharT, _Traits>::imbue(const locale& __loc)
    {
      locale __old(this->getloc());
      ios_base::imbue(__loc);
      _M_cache_facets(__loc);
      if (this->rdbuf() != 0)
        this->rdbuf()->pubimbue(__loc);
      return __old;
    }

  template<typename _CharT, typename _Traits>
    void
    basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
    {

      ios_base::_M_init();
      _M_cache_facets(_M_ios_locale);
      _M_tie = 0;
      _M_fill = this->widen(' ');
      _M_exception = goodbit;
      _M_streambuf = __sb;
      _M_streambuf_state = __sb ? goodbit : badbit;
    }

  template<typename _CharT, typename _Traits>
    void
    basic_ios<_CharT, _Traits>::_M_cache_facets(const locale& __loc)
    {
      if (has_facet<__ctype_type>(__loc))
        _M_ios_fctype = &use_facet<__ctype_type>(__loc);

      if (has_facet<__numput_type>(__loc))
        _M_fnumput = &use_facet<__numput_type>(__loc);
      if (has_facet<__numget_type>(__loc))
        _M_fnumget = &use_facet<__numget_type>(__loc);
    }
}
# 214 "/opt/egcs/include/g++-v3/bits/basic_ios.h" 2 3
# 47 "/opt/egcs/include/g++-v3/bits/std_ios.h" 2 3
# 40 "/opt/egcs/include/g++-v3/bits/std_ostream.h" 2 3

namespace std
{

  template<typename _CharT, typename _Traits>
    class basic_ostream : virtual public basic_ios<_CharT, _Traits>
    {
    public:


      typedef _CharT char_type;
      typedef typename _Traits::int_type int_type;
      typedef typename _Traits::pos_type pos_type;
      typedef typename _Traits::off_type off_type;
      typedef _Traits traits_type;


      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
      typedef basic_ios<_CharT, _Traits> __ios_type;
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      typedef ostreambuf_iterator<_CharT, _Traits> __ostreambuf_iter;
      typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
      typedef ctype<_CharT> __ctype_type;


      explicit
      basic_ostream(__streambuf_type* __sb)
      { this->init(__sb); }

      virtual
      ~basic_ostream() { }


      class sentry;
      friend class sentry;



      __ostream_type&
      operator<<(__ostream_type& (*__pf)(__ostream_type&));

      __ostream_type&
      operator<<(__ios_type& (*__pf)(__ios_type&));

      __ostream_type&
      operator<<(ios_base& (*__pf) (ios_base&));


      __ostream_type&
      operator<<(long __n);

      __ostream_type&
      operator<<(unsigned long __n);

      __ostream_type&
      operator<<(bool __n);

      __ostream_type&
      operator<<(short __n)
      {
        ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
        if (__fmt & ios_base::oct || __fmt & ios_base::hex)
          return this->operator<<(static_cast<unsigned long>
                                  (static_cast<unsigned short>(__n)));
        else
          return this->operator<<(static_cast<long>(__n));
      }

      __ostream_type&
      operator<<(unsigned short __n)
      { return this->operator<<(static_cast<unsigned long>(__n)); }

      __ostream_type&
      operator<<(int __n)
      {
        ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
        if (__fmt & ios_base::oct || __fmt & ios_base::hex)
          return this->operator<<(static_cast<unsigned long>
                                  (static_cast<unsigned int>(__n)));
        else
          return this->operator<<(static_cast<long>(__n));
      }

      __ostream_type&
      operator<<(unsigned int __n)
      { return this->operator<<(static_cast<unsigned long>(__n)); }


      __ostream_type&
      operator<<(long long __n);

      __ostream_type&
      operator<<(unsigned long long __n);


      __ostream_type&
      operator<<(double __f);

      __ostream_type&
      operator<<(float __f)
      { return this->operator<<(static_cast<double>(__f)); }

      __ostream_type&
      operator<<(long double __f);

      __ostream_type&
      operator<<(const void* __p);

      __ostream_type&
      operator<<(__streambuf_type* __sb);


      __ostream_type&
      put(char_type __c);

      __ostream_type&
      write(const char_type* __s, streamsize __n);

      __ostream_type&
      flush();


      pos_type
      tellp();

      __ostream_type&
      seekp(pos_type);

      __ostream_type&
      seekp(off_type, ios_base::seekdir);

    private:


      __ostream_type&
      operator=(const __ostream_type&);

      basic_ostream(const __ostream_type&);

    };


  template <typename _CharT, typename _Traits>
    class basic_ostream<_CharT, _Traits>::sentry
    {

      bool _M_ok;
      basic_ostream<_CharT,_Traits>& _M_os;

    public:
      explicit
      sentry(basic_ostream<_CharT,_Traits>& __os);

      ~sentry()
      {

        if (_M_os.flags() & ios_base::unitbuf && !uncaught_exception())
          {

            if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
              _M_os.setstate(ios_base::badbit);
          }
      }

      operator bool()
      { return _M_ok; }
    };

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c);

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
    { return (__out << __out.widen(__c)); }


  template <class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, char __c);


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
    { return (__out << static_cast<char>(__c)); }

  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
    { return (__out << static_cast<char>(__c)); }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s);

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits> &
    operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, const char* __s);


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
    { return (__out << reinterpret_cast<const char*>(__s)); }

  template<class _Traits>
    basic_ostream<char, _Traits> &
    operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
    { return (__out << reinterpret_cast<const char*>(__s)); }


  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    endl(basic_ostream<_CharT, _Traits>& __os)
    { return flush(__os.put(__os.widen('\n'))); }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    ends(basic_ostream<_CharT, _Traits>& __os)
    { return __os.put(_CharT()); }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    flush(basic_ostream<_CharT, _Traits>& __os)
    { return __os.flush(); }

}




# 1 "/opt/egcs/include/g++-v3/bits/ostream.tcc" 1 3
# 32 "/opt/egcs/include/g++-v3/bits/ostream.tcc" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_locale.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_locale.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/localefwd.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/std_locale.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/locale_facets.h" 1 3
# 41 "/opt/egcs/include/g++-v3/bits/std_locale.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 1 3
# 35 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cerrno.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cerrno.h" 3
# 1 "/usr/include/errno.h" 1 3
# 29 "/usr/include/errno.h" 3
# 1 "/usr/include/features.h" 1 3
# 30 "/usr/include/errno.h" 2 3


extern "C" {



# 1 "/usr/include/bits/errno.h" 1 3
# 25 "/usr/include/bits/errno.h" 3
# 1 "/usr/include/linux/errno.h" 1 3



# 1 "/usr/include/asm/errno.h" 1 3
# 5 "/usr/include/linux/errno.h" 2 3
# 26 "/usr/include/bits/errno.h" 2 3
# 36 "/usr/include/bits/errno.h" 3
extern int errno;


extern int *__errno_location (void) throw () __attribute__ ((__const__));
# 37 "/usr/include/errno.h" 2 3
# 55 "/usr/include/errno.h" 3
extern char *program_invocation_name, *program_invocation_short_name;



}
# 69 "/usr/include/errno.h" 3
typedef int error_t;
# 39 "/opt/egcs/include/g++-v3/bits/std_cerrno.h" 2 3
# 36 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_clocale.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_clocale.h" 3
# 1 "/usr/include/locale.h" 1 3
# 26 "/usr/include/locale.h" 3
# 1 "/usr/include/features.h" 1 3
# 27 "/usr/include/locale.h" 2 3


# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stddef.h" 1 3
# 30 "/usr/include/locale.h" 2 3
# 1 "/usr/include/bits/locale.h" 1 3
# 31 "/usr/include/locale.h" 2 3

extern "C" {
# 52 "/usr/include/locale.h" 3
struct lconv
{


  char *decimal_point;
  char *thousands_sep;





  char *grouping;





  char *int_curr_symbol;
  char *currency_symbol;
  char *mon_decimal_point;
  char *mon_thousands_sep;
  char *mon_grouping;
  char *positive_sign;
  char *negative_sign;
  char int_frac_digits;
  char frac_digits;

  char p_cs_precedes;

  char p_sep_by_space;

  char n_cs_precedes;

  char n_sep_by_space;






  char p_sign_posn;
  char n_sign_posn;


  char int_p_cs_precedes;

  char int_p_sep_by_space;

  char int_n_cs_precedes;

  char int_n_sep_by_space;






  char int_p_sign_posn;
  char int_n_sign_posn;
# 119 "/usr/include/locale.h" 3
};



extern char *setlocale (int __category, __const char *__locale) throw ();


extern struct lconv *localeconv (void) throw ();
# 141 "/usr/include/locale.h" 3
# 1 "/usr/include/xlocale.h" 1 3
# 142 "/usr/include/locale.h" 2 3







extern __locale_t __newlocale (int __category_mask, __const char *__locale,
                               __locale_t __base) throw ();



extern __locale_t __duplocale (__locale_t __dataset) throw ();



extern void __freelocale (__locale_t __dataset) throw ();


}
# 39 "/opt/egcs/include/g++-v3/bits/std_clocale.h" 2 3





namespace std
{
  using ::lconv;
  using ::setlocale;
  using ::localeconv;
}
# 37 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cstdlib.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/std_limits.h" 1 3
# 45 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/std_limits.h" 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/c++config.h" 1 3
# 46 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/std_limits.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cfloat.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_cfloat.h" 3
# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/float.h" 1 3
# 39 "/opt/egcs/include/g++-v3/bits/std_cfloat.h" 2 3
# 47 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/std_limits.h" 2 3

namespace std
{
  enum float_round_style
  {
    round_indeterminate = -1,
    round_toward_zero = 0,
    round_to_nearest = 1,
    round_toward_infinity = 2,
    round_toward_neg_infinity = 3
  };

  enum float_denorm_style
  {
    denorm_indeterminate = -1,
    denorm_absent = 0,
    denorm_present = 1
  };

  template<typename _Tp>
    struct numeric_limits
    {
      static const bool is_specialized = false;

      static _Tp min() throw() { return static_cast<_Tp>(0); }
      static _Tp max() throw() { return static_cast<_Tp>(0); }

      static const int digits = 0;
      static const int digits10 = 0;
      static const bool is_signed = false;
      static const bool is_integer = false;
      static const bool is_exact = false;
      static const int radix = 0;

      static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
      static _Tp round_error() throw() { return static_cast<_Tp>(0); }

      static const int min_exponent = 0;
      static const int min_exponent10 = 0;
      static const int max_exponent = 0;
      static const int max_exponent10 = 0;

      static const bool has_infinity = false;
      static const bool has_quiet_NaN = false;
      static const bool has_signaling_NaN = false;
      static const float_denorm_style has_denorm = denorm_absent;
      static const bool has_denorm_loss = false;

      static _Tp infinity() throw() { return static_cast<_Tp>(0); }
      static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
      static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
      static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }

      static const bool is_iec559 = false;
      static const bool is_bounded = false;
      static const bool is_modulo = false;

      static const bool traps = false;
      static const bool tinyness_before = false;
      static const float_round_style round_style = round_toward_zero;
    };

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::is_specialized;

  template<typename _Tp>
    const int
    numeric_limits<_Tp>::digits;

  template<typename _Tp>
    const int
    numeric_limits<_Tp>::digits10;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::is_signed;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::is_integer;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::is_exact;

  template<typename _Tp>
    const int
    numeric_limits<_Tp>::radix;

  template<typename _Tp>
    const int
    numeric_limits<_Tp>::min_exponent;

  template<typename _Tp>
    const int
    numeric_limits<_Tp>::min_exponent10;

  template<typename _Tp>
    const int
    numeric_limits<_Tp>::max_exponent;

  template<typename _Tp>
    const int
    numeric_limits<_Tp>::max_exponent10;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::has_infinity;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::has_quiet_NaN;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::has_signaling_NaN;

  template<typename _Tp>
    const float_denorm_style
    numeric_limits<_Tp>::has_denorm;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::has_denorm_loss;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::is_iec559;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::is_bounded;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::is_modulo;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::traps;

  template<typename _Tp>
    const bool
    numeric_limits<_Tp>::tinyness_before;

  template<typename _Tp>
    const float_round_style
    numeric_limits<_Tp>::round_style;

  template<typename _Tp> _Tp __limits_infinity();
  template<typename _Tp> _Tp __limits_quiet_NaN();
  template<typename _Tp> _Tp __limits_signaling_NaN();
  template<typename _Tp> _Tp __limits_denorm_min();

    template<> struct numeric_limits<bool> {
        static const bool is_specialized = true;

        static bool min() throw()
        { return false; }
        static bool max() throw()
        { return true; }

        static const int digits = 8;
        static const int digits10 = 2;
        static const bool is_signed = false;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static bool epsilon() throw()
        { return 0; }
        static bool round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static bool infinity() throw()
        { return static_cast<bool>(0); }
        static bool quiet_NaN() throw()
        { return static_cast<bool>(0); }
        static bool signaling_NaN() throw()
        { return static_cast<bool>(0); }
        static bool denorm_min() throw()
        { return static_cast<bool>(0); }

        static const bool is_iec559 = true;
        static const bool is_bounded = true;
        static const bool is_modulo = true;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<char> {
        static const bool is_specialized = true;

        static char min() throw()
        { return (-128); }
        static char max() throw()
        { return 127; }

        static const int digits = 7;
        static const int digits10 = 2;
        static const bool is_signed = true;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static char epsilon() throw()
        { return 0; }
        static char round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static char infinity() throw()
        { return static_cast<char>(0); }
        static char quiet_NaN() throw()
        { return static_cast<char>(0); }
        static char signaling_NaN() throw()
        { return static_cast<char>(0); }
        static char denorm_min() throw()
        { return static_cast<char>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<signed char> {
        static const bool is_specialized = true;

        static signed char min() throw()
        { return (-128); }
        static signed char max() throw()
        { return 127; }

        static const int digits = 7;
        static const int digits10 = 2;
        static const bool is_signed = true;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static signed char epsilon() throw()
        { return 0; }
        static signed char round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static signed char infinity() throw()
        { return static_cast<signed char>(0); }
        static signed char quiet_NaN() throw()
        { return static_cast<signed char>(0); }
        static signed char signaling_NaN() throw()
        { return static_cast<signed char>(0); }
        static signed char denorm_min() throw()
        { return static_cast<signed char>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<unsigned char> {
        static const bool is_specialized = true;

        static unsigned char min() throw()
        { return 0; }
        static unsigned char max() throw()
        { return 255; }

        static const int digits = 8;
        static const int digits10 = 2;
        static const bool is_signed = false;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static unsigned char epsilon() throw()
        { return 0; }
        static unsigned char round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static unsigned char infinity() throw()
        { return static_cast<unsigned char>(0); }
        static unsigned char quiet_NaN() throw()
        { return static_cast<unsigned char>(0); }
        static unsigned char signaling_NaN() throw()
        { return static_cast<unsigned char>(0); }
        static unsigned char denorm_min() throw()
        { return static_cast<unsigned char>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = true;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<wchar_t> {
        static const bool is_specialized = true;

        static wchar_t min() throw()
        { return (-2147483647l - 1l); }
        static wchar_t max() throw()
        { return (2147483647l); }

        static const int digits = 31;
        static const int digits10 = 9;
        static const bool is_signed = true;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static wchar_t epsilon() throw()
        { return 0; }
        static wchar_t round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static wchar_t infinity() throw()
        { return static_cast<wchar_t>(0); }
        static wchar_t quiet_NaN() throw()
        { return static_cast<wchar_t>(0); }
        static wchar_t signaling_NaN() throw()
        { return static_cast<wchar_t>(0); }
        static wchar_t denorm_min() throw()
        { return static_cast<wchar_t>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<short> {
        static const bool is_specialized = true;

        static short min() throw()
        { return (-32767-1); }
        static short max() throw()
        { return 32767; }

        static const int digits = 15;
        static const int digits10 = 4;
        static const bool is_signed = true;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static short epsilon() throw()
        { return 0; }
        static short round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static short infinity() throw()
        { return static_cast<short>(0); }
        static short quiet_NaN() throw()
        { return static_cast<short>(0); }
        static short signaling_NaN() throw()
        { return static_cast<short>(0); }
        static short denorm_min() throw()
        { return static_cast<short>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<unsigned short> {
        static const bool is_specialized = true;

        static unsigned short min() throw()
        { return 0; }
        static unsigned short max() throw()
        { return (32767 * 2 + 1); }

        static const int digits = 16;
        static const int digits10 = 4;
        static const bool is_signed = false;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static unsigned short epsilon() throw()
        { return 0; }
        static unsigned short round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static unsigned short infinity() throw()
        { return static_cast<unsigned short>(0); }
        static unsigned short quiet_NaN() throw()
        { return static_cast<unsigned short>(0); }
        static unsigned short signaling_NaN() throw()
        { return static_cast<unsigned short>(0); }
        static unsigned short denorm_min() throw()
        { return static_cast<unsigned short>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = true;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<int> {
        static const bool is_specialized = true;

        static int min() throw()
        { return (-2147483647-1); }
        static int max() throw()
        { return 2147483647; }

        static const int digits = 31;
        static const int digits10 = 9;
        static const bool is_signed = true;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static int epsilon() throw()
        { return 0; }
        static int round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static int infinity() throw()
        { return static_cast<int>(0); }
        static int quiet_NaN() throw()
        { return static_cast<int>(0); }
        static int signaling_NaN() throw()
        { return static_cast<int>(0); }
        static int denorm_min() throw()
        { return static_cast<int>(0); }

        static const bool is_iec559 = true;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<unsigned int> {
        static const bool is_specialized = true;

        static unsigned int min() throw()
        { return 0; }
        static unsigned int max() throw()
        { return (2147483647 * 2U + 1); }

        static const int digits = 32;
        static const int digits10 = 9;
        static const bool is_signed = false;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static unsigned int epsilon() throw()
        { return 0; }
        static unsigned int round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static unsigned int infinity() throw()
        { return static_cast<unsigned int>(0); }
        static unsigned int quiet_NaN() throw()
        { return static_cast<unsigned int>(0); }
        static unsigned int signaling_NaN() throw()
        { return static_cast<unsigned int>(0); }
        static unsigned int denorm_min() throw()
        { return static_cast<unsigned int>(0); }

        static const bool is_iec559 = true;
        static const bool is_bounded = true;
        static const bool is_modulo = true;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<long> {
        static const bool is_specialized = true;

        static long min() throw()
        { return (-2147483647L-1); }
        static long max() throw()
        { return 2147483647L; }

        static const int digits = 31;
        static const int digits10 = 9;
        static const bool is_signed = true;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static long epsilon() throw()
        { return 0; }
        static long round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static long infinity() throw()
        { return static_cast<long>(0); }
        static long quiet_NaN() throw()
        { return static_cast<long>(0); }
        static long signaling_NaN() throw()
        { return static_cast<long>(0); }
        static long denorm_min() throw()
        { return static_cast<long>(0); }

        static const bool is_iec559 = true;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<unsigned long> {
        static const bool is_specialized = true;

        static unsigned long min() throw()
        { return 0; }
        static unsigned long max() throw()
        { return (2147483647L * 2UL + 1); }

        static const int digits = 32;
        static const int digits10 = 9;
        static const bool is_signed = false;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static unsigned long epsilon() throw()
        { return 0; }
        static unsigned long round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static unsigned long infinity() throw()
        { return static_cast<unsigned long>(0); }
        static unsigned long quiet_NaN() throw()
        { return static_cast<unsigned long>(0); }
        static unsigned long signaling_NaN() throw()
        { return static_cast<unsigned long>(0); }
        static unsigned long denorm_min() throw()
        { return static_cast<unsigned long>(0); }

        static const bool is_iec559 = true;
        static const bool is_bounded = true;
        static const bool is_modulo = true;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<long long> {
        static const bool is_specialized = true;

        static long long min() throw()
        { return (-9223372036854775807LL-1); }
        static long long max() throw()
        { return 9223372036854775807LL; }

        static const int digits = 63;
        static const int digits10 = 18;
        static const bool is_signed = true;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static long long epsilon() throw()
        { return 0; }
        static long long round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static long long infinity() throw()
        { return static_cast<long long>(0); }
        static long long quiet_NaN() throw()
        { return static_cast<long long>(0); }
        static long long signaling_NaN() throw()
        { return static_cast<long long>(0); }
        static long long denorm_min() throw()
        { return static_cast<long long>(0); }

        static const bool is_iec559 = true;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<unsigned long long> {
        static const bool is_specialized = true;

        static unsigned long long min() throw()
        { return 0; }
        static unsigned long long max() throw()
        { return (9223372036854775807LL * 2ULL + 1); }

        static const int digits = 64;
        static const int digits10 = 19;
        static const bool is_signed = false;
        static const bool is_integer = true;
        static const bool is_exact = true;
        static const int radix = 2;
        static unsigned long long epsilon() throw()
        { return 0; }
        static unsigned long long round_error() throw()
        { return 0; }

        static const int min_exponent = 0;
        static const int min_exponent10 = 0;
        static const int max_exponent = 0;
        static const int max_exponent10 = 0;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static unsigned long long infinity() throw()
        { return static_cast<unsigned long long>(0); }
        static unsigned long long quiet_NaN() throw()
        { return static_cast<unsigned long long>(0); }
        static unsigned long long signaling_NaN() throw()
        { return static_cast<unsigned long long>(0); }
        static unsigned long long denorm_min() throw()
        { return static_cast<unsigned long long>(0); }

        static const bool is_iec559 = true;
        static const bool is_bounded = true;
        static const bool is_modulo = true;

        static const bool traps = true;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<float> {
        static const bool is_specialized = true;

        static float min() throw()
        { return 1.17549435e-38F; }
        static float max() throw()
        { return 3.40282347e+38F; }

        static const int digits = 24;
        static const int digits10 = 7;
        static const bool is_signed = true;
        static const bool is_integer = false;
        static const bool is_exact = false;
        static const int radix = 2;
        static float epsilon() throw()
        { return 1.19209290e-07F; }
        static float round_error() throw()
        { return 1.0f; }

        static const int min_exponent = -125;
        static const int min_exponent10 = -37;
        static const int max_exponent = 128;
        static const int max_exponent10 = 38;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static float infinity() throw()
        { return static_cast<float>(0); }
        static float quiet_NaN() throw()
        { return static_cast<float>(0); }
        static float signaling_NaN() throw()
        { return static_cast<float>(0); }
        static float denorm_min() throw()
        { return static_cast<float>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = false;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<double> {
        static const bool is_specialized = true;

        static double min() throw()
        { return 2.2250738585072014e-308; }
        static double max() throw()
        { return 1.7976931348623157e+308; }

        static const int digits = 53;
        static const int digits10 = 15;
        static const bool is_signed = true;
        static const bool is_integer = false;
        static const bool is_exact = false;
        static const int radix = 2;
        static double epsilon() throw()
        { return 2.2204460492503131e-16; }
        static double round_error() throw()
        { return 1.0; }

        static const int min_exponent = -1021;
        static const int min_exponent10 = -307;
        static const int max_exponent = 1024;
        static const int max_exponent10 = 308;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static double infinity() throw()
        { return static_cast<double>(0); }
        static double quiet_NaN() throw()
        { return static_cast<double>(0); }
        static double signaling_NaN() throw()
        { return static_cast<double>(0); }
        static double denorm_min() throw()
        { return static_cast<double>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = false;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

    template<> struct numeric_limits<long double> {
        static const bool is_specialized = true;

        static long double min() throw()
        { return 3.36210314311209350626e-4932L; }
        static long double max() throw()
        { return 1.18973149535723176502e+4932L; }

        static const int digits = 64;
        static const int digits10 = 19;
        static const bool is_signed = true;
        static const bool is_integer = false;
        static const bool is_exact = false;
        static const int radix = 2;
        static long double epsilon() throw()
        { return 1.08420217248550443401e-19L; }
        static long double round_error() throw()
        { return 1.0L; }

        static const int min_exponent = -16381;
        static const int min_exponent10 = -4931;
        static const int max_exponent = 16384;
        static const int max_exponent10 = 4932;

        static const bool has_infinity = false;
        static const bool has_quiet_NaN = false;
        static const bool has_signaling_NaN = false;
        static const float_denorm_style has_denorm = denorm_absent;
        static const bool has_denorm_loss = false;

        static long double infinity() throw()
        { return static_cast<long double>(0); }
        static long double quiet_NaN() throw()
        { return static_cast<long double>(0); }
        static long double signaling_NaN() throw()
        { return static_cast<long double>(0); }
        static long double denorm_min() throw()
        { return static_cast<long double>(0); }

        static const bool is_iec559 = false;
        static const bool is_bounded = true;
        static const bool is_modulo = false;

        static const bool traps = false;
        static const bool tinyness_before = false;
        static const float_round_style round_style = round_toward_zero;
    };

}
# 39 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_memory.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/streambuf_iterator.h" 1 3
# 41 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_cctype.h" 1 3
# 42 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/typeinfo" 1 3
# 37 "/opt/egcs/include/g++-v3/typeinfo" 3
# 1 "/opt/egcs/include/g++-v3/exception" 1 3
# 38 "/opt/egcs/include/g++-v3/typeinfo" 2 3

extern "C++" {

namespace __cxxabiv1
{
  class __class_type_info;
}
# 54 "/opt/egcs/include/g++-v3/typeinfo" 3
namespace std
{



  class type_info
  {
  public:




    virtual ~type_info();

  private:

    type_info& operator=(const type_info&);
    type_info(const type_info&);

  protected:
    const char *__name;

  protected:
    explicit type_info(const char *__n): __name(__n) { }

  public:



    const char* name() const
    { return __name; }
# 97 "/opt/egcs/include/g++-v3/typeinfo" 3
    bool before(const type_info& __arg) const
    { return __name < __arg.__name; }
    bool operator==(const type_info& __arg) const
    { return __name == __arg.__name; }

    bool operator!=(const type_info& __arg) const
    { return !operator==(__arg); }


  public:

    virtual bool __is_pointer_p() const;

    virtual bool __is_function_p() const;







    virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
                            unsigned __outer) const;


    virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
                             void **__obj_ptr) const;
  };



  class bad_cast : public exception
  {
  public:
    bad_cast() throw() { }
    virtual ~bad_cast() throw();
  };


  class bad_typeid : public exception
  {
  public:
    bad_typeid () throw() { }
    virtual ~bad_typeid () throw();
  };
}

}
# 43 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_vector.h" 1 3
# 60 "/opt/egcs/include/g++-v3/bits/std_vector.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/functexcept.h" 3
# 1 "/opt/egcs/include/g++-v3/exception_defines.h" 1 3
# 35 "/opt/egcs/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 62 "/opt/egcs/include/g++-v3/bits/std_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_algobase.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/std_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_alloc.h" 1 3
# 64 "/opt/egcs/include/g++-v3/bits/std_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_construct.h" 1 3
# 65 "/opt/egcs/include/g++-v3/bits/std_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_uninitialized.h" 1 3
# 66 "/opt/egcs/include/g++-v3/bits/std_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_vector.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_vector.h" 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_iterator_base_funcs.h" 1 3
# 64 "/opt/egcs/include/g++-v3/bits/stl_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/functexcept.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/functexcept.h" 3
# 1 "/opt/egcs/include/g++-v3/exception_defines.h" 1 3
# 35 "/opt/egcs/include/g++-v3/bits/functexcept.h" 2 3

namespace std
{

  void
  __throw_bad_exception(void);


  void
  __throw_bad_alloc(void);


  void
  __throw_bad_cast(void);

  void
  __throw_bad_typeid(void);


  void
  __throw_logic_error(const char* __s);

  void
  __throw_domain_error(const char* __s);

  void
  __throw_invalid_argument(const char* __s);

  void
  __throw_length_error(const char* __s);

  void
  __throw_out_of_range(const char* __s);

  void
  __throw_runtime_error(const char* __s);

  void
  __throw_range_error(const char* __s);

  void
  __throw_overflow_error(const char* __s);

  void
  __throw_underflow_error(const char* __s);


  void
  __throw_ios_failure(const char* __s);
}
# 65 "/opt/egcs/include/g++-v3/bits/stl_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/concept_check.h" 1 3
# 66 "/opt/egcs/include/g++-v3/bits/stl_vector.h" 2 3

namespace std
{
# 77 "/opt/egcs/include/g++-v3/bits/stl_vector.h" 3
template <class _Tp, class _Allocator, bool _IsStatic>
class _Vector_alloc_base {
public:
  typedef typename _Alloc_traits<_Tp, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return _M_data_allocator; }

  _Vector_alloc_base(const allocator_type& __a)
    : _M_data_allocator(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
  {}

protected:
  allocator_type _M_data_allocator;
  _Tp* _M_start;
  _Tp* _M_finish;
  _Tp* _M_end_of_storage;

  _Tp* _M_allocate(size_t __n)
    { return _M_data_allocator.allocate(__n); }
  void _M_deallocate(_Tp* __p, size_t __n)
    { if (__p) _M_data_allocator.deallocate(__p, __n); }
};



template <class _Tp, class _Allocator>
class _Vector_alloc_base<_Tp, _Allocator, true> {
public:
  typedef typename _Alloc_traits<_Tp, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return allocator_type(); }

  _Vector_alloc_base(const allocator_type&)
    : _M_start(0), _M_finish(0), _M_end_of_storage(0)
  {}

protected:
  _Tp* _M_start;
  _Tp* _M_finish;
  _Tp* _M_end_of_storage;

  typedef typename _Alloc_traits<_Tp, _Allocator>::_Alloc_type _Alloc_type;
  _Tp* _M_allocate(size_t __n)
    { return _Alloc_type::allocate(__n); }
  void _M_deallocate(_Tp* __p, size_t __n)
    { _Alloc_type::deallocate(__p, __n);}
};

template <class _Tp, class _Alloc>
struct _Vector_base
  : public _Vector_alloc_base<_Tp, _Alloc,
                              _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
{
  typedef _Vector_alloc_base<_Tp, _Alloc,
                             _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
          _Base;
  typedef typename _Base::allocator_type allocator_type;

  _Vector_base(const allocator_type& __a) : _Base(__a) {}
  _Vector_base(size_t __n, const allocator_type& __a) : _Base(__a) {
    _M_start = _M_allocate(__n);
    _M_finish = _M_start;
    _M_end_of_storage = _M_start + __n;
  }

  ~_Vector_base() { _M_deallocate(_M_start, _M_end_of_storage - _M_start); }
};


template <class _Tp, class _Alloc = allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
{

                                                      ;

private:
  typedef _Vector_base<_Tp, _Alloc> _Base;
  typedef vector<_Tp, _Alloc> vector_type;
public:
  typedef _Tp value_type;
  typedef value_type* pointer;
  typedef const value_type* const_pointer;
  typedef __normal_iterator<pointer, vector_type> iterator;
  typedef __normal_iterator<const_pointer, vector_type> const_iterator;
  typedef value_type& reference;
  typedef const value_type& const_reference;
  typedef size_t size_type;
  typedef ptrdiff_t difference_type;

  typedef typename _Base::allocator_type allocator_type;
  allocator_type get_allocator() const { return _Base::get_allocator(); }

  typedef reverse_iterator<const_iterator> const_reverse_iterator;
  typedef reverse_iterator<iterator> reverse_iterator;

protected:
  using _Base::_M_allocate;
  using _Base::_M_deallocate;
  using _Base::_M_start;
  using _Base::_M_finish;
  using _Base::_M_end_of_storage;

protected:
  void _M_insert_aux(iterator __position, const _Tp& __x);
  void _M_insert_aux(iterator __position);

public:
  iterator begin() { return iterator (_M_start); }
  const_iterator begin() const
    { return const_iterator (_M_start); }
  iterator end() { return iterator (_M_finish); }
  const_iterator end() const { return const_iterator (_M_finish); }

  reverse_iterator rbegin()
    { return reverse_iterator(end()); }
  const_reverse_iterator rbegin() const
    { return const_reverse_iterator(end()); }
  reverse_iterator rend()
    { return reverse_iterator(begin()); }
  const_reverse_iterator rend() const
    { return const_reverse_iterator(begin()); }

  size_type size() const
    { return size_type(end() - begin()); }
  size_type max_size() const
    { return size_type(-1) / sizeof(_Tp); }
  size_type capacity() const
    { return size_type(const_iterator(_M_end_of_storage) - begin()); }
  bool empty() const
    { return begin() == end(); }

  reference operator[](size_type __n) { return *(begin() + __n); }
  const_reference operator[](size_type __n) const { return *(begin() + __n); }

  void _M_range_check(size_type __n) const {
    if (__n >= this->size())
      __throw_out_of_range("vector");
  }

  reference at(size_type __n)
    { _M_range_check(__n); return (*this)[__n]; }
  const_reference at(size_type __n) const
    { _M_range_check(__n); return (*this)[__n]; }

  explicit vector(const allocator_type& __a = allocator_type())
    : _Base(__a) {}

  vector(size_type __n, const _Tp& __value,
         const allocator_type& __a = allocator_type())
    : _Base(__n, __a)
    { _M_finish = uninitialized_fill_n(_M_start, __n, __value); }

  explicit vector(size_type __n)
    : _Base(__n, allocator_type())
    { _M_finish = uninitialized_fill_n(_M_start, __n, _Tp()); }

  vector(const vector<_Tp, _Alloc>& __x)
    : _Base(__x.size(), __x.get_allocator())
    { _M_finish = uninitialized_copy(__x.begin(), __x.end(), _M_start); }


  template <class _InputIterator>
    vector(_InputIterator __first, _InputIterator __last,
           const allocator_type& __a = allocator_type())
        : _Base(__a)
        {
      typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
      _M_initialize_aux(__first, __last, _Integral());
    }

  template <class _Integer>
    void _M_initialize_aux(_Integer __n, _Integer __value, __true_type)
        {
      _M_start = _M_allocate(__n);
      _M_end_of_storage = _M_start + __n;
      _M_finish = uninitialized_fill_n(_M_start, __n, __value);
    }

  template<class _InputIterator>
    void
        _M_initialize_aux(_InputIterator __first, _InputIterator __last, __false_type)
        {
          typedef typename iterator_traits<_InputIterator>::iterator_category _IterCategory;
          _M_range_initialize(__first, __last, _IterCategory());
        }

  ~vector()
  { _Destroy(_M_start, _M_finish); }

  vector<_Tp, _Alloc>& operator=(const vector<_Tp, _Alloc>& __x);
  void reserve(size_type __n) {
    if (capacity() < __n) {
      const size_type __old_size = size();
      pointer __tmp = _M_allocate_and_copy(__n, _M_start, _M_finish);
      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __tmp;
      _M_finish = __tmp + __old_size;
      _M_end_of_storage = _M_start + __n;
    }
  }






  void assign(size_type __n, const _Tp& __val) { _M_fill_assign(__n, __val); }
  void _M_fill_assign(size_type __n, const _Tp& __val);

  template<class _InputIterator>
    void
        assign(_InputIterator __first, _InputIterator __last)
        {
      typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
      _M_assign_dispatch(__first, __last, _Integral());
    }

  template<class _Integer>
    void
        _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
    { _M_fill_assign((size_type) __n, (_Tp) __val); }

  template<class _InputIter>
    void
        _M_assign_dispatch(_InputIter __first, _InputIter __last, __false_type)
    {
          typedef typename iterator_traits<_InputIter>::iterator_category _IterCategory;
          _M_assign_aux(__first, __last, _IterCategory());
        }

  template <class _InputIterator>
  void _M_assign_aux(_InputIterator __first, _InputIterator __last,
                     input_iterator_tag);

  template <class _ForwardIterator>
  void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
                     forward_iterator_tag);

  reference front() { return *begin(); }
  const_reference front() const { return *begin(); }
  reference back() { return *(end() - 1); }
  const_reference back() const { return *(end() - 1); }

  void
  push_back(const _Tp& __x)
  {
    if (_M_finish != _M_end_of_storage) {
      _Construct(_M_finish, __x);
      ++_M_finish;
    }
    else
      _M_insert_aux(end(), __x);
  }

  void
  push_back()
  {
    if (_M_finish != _M_end_of_storage) {
      _Construct(_M_finish);
      ++_M_finish;
    }
    else
      _M_insert_aux(end());
  }

  void
  swap(vector<_Tp, _Alloc>& __x)
  {
    std::swap(_M_start, __x._M_start);
    std::swap(_M_finish, __x._M_finish);
    std::swap(_M_end_of_storage, __x._M_end_of_storage);
  }

  iterator
  insert(iterator __position, const _Tp& __x)
  {
    size_type __n = __position - begin();
    if (_M_finish != _M_end_of_storage && __position == end()) {
      _Construct(_M_finish, __x);
      ++_M_finish;
    }
    else
      _M_insert_aux(iterator(__position), __x);
    return begin() + __n;
  }

  iterator
  insert(iterator __position)
  {
    size_type __n = __position - begin();
    if (_M_finish != _M_end_of_storage && __position == end()) {
      _Construct(_M_finish);
      ++_M_finish;
    }
    else
      _M_insert_aux(iterator(__position));
    return begin() + __n;
  }


  template<class _InputIterator>
    void
        insert(iterator __pos, _InputIterator __first, _InputIterator __last)
        {
      typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
      _M_insert_dispatch(__pos, __first, __last, _Integral());
    }

  template <class _Integer>
    void
        _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, __true_type)
    { _M_fill_insert(__pos, static_cast<size_type>(__n), static_cast<_Tp>(__val)); }

  template<class _InputIterator>
    void
        _M_insert_dispatch(iterator __pos,
                       _InputIterator __first, _InputIterator __last,
                       __false_type)
        {
          typedef typename iterator_traits<_InputIterator>::iterator_category _IterCategory;
      _M_range_insert(__pos, __first, __last, _IterCategory());
    }

  void insert (iterator __pos, size_type __n, const _Tp& __x)
    { _M_fill_insert(__pos, __n, __x); }

  void _M_fill_insert (iterator __pos, size_type __n, const _Tp& __x);

  void pop_back() {
    --_M_finish;
    _Destroy(_M_finish);
  }
  iterator erase(iterator __position) {
    if (__position + 1 != end())
      copy(__position + 1, end(), __position);
    --_M_finish;
    _Destroy(_M_finish);
    return __position;
  }
  iterator erase(iterator __first, iterator __last) {
    iterator __i(copy(__last, end(), __first));
    _Destroy(__i, end());
    _M_finish = _M_finish - (__last - __first);
    return __first;
  }

  void resize(size_type __new_size, const _Tp& __x) {
    if (__new_size < size())
      erase(begin() + __new_size, end());
    else
      insert(end(), __new_size - size(), __x);
  }
  void resize(size_type __new_size) { resize(__new_size, _Tp()); }
  void clear() { erase(begin(), end()); }

protected:

  template <class _ForwardIterator>
  pointer _M_allocate_and_copy(size_type __n, _ForwardIterator __first,
                                               _ForwardIterator __last)
  {
    pointer __result = _M_allocate(__n);
    try {
      uninitialized_copy(__first, __last, __result);
      return __result;
    }
    catch(...) { _M_deallocate(__result, __n); throw; };
  }

  template <class _InputIterator>
  void _M_range_initialize(_InputIterator __first,
                           _InputIterator __last, input_iterator_tag)
  {
    for ( ; __first != __last; ++__first)
      push_back(*__first);
  }


  template <class _ForwardIterator>
  void _M_range_initialize(_ForwardIterator __first,
                           _ForwardIterator __last, forward_iterator_tag)
  {
    size_type __n = 0;
    distance(__first, __last, __n);
    _M_start = _M_allocate(__n);
    _M_end_of_storage = _M_start + __n;
    _M_finish = uninitialized_copy(__first, __last, _M_start);
  }

  template <class _InputIterator>
  void _M_range_insert(iterator __pos,
                       _InputIterator __first, _InputIterator __last,
                       input_iterator_tag);

  template <class _ForwardIterator>
  void _M_range_insert(iterator __pos,
                       _ForwardIterator __first, _ForwardIterator __last,
                       forward_iterator_tag);
};

template <class _Tp, class _Alloc>
inline bool
operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
{
  return __x.size() == __y.size() &&
         equal(__x.begin(), __x.end(), __y.begin());
}

template <class _Tp, class _Alloc>
inline bool
operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
{
  return lexicographical_compare(__x.begin(), __x.end(),
                                 __y.begin(), __y.end());
}

template <class _Tp, class _Alloc>
inline void swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
{
  __x.swap(__y);
}

template <class _Tp, class _Alloc>
inline bool
operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return !(__x == __y);
}

template <class _Tp, class _Alloc>
inline bool
operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return __y < __x;
}

template <class _Tp, class _Alloc>
inline bool
operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return !(__y < __x);
}

template <class _Tp, class _Alloc>
inline bool
operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) {
  return !(__x < __y);
}

template <class _Tp, class _Alloc>
vector<_Tp,_Alloc>&
vector<_Tp,_Alloc>::operator=(const vector<_Tp, _Alloc>& __x)
{
  if (&__x != this) {
    const size_type __xlen = __x.size();
    if (__xlen > capacity()) {
      pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(), __x.end());
      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __tmp;
      _M_end_of_storage = _M_start + __xlen;
    }
    else if (size() >= __xlen) {
      iterator __i(copy(__x.begin(), __x.end(), begin()));
      _Destroy(__i, end());
    }
    else {
      copy(__x.begin(), __x.begin() + size(), _M_start);
      uninitialized_copy(__x.begin() + size(), __x.end(), _M_finish);
    }
    _M_finish = _M_start + __xlen;
  }
  return *this;
}

template <class _Tp, class _Alloc>
void vector<_Tp, _Alloc>::_M_fill_assign(size_t __n, const value_type& __val)
{
  if (__n > capacity()) {
    vector<_Tp, _Alloc> __tmp(__n, __val, get_allocator());
    __tmp.swap(*this);
  }
  else if (__n > size()) {
    fill(begin(), end(), __val);
    _M_finish = uninitialized_fill_n(_M_finish, __n - size(), __val);
  }
  else
    erase(fill_n(begin(), __n, __val), end());
}

template <class _Tp, class _Alloc> template <class _InputIter>
void vector<_Tp, _Alloc>::_M_assign_aux(_InputIter __first, _InputIter __last,
                                        input_iterator_tag) {
  iterator __cur(begin());
  for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
    *__cur = *__first;
  if (__first == __last)
    erase(__cur, end());
  else
    insert(end(), __first, __last);
}

template <class _Tp, class _Alloc> template <class _ForwardIter>
void
vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIter __first, _ForwardIter __last,
                                   forward_iterator_tag) {
  size_type __len = 0;
  distance(__first, __last, __len);

  if (__len > capacity()) {
    pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
    _Destroy(_M_start, _M_finish);
    _M_deallocate(_M_start, _M_end_of_storage - _M_start);
    _M_start = __tmp;
    _M_end_of_storage = _M_finish = _M_start + __len;
  }
  else if (size() >= __len) {
    iterator __new_finish(copy(__first, __last, _M_start));
    _Destroy(__new_finish, end());
    _M_finish = __new_finish.base();
  }
  else {
    _ForwardIter __mid = __first;
    advance(__mid, size());
    copy(__first, __mid, _M_start);
    _M_finish = uninitialized_copy(__mid, __last, _M_finish);
  }
}

template <class _Tp, class _Alloc>
void
vector<_Tp, _Alloc>::_M_insert_aux(iterator __position, const _Tp& __x)
{
  if (_M_finish != _M_end_of_storage) {
    _Construct(_M_finish, *(_M_finish - 1));
    ++_M_finish;
    _Tp __x_copy = __x;
    copy_backward(__position, iterator(_M_finish - 2), iterator(_M_finish- 1));
    *__position = __x_copy;
  }
  else {
    const size_type __old_size = size();
    const size_type __len = __old_size != 0 ? 2 * __old_size : 1;
    iterator __new_start(_M_allocate(__len));
    iterator __new_finish(__new_start);
    try {
      __new_finish = uninitialized_copy(iterator(_M_start), __position,
                                        __new_start);
      _Construct(__new_finish.base(), __x);
      ++__new_finish;
      __new_finish = uninitialized_copy(__position, iterator(_M_finish),
                                        __new_finish);
    }
    catch(...) { (_Destroy(__new_start,__new_finish), _M_deallocate(__new_start.base(),__len)); throw; };

    _Destroy(begin(), end());
    _M_deallocate(_M_start, _M_end_of_storage - _M_start);
    _M_start = __new_start.base();
    _M_finish = __new_finish.base();
    _M_end_of_storage = __new_start.base() + __len;
  }
}

template <class _Tp, class _Alloc>
void
vector<_Tp, _Alloc>::_M_insert_aux(iterator __position)
{
  if (_M_finish != _M_end_of_storage) {
    _Construct(_M_finish, *(_M_finish - 1));
    ++_M_finish;
    copy_backward(__position, iterator(_M_finish - 2),
                  iterator(_M_finish - 1));
    *__position = _Tp();
  }
  else {
    const size_type __old_size = size();
    const size_type __len = __old_size != 0 ? 2 * __old_size : 1;
    pointer __new_start = _M_allocate(__len);
    pointer __new_finish = __new_start;
    try {
      __new_finish = uninitialized_copy(iterator(_M_start), __position,
                                        __new_start);
      _Construct(__new_finish);
      ++__new_finish;
      __new_finish = uninitialized_copy(__position, iterator(_M_finish),
                                        __new_finish);
    }
    catch(...) { (_Destroy(__new_start,__new_finish), _M_deallocate(__new_start,__len)); throw; };

    _Destroy(begin(), end());
    _M_deallocate(_M_start, _M_end_of_storage - _M_start);
    _M_start = __new_start;
    _M_finish = __new_finish;
    _M_end_of_storage = __new_start + __len;
  }
}

template <class _Tp, class _Alloc>
void vector<_Tp, _Alloc>::_M_fill_insert(iterator __position, size_type __n,
                                         const _Tp& __x)
{
  if (__n != 0) {
    if (size_type(_M_end_of_storage - _M_finish) >= __n) {
      _Tp __x_copy = __x;
      const size_type __elems_after = end() - __position;
      iterator __old_finish(_M_finish);
      if (__elems_after > __n) {
        uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
        _M_finish += __n;
        copy_backward(__position, __old_finish - __n, __old_finish);
        fill(__position, __position + __n, __x_copy);
      }
      else {
        uninitialized_fill_n(_M_finish, __n - __elems_after, __x_copy);
        _M_finish += __n - __elems_after;
        uninitialized_copy(__position, __old_finish, _M_finish);
        _M_finish += __elems_after;
        fill(__position, __old_finish, __x_copy);
      }
    }
    else {
      const size_type __old_size = size();
      const size_type __len = __old_size + max(__old_size, __n);
      iterator __new_start(_M_allocate(__len));
      iterator __new_finish(__new_start);
      try {
        __new_finish = uninitialized_copy(begin(), __position, __new_start);
        __new_finish = uninitialized_fill_n(__new_finish, __n, __x);
        __new_finish
          = uninitialized_copy(__position, end(), __new_finish);
      }
      catch(...) { (_Destroy(__new_start,__new_finish), _M_deallocate(__new_start.base(),__len)); throw; };

      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __new_start.base();
      _M_finish = __new_finish.base();
      _M_end_of_storage = __new_start.base() + __len;
    }
  }
}

template <class _Tp, class _Alloc> template <class _InputIterator>
void
vector<_Tp, _Alloc>::_M_range_insert(iterator __pos,
                                     _InputIterator __first,
                                     _InputIterator __last,
                                     input_iterator_tag)
{
  for ( ; __first != __last; ++__first) {
    __pos = insert(__pos, *__first);
    ++__pos;
  }
}

template <class _Tp, class _Alloc> template <class _ForwardIterator>
void
vector<_Tp, _Alloc>::_M_range_insert(iterator __position,
                                     _ForwardIterator __first,
                                     _ForwardIterator __last,
                                     forward_iterator_tag)
{
  if (__first != __last) {
    size_type __n = 0;
    distance(__first, __last, __n);
    if (size_type(_M_end_of_storage - _M_finish) >= __n) {
      const size_type __elems_after = end() - __position;
      iterator __old_finish(_M_finish);
      if (__elems_after > __n) {
        uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
        _M_finish += __n;
        copy_backward(__position, __old_finish - __n, __old_finish);
        copy(__first, __last, __position);
      }
      else {
        _ForwardIterator __mid = __first;
        advance(__mid, __elems_after);
        uninitialized_copy(__mid, __last, _M_finish);
        _M_finish += __n - __elems_after;
        uninitialized_copy(__position, __old_finish, _M_finish);
        _M_finish += __elems_after;
        copy(__first, __mid, __position);
      }
    }
    else {
      const size_type __old_size = size();
      const size_type __len = __old_size + max(__old_size, __n);
      iterator __new_start(_M_allocate(__len));
      iterator __new_finish(__new_start);
      try {
        __new_finish = uninitialized_copy(iterator(_M_start),
                                          __position, __new_start);
        __new_finish = uninitialized_copy(__first, __last, __new_finish);
        __new_finish
          = uninitialized_copy(__position, iterator(_M_finish), __new_finish);
      }
      catch(...) { (_Destroy(__new_start,__new_finish), _M_deallocate(__new_start.base(),__len)); throw; };

      _Destroy(_M_start, _M_finish);
      _M_deallocate(_M_start, _M_end_of_storage - _M_start);
      _M_start = __new_start.base();
      _M_finish = __new_finish.base();
      _M_end_of_storage = __new_start.base() + __len;
    }
  }
}

}
# 67 "/opt/egcs/include/g++-v3/bits/std_vector.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/stl_bvector.h" 1 3
# 63 "/opt/egcs/include/g++-v3/bits/stl_bvector.h" 3
namespace std
{

static const int __WORD_BIT = int(8*sizeof(unsigned int));

struct _Bit_reference {
  unsigned int* _M_p;
  unsigned int _M_mask;
  _Bit_reference(unsigned int* __x, unsigned int __y)
    : _M_p(__x), _M_mask(__y) {}

public:
  _Bit_reference() : _M_p(0), _M_mask(0) {}
  operator bool() const { return !(!(*_M_p & _M_mask)); }
  _Bit_reference& operator=(bool __x)
  {
    if (__x) *_M_p |= _M_mask;
    else *_M_p &= ~_M_mask;
    return *this;
  }
  _Bit_reference& operator=(const _Bit_reference& __x)
    { return *this = bool(__x); }
  bool operator==(const _Bit_reference& __x) const
    { return bool(*this) == bool(__x); }
  bool operator<(const _Bit_reference& __x) const {
    return !bool(*this) && bool(__x);
  }
  void flip() { *_M_p ^= _M_mask; }
};

inline void swap(_Bit_reference __x, _Bit_reference __y)
{
  bool __tmp = __x;
  __x = __y;
  __y = __tmp;
}

struct _Bit_iterator_base : public random_access_iterator<bool, ptrdiff_t>
{
  unsigned int* _M_p;
  unsigned int _M_offset;

  _Bit_iterator_base(unsigned int* __x, unsigned int __y)
    : _M_p(__x), _M_offset(__y) {}

  void _M_bump_up() {
    if (_M_offset++ == __WORD_BIT - 1) {
      _M_offset = 0;
      ++_M_p;
    }
  }
  void _M_bump_down() {
    if (_M_offset-- == 0) {
      _M_offset = __WORD_BIT - 1;
      --_M_p;
    }
  }

  void _M_incr(ptrdiff_t __i) {
    difference_type __n = __i + _M_offset;
    _M_p += __n / __WORD_BIT;
    __n = __n % __WORD_BIT;
    if (__n < 0) {
      _M_offset = (unsigned int) __n + __WORD_BIT;
      --_M_p;
    } else
      _M_offset = (unsigned int) __n;
  }

  bool operator==(const _Bit_iterator_base& __i) const {
    return _M_p == __i._M_p && _M_offset == __i._M_offset;
  }
  bool operator<(const _Bit_iterator_base& __i) const {
    return _M_p < __i._M_p || (_M_p == __i._M_p && _M_offset < __i._M_offset);
  }
  bool operator!=(const _Bit_iterator_base& __i) const {
    return !(*this == __i);
  }
  bool operator>(const _Bit_iterator_base& __i) const {
    return __i < *this;
  }
  bool operator<=(const _Bit_iterator_base& __i) const {
    return !(__i < *this);
  }
  bool operator>=(const _Bit_iterator_base& __i) const {
    return !(*this < __i);
  }
};

inline ptrdiff_t
operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) {
  return __WORD_BIT * (__x._M_p - __y._M_p) + __x._M_offset - __y._M_offset;
}


struct _Bit_iterator : public _Bit_iterator_base
{
  typedef _Bit_reference reference;
  typedef _Bit_reference* pointer;
  typedef _Bit_iterator iterator;

  _Bit_iterator() : _Bit_iterator_base(0, 0) {}
  _Bit_iterator(unsigned int* __x, unsigned int __y)
    : _Bit_iterator_base(__x, __y) {}

  reference operator*() const { return reference(_M_p, 1U << _M_offset); }
  iterator& operator++() {
    _M_bump_up();
    return *this;
  }
  iterator operator++(int) {
    iterator __tmp = *this;
    _M_bump_up();
    return __tmp;
  }
  iterator& operator--() {
    _M_bump_down();
    return *this;
  }
  iterator operator--(int) {
    iterator __tmp = *this;
    _M_bump_down();
    return __tmp;
  }
  iterator& operator+=(difference_type __i) {
    _M_incr(__i);
    return *this;
  }
  iterator& operator-=(difference_type __i) {
    *this += -__i;
    return *this;
  }
  iterator operator+(difference_type __i) const {
    iterator __tmp = *this;
    return __tmp += __i;
  }
  iterator operator-(difference_type __i) const {
    iterator __tmp = *this;
    return __tmp -= __i;
  }

  reference operator[](difference_type __i) { return *(*this + __i); }
};

inline _Bit_iterator
operator+(ptrdiff_t __n, const _Bit_iterator& __x) { return __x + __n; }


struct _Bit_const_iterator : public _Bit_iterator_base
{
  typedef bool reference;
  typedef bool const_reference;
  typedef const bool* pointer;
  typedef _Bit_const_iterator const_iterator;

  _Bit_const_iterator() : _Bit_iterator_base(0, 0) {}
  _Bit_const_iterator(unsigned int* __x, unsigned int __y)
    : _Bit_iterator_base(__x, __y) {}
  _Bit_const_iterator(const _Bit_iterator& __x)
    : _Bit_iterator_base(__x._M_p, __x._M_offset) {}

  const_reference operator*() const {
    return _Bit_reference(_M_p, 1U << _M_offset);
  }
  const_iterator& operator++() {
    _M_bump_up();
    return *this;
  }
  const_iterator operator++(int) {
    const_iterator __tmp = *this;
    _M_bump_up();
    return __tmp;
  }
  const_iterator& operator--() {
    _M_bump_down();
    return *this;
  }
  const_iterator operator--(int) {
    const_iterator __tmp = *this;
    _M_bump_down();
    return __tmp;
  }
  const_iterator& operator+=(difference_type __i) {
    _M_incr(__i);
    return *this;
  }
  const_iterator& operator-=(difference_type __i) {
    *this += -__i;
    return *this;
  }
  const_iterator operator+(difference_type __i) const {
    const_iterator __tmp = *this;
    return __tmp += __i;
  }
  const_iterator operator-(difference_type __i) const {
    const_iterator __tmp = *this;
    return __tmp -= __i;
  }
  const_reference operator[](difference_type __i) {
    return *(*this + __i);
  }
};

inline _Bit_const_iterator
operator+(ptrdiff_t __n, const _Bit_const_iterator& __x) { return __x + __n; }






template <class _Allocator, bool __is_static>
class _Bvector_alloc_base {
public:
  typedef typename _Alloc_traits<bool, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return _M_data_allocator; }

  _Bvector_alloc_base(const allocator_type& __a)
    : _M_data_allocator(__a), _M_start(), _M_finish(), _M_end_of_storage(0) {}

protected:
  unsigned int* _M_bit_alloc(size_t __n)
    { return _M_data_allocator.allocate((__n + __WORD_BIT - 1)/__WORD_BIT); }
  void _M_deallocate() {
    if (_M_start._M_p)
      _M_data_allocator.deallocate(_M_start._M_p,
                                   _M_end_of_storage - _M_start._M_p);
  }

  typename _Alloc_traits<unsigned int, _Allocator>::allocator_type
          _M_data_allocator;
  _Bit_iterator _M_start;
  _Bit_iterator _M_finish;
  unsigned int* _M_end_of_storage;
};


template <class _Allocator>
class _Bvector_alloc_base<_Allocator, true> {
public:
  typedef typename _Alloc_traits<bool, _Allocator>::allocator_type
          allocator_type;
  allocator_type get_allocator() const { return allocator_type(); }

  _Bvector_alloc_base(const allocator_type&)
    : _M_start(), _M_finish(), _M_end_of_storage(0) {}

protected:
  typedef typename _Alloc_traits<unsigned int, _Allocator>::_Alloc_type
          _Alloc_type;

  unsigned int* _M_bit_alloc(size_t __n)
    { return _Alloc_type::allocate((__n + __WORD_BIT - 1)/__WORD_BIT); }
  void _M_deallocate() {
    if (_M_start._M_p)
      _Alloc_type::deallocate(_M_start._M_p,
                              _M_end_of_storage - _M_start._M_p);
  }

  _Bit_iterator _M_start;
  _Bit_iterator _M_finish;
  unsigned int* _M_end_of_storage;
};

template <class _Alloc>
class _Bvector_base
  : public _Bvector_alloc_base<_Alloc,
                               _Alloc_traits<bool, _Alloc>::_S_instanceless>
{
  typedef _Bvector_alloc_base<_Alloc,
                              _Alloc_traits<bool, _Alloc>::_S_instanceless>
          _Base;
public:
  typedef typename _Base::allocator_type allocator_type;

  _Bvector_base(const allocator_type& __a) : _Base(__a) {}
  ~_Bvector_base() { _Base::_M_deallocate(); }
};

}


# 1 "/opt/egcs/include/g++-v3/bits/stl_vector.h" 1 3
# 347 "/opt/egcs/include/g++-v3/bits/stl_bvector.h" 2 3
namespace std
{

template <typename _Alloc>
  class vector<bool, _Alloc> : public _Bvector_base<_Alloc>
  {
  public:
    typedef bool value_type;
    typedef size_t size_type;
    typedef ptrdiff_t difference_type;
    typedef _Bit_reference reference;
    typedef bool const_reference;
    typedef _Bit_reference* pointer;
    typedef const bool* const_pointer;

    typedef _Bit_iterator iterator;
    typedef _Bit_const_iterator const_iterator;

    typedef reverse_iterator<const_iterator> const_reverse_iterator;
    typedef reverse_iterator<iterator> reverse_iterator;

    typedef typename _Bvector_base<_Alloc>::allocator_type allocator_type;
    allocator_type get_allocator() const {
      return _Bvector_base<_Alloc>::get_allocator();
    }

  protected:
    using _Bvector_base<_Alloc>::_M_bit_alloc;
    using _Bvector_base<_Alloc>::_M_deallocate;
    using _Bvector_base<_Alloc>::_M_start;
    using _Bvector_base<_Alloc>::_M_finish;
    using _Bvector_base<_Alloc>::_M_end_of_storage;

  protected:
    void _M_initialize(size_type __n) {
      unsigned int* __q = _M_bit_alloc(__n);
      _M_end_of_storage = __q + (__n + __WORD_BIT - 1)/__WORD_BIT;
      _M_start = iterator(__q, 0);
      _M_finish = _M_start + difference_type(__n);
    }
    void _M_insert_aux(iterator __position, bool __x) {
      if (_M_finish._M_p != _M_end_of_storage) {
        copy_backward(__position, _M_finish, _M_finish + 1);
        *__position = __x;
        ++_M_finish;
      }
      else {
        size_type __len = size() ? 2 * size() : __WORD_BIT;
        unsigned int* __q = _M_bit_alloc(__len);
        iterator __i = copy(begin(), __position, iterator(__q, 0));
        *__i++ = __x;
        _M_finish = copy(__position, end(), __i);
        _M_deallocate();
        _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
        _M_start = iterator(__q, 0);
      }
    }

    template <class _InputIterator>
    void _M_initialize_range(_InputIterator __first, _InputIterator __last,
                             input_iterator_tag) {
      _M_start = iterator();
      _M_finish = iterator();
      _M_end_of_storage = 0;
      for ( ; __first != __last; ++__first)
        push_back(*__first);
    }

    template <class _ForwardIterator>
    void _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
                             forward_iterator_tag) {
      size_type __n = 0;
      distance(__first, __last, __n);
      _M_initialize(__n);
      copy(__first, __last, _M_start);
    }

    template <class _InputIterator>
    void _M_insert_range(iterator __pos,
                         _InputIterator __first, _InputIterator __last,
                         input_iterator_tag) {
      for ( ; __first != __last; ++__first) {
        __pos = insert(__pos, *__first);
        ++__pos;
      }
    }

    template <class _ForwardIterator>
    void _M_insert_range(iterator __position,
                         _ForwardIterator __first, _ForwardIterator __last,
                         forward_iterator_tag) {
      if (__first != __last) {
        size_type __n = 0;
        distance(__first, __last, __n);
        if (capacity() - size() >= __n) {
          copy_backward(__position, end(), _M_finish + difference_type(__n));
          copy(__first, __last, __position);
          _M_finish += difference_type(__n);
        }
        else {
          size_type __len = size() + max(size(), __n);
          unsigned int* __q = _M_bit_alloc(__len);
          iterator __i = copy(begin(), __position, iterator(__q, 0));
          __i = copy(__first, __last, __i);
          _M_finish = copy(__position, end(), __i);
          _M_deallocate();
          _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
          _M_start = iterator(__q, 0);
        }
      }
    }

  public:
    iterator begin() { return _M_start; }
    const_iterator begin() const { return _M_start; }
    iterator end() { return _M_finish; }
    const_iterator end() const { return _M_finish; }

    reverse_iterator rbegin() { return reverse_iterator(end()); }
    const_reverse_iterator rbegin() const {
      return const_reverse_iterator(end());
    }
    reverse_iterator rend() { return reverse_iterator(begin()); }
    const_reverse_iterator rend() const {
      return const_reverse_iterator(begin());
    }

    size_type size() const { return size_type(end() - begin()); }
    size_type max_size() const { return size_type(-1); }
    size_type capacity() const {
      return size_type(const_iterator(_M_end_of_storage, 0) - begin());
    }
    bool empty() const { return begin() == end(); }

    reference operator[](size_type __n)
      { return *(begin() + difference_type(__n)); }
    const_reference operator[](size_type __n) const
      { return *(begin() + difference_type(__n)); }

    void _M_range_check(size_type __n) const {
      if (__n >= this->size())
        __throw_range_error("vector<bool>");
    }

    reference at(size_type __n)
      { _M_range_check(__n); return (*this)[__n]; }
    const_reference at(size_type __n) const
      { _M_range_check(__n); return (*this)[__n]; }

    explicit vector(const allocator_type& __a = allocator_type())
      : _Bvector_base<_Alloc>(__a) {}

    vector(size_type __n, bool __value,
              const allocator_type& __a = allocator_type())
      : _Bvector_base<_Alloc>(__a)
    {
      _M_initialize(__n);
      fill(_M_start._M_p, _M_end_of_storage, __value ? ~0 : 0);
    }

    explicit vector(size_type __n)
      : _Bvector_base<_Alloc>(allocator_type())
    {
      _M_initialize(__n);
      fill(_M_start._M_p, _M_end_of_storage, 0);
    }

    vector(const vector& __x) : _Bvector_base<_Alloc>(__x.get_allocator()) {
      _M_initialize(__x.size());
      copy(__x.begin(), __x.end(), _M_start);
    }



    template <class _Integer>
    void _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) {
      _M_initialize(__n);
      fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
    }

    template <class _InputIterator>
    void _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
                                __false_type) {
      _M_initialize_range(__first, __last, __iterator_category(__first));
    }

    template <class _InputIterator>
    vector(_InputIterator __first, _InputIterator __last,
             const allocator_type& __a = allocator_type())
      : _Bvector_base<_Alloc>(__a)
    {
      typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
      _M_initialize_dispatch(__first, __last, _Integral());
    }

    ~vector() { }

    vector& operator=(const vector& __x) {
      if (&__x == this) return *this;
      if (__x.size() > capacity()) {
        _M_deallocate();
        _M_initialize(__x.size());
      }
      copy(__x.begin(), __x.end(), begin());
      _M_finish = begin() + difference_type(__x.size());
      return *this;
    }






    void _M_fill_assign(size_t __n, bool __x) {
      if (__n > size()) {
        fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
        insert(end(), __n - size(), __x);
      }
      else {
        erase(begin() + __n, end());
        fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
      }
    }

    void assign(size_t __n, bool __x) { _M_fill_assign(__n, __x); }

    template <class _InputIterator>
    void assign(_InputIterator __first, _InputIterator __last) {
      typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
      _M_assign_dispatch(__first, __last, _Integral());
    }

    template <class _Integer>
    void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
      { _M_fill_assign((size_t) __n, (bool) __val); }

    template <class _InputIter>
    void _M_assign_dispatch(_InputIter __first, _InputIter __last, __false_type)
      { _M_assign_aux(__first, __last, __iterator_category(__first)); }

    template <class _InputIterator>
    void _M_assign_aux(_InputIterator __first, _InputIterator __last,
                       input_iterator_tag) {
      iterator __cur = begin();
      for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
        *__cur = *__first;
      if (__first == __last)
        erase(__cur, end());
      else
        insert(end(), __first, __last);
    }

    template <class _ForwardIterator>
    void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
                       forward_iterator_tag) {
      size_type __len = 0;
      distance(__first, __last, __len);
      if (__len < size())
        erase(copy(__first, __last, begin()), end());
      else {
        _ForwardIterator __mid = __first;
        advance(__mid, size());
        copy(__first, __mid, begin());
        insert(end(), __mid, __last);
      }
    }

    void reserve(size_type __n) {
      if (capacity() < __n) {
        unsigned int* __q = _M_bit_alloc(__n);
        _M_finish = copy(begin(), end(), iterator(__q, 0));
        _M_deallocate();
        _M_start = iterator(__q, 0);
        _M_end_of_storage = __q + (__n + __WORD_BIT - 1)/__WORD_BIT;
      }
    }

    reference front() { return *begin(); }
    const_reference front() const { return *begin(); }
    reference back() { return *(end() - 1); }
    const_reference back() const { return *(end() - 1); }
    void push_back(bool __x) {
      if (_M_finish._M_p != _M_end_of_storage)
        *_M_finish++ = __x;
      else
        _M_insert_aux(end(), __x);
    }
    void swap(vector<bool, _Alloc>& __x) {
      std::swap(_M_start, __x._M_start);
      std::swap(_M_finish, __x._M_finish);
      std::swap(_M_end_of_storage, __x._M_end_of_storage);
    }
    iterator insert(iterator __position, bool __x = bool()) {
      difference_type __n = __position - begin();
      if (_M_finish._M_p != _M_end_of_storage && __position == end())
        *_M_finish++ = __x;
      else
        _M_insert_aux(__position, __x);
      return begin() + __n;
    }



    template <class _Integer>
    void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
                            __true_type) {
      _M_fill_insert(__pos, __n, __x);
    }

    template <class _InputIterator>
    void _M_insert_dispatch(iterator __pos,
                            _InputIterator __first, _InputIterator __last,
                            __false_type) {
      _M_insert_range(__pos, __first, __last, __iterator_category(__first));
    }

    template <class _InputIterator>
    void insert(iterator __position,
                _InputIterator __first, _InputIterator __last) {
      typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
      _M_insert_dispatch(__position, __first, __last, _Integral());
    }

    void _M_fill_insert(iterator __position, size_type __n, bool __x) {
      if (__n == 0) return;
      if (capacity() - size() >= __n) {
        copy_backward(__position, end(), _M_finish + difference_type(__n));
        fill(__position, __position + difference_type(__n), __x);
        _M_finish += difference_type(__n);
      }
      else {
        size_type __len = size() + max(size(), __n);
        unsigned int* __q = _M_bit_alloc(__len);
        iterator __i = copy(begin(), __position, iterator(__q, 0));
        fill_n(__i, __n, __x);
        _M_finish = copy(__position, end(), __i + difference_type(__n));
        _M_deallocate();
        _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
        _M_start = iterator(__q, 0);
      }
    }

    void insert(iterator __position, size_type __n, bool __x) {
      _M_fill_insert(__position, __n, __x);
    }

    void pop_back() { --_M_finish; }
    iterator erase(iterator __position) {
      if (__position + 1 != end())
        copy(__position + 1, end(), __position);
        --_M_finish;
      return __position;
    }
    iterator erase(iterator __first, iterator __last) {
      _M_finish = copy(__last, end(), __first);
      return __first;
    }
    void resize(size_type __new_size, bool __x = bool()) {
      if (__new_size < size())
        erase(begin() + difference_type(__new_size), end());
      else
        insert(end(), __new_size - size(), __x);
    }
    void flip() {
      for (unsigned int* __p = _M_start._M_p; __p != _M_end_of_storage; ++__p)
        *__p = ~*__p;
    }

    void clear() { erase(begin(), end()); }
  };


typedef vector<bool, alloc> bit_vector;

}
# 68 "/opt/egcs/include/g++-v3/bits/std_vector.h" 2 3
# 44 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 2 3

namespace std
{
  template<typename _Facet>
    locale
    locale::combine(const locale& __other)
    {
      _Impl* __tmp = new _Impl(*_M_impl, 1);
      __tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
      return locale(__tmp);
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    bool
    locale::operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1,
                       const basic_string<_CharT, _Traits, _Alloc>& __s2) const
    {
      typedef std::collate<_CharT> __collate_type;
      const __collate_type* __fcoll = &use_facet<__collate_type>(*this);
      return (__fcoll->compare(__s1.data(), __s1.data() + __s1.length(),
                               __s2.data(), __s2.data() + __s2.length()) < 0);
    }

  template<typename _Facet>
    const _Facet&
    use_facet(const locale& __loc)
    {
      typedef locale::_Impl::__vec_facet __vec_facet;
      size_t __i = _Facet::id._M_index;
      __vec_facet* __facet = __loc._M_impl->_M_facets;
      const locale::facet* __fp = (*__facet)[__i];
      if (__fp == 0 || __i >= __facet->size())
        __throw_bad_cast();
      return static_cast<const _Facet&>(*__fp);
    }

  template<typename _Facet>
    bool
    has_facet(const locale& __loc) throw()
    {
      typedef locale::_Impl::__vec_facet __vec_facet;
      size_t __i = _Facet::id._M_index;
      __vec_facet* __facet = __loc._M_impl->_M_facets;
      return (__i < __facet->size() && (*__facet)[__i] != 0);
    }







  template<typename _InIter, typename _CharT>
    _InIter
    __match_parallel(_InIter __s, _InIter __end, int __ntargs,
                     const basic_string<_CharT>* __targets,
                     int* __matches, int& __remain, bool& __eof)
    {
      typedef basic_string<_CharT> __string_type;
      __eof = false;
      for (int __ti = 0; __ti < __ntargs; ++__ti)
        __matches[__ti] = __ti;
      __remain = __ntargs;
      size_t __pos = 0;
      do
        {
          int __ti = 0;
          while (__ti < __remain && __pos == __targets[__matches[__ti]].size())
            ++__ti;
          if (__ti == __remain)
            {
              if (__pos == 0) __remain = 0;
              return __s;
            }
          if (__s == __end)
            __eof = true;
          bool __matched = false;
          for (int __ti2 = 0; __ti2 < __remain; )
            {
              const __string_type& __target = __targets[__matches[__ti2]];
              if (__pos < __target.size())
                {
                  if (__eof || __target[__pos] != *__s)
                    {
                      __matches[__ti2] = __matches[--__remain];
                      continue;
                    }
                  __matched = true;
                }
              ++__ti2;
            }
          if (__matched)
            {
              ++__s;
              ++__pos;
            }
          for (int __ti3 = 0; __ti3 < __remain;)
            {
              if (__pos > __targets[__matches[__ti3]].size())
                {
                  __matches[__ti3] = __matches[--__remain];
                  continue;
                }
              ++__ti3;
            }
        }
      while (__remain);
      return __s;
    }

  template<typename _CharT>
    _Format_cache<_CharT>::_Format_cache()
    : _M_valid(true), _M_use_grouping(false)
    { }

  template<>
    _Format_cache<char>::_Format_cache();

  template<>
    _Format_cache<wchar_t>::_Format_cache();

  template<typename _CharT>
    void
    _Format_cache<_CharT>::_M_populate(ios_base& __io)
    {
      locale __loc = __io.getloc ();
      numpunct<_CharT> const& __np = use_facet<numpunct<_CharT> >(__loc);
      _M_truename = __np.truename();
      _M_falsename = __np.falsename();
      _M_thousands_sep = __np.thousands_sep();
      _M_decimal_point = __np.decimal_point();
      _M_grouping = __np.grouping();
      _M_use_grouping = _M_grouping.size() != 0 && _M_grouping.data()[0] != 0;
      _M_valid = true;
    }



  template<typename _CharT>
    void
    _Format_cache<_CharT>::
    _S_callback(ios_base::event __ev, ios_base& __ios, int __ix) throw()
    {
      void*& __p = __ios.pword(__ix);
      switch (__ev)
        {
        case ios_base::erase_event:
          delete static_cast<_Format_cache<_CharT>*>(__p);
          __p = 0;
          break;
        case ios_base::copyfmt_event:

          try
            { __p = new _Format_cache<_CharT>; }
          catch(...)
            { }
          break;
        case ios_base::imbue_event:
          static_cast<_Format_cache<_CharT>*>(__p)->_M_valid = false;
          break;
        }
    }

  template<typename _CharT>
    _Format_cache<_CharT>*
    _Format_cache<_CharT>::_S_get(ios_base& __ios)
    {
      if (!_S_pword_ix)
        _S_pword_ix = ios_base::xalloc();
      void*& __p = __ios.pword(_S_pword_ix);


      if (__p == 0)
        {
          auto_ptr<_Format_cache<_CharT> > __ap(new _Format_cache<_CharT>);
          __ios.register_callback(&_Format_cache<_CharT>::_S_callback,
                                  _S_pword_ix);
          __p = __ap.release();
        }
      _Format_cache<_CharT>* __ncp = static_cast<_Format_cache<_CharT>*>(__p);
      if (!__ncp->_M_valid)
        __ncp->_M_populate(__ios);

      return __ncp;
    }
# 249 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 3
  template<typename _CharT, typename _InIter>
    void
    num_get<_CharT, _InIter>::
    _M_extract(_InIter , _InIter , ios_base& ,
               ios_base::iostate& , char* ,
               int& , bool ) const
    {

    }

  template<>
    void
    num_get<char, istreambuf_iterator<char> >::
    _M_extract(istreambuf_iterator<char> __beg,
               istreambuf_iterator<char> __end, ios_base& __io,
               ios_base::iostate& __err, char* __xtrc, int& __base,
               bool __fp) const;



  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, bool& __v) const
    {

      if (!(__io.flags() & ios_base::boolalpha))
        {






          char __xtrc[32] = {'\0'};
          int __base;
          _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


          char* __sanity;
          (*__errno_location ()) = 0;
          long __l = strtol(__xtrc, &__sanity, __base);
          if (!(__err & ios_base::failbit)
              && __l <= 1
              && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
            __v = __l;
          else
            __err |= ios_base::failbit;
        }


      else
        {
          typedef _Format_cache<char_type> __fcache_type;
          __fcache_type* __fmt = __fcache_type::_S_get(__io);
          const char_type* __true = __fmt->_M_truename.c_str();
          const char_type* __false = __fmt->_M_falsename.c_str();
          const size_t __truelen = __traits_type::length(__true) - 1;
          const size_t __falselen = __traits_type::length(__false) - 1;

          for (size_t __pos = 0; __beg != __end; ++__pos)
            {
              char_type __c = *__beg++;
              bool __testf = __c == __false[__pos];
              bool __testt = __c == __true[__pos];
              if (!(__testf || __testt))
                {
                  __err |= ios_base::failbit;
                  break;
                }
              else if (__testf && __pos == __falselen)
                {
                  __v = 0;
                  break;
                }
              else if (__testt && __pos == __truelen)
                {
                  __v = 1;
                  break;
                }
            }
          if (__beg == __end)
            __err |= ios_base::eofbit;
        }

      return __beg;
    }



  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, short& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      long __l = strtol(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0
          && __l >= (-32767 -1) && __l <= 32767)
        __v = static_cast<short>(__l);
      else
        __err |= ios_base::failbit;

      return __beg;
    }

  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, int& __v) const
    {



      char __xtrc[32] = {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      long __l = strtol(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0
          && __l >= (-2147483647 -1) && __l <= 2147483647)
        __v = static_cast<int>(__l);
      else
        __err |= ios_base::failbit;

      return __beg;
    }


  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, long& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      long __l = strtol(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __l;
      else
        __err |= ios_base::failbit;

      return __beg;
    }


  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, long long& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      long long __ll = strtoll(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __ll;
      else
        __err |= ios_base::failbit;

      return __beg;
    }


  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned short& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      unsigned long __ul = strtoul(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0
          && __ul <= (32767 * 2 + 1))
        __v = static_cast<unsigned short>(__ul);
      else
        __err |= ios_base::failbit;

      return __beg;
    }

  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned int& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      unsigned long __ul = strtoul(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0
          && __ul <= (2147483647 * 2U + 1))
        __v = static_cast<unsigned int>(__ul);
      else
        __err |= ios_base::failbit;

      return __beg;
    }

  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned long& __v) const
    {



      char __xtrc[32] = {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      unsigned long __ul = strtoul(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __ul;
      else
        __err |= ios_base::failbit;

      return __beg;
    }


  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, unsigned long long& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      unsigned long long __ull = strtoull(__xtrc, &__sanity, __base);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __ull;
      else
        __err |= ios_base::failbit;

      return __beg;
    }


  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, float& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, true);


      char* __sanity;
      (*__errno_location ()) = 0;

      float __f = strtof(__xtrc, &__sanity);



      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __f;
      else
        __err |= ios_base::failbit;

      return __beg;
    }

  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, double& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, true);


      char* __sanity;
      (*__errno_location ()) = 0;
      double __d = strtod(__xtrc, &__sanity);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __d;
      else
        __err |= ios_base::failbit;

      return __beg;
    }


  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, long double& __v) const
    {



      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, true);


      char* __sanity;
      (*__errno_location ()) = 0;
      long double __ld = strtold(__xtrc, &__sanity);
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __ld;
      else
        __err |= ios_base::failbit;

      return __beg;
    }
# 677 "/opt/egcs/include/g++-v3/bits/locale_facets.tcc" 3
  template<typename _CharT, typename _InIter>
    _InIter
    num_get<_CharT, _InIter>::
    do_get(iter_type __beg, iter_type __end, ios_base& __io,
           ios_base::iostate& __err, void*& __v) const
    {

      typedef ios_base::fmtflags fmtflags;
      fmtflags __fmt = __io.flags();
      fmtflags __fmtmask = ~(ios_base::showpos | ios_base::basefield
                             | ios_base::uppercase | ios_base::internal);
      __io.flags(__fmt & __fmtmask | (ios_base::hex | ios_base::showbase));




      char __xtrc[32]= {'\0'};
      int __base;
      _M_extract(__beg, __end, __io, __err, __xtrc, __base, false);


      char* __sanity;
      (*__errno_location ()) = 0;
      void* __vp = reinterpret_cast<void*>(strtoul(__xtrc, &__sanity, __base));
      if (!(__err & ios_base::failbit)
          && __sanity != __xtrc && *__sanity == '\0' && (*__errno_location ()) == 0)
        __v = __vp;
      else
        __err |= ios_base::failbit;


      __io.flags(__fmt);
      return __beg;
    }


  template <typename _CharT, typename _OutIter>
    inline _OutIter
    __pad(_OutIter __s, _CharT __fill, int __padding);

  template <typename _CharT, typename _RaIter>
    _RaIter
    __pad(_RaIter __s, _CharT __fill, int __padding,
          random_access_iterator_tag)
    {
      fill_n(__s, __fill);
      return __s + __padding;
    }

  template <typename _CharT, typename _OutIter, typename _Tag>
    _OutIter
    __pad(_OutIter __s, _CharT __fill, int __padding, _Tag)
    {
      while (--__padding >= 0) { *__s = __fill; ++__s; }
      return __s;
    }

  template <typename _CharT, typename _OutIter>
    inline _OutIter
    __pad(_OutIter __s, _CharT __fill, int __padding)
    {
      return __pad(__s, __fill, __padding,
                   typename iterator_traits<_OutIter>::iterator_category());
    }

  template <typename _CharT, typename _OutIter>
    _OutIter
    __pad_numeric(_OutIter __s, ios_base::fmtflags ,
                  _CharT , int ,
                  _CharT const* , _CharT const* ,
                  _CharT const* )
  {

      return __s;
    }


  template <typename _CharT>
    ostreambuf_iterator<_CharT>
    __pad_numeric(ostreambuf_iterator<_CharT> __s, ios_base::fmtflags __flags,
                  _CharT __fill, int __width, _CharT const* __first,
                  _CharT const* __middle, _CharT const* __last)
    {
      typedef ostreambuf_iterator<_CharT> __out_iter;
      int __padding = __width - (__last - __first);
      if (__padding < 0)
        __padding = 0;
      ios_base::fmtflags __aflags = __flags & ios_base::adjustfield;
      bool __testfield = __padding == 0 || __aflags == ios_base::left
                         || __aflags == ios_base::internal;


      if (__first != __middle)
        {
          if (!__testfield)
            {
              __pad(__s, __fill, __padding);
              __padding = 0;
            }
          copy(__first, __middle, __s);
        }
      __out_iter __s2 = __s;

      if (__padding && __aflags != ios_base::left)
        {
          __pad(__s2, __fill, __padding);
          __padding = 0;
        }
      __out_iter __s3 = copy(__middle, __last, __s2);
      if (__padding)
        __pad(__s3, __fill, __padding);
      return __s3;
    }

  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
    {
      const _Format_cache<_CharT>* __fmt = _Format_cache<_CharT>::_S_get(__io);
      ios_base::fmtflags __flags = __io.flags();

      if ((__flags & ios_base::boolalpha) == 0)
        {
          unsigned long __uv = __v;
          return __output_integer(__s, __io, __fill, false, __uv);
        }
      else
        {
          const char_type* __first;
          const char_type* __last;
          if (__v)
            {
              __first = __fmt->_M_truename.data();
              __last = __first + __fmt->_M_truename.size();
            }
          else
            {
              __first = __fmt->_M_falsename.data();
              __last = __first + __fmt->_M_falsename.size();
            }
          copy(__first, __last, __s);
        }
      return __s;
    }





  template <typename _CharT>
    _CharT*
    __group_digits(_CharT* __s, _CharT __grsep, char const* __grouping,
                    char const* __grend, _CharT const* __first,
                    _CharT const* __last)
    {
      if (__last - __first > *__grouping)
        {
          __s = __group_digits(__s, __grsep,
              (__grouping + 1 == __grend ? __grouping : __grouping + 1),
              __grend, __first, __last - *__grouping);
          __first = __last - *__grouping;
          *__s++ = __grsep;
        }
      do
        {
          *__s++ = *__first++;
        }
      while (__first != __last);
      return __s;
    }

  template <typename _CharT, typename _OutIter, typename _ValueT>
    _OutIter
    __output_integer(_OutIter __s, ios_base& __io, _CharT __fill, bool __neg,
              _ValueT __v)
    {

      const long _M_room = numeric_limits<_ValueT>::digits10 * 2 + 4;
      _CharT __digits[_M_room];
      _CharT* __front = __digits + _M_room;
      ios_base::fmtflags __flags = __io.flags();
      const _Format_cache<_CharT>* __fmt = _Format_cache<_CharT>::_S_get(__io);
      char const* __table = __fmt->_S_literals + __fmt->_S_digits;

      ios_base::fmtflags __basefield = (__flags & __io.basefield);
      _CharT* __sign_end = __front;
      if (__basefield == ios_base::hex)
        {
          if (__flags & ios_base::uppercase)
            __table += 16;
          do
            *--__front = __table[__v & 15];
          while ((__v >>= 4) != 0);
          __sign_end = __front;
          if (__flags & ios_base::showbase)
            {
              *--__front = __fmt->_S_literals[__fmt->_S_x +
                       ((__flags & ios_base::uppercase) ? 1 : 0)];
              *--__front = __table[0];
            }
        }
      else if (__basefield == ios_base::oct)
        {
          do
            *--__front = __table[__v & 7];
          while ((__v >>= 3) != 0);
          if (__flags & ios_base::showbase
              && static_cast<char>(*__front) != __table[0])
            *--__front = __table[0];
          __sign_end = __front;
        }
      else
        {

          do
            *--__front = __table[__v % 10];
          while ((__v /= 10) != 0);
          __sign_end = __front;

          if (__neg || (__flags & ios_base::showpos))
            *--__front = __fmt->_S_literals[__fmt->_S_plus - __neg];
        }


      if (!__fmt->_M_use_grouping && !__io.width())
        return copy(__front, __digits + _M_room, __s);

      if (!__fmt->_M_use_grouping)
        return __pad_numeric(__s, __flags, __fill, __io.width(0),
                             __front, __sign_end, __digits + _M_room);

      _CharT* __p = __digits;
      while (__front < __sign_end)
        *__p++ = *__front++;
      const char* __gr = __fmt->_M_grouping.data();
      __front = __group_digits(__p, __fmt->_M_thousands_sep, __gr,
        __gr + __fmt->_M_grouping.size(), __sign_end, __digits + _M_room);
      return __pad_numeric(__s, __flags, __fill, __io.width(0),
                           __digits, __p, __front);
    }

  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
    {
      unsigned long __uv = __v;
      bool __neg = false;
      if (__v < 0)
        {
          __neg = true;
          __uv = -__uv;
        }
      return __output_integer(__s, __io, __fill, __neg, __uv);
    }

  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           unsigned long __v) const
    { return __output_integer(__s, __io, __fill, false, __v); }


  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __b, char_type __fill, long long __v) const
    {
      unsigned long long __uv = __v;
      bool __neg = false;
      if (__v < 0)
        {
          __neg = true;
          __uv = -__uv;
        }
      return __output_integer(__s, __b, __fill, __neg, __uv);
    }

  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           unsigned long long __v) const
    { return __output_integer(__s, __io, __fill, false, __v); }



  template<typename _CharT, typename _Traits, typename _OutIter>
    _OutIter
    __output_float(_OutIter __s, ios_base& __io, _CharT __fill,
                    const char* __sptr, size_t __slen)
    {

      return __s;
    }


  template<typename _CharT, typename _Traits>
    ostreambuf_iterator<_CharT, _Traits>
    __output_float(ostreambuf_iterator<_CharT, _Traits> __s, ios_base& __io,
                   _CharT __fill, const char* __sptr, size_t __slen)
    {
      size_t __padding = __io.width() > streamsize(__slen) ?
                         __io.width() -__slen : 0;
      locale __loc = __io.getloc();
      ctype<_CharT> const& __ct = use_facet<ctype<_CharT> >(__loc);
      ios_base::fmtflags __adjfield = __io.flags() & ios_base::adjustfield;
      const char* const __eptr = __sptr + __slen;

      if (__adjfield == ios_base::internal)
       {

         if (__sptr < __eptr && (*__sptr == '+' || *__sptr == '-'))
           {
             __s = __ct.widen(*__sptr);
             ++__s;
             ++__sptr;
           }
         __s = __pad(__s, __fill, __padding);
         __padding = 0;
       }
      else if (__adjfield != ios_base::left)
        {
          __s = __pad(__s, __fill, __padding);
          __padding = 0;
        }

      char __decimal_point = *(localeconv()->decimal_point);
      const _Format_cache<_CharT>* __fmt = _Format_cache<_CharT>::_S_get(__io);
      for (; __sptr != __eptr; ++__s, ++__sptr)
       {

         if (*__sptr == __decimal_point)
           __s = __fmt->_M_decimal_point;

         else
           __s = __ct.widen(*__sptr);
       }

      if (__padding)
        __pad(__s, __fill, __padding);
      __io.width(0);
      return __s;
    }

  bool
  __build_float_format(ios_base& __io, char* __fptr, char __modifier,
                       streamsize __prec);

  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
    {
      const streamsize __max_prec = numeric_limits<double>::digits10 + 3;
      streamsize __prec = __io.precision();

      if (__prec > __max_prec)
        __prec = __max_prec;

      char __sbuf[__max_prec * 2];
      size_t __slen;

      char __fbuf[16];
      if (__build_float_format(__io, __fbuf, 0, __prec))
        __slen = sprintf(__sbuf, __fbuf, __prec, __v);
      else
        __slen = sprintf(__sbuf, __fbuf, __v);

      return __output_float(__s, __io, __fill, __sbuf, __slen);
    }

  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           long double __v) const
    {
      const streamsize __max_prec = numeric_limits<long double>::digits10 + 3;
      streamsize __prec = __io.precision();

      if (__prec > __max_prec)
        __prec = __max_prec;

      char __sbuf[__max_prec * 2];
      size_t __slen;

      char __fbuf[16];

      if (__build_float_format(__io, __fbuf, 'L', __prec))
        __slen = sprintf(__sbuf, __fbuf, __prec, __v);
      else
        __slen = sprintf(__sbuf, __fbuf, __v);

      return __output_float(__s, __io, __fill, __sbuf, __slen);
    }

  template <typename _CharT, typename _OutIter>
    _OutIter
    num_put<_CharT, _OutIter>::
    do_put(iter_type __s, ios_base& __io, char_type __fill,
           const void* __v) const
    {
      typedef ios_base::fmtflags fmtflags;
      fmtflags __fmt = __io.flags();
      fmtflags __fmtmask = ~(ios_base::showpos | ios_base::basefield
                             | ios_base::uppercase | ios_base::internal);
      __io.flags(__fmt & __fmtmask | (ios_base::hex | ios_base::showbase));
      try {
        _OutIter __s2 = __output_integer(__s, __io, __fill, false,
                                  reinterpret_cast<unsigned long>(__v));
        __io.flags(__fmt);
        return __s2;
      }
      catch (...) {
        __io.flags(__fmt);
        throw;
      }
    }





  template<typename _CharT, typename _Dummy = int>
    struct _Weekdaynames;

  template<typename _Dummy>
    struct _Weekdaynames<char, _Dummy>
    { static const char* const _S_names[14]; };

  template<typename _Dummy>
    const char* const
    _Weekdaynames<char, _Dummy>::_S_names[14] =
    {
      "Sun", "Sunday",
      "Mon", "Monday", "Tue", "Tuesday", "Wed", "Wednesday",
      "Thu", "Thursday", "Fri", "Friday", "Sat", "Saturday"
    };


  template<typename _Dummy>
    struct _Weekdaynames<wchar_t, _Dummy>
    { static const wchar_t* const _S_names[14]; };

  template<typename _Dummy>
    const wchar_t* const
    _Weekdaynames<wchar_t, _Dummy>::_S_names[14] =
    {
      L"Sun", L"Sunday",
      L"Mon", L"Monday", L"Tue", L"Tuesday", L"Wed", L"Wednesday",
      L"Thu", L"Thursday", L"Fri", L"Friday", L"Sat", L"Saturday"
    };


  template<typename _CharT, typename _Dummy = int>
    struct _Monthnames;

  template<typename _Dummy>
    struct _Monthnames<char,_Dummy>
    { static const char* const _S_names[24]; };

  template<typename _Dummy>
    const char* const
    _Monthnames<char,_Dummy>::_S_names[24] =
    {
      "Jan", "January", "Feb", "February", "Mar", "March",
      "Apr", "April", "May", "May", "Jun", "June",
      "Jul", "July", "Aug", "August", "Sep", "September",
      "Oct", "October", "Nov", "November", "Dec", "December"
    };


  template<typename _Dummy>
    struct _Monthnames<wchar_t, _Dummy>
    { static const wchar_t* const _S_names[24]; };

  template<typename _Dummy>
    const wchar_t* const
    _Monthnames<wchar_t,_Dummy>::_S_names[24] =
    {
      L"Jan", L"January", L"Feb", L"February", L"Mar", L"March",
      L"Apr", L"April", L"May", L"May", L"Jun", L"June",
      L"Jul", L"July", L"Aug", L"August", L"Sep", L"September",
      L"Oct", L"October", L"Nov", L"November", L"Dec", L"December"
    };


  template<typename _CharT, typename _InIter>
    _InIter
    time_get<_CharT, _InIter>::
    do_get_weekday(iter_type __s, iter_type __end,
                   ios_base& __io, ios_base::iostate& __err, tm* __t) const
    {
      if (!_M_daynames)
        {
          _M_daynames = new basic_string<_CharT>[14];
          for (int __i = 0; __i < 14; ++__i)
            _M_daynames[__i] = _Weekdaynames<_CharT>::_S_names[__i];
        }
      bool __at_eof = false;
      int __remain = 0;
      int __matches[14];
      iter_type __out = __match_parallel(__s, __end, 14, _M_daynames,
                                         __matches, __remain, __at_eof);
      __err = ios_base::iostate(0);
      if (__at_eof) __err |= __io.eofbit;
      if (__remain == 1 ||
          __remain == 2 && (__matches[0]>>1) == (__matches[1]>>1))
        __t->tm_wday = (__matches[0]>>1);
      else
        __err |= __io.failbit;
      return __out;
    }

  template<typename _CharT, typename _InIter>
    _InIter
    time_get<_CharT, _InIter>::
    do_get_monthname(iter_type __s, iter_type __end,
                     ios_base& __io, ios_base::iostate& __err, tm* __t) const
    {
      if (!_M_monthnames)
        {
          _M_monthnames = new basic_string<_CharT>[24];
          for (int __i = 0; __i < 24; ++__i)
            _M_monthnames[__i] = _Monthnames<_CharT>::_S_names[__i];
        }
      bool __at_eof = false;
      int __remain = 0;
      int __matches[24];
      iter_type __out = __match_parallel( __s, __end, 24, _M_monthnames,
                                          __matches, __remain, __at_eof);
      __err = ios_base::iostate(0);
      if (__at_eof) __err |= __io.eofbit;
      if (__remain == 1 ||
          __remain == 2 && (__matches[0]>>1) == (__matches[1]>>1))
        __t->tm_mon = (__matches[0]>>1);
      else
        __err |= __io.failbit;
      return __out;
    }
}
# 42 "/opt/egcs/include/g++-v3/bits/std_locale.h" 2 3
# 33 "/opt/egcs/include/g++-v3/bits/ostream.tcc" 2 3

namespace std
{
  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>::sentry::
    sentry(basic_ostream<_CharT,_Traits>& __os)
    : _M_ok(__os.good()), _M_os(__os)
    {

      if (_M_ok && __os.tie())
        __os.tie()->flush();
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    operator<<(__ostream_type& (*__pf)(__ostream_type&))
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            { __pf(*this); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    operator<<(__ios_type& (*__pf)(__ios_type&))
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            { __pf(*this); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    operator<<(ios_base& (*__pf)(ios_base&))
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            { __pf(*this); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(bool __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              char_type __c = this->fill();
              ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
              if (_M_check_facet(_M_fnumput))
                {
                  bool __b = false;
                  if (__fmt & ios_base::oct || __fmt & ios_base::hex)
                    {
                      unsigned long __l = static_cast<unsigned long>(__n);
                      __b = _M_fnumput->put(*this, *this, __c, __l).failed();
                    }
                  else
                    __b = _M_fnumput->put(*this, *this, __c, __n).failed();
                  if (__b)
                    this->setstate(ios_base::badbit);
                }
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(unsigned long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(long long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              char_type __c = this->fill();
              ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
              if (_M_check_facet(_M_fnumput))
                {
                  bool __b = false;
                  if (__fmt & ios_base::oct || __fmt & ios_base::hex)
                    {
                      unsigned long long __l;
                      __l = static_cast<unsigned long long>(__n);
                      __b = _M_fnumput->put(*this, *this, __c, __l).failed();
                    }
                  else
                    __b = _M_fnumput->put(*this, *this, __c, __n).failed();
                  if (__b)
                    this->setstate(ios_base::badbit);
                }
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(double __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(long double __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(const void* __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          try
            {
              if (_M_check_facet(_M_fnumput))
                if (_M_fnumput->put(*this, *this, this->fill(), __n).failed())
                  this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::operator<<(__streambuf_type* __sbin)
    {
      streamsize __xtrct = 0;
      __streambuf_type* __sbout = this->rdbuf();
      sentry __cerb(*this);
      if (__sbin && __cerb)
        __xtrct = __copy_streambufs(*this, __sbin, __sbout);
      if (!__sbin || !__xtrct)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::put(char_type __c)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          int_type __put = rdbuf()->sputc(__c);
          if (__put != traits_type::to_int_type(__c))
            this->setstate(ios_base::badbit);
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::write(const _CharT* __s, streamsize __n)
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          streamsize __put = this->rdbuf()->sputn(__s, __n);
          if ( __put != __n)
            this->setstate(ios_base::badbit);
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::flush()
    {
      sentry __cerb(*this);
      if (__cerb)
        {
          if (this->rdbuf() && this->rdbuf()->pubsync() == -1)
            this->setstate(ios_base::badbit);
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    typename basic_ostream<_CharT, _Traits>::pos_type
    basic_ostream<_CharT, _Traits>::tellp()
    {
      pos_type __ret = pos_type(-1);
      bool __testok = this->fail() != true;

      if (__testok)
        __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
      return __ret;
    }


  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::seekp(pos_type __pos)
    {
      bool __testok = this->fail() != true;

      if (__testok)
        {


          pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::out);


          if (__err == pos_type(off_type(-1)))
            this->setstate(failbit);

        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    basic_ostream<_CharT, _Traits>::
    seekp(off_type __off, ios_base::seekdir __d)
    {
      bool __testok = this->fail() != true;

      if (__testok)
        {


          pos_type __err = this->rdbuf()->pubseekoff(__off, __d,
                                                     ios_base::out);


          if (__err == pos_type(off_type(-1)))
            this->setstate(failbit);
        }

      return *this;
    }
# 457 "/opt/egcs/include/g++-v3/bits/ostream.tcc" 3
  template<typename _CharT, typename _Traits>
    void
    __pad_char(basic_ios<_CharT, _Traits>& __ios,
               _CharT* __news, const _CharT* __olds,
               const streamsize __newlen, const streamsize __oldlen)
    {
      typedef _CharT char_type;
      typedef _Traits traits_type;
      typedef typename traits_type::int_type int_type;

      int_type __plen = static_cast<size_t>(__newlen - __oldlen);
      char_type* __pads = static_cast<char_type*>(__builtin_alloca(sizeof(char_type) * __plen));
      traits_type::assign(__pads, __plen, __ios.fill());

      char_type* __beg;
      char_type* __end;
      size_t __mod = 0;
      size_t __beglen;
      ios_base::fmtflags __fmt = __ios.flags() & ios_base::adjustfield;

      if (__fmt == ios_base::left)
        {

          __beg = const_cast<char_type*>(__olds);
          __beglen = __oldlen;
          __end = __pads;
        }
      else if (__fmt == ios_base::internal)
        {



          typedef _Format_cache<_CharT> __cache_type;
          __cache_type const* __fmt = __cache_type::_S_get(__ios);
          const char_type* __minus = traits_type::find(__olds, __oldlen,
                                                       __fmt->_S_minus);
          const char_type* __plus = traits_type::find(__olds, __oldlen,
                                                      __fmt->_S_plus);
          bool __testsign = __minus || __plus;
          bool __testhex = __olds[0] == '0'
                           && (__olds[1] == 'x' || __olds[1] == 'X');

          if (__testhex)
            {
              __news[0] = __olds[0];
              __news[1] = __olds[1];
              __mod += 2;
              __beg = const_cast<char_type*>(__olds + __mod);
              __beglen = __oldlen - __mod;
              __end = __pads;
            }
          else if (__testsign)
            {
              __mod += __plen;
              const char_type* __sign = __minus ? __minus + 1: __plus + 1;
              __beg = const_cast<char_type*>(__olds);
              __beglen = __sign - __olds;
              __end = const_cast<char_type*>(__sign + __plen);
              traits_type::copy(__news + __beglen, __pads, __plen);
            }
          else
            {

              __beg = __pads;
              __beglen = __plen;
              __end = const_cast<char_type*>(__olds);
            }
        }
      else
        {

          __beg = __pads;
          __beglen = __plen;
          __end = const_cast<char_type*>(__olds);
        }

      traits_type::copy(__news, __beg, __beglen);
      traits_type::copy(__news + __beglen, __end, __newlen - __beglen - __mod);
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      typename __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
              __pads[0] = __c;
              streamsize __len = 1;
              if (__w > __len)
                {
                  __pad_char(__out, __pads, &__c, __w, __len);
                  __len = __w;
                }
              __out.write(__pads, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }


  template <class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, char __c)
    {
      typedef basic_ostream<char, _Traits> __ostream_type;
      typename __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              char* __pads = static_cast<char*>(__builtin_alloca(__w + 1));
              __pads[0] = __c;
              streamsize __len = 1;
              if (__w > __len)
                {
                  __pad_char(__out, __pads, &__c, __w, __len);
                  __len = __w;
                }
              __out.write(__pads, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
     }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      typename __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
              streamsize __len = static_cast<streamsize>(_Traits::length(__s));
              if (__w > __len)
                {
                  __pad_char(__out, __pads, __s, __w, __len);
                  __s = __pads;
                  __len = __w;
                }
              __out.write(__s, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }

  template<typename _CharT, typename _Traits>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;


      typedef char_traits<char> __ctraits_type;

      typename __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          size_t __clen = __ctraits_type::length(__s);
          _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__clen + 1)));
          for (size_t __i = 0; __i <= __clen; ++__i)
            __ws[__i] = __out.widen(__s[__i]);
          _CharT* __str = __ws;

          try
            {
              streamsize __len = static_cast<streamsize>(__clen);
              streamsize __w = __out.width();
              _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));

              if (__w > __len)
                {
                  __pad_char(__out, __pads, __ws, __w, __len);
                  __str = __pads;
                  __len = __w;
                }
              __out.write(__str, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }


  template<class _Traits>
    basic_ostream<char, _Traits>&
    operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
    {
      typedef basic_ostream<char, _Traits> __ostream_type;
      typename __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          try
            {
              streamsize __w = __out.width();
              char* __pads = static_cast<char*>(__builtin_alloca(__w));
              streamsize __len = static_cast<streamsize>(_Traits::length(__s));
              if (__w > __len)
                {
                  __pad_char(__out, __pads, __s, __w, __len);
                  __s = __pads;
                  __len = __w;
                }
              __out.write(__s, __len);
              __out.width(0);
            }
          catch(exception& __fail)
            {


              __out.setstate(ios_base::badbit);
              if ((__out.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __out;
    }


  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_ostream<_CharT, _Traits>&
    operator<<(basic_ostream<_CharT, _Traits>& __out,
               const basic_string<_CharT, _Traits, _Alloc>& __str)
    {
      typedef basic_ostream<_CharT, _Traits> __ostream_type;
      typename __ostream_type::sentry __cerb(__out);
      if (__cerb)
        {
          const _CharT* __s = __str.data();
          streamsize __w = __out.width();
          _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w));
          streamsize __len = static_cast<streamsize>(__str.size());



          if (__w > __len)
            {
              __pad_char(__out, __pads, __s, __w, __len);
              __s = __pads;
              __len = __w;
            }
          streamsize __res = __out.rdbuf()->sputn(__s, __len);
          __out.width(0);
          if (__res != __len)
            __out.setstate(ios_base::failbit);
        }
      return __out;
    }
}
# 279 "/opt/egcs/include/g++-v3/bits/std_ostream.h" 2 3
# 41 "/opt/egcs/include/g++-v3/bits/std_iostream.h" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_istream.h" 1 3
# 38 "/opt/egcs/include/g++-v3/bits/std_istream.h" 3

# 1 "/opt/egcs/include/g++-v3/bits/std_ios.h" 1 3
# 40 "/opt/egcs/include/g++-v3/bits/std_istream.h" 2 3
# 1 "/opt/egcs/include/g++-v3/i686-pc-linux-gnu/bits/std_limits.h" 1 3
# 41 "/opt/egcs/include/g++-v3/bits/std_istream.h" 2 3

namespace std
{

  template<typename _CharT, typename _Traits>
    class basic_istream : virtual public basic_ios<_CharT, _Traits>
    {
    public:

      typedef _CharT char_type;
      typedef typename _Traits::int_type int_type;
      typedef typename _Traits::pos_type pos_type;
      typedef typename _Traits::off_type off_type;
      typedef _Traits traits_type;


      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
      typedef basic_ios<_CharT, _Traits> __ios_type;
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef istreambuf_iterator<_CharT, _Traits> __istreambuf_iter;
      typedef num_get<_CharT, __istreambuf_iter> __numget_type;
      typedef ctype<_CharT> __ctype_type;

    protected:

      streamsize _M_gcount;

    public:

      explicit
      basic_istream(__streambuf_type* __sb)
      {
        this->init(__sb);
        _M_gcount = streamsize(0);
      }

      virtual
      ~basic_istream()
      { _M_gcount = streamsize(0); }


      class sentry;
      friend class sentry;



      __istream_type&
      operator>>(__istream_type& (*__pf)(__istream_type&));

      __istream_type&
      operator>>(__ios_type& (*__pf)(__ios_type&));

      __istream_type&
      operator>>(ios_base& (*__pf)(ios_base&));


      __istream_type&
      operator>>(bool& __n);

      __istream_type&
      operator>>(short& __n);

      __istream_type&
      operator>>(unsigned short& __n);

      __istream_type&
      operator>>(int& __n);

      __istream_type&
      operator>>(unsigned int& __n);

      __istream_type&
      operator>>(long& __n);

      __istream_type&
      operator>>(unsigned long& __n);


      __istream_type&
      operator>>(long long& __n);

      __istream_type&
      operator>>(unsigned long long& __n);


      __istream_type&
      operator>>(float& __f);

      __istream_type&
      operator>>(double& __f);

      __istream_type&
      operator>>(long double& __f);

      __istream_type&
      operator>>(void*& __p);

      __istream_type&
      operator>>(__streambuf_type* __sb);


      inline streamsize
      gcount(void) const
      { return _M_gcount; }

      int_type
      get(void);

      __istream_type&
      get(char_type& __c);

      __istream_type&
      get(char_type* __s, streamsize __n, char_type __delim);

      inline __istream_type&
      get(char_type* __s, streamsize __n)
      { return get(__s, __n, this->widen('\n')); }

      __istream_type&
      get(__streambuf_type& __sb, char_type __delim);

      inline __istream_type&
      get(__streambuf_type& __sb)
      { return get(__sb, this->widen('\n')); }

      __istream_type&
      getline(char_type* __s, streamsize __n, char_type __delim);

      inline __istream_type&
      getline(char_type* __s, streamsize __n)
      { return getline(__s, __n, this->widen('\n')); }

      __istream_type&
      ignore(streamsize __n = 1, int_type __delim = traits_type::eof());

      int_type
      peek(void);

      __istream_type&
      read(char_type* __s, streamsize __n);

      streamsize
      readsome(char_type* __s, streamsize __n);

      __istream_type&
      putback(char_type __c);

      __istream_type&
      unget(void);

      int
      sync(void);

      pos_type
      tellg(void);

      __istream_type&
      seekg(pos_type);

      __istream_type&
      seekg(off_type, ios_base::seekdir);

    private:


      __istream_type&
      operator=(const __istream_type&);

      basic_istream(const __istream_type&);

    };

  template<typename _CharT, typename _Traits>
    class basic_istream<_CharT, _Traits>::sentry
    {
    public:
      typedef _Traits traits_type;
      typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef __istream_type::__ctype_type __ctype_type;
      typedef typename _Traits::int_type __int_type;

      explicit
      sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);

      operator bool() { return _M_ok; }

    private:
      bool _M_ok;
    };


  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);

  template<class _Traits>
    basic_istream<char, _Traits>&
    operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
    { return (__in >> reinterpret_cast<char&>(__c)); }

  template<class _Traits>
    basic_istream<char, _Traits>&
    operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
    { return (__in >> reinterpret_cast<char&>(__c)); }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);

  template<class _Traits>
    basic_istream<char,_Traits>&
    operator>>(basic_istream<char,_Traits>& __in, unsigned char* __s)
    { return (__in >> reinterpret_cast<char*>(__s)); }

  template<class _Traits>
    basic_istream<char,_Traits>&
    operator>>(basic_istream<char,_Traits>& __in, signed char* __s)
    { return (__in >> reinterpret_cast<char*>(__s)); }


  template<typename _CharT, typename _Traits>
    class basic_iostream
    : public basic_istream<_CharT, _Traits>,
      public basic_ostream<_CharT, _Traits>
    {
    public:

      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef basic_ostream<_CharT, _Traits> __ostream_type;

      explicit
      basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
      : __istream_type(__sb), __ostream_type(__sb)
      { }

      virtual
      ~basic_iostream() { }
    };


  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    ws(basic_istream<_CharT, _Traits>& __is);
}




# 1 "/opt/egcs/include/g++-v3/bits/istream.tcc" 1 3
# 32 "/opt/egcs/include/g++-v3/bits/istream.tcc" 3
# 1 "/opt/egcs/include/g++-v3/bits/std_locale.h" 1 3
# 33 "/opt/egcs/include/g++-v3/bits/istream.tcc" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_ostream.h" 1 3
# 34 "/opt/egcs/include/g++-v3/bits/istream.tcc" 2 3

namespace std
{
  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>::sentry::
    sentry(basic_istream<_CharT, _Traits>& __in, bool __noskipws)
    {
      if (__in.good())
        {
          if (__in.tie())
            __in.tie()->flush();
          if (!__noskipws && (__in.flags() & ios_base::skipws))
            {
              const __int_type __eof = traits_type::eof();
              const __ctype_type* __ctype = __in._M_get_fctype_ios();
              __streambuf_type* __sb = __in.rdbuf();
              __int_type __c = __sb->sgetc();

              while (__c != __eof && __ctype->is(ctype_base::space, __c))
                __c = __sb->snextc();



              if (__c == __eof)
                __in.setstate(ios_base::eofbit);

            }
        }

      if (__in.good())
        _M_ok = true;
      else
        {
          _M_ok = false;
          __in.setstate(ios_base::failbit);
        }
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(__istream_type& (*__pf)(__istream_type&))
    {
      __pf(*this);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(__ios_type& (*__pf)(__ios_type&))
    {
      __pf(*this);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(ios_base& (*__pf)(ios_base&))
    {
      __pf(*this);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(bool& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(short& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned short& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(int& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned int& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(long long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
              throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(unsigned long long& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(float& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(double& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(long double& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(void*& __n)
    {
      sentry __cerb(*this, false);
      if (__cerb)
        {
          try
            {
              ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
              if (_M_check_facet(_M_fnumget))
                _M_fnumget->get(*this, 0, *this, __err, __n);
              this->setstate(__err);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    operator>>(__streambuf_type* __sbout)
    {
      streamsize __xtrct = 0;
      __streambuf_type* __sbin = this->rdbuf();
      sentry __cerb(*this, false);
      if (__sbout && __cerb)
        __xtrct = __copy_streambufs(*this, __sbin, __sbout);
      if (!__sbout || !__xtrct)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>::int_type
    basic_istream<_CharT, _Traits>::
    get(void)
    {
      const int_type __eof = traits_type::eof();
      int_type __c = __eof;
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              __c = this->rdbuf()->sbumpc();

              if (__c != __eof)
                _M_gcount = 1;
              else
                this->setstate(ios_base::eofbit | ios_base::failbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __c;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    get(char_type& __c)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              const int_type __eof = traits_type::eof();
              int_type __bufval = this->rdbuf()->sbumpc();

              if (__bufval != __eof)
                {
                  _M_gcount = 1;
                  __c = traits_type::to_char_type(__bufval);
                }
              else
                this->setstate(ios_base::eofbit | ios_base::failbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    get(char_type* __s, streamsize __n, char_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb && __n > 1)
        {
          try
            {
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              int_type __c = __sb->sbumpc();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;

              while (_M_gcount < __n - 1 && !__testeof && !__testdelim)
                {
                  *__s++ = traits_type::to_char_type(__c);
                  ++_M_gcount;
                  __c = __sb->sbumpc();
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }
              if (__testdelim || _M_gcount == __n - 1)
                __sb->sputbackc(__c);
              if (__testeof)
                this->setstate(ios_base::eofbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      *__s = char_type();
      if (!_M_gcount)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    get(__streambuf_type& __sb, char_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          int_type __c;
          __streambuf_type* __this_sb = this->rdbuf();
          try
            {
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              __c = __this_sb->sbumpc();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;
              bool __testput = true;

              while (!__testeof && !__testdelim
                    && (__testput = __sb.sputc(traits_type::to_char_type(__c))
                         != __eof))
                {
                  ++_M_gcount;
                  __c = __this_sb->sbumpc();
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }
              if (__testdelim || !__testput)
                __this_sb->sputbackc(traits_type::to_char_type(__c));
              if (__testeof)
                this->setstate(ios_base::eofbit);
            }
          catch(exception& __fail)
            {

              __this_sb->sputbackc(traits_type::to_char_type(__c));
            }
        }
      if (!_M_gcount)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    getline(char_type* __s, streamsize __n, char_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              __streambuf_type* __sb = this->rdbuf();
              int_type __c = __sb->sbumpc();
              ++_M_gcount;
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;

              while (_M_gcount < __n && !__testeof && !__testdelim)
                {
                  *__s++ = traits_type::to_char_type(__c);
                  __c = __sb->sbumpc();
                  ++_M_gcount;
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }

              if (__testeof)
                {
                  --_M_gcount;
                  this->setstate(ios_base::eofbit);
                }
              else if (!__testdelim)
                {
                  --_M_gcount;
                  __sb->sputbackc(traits_type::to_char_type(__c));
                  this->setstate(ios_base::failbit);
                }
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      *__s = char_type();
      if (!_M_gcount)
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    ignore(streamsize __n, int_type __delim)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb && __n > 0)
        {
          try
            {
              const int_type __idelim = traits_type::to_int_type(__delim);
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              int_type __c = __sb->sbumpc();
              bool __testdelim = __c == __idelim;
              bool __testeof = __c == __eof;

              __n = min(__n, numeric_limits<streamsize>::max());
              while (_M_gcount < __n - 1 && !__testeof && !__testdelim)
                {
                  ++_M_gcount;
                  __c = __sb->sbumpc();
                  __testeof = __c == __eof;
                  __testdelim = __c == __idelim;
                }
              if ((_M_gcount == __n - 1 && !__testeof) || __testdelim)
                ++_M_gcount;
              if (__testeof)
                this->setstate(ios_base::eofbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>::int_type
    basic_istream<_CharT, _Traits>::
    peek(void)
    {
      int_type __c = traits_type::eof();
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            { __c = this->rdbuf()->sgetc(); }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __c;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    read(char_type* __s, streamsize __n)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          if (__n > 0)
            {
              try
                {
                  const int_type __eof = traits_type::eof();
                  __streambuf_type* __sb = this->rdbuf();
                  int_type __c = __sb->sbumpc();
                  bool __testeof = __c == __eof;

                  while (_M_gcount < __n - 1 && !__testeof)
                    {
                      *__s++ = traits_type::to_char_type(__c);
                      ++_M_gcount;
                      __c = __sb->sbumpc();
                      __testeof = __c == __eof;
                    }
                  if (__testeof)
                    this->setstate(ios_base::eofbit | ios_base::failbit);
                  else
                    {

                      *__s++ = traits_type::to_char_type(__c);
                      ++_M_gcount;
                    }
                }
              catch(exception& __fail)
                {


                  this->setstate(ios_base::badbit);
                  if ((this->exceptions() & ios_base::badbit) != 0)
                    throw;
                }
            }
        }
      else
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    streamsize
    basic_istream<_CharT, _Traits>::
    readsome(char_type* __s, streamsize __n)
    {
      const int_type __eof = traits_type::eof();
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          if (__n > 0)
            {
              try
                {
                  streamsize __num = this->rdbuf()->in_avail();
                  if (__num != static_cast<streamsize>(__eof))
                    {
                      __num = min(__num, __n);
                      _M_gcount = this->rdbuf()->sgetn(__s, __num);
                    }
                  else
                    this->setstate(ios_base::eofbit);
                }
              catch(exception& __fail)
                {


                  this->setstate(ios_base::badbit);
                  if ((this->exceptions() & ios_base::badbit) != 0)
                    throw;
                }
            }
        }
      else
        this->setstate(ios_base::failbit);
      return _M_gcount;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    putback(char_type __c)
    {
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              if (!__sb || __sb->sputbackc(__c) == __eof)
                this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      else
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    unget(void)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              const int_type __eof = traits_type::eof();
              __streambuf_type* __sb = this->rdbuf();
              if (!__sb || __eof == __sb->sungetc())
                this->setstate(ios_base::badbit);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      else
        this->setstate(ios_base::failbit);
      return *this;
    }

  template<typename _CharT, typename _Traits>
    int
    basic_istream<_CharT, _Traits>::
    sync(void)
    {
      int __ret = traits_type::eof();
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
              __streambuf_type* __sb = this->rdbuf();
              if (!__sb || __ret == __sb->pubsync())
                this->setstate(ios_base::badbit);
              else
                __ret = 0;
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __ret;
    }

  template<typename _CharT, typename _Traits>
    typename basic_istream<_CharT, _Traits>::pos_type
    basic_istream<_CharT, _Traits>::
    tellg(void)
    {
      pos_type __ret = pos_type(-1);
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {
             __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return __ret;
    }


  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    seekg(pos_type __pos)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {


              pos_type __err = this->rdbuf()->pubseekpos(__pos, ios_base::in);


              if (__err == pos_type(off_type(-1)))
                this->setstate(failbit);

            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    basic_istream<_CharT, _Traits>::
    seekg(off_type __off, ios_base::seekdir __dir)
    {
      _M_gcount = 0;
      sentry __cerb(*this, true);
      if (__cerb)
        {
          try
            {


              pos_type __err = this->rdbuf()->pubseekoff(__off, __dir,
                                                         ios_base::in);


              if (__err == pos_type(off_type(-1)))
                this->setstate(failbit);

            }
          catch(exception& __fail)
            {


              this->setstate(ios_base::badbit);
              if ((this->exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      return *this;
    }


  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typename __istream_type::sentry __cerb(__in, false);
      if (__cerb)
        {
          try
            { __in.get(__c); }
          catch(exception& __fail)
            {


              __in.setstate(ios_base::badbit);
              if ((__in.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      else
        __in.setstate(ios_base::failbit);
      return __in;
    }

  template<typename _CharT, typename _Traits>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef typename __istream_type::__streambuf_type __streambuf_type;
      typedef typename _Traits::int_type int_type;
      typedef _CharT char_type;
      typedef ctype<_CharT> __ctype_type;
      streamsize __extracted = 0;

      typename __istream_type::sentry __cerb(__in, false);
      if (__cerb)
        {
          try
            {

              streamsize __num = __in.width();
              if (__num == 0)
                __num = numeric_limits<streamsize>::max();

              __streambuf_type* __sb = __in.rdbuf();
              const __ctype_type* __ctype = __in._M_get_fctype_ios();
              int_type __c = __sb->sbumpc();
              const int_type __eof = _Traits::eof();
              bool __testsp = __ctype->is(ctype_base::space, __c);
              bool __testeof = __c == __eof;

              while (__extracted < __num - 1 && !__testeof && !__testsp)
                {
                  *__s++ = __c;
                  ++__extracted;
                  __c = __sb->sbumpc();
                  __testeof = __c == __eof;
                  __testsp = __ctype->is(ctype_base::space, __c);
                }

              if (!__testeof)
                __sb->sputbackc(__c);
              else
                __in.setstate(ios_base::eofbit);



              *__s = char_type();

              __in.width(0);
            }
          catch(exception& __fail)
            {


              __in.setstate(ios_base::badbit);
              if ((__in.exceptions() & ios_base::badbit) != 0)
                throw;
            }
        }
      if (!__extracted)
        __in.setstate(ios_base::failbit);
      return __in;
    }


  template<typename _CharT, typename _Traits>
    basic_istream<_CharT,_Traits>&
    ws(basic_istream<_CharT,_Traits>& __in)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef typename __istream_type::__streambuf_type __streambuf_type;
      typedef typename __istream_type::__ctype_type __ctype_type;
      typedef typename __istream_type::int_type __int_type;
      typedef typename __istream_type::char_type __char_type;

      __streambuf_type* __sb = __in.rdbuf();
      const __ctype_type* __ctype = __in._M_get_fctype_ios();
      const __int_type __eof = _Traits::eof();
      __int_type __c;
      bool __testeof;
      bool __testsp;

      do
        {
          __c = __sb->sbumpc();
          __testeof = __c == __eof;
          __testsp = __ctype->is(ctype_base::space, __c);
        }
      while (!__testeof && __testsp);

      if (!__testeof && !__testsp)
        __sb->sputbackc(__c);
      else
        __in.setstate(ios_base::eofbit);

      return __in;
    }


  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_istream<_CharT, _Traits>&
    operator>>(basic_istream<_CharT, _Traits>& __in,
               basic_string<_CharT, _Traits, _Alloc>& __str)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef typename __istream_type::int_type __int_type;
      typedef typename __istream_type::__streambuf_type __streambuf_type;
      typedef typename __istream_type::__ctype_type __ctype_type;
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;
      __size_type __extracted = 0;

      typename __istream_type::sentry __cerb(__in, false);
      if (__cerb)
        {
          __str.erase();
          streamsize __w = __in.width();
          __size_type __n;
          __n = __w > 0 ? static_cast<__size_type>(__w) : __str.max_size();

          __streambuf_type* __sb = __in.rdbuf();
          const __ctype_type* __ctype = __in._M_get_fctype_ios();
          __int_type __c = __sb->sbumpc();
          const __int_type __eof = _Traits::eof();
          bool __testsp = __ctype->is(ctype_base::space, __c);
          bool __testeof = __c == __eof;

          while (__extracted < __n && !__testeof && !__testsp)
            {
              __str += _Traits::to_char_type(__c);
              ++__extracted;
              __c = __sb->sbumpc();
              __testeof = __c == __eof;
              __testsp = __ctype->is(ctype_base::space, __c);
            }
          if (!__testeof)
            __sb->sputbackc(__c);
          else
            __in.setstate(ios_base::eofbit);
          __in.width(0);
        }


      if (!__extracted)
        __in.setstate (ios_base::failbit);

      return __in;
    }

  template<typename _CharT, typename _Traits, typename _Alloc>
    basic_istream<_CharT, _Traits>&
    getline(basic_istream<_CharT, _Traits>& __in,
            basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
    {
      typedef basic_istream<_CharT, _Traits> __istream_type;
      typedef typename __istream_type::int_type __int_type;
      typedef typename __istream_type::__streambuf_type __streambuf_type;
      typedef typename __istream_type::__ctype_type __ctype_type;
      typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
      typedef typename __string_type::size_type __size_type;

      __size_type __extracted = 0;
      bool __testdelim = false;
      typename __istream_type::sentry __cerb(__in, true);
      if (__cerb)
        {
          __str.erase();
          __size_type __n = __str.max_size();

          __int_type __idelim = _Traits::to_int_type(__delim);
          __streambuf_type* __sb = __in.rdbuf();
          __int_type __c = __sb->sbumpc();
          const __int_type __eof = _Traits::eof();
          __testdelim = __c == __idelim;
          bool __testeof = __c == __eof;

          while (__extracted <= __n && !__testeof && !__testdelim)
            {
              __str += _Traits::to_char_type(__c);
              ++__extracted;
              __c = __sb->sbumpc();
              __testeof = __c == __eof;
              __testdelim = __c == __idelim;
            }
          if (__testeof)
            __in.setstate(ios_base::eofbit);
        }
      if (!__extracted && !__testdelim)
        __in.setstate(ios_base::failbit);
      return __in;
    }

  template<class _CharT, class _Traits, class _Alloc>
    inline basic_istream<_CharT,_Traits>&
    getline(basic_istream<_CharT, _Traits>& __in,
            basic_string<_CharT,_Traits,_Alloc>& __str)
    { return getline(__in, __str, __in.widen('\n')); }
}
# 291 "/opt/egcs/include/g++-v3/bits/std_istream.h" 2 3
# 42 "/opt/egcs/include/g++-v3/bits/std_iostream.h" 2 3

namespace std
{
  extern istream cin;
  extern ostream cout;
  extern ostream cerr;
  extern ostream clog;

  extern wistream wcin;
  extern wostream wcout;
  extern wostream wcerr;
  extern wostream wclog;



  static ios_base::Init __ioinit;
}
# 32 "/opt/egcs/include/g++-v3/iostream" 2 3
# 59 "../../../jtc/include/JTC/Types.h" 2





# 1 "/opt/egcs/lib/gcc-lib/i686-pc-linux-gnu/3.1/include/stdio.h" 1 3
# 65 "../../../jtc/include/JTC/Types.h" 2
# 1 "/usr/include/string.h" 1 3
# 66 "../../../jtc/include/JTC/Types.h" 2
# 98 "../../../jtc/include/JTC/Types.h"
# 1 "/usr/include/pthread.h" 1 3
# 99 "../../../jtc/include/JTC/Types.h" 2





class JTCThreadId
{
public:



    JTCThreadId()
        : m_is_null_id(true)
    {
    }

    JTCThreadId(pthread_t id)
        : m_id(id), m_is_null_id(false)
    {
    }
# 127 "../../../jtc/include/JTC/Types.h"
    bool
    operator!=(
        const JTCThreadId& rhs
    ) const
    {
        return !(*this == rhs);
    }

    bool
    operator==(
        const JTCThreadId& rhs
    ) const
    {



        if (!m_is_null_id && !rhs.m_is_null_id)
        {
            return pthread_equal(m_id, rhs.m_id);
        }



        else if (m_is_null_id && rhs.m_is_null_id)
        {
            return true;
        }
# 163 "../../../jtc/include/JTC/Types.h"
        else return false;
    }




    static JTCThreadId
    self()
    {
        return JTCThreadId(pthread_self());
    }




    operator pthread_t() const
    {
        return m_id;
    }





    char*
    toString(
        char* buf,
        size_t len
    ) const
    {
        char str[128];

        sprintf(str, "%lu", (unsigned long) m_id);
# 205 "../../../jtc/include/JTC/Types.h"
        buf[len - 1] = '\0';
        return strncpy(buf, str, len - 1);
    }



    friend std::ostream&
    operator<<(
        std::ostream&,
        const JTCThreadId&
    );



private:

    pthread_t m_id;

    bool m_is_null_id;
};
# 233 "../../../jtc/include/JTC/Types.h"
inline std::ostream&
operator<<(std::ostream& os, const JTCThreadId& id)
{
    if (id == JTCThreadId())
    {
        os << "NIL";
    }
    else
    {

        os << id.m_id;
# 253 "../../../jtc/include/JTC/Types.h"
    }
    return os;
}
# 482 "../../../jtc/include/JTC/Types.h"
typedef pthread_key_t JTCThreadKey;
# 15 "../../../jtc/include/JTC/Thread.h" 2
# 1 "../../../jtc/include/JTC/Handle.h" 1
# 14 "../../../jtc/include/JTC/Handle.h"
# 1 "../../../jtc/include/JTC/Types.h" 1
# 15 "../../../jtc/include/JTC/Handle.h" 2


# 1 "../../../jtc/include/JTC/Mutex.h" 1
# 14 "../../../jtc/include/JTC/Mutex.h"
# 1 "../../../jtc/include/JTC/Types.h" 1
# 15 "../../../jtc/include/JTC/Mutex.h" 2
# 1 "../../../jtc/include/JTC/Syscall.h" 1
# 14 "../../../jtc/include/JTC/Syscall.h"
# 1 "../../../jtc/include/JTC/Exception.h" 1
# 14 "../../../jtc/include/JTC/Exception.h"
# 1 "../../../jtc/include/JTC/Types.h" 1
# 15 "../../../jtc/include/JTC/Exception.h" 2
# 40 "../../../jtc/include/JTC/Exception.h"
# 1 "/usr/include/string.h" 1 3
# 41 "../../../jtc/include/JTC/Exception.h" 2

class JTCThreadDeath
{
};

class JTCException
{
protected:

    char* note_;
    int error_;

public:

    JTCException(const char* note = "", long error = 0)
        : error_(error)
    {
        note_ = new char[strlen(note) + 1];
        strcpy(note_, note);
    }

    JTCException(const JTCException& e)
        : error_(e.error_)
    {
        note_ = new char[strlen(e.note_) +1];
        strcpy(note_, e.note_);
    }

    JTCException& operator=(const JTCException& e)
    {
        if (this != &e)
        {
            error_ = e.error_;
            note_ = new char[strlen(e.note_) +1];
            strcpy(note_, e.note_);
        }
        return *this;
    }

    virtual ~JTCException()
    {
        delete[] note_;
    }

    long getError() const
    {
        return error_;
    }

    virtual const char* getType() const
    {
        return "JTCException";
    }

    const char* getMessage() const
    {
        return note_;
    }
};



inline std::ostream&
operator<<(std::ostream& os, const JTCException& e)
{
    os << e.getType() << ": " << e.getMessage();
    return os;
}




class JTCInterruptedException : public JTCException
{
public:

    JTCInterruptedException() {}
    JTCInterruptedException(const char* note)
        : JTCException(note) { }

    virtual const char* getType() const
    {
        return "JTCInterruptedException";
    }
};

class JTCIllegalThreadStateException : public JTCException
{
public:

    JTCIllegalThreadStateException() {}
    JTCIllegalThreadStateException(const char* note)
        : JTCException(note) { }

    virtual const char* getType() const
    {
        return "JTCIllegalThreadStateException";
    }
};

class JTCIllegalMonitorStateException : public JTCException
{
public:

    JTCIllegalMonitorStateException() { }
    JTCIllegalMonitorStateException(const char* note)
        : JTCException(note) { }

    virtual const char* getType() const
    {
        return "JTCIllegalMonitorStateException";
    }
};

class JTCIllegalArgumentException : public JTCException
{
public:

    JTCIllegalArgumentException() { }
    JTCIllegalArgumentException(const char* note)
        : JTCException(note) { }

    virtual const char* getType() const
    {
        return "JTCIllegalArgumentException";
    }
};

class JTCSystemCallException : public JTCException
{
public:

    JTCSystemCallException(const char* note, long error)
        : JTCException(note, error) { }

    virtual const char* getType() const
    {
        return "JTCSystemCallException";
    }
};

class JTCOutOfMemoryError : public JTCException
{
public:

    JTCOutOfMemoryError() { }
    JTCOutOfMemoryError(const char* note)
        : JTCException(note) { }

    virtual const char* getType() const
    {
        return "JTCOutOfMemoryError";
    }
};

class JTCUnknownThreadException : public JTCException
{
public:

    JTCUnknownThreadException() { }
    JTCUnknownThreadException(const char* note)
        : JTCException(note) { }

    virtual const char* getType() const
    {
        return "JTCUnknownThreadException";
    }
};

class JTCInitializeError : public JTCException
{
public:

    JTCInitializeError(const char* note)
        : JTCException(note) { }

    virtual const char* getType() const
    {
        return "JTCInitializeError";
    }
};
# 15 "../../../jtc/include/JTC/Syscall.h" 2



# 1 "/opt/egcs/include/g++-v3/backward/strstream" 1 3
# 51 "/opt/egcs/include/g++-v3/backward/strstream" 3
# 1 "/opt/egcs/include/g++-v3/backward/backward_warning.h" 1 3
# 52 "/opt/egcs/include/g++-v3/backward/strstream" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_iosfwd.h" 1 3
# 53 "/opt/egcs/include/g++-v3/backward/strstream" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_ios.h" 1 3
# 54 "/opt/egcs/include/g++-v3/backward/strstream" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_istream.h" 1 3
# 55 "/opt/egcs/include/g++-v3/backward/strstream" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_ostream.h" 1 3
# 56 "/opt/egcs/include/g++-v3/backward/strstream" 2 3
# 1 "/opt/egcs/include/g++-v3/bits/std_string.h" 1 3
# 57 "/opt/egcs/include/g++-v3/backward/strstream" 2 3

namespace std
{





class strstreambuf : public basic_streambuf<char, char_traits<char> >
{
public:
  typedef char_traits<char> _Traits;
  typedef basic_streambuf<char, _Traits> _Base;

public:
  explicit strstreambuf(streamsize __initial_capacity = 0);
  strstreambuf(void* (*__alloc)(size_t), void (*__free)(void*));

  strstreambuf(char* __get, streamsize __n, char* __put = 0);
  strstreambuf(signed char* __get, streamsize __n, signed char* __put = 0);
  strstreambuf(unsigned char* __get, streamsize __n, unsigned char* __put=0);

  strstreambuf(const char* __get, streamsize __n);
  strstreambuf(const signed char* __get, streamsize __n);
  strstreambuf(const unsigned char* __get, streamsize __n);

  virtual ~strstreambuf();

public:
  void freeze(bool = true);
  char* str();
  int pcount() const;

protected:
  virtual int_type overflow(int_type __c = _Traits::eof());
  virtual int_type pbackfail(int_type __c = _Traits::eof());
  virtual int_type underflow();
  virtual _Base* setbuf(char* __buf, streamsize __n);
  virtual pos_type seekoff(off_type __off, ios_base::seekdir __dir,
                           ios_base::openmode __mode
                                      = ios_base::in | ios_base::out);
  virtual pos_type seekpos(pos_type __pos, ios_base::openmode __mode
                                      = ios_base::in | ios_base::out);

private:

  char* _M_alloc(size_t);
  void _M_free(char*);


  void _M_setup(char* __get, char* __put, streamsize __n);

private:
  void* (*_M_alloc_fun)(size_t);
  void (*_M_free_fun)(void*);

  bool _M_dynamic : 1;
  bool _M_frozen : 1;
  bool _M_constant : 1;
};




class istrstream : public basic_istream<char>
{
public:
  explicit istrstream(char*);
  explicit istrstream(const char*);
  istrstream(char* , streamsize);
  istrstream(const char*, streamsize);
  virtual ~istrstream();

  strstreambuf* rdbuf() const;
  char* str();

private:
  strstreambuf _M_buf;
};




class ostrstream : public basic_ostream<char>
{
public:
  ostrstream();
  ostrstream(char*, int, ios_base::openmode = ios_base::out);
  virtual ~ostrstream();

  strstreambuf* rdbuf() const;
  void freeze(bool = true);
  char* str();
  int pcount() const;

private:
  strstreambuf _M_buf;
};




class strstream : public basic_iostream<char>
{
public:
  typedef char char_type;
  typedef char_traits<char>::int_type int_type;
  typedef char_traits<char>::pos_type pos_type;
  typedef char_traits<char>::off_type off_type;

  strstream();
  strstream(char*, int, ios_base::openmode = ios_base::in | ios_base::out);
  virtual ~strstream();

  strstreambuf* rdbuf() const;
  void freeze(bool = true);
  int pcount() const;
  char* str();

private:
  strstreambuf _M_buf;
};

}
# 19 "../../../jtc/include/JTC/Syscall.h" 2
# 30 "../../../jtc/include/JTC/Syscall.h"
# 1 "../../../jtc/include/JTC/Exception.h" 1
# 31 "../../../jtc/include/JTC/Syscall.h" 2
# 16 "../../../jtc/include/JTC/Mutex.h" 2

# 1 "/usr/include/errno.h" 1 3
# 18 "../../../jtc/include/JTC/Mutex.h" 2
# 29 "../../../jtc/include/JTC/Mutex.h"
class JTCMutex
{
public:

    JTCMutex()
    {

        do { int _jtc_syscallError; if ((_jtc_syscallError = (pthread_mutex_init (&m_lock,0))) != 0) { long error = _jtc_syscallError; char msg[ 512 ]; msg[sizeof(msg)-1] = '\0'; std::ostrstream stream(msg, sizeof(msg)-1); stream << "pthread_mutex_init" << "\n                (\n" << "                " << (&m_lock) << ", // " << "&m_lock" << "\n" << "                " << (0) << "  // " << "0" << "\n                )" << " == " << error << " [" << "../../../jtc/include/JTC/Mutex.h" << ':' << 36 << ']' << std::ends; throw JTCSystemCallException(msg, error); } } while (0);
# 52 "../../../jtc/include/JTC/Mutex.h"
    }

    ~JTCMutex()
    {

        pthread_mutex_destroy(&m_lock);
# 66 "../../../jtc/include/JTC/Mutex.h"
    }




    bool
    lock() const
    {
# 84 "../../../jtc/include/JTC/Mutex.h"
        pthread_mutex_t* lock = &((JTCMutex*)this) -> m_lock;
        { int _jtc_syscallError; if ((_jtc_syscallError = (pthread_mutex_lock (lock))) != 0) { long error = _jtc_syscallError; char msg[ 512 ]; msg[sizeof(msg)-1] = '\0'; std::ostrstream stream(msg, sizeof(msg)-1); stream << "pthread_mutex_lock" << "\n                (\n" << "                " << (lock) << "  // " << "lock" << "\n                )" << " == " << error << " [" << "../../../jtc/include/JTC/Mutex.h" << ':' << 85 << ']' << std::ends; throw JTCSystemCallException(msg, error); } } while (0);
# 99 "../../../jtc/include/JTC/Mutex.h"
        return true;
    }





    bool
    unlock() const
    {

        pthread_mutex_t* lock = &((JTCMutex*)this) -> m_lock;
        { int _jtc_syscallError; if ((_jtc_syscallError = (pthread_mutex_unlock (lock))) != 0) { long error = _jtc_syscallError; char msg[ 512 ]; msg[sizeof(msg)-1] = '\0'; std::ostrstream stream(msg, sizeof(msg)-1); stream << "pthread_mutex_unlock" << "\n                (\n" << "                " << (lock) << "  // " << "lock" << "\n                )" << " == " << error << " [" << "../../../jtc/include/JTC/Mutex.h" << ':' << 111 << ']' << std::ends; throw JTCSystemCallException(msg, error); } } while (0);
# 124 "../../../jtc/include/JTC/Mutex.h"
        return true;
    }




    bool
    trylock() const
    {

        pthread_mutex_t* lock = &((JTCMutex*)this) -> m_lock;
        try
        {
            { int _jtc_syscallError; if ((_jtc_syscallError = (pthread_mutex_trylock (lock))) != 0) { long error = _jtc_syscallError; char msg[ 512 ]; msg[sizeof(msg)-1] = '\0'; std::ostrstream stream(msg, sizeof(msg)-1); stream << "pthread_mutex_trylock" << "\n                (\n" << "                " << (lock) << "  // " << "lock" << "\n                )" << " == " << error << " [" << "../../../jtc/include/JTC/Mutex.h" << ':' << 137 << ']' << std::ends; throw JTCSystemCallException(msg, error); } } while (0);
        }
        catch(const JTCSystemCallException& e)
        {



            if (e.getError() == 16)
                return false;
            throw;
        }
        return true;
# 181 "../../../jtc/include/JTC/Mutex.h"
    }

    JTCThreadId
    get_owner() const
    {
        return JTCThreadId::self();
    }

private:




    JTCMutex(
        const JTCMutex&
    );
    void
    operator=(
        const JTCMutex&
    );


    pthread_mutex_t m_lock;
# 214 "../../../jtc/include/JTC/Mutex.h"
    friend class JTCCond;
};






class JTCRecursiveMutex
{
public:

    JTCRecursiveMutex();
    ~JTCRecursiveMutex();





    bool
    lock() const;





    bool
    unlock() const;




    bool
    trylock() const;




    JTCThreadId
    get_owner() const;

private:




    JTCRecursiveMutex(
        const JTCRecursiveMutex&
    );
    void
    operator=(
        const JTCRecursiveMutex&
    );





    bool
    lock_internal(
        int count
    );

    bool
    trylock_internal();

    bool
    unlock_internal();




    void
    lock(
        unsigned int count
    ) const;

    unsigned int
    reset_for_condvar();


    pthread_mutex_t m_lock;
# 306 "../../../jtc/include/JTC/Mutex.h"
    JTCMutex m_internal;

    unsigned int m_count;
    JTCThreadId m_owner;

    friend class JTCCondHelper;
    friend class JTCCond;
};
# 18 "../../../jtc/include/JTC/Handle.h" 2





template <class T> class JTCHandleT;

class JTCThread;
typedef JTCHandleT<JTCThread> JTCThreadHandle;

class JTCThreadGroup;
typedef JTCHandleT<JTCThreadGroup> JTCThreadGroupHandle;

class JTCRunnable;
typedef JTCHandleT<JTCRunnable> JTCRunnableHandle;





class JTCRefCount
{
public:

    long m_refcount;






    JTCMutex m_ref_mutex;


    JTCRefCount()
        : m_refcount(0)
    {
    }

    virtual
    ~JTCRefCount()
    {
    }
};





template <class T>
class JTCHandleT
{
public:




    JTCHandleT(
        T* tg = 0
        );

    JTCHandleT(
        const JTCHandleT<T>& rhs
        );

    ~JTCHandleT();




    JTCHandleT<T>&
    operator=(
        const JTCHandleT<T>& rhs
    );

    JTCHandleT<T>&
    operator=(
        T* tg
    );




    bool
    operator==(
        const JTCHandleT<T>& rhs
    ) const
    {
        return m_object == rhs.m_object;
    }

    bool
    operator!=(
        const JTCHandleT<T>& rhs
    ) const
    {
        return m_object != rhs.m_object;
    }




    bool
    operator!() const
    {
        return m_object == 0;
    }

    operator bool() const
    {
        return m_object != 0;
    }




    T*
    operator->() const
    {
        return m_object;
    }

    T*
    get() const
    {
        return m_object;
    }

    T&
    operator*()
    {
        return *m_object;
    }

private:

    T* m_object;
};
# 16 "../../../jtc/include/JTC/Thread.h" 2
# 1 "../../../jtc/include/JTC/Cond.h" 1
# 14 "../../../jtc/include/JTC/Cond.h"
# 1 "../../../jtc/include/JTC/Types.h" 1
# 15 "../../../jtc/include/JTC/Cond.h" 2
# 23 "../../../jtc/include/JTC/Cond.h"
class JTCRecursiveMutex;
class JTCMutex;
# 35 "../../../jtc/include/JTC/Cond.h"
class JTCCond
{
public:

    JTCCond();
    ~JTCCond();




    void
    wait(
        JTCRecursiveMutex& mutex
    );




    void
    wait(
        JTCMutex& mutex
    );





    bool
    wait(
        JTCRecursiveMutex& mutex,
        long timeout
    );





    bool
    wait(
        JTCMutex& mutex,
        long timeout
    );




    void
    signal();




    void
    broadcast();

private:




    bool
    wait_internal(
        JTCRecursiveMutex&,
        long timeout
    );




    bool
    wait_internal(
        JTCMutex&,
        long timeout
    );



    struct timespec
    calc_timeout(
        long timeout
    );





    JTCCond(
        const JTCCond&
    );
    void
    operator=(
        const JTCCond&
    );


    pthread_cond_t m_cond;





};
# 17 "../../../jtc/include/JTC/Thread.h" 2




class JTCThreadGroup;
class JTCThread;


typedef void (*JTCAttrHook)(pthread_attr_t*);





typedef void (*JTCRunHook)(JTCThread*);




typedef void (*JTCStartHook)();




class JTCThread : public virtual JTCRefCount
{
public:

    JTCThread(
        const char* name
    );
    JTCThread(
        JTCRunnableHandle target = JTCRunnableHandle(),
        const char* name = 0
    );
    JTCThread(
        JTCThreadGroupHandle& group,
        JTCRunnableHandle target,
        const char* name = 0
    );
    JTCThread(
        JTCThreadGroupHandle& group,
        const char* name = 0
    );

    virtual
    ~JTCThread();




    JTCThreadGroupHandle
    getThreadGroup();




    void
    setName(
        const char*
    );




    const char*
    getName() const;




    void
    start();




    virtual void
    run();




    bool
    isAlive() const;




    void
    destroy();




    void
    join();




    void
    join(
        long millis
    );




    void
    join(
        long millis,
        int nanos
    );




    void
    setPriority(
        int newPri
    );




    int
    getPriority() const;




    static int
    enumerate(
        JTCThreadHandle* list,
        int len
    );





    enum Priority
    {
        JTC_MIN_PRIORITY = 0,
        JTC_NORM_PRIORITY = 1,
        JTC_MAX_PRIORITY = 2
    };




    static JTCThread*
    currentThread();




    static void
    sleep(
        long millis,
        int nano = 0
    );




    static void
    yield();





    static int
    activeCount();




    JTCThreadId
    getId() const;
# 210 "../../../jtc/include/JTC/Thread.h"
    static void
    setAttrHook(
        JTCAttrHook attr_hook,
        JTCAttrHook* old_hook = 0
    );
# 224 "../../../jtc/include/JTC/Thread.h"
    static void
    setRunHook(
        JTCRunHook run_hook,
        JTCRunHook* old_hook = 0
    );





    static void
    setStartHook(
        JTCStartHook start_hook,
        JTCStartHook* old_hook = 0
    );

private:




    JTCThread(
        const JTCThread&
    );
    void
    operator=(
        const JTCThread&
    );




    void
    init(const JTCThreadGroupHandle& group, JTCRunnableHandle target,
              const char* name);




    JTCThread(
        JTCThreadId tid,
        bool main
    );

    static unsigned long
    get_next_thread_number();

public:





    void
    entrance_hook();




    void
    exit_hook();

private:

    static unsigned long sm_thread_number;
    static JTCMutex sm_thread_number_mutex;

    JTCThreadId m_thread_id;
    unsigned long m_thread_number;




    JTCThreadGroupHandle m_group;

    char* m_name;
    JTCRunnableHandle m_target;

    enum State
    {
        new_thread,
        runnable,
        not_runnable,
        dead
    };

    State m_state;






    JTCMutex m_mutex;




    JTCCond m_join_cond;

    bool m_is_adopted;

    static JTCThreadKey sm_tss_key;

    static JTCAttrHook sm_attr_hook;

    static JTCRunHook sm_run_hook;
    static JTCStartHook sm_start_hook;

    friend class JTCInitialize;
    friend class JTCAdoptCurrentThread;
};






std::ostream& operator<<(std::ostream& os, const JTCThread& thr);






class JTCTSSManager;




class JTCInitialize
{



    static int sm_init_count;

    JTCThreadHandle m_main_thread;
    JTCTSSManager* m_tss_manager;

    void initialize();

public:

    JTCInitialize();
    JTCInitialize(
        int& argc,
        char** argv
    );
    ~JTCInitialize();




    void
    waitTermination();




    static bool
    initialized();
};
# 399 "../../../jtc/include/JTC/Thread.h"
class JTCAdoptCurrentThread
{
    JTCThreadHandle m_adopted_thread;

public:

    JTCAdoptCurrentThread();
    ~JTCAdoptCurrentThread();
};
# 15 "../../../jtc/include/JTC/JTC.h" 2
# 1 "../../../jtc/include/JTC/ThreadGroup.h" 1
# 14 "../../../jtc/include/JTC/ThreadGroup.h"
# 1 "../../../jtc/include/JTC/Monitor.h" 1
# 17 "../../../jtc/include/JTC/Monitor.h"
template <class T> class JTCSyncT;

# 1 "../../../jtc/include/JTC/Types.h" 1
# 20 "../../../jtc/include/JTC/Monitor.h" 2
# 1 "../../../jtc/include/JTC/Cond.h" 1
# 21 "../../../jtc/include/JTC/Monitor.h" 2
# 34 "../../../jtc/include/JTC/Monitor.h"
class JTCMonitorBase
{
protected:

    JTCMonitorBase();

    virtual
    ~JTCMonitorBase();

protected:




    void validate_owner(
        const JTCThreadId&,
        const char* caller
    ) const;

    JTCCond m_mon_cond;
    int m_nnotify;

private:




    JTCMonitorBase(
        const JTCMonitorBase&
    );
    void
    operator=(
        const JTCMonitorBase&
    );
};

template <class T>
class JTCMonitorT : public JTCMonitorBase
{
public:

    JTCMonitorT();
    virtual
    ~JTCMonitorT();




    void
    wait();




    void
    wait(
        long msec
    );




    void
    notify();




    void
    notifyAll();

private:

    friend class JTCSynchronized;
    friend class JTCSyncT< JTCMonitorT >;




    void
    lock() const;




    void
    unlock() const;




    void
    notify_internal(
        int times
    );

    T m_mon_mutex;
};

# 1 "../../../jtc/include/JTC/MonitorI.h" 1
# 31 "../../../jtc/include/JTC/MonitorI.h"
template<class T>
JTCMonitorT<T>::JTCMonitorT()
{
}

template <class T>
JTCMonitorT<T>::~JTCMonitorT()
{
}
# 48 "../../../jtc/include/JTC/MonitorI.h"
template <class T> void
JTCMonitorT<T>::wait()
{



    validate_owner(m_mon_mutex.get_owner(), "wait()");




    notify_internal(m_nnotify);




    try
    {
        m_mon_cond.wait(m_mon_mutex);



    }
    catch(...)
    {
        m_nnotify = 0;
        throw;
    }
    m_nnotify = 0;
}




template <class T> void
JTCMonitorT<T>::wait(
    long timeout
)
{



    validate_owner(m_mon_mutex.get_owner(), "wait(long)");




    notify_internal(m_nnotify);




    try
    {
        m_mon_cond.wait(m_mon_mutex, timeout);




    }
    catch(...)
    {
        m_nnotify = 0;
        throw;
    }

    m_nnotify = 0;
}




template <class T> void
JTCMonitorT<T>::notify()
{



    validate_owner(m_mon_mutex.get_owner(), "notify");





    if (m_nnotify != -1)
    {
        ++m_nnotify;
    }
}




template <class T> void
JTCMonitorT<T>::notifyAll()
{



    validate_owner(m_mon_mutex.get_owner(), "notifyAll");




    m_nnotify = -1;
}
# 162 "../../../jtc/include/JTC/MonitorI.h"
template <class T> void
JTCMonitorT<T>::lock() const
{
    if (m_mon_mutex.lock())
    {




        JTCMonitorT<T>* This = (JTCMonitorT<T>*)this;
        This -> m_nnotify = 0;
    }
}




template <class T> void
JTCMonitorT<T>::unlock() const
{
    int nnotify = m_nnotify;
    if (m_mon_mutex.unlock())
    {



        JTCMonitorT<T>* This = (JTCMonitorT<T>*)this;
        This -> notify_internal(nnotify);
    }
}




template <class T> void
JTCMonitorT<T>::notify_internal(
    int nnotify
)
{



    if (nnotify != 0)
    {



        if (nnotify == -1)
        {
            m_mon_cond.broadcast();
            return;
        }
        else
        {



            while (nnotify > 0)
            {
                m_mon_cond.signal();
                --nnotify;
            }
        }
    }
}
# 134 "../../../jtc/include/JTC/Monitor.h" 2




# 1 "../../../jtc/include/JTC/Mutex.h" 1
# 139 "../../../jtc/include/JTC/Monitor.h" 2







class JTCMonitor : public JTCMonitorBase
{
public:

    JTCMonitor();
    virtual
    ~JTCMonitor();




    void
    wait();




    void
    wait(
        long msec
    );




    void
    notify();




    void
    notifyAll();

private:

    friend class JTCSynchronized;
    friend class JTCSyncT< JTCMonitor >;




    void
    lock() const;




    void
    unlock() const;




    void
    notify_internal(
        int times
    );

    JTCRecursiveMutex m_mon_mutex;
};
# 15 "../../../jtc/include/JTC/ThreadGroup.h" 2
# 1 "../../../jtc/include/JTC/Handle.h" 1
# 16 "../../../jtc/include/JTC/ThreadGroup.h" 2




class JTCThreadGroup : public JTCMonitor, public virtual JTCRefCount
{
public:




    JTCThreadGroup(
        const char* name
    );

    JTCThreadGroup(
        const JTCThreadGroupHandle& parent,
        const char* name
    );

    virtual
    ~JTCThreadGroup();




    const char*
    getName() const;




    JTCThreadGroupHandle
    getParent() const;




    bool
    isDaemon() const;




    void
    setDaemon(
        bool daemon
    );




    virtual void
    uncaughtException(
        JTCThreadHandle t,
        const JTCException& e
    );




    virtual void
    uncaughtException(
        JTCThreadHandle t
    );




    int
    getMaxPriority() const;




    bool
    isDestroyed() const;




    void
    destroy();





    void
    setMaxPriority(
        int pri
    );




    bool
    parentOf(
        const JTCThreadGroupHandle& g
    );




    int
    activeCount() const;




    int
    activeGroupCount() const;





    int
    enumerate(
        JTCThreadHandle* list,
        int len,
        bool recurse = true
    ) const;





    int
    enumerate(
        JTCThreadGroupHandle* list,
        int len,
        bool recurse = true
    ) const;







    void
    list();





    void
    list(
        std::ostream& os,
        int indent
    );



private:




    JTCThreadGroup(
        const JTCThreadGroup&
    );
    void operator=(
        const JTCThreadGroup&
    );




    class JTCThreadGroupSet
    {
    public:




        JTCThreadGroupSet()
            : m_handles(0),
              m_length(0)
        {
        }

        ~JTCThreadGroupSet()
        {
            delete [] m_handles;
        }




        void
        allocate(
            int n
        );




        int
        length() const;




        JTCThreadGroupHandle&
        operator[](
            int i
        );

    private:




        JTCThreadGroupSet(
            const JTCThreadGroupSet&
        );
        JTCThreadGroupSet&
        operator=(
            const JTCThreadGroupSet&
        );

        JTCThreadGroupHandle* m_handles;
        int m_length;
    };




    void
    create_group_snapshot(
        JTCThreadGroupSet& set
    ) const;




    void
    add(
        const JTCThreadGroupHandle& g
    );

    void
    remove(
        const JTCThreadGroupHandle& g
    );

    void
    add(
        const JTCThreadHandle& t
    );

    void
    remove(
        const JTCThreadHandle& t
    );




    int
    enumerate(
        JTCThreadHandle* list,
        int len,
        int n,
        bool recurse
    ) const;

    int
    enumerate(
        JTCThreadGroupHandle* list,
        int len,
        int n,
        bool recurse
    ) const;




    void
    init(
        const JTCThreadGroupHandle& parent,
        const char* name
    );

    JTCThreadGroupHandle m_parent;
    char* m_name;
    int m_max_priority;
    bool m_destroyed;

    int m_nthreads;
    JTCThreadHandle* m_threads;
    int m_threads_capacity;

    int m_ngroups;
    JTCThreadGroupHandle* m_groups;
    int m_groups_capacity;

    bool m_isdaemon;




    friend class JTCThread;




    friend class JTCInitialize;
    JTCThreadGroup();
};






std::ostream&
operator<<(
    std::ostream& os,
    const JTCThreadGroup& g
);
# 16 "../../../jtc/include/JTC/JTC.h" 2
# 1 "../../../jtc/include/JTC/Sync.h" 1
# 14 "../../../jtc/include/JTC/Sync.h"
# 1 "../../../jtc/include/JTC/Mutex.h" 1
# 15 "../../../jtc/include/JTC/Sync.h" 2
# 1 "../../../jtc/include/JTC/Monitor.h" 1
# 16 "../../../jtc/include/JTC/Sync.h" 2
# 1 "../../../jtc/include/JTC/RWMutex.h" 1
# 14 "../../../jtc/include/JTC/RWMutex.h"
# 1 "../../../jtc/include/JTC/Mutex.h" 1
# 15 "../../../jtc/include/JTC/RWMutex.h" 2
# 1 "../../../jtc/include/JTC/Cond.h" 1
# 16 "../../../jtc/include/JTC/RWMutex.h" 2

class JTCRWMutex
{
public:

    JTCRWMutex();
    ~JTCRWMutex();

    void
    read_lock() const;

    void
    write_lock() const;

    void
    unlock() const;

private:




    JTCRWMutex(
        const JTCRWMutex &
    );
    void
    operator=(
        const JTCRWMutex &
    );

    void
    read_lock_internal();

    void
    write_lock_internal();

    void
    unlock_internal();

    int m_count;
    unsigned int m_waiting_writers;
    JTCMutex m_mutex;
    JTCCond m_ok_to_read;
    JTCCond m_ok_to_write;
};
# 17 "../../../jtc/include/JTC/Sync.h" 2




class JTCReadLock
{
public:

    JTCReadLock(const JTCRWMutex& m)
        : m_mutex(&m)
    {
        m_mutex -> read_lock();
    }

    ~JTCReadLock()
    {
        m_mutex -> unlock();
    }

private:

    const JTCRWMutex* m_mutex;
};




class JTCWriteLock
{
public:

    JTCWriteLock(const JTCRWMutex& m)
        : m_mutex(&m)
    {
        m_mutex -> write_lock();
    }

    ~JTCWriteLock()
    {
        m_mutex -> unlock();
    }

private:

    const JTCRWMutex* m_mutex;
};






class JTCSynchronized
{
public:

    JTCSynchronized(
        const JTCMonitor& mon
    );
    JTCSynchronized(
        const JTCMutex& m
    );
    JTCSynchronized(
        const JTCRecursiveMutex& m
    );
    enum ReadWriteLockType
    {
        read_lock,
        write_lock
    };
    JTCSynchronized(
        const JTCRWMutex& m,
        ReadWriteLockType type
    );
    ~JTCSynchronized();

private:




    JTCSynchronized(
        const JTCSynchronized&
    );
    void
    operator=(
        const JTCSynchronized&
    );

    const JTCMonitor* m_monitor;
    const JTCMutex* m_mutex;
    const JTCRecursiveMutex* m_rmutex;
    const JTCRWMutex* m_rwmutex;

    enum LockType
    {
        monitor,
        mutex,
        recursive_mutex,
        read_write_mutex
    };

    LockType m_lock_type;
};





inline
JTCSynchronized::JTCSynchronized(
    const JTCMonitor& mon
)
    : m_monitor(&mon),
      m_lock_type(monitor)
{
    m_monitor -> lock();
}

inline
JTCSynchronized::JTCSynchronized(
    const JTCMutex& m
)
    : m_mutex(&m),
      m_lock_type(mutex)
{
    m_mutex -> lock();
}

inline
JTCSynchronized::JTCSynchronized(
    const JTCRecursiveMutex& m
)
    : m_rmutex(&m),
      m_lock_type(recursive_mutex)
{
    m_rmutex -> lock();
}

inline
JTCSynchronized::JTCSynchronized(
    const JTCRWMutex& m,
    ReadWriteLockType type
)
    : m_rwmutex(&m),
      m_lock_type(read_write_mutex)
{
    if (type == read_lock)
        m_rwmutex -> read_lock();
    else
        m_rwmutex -> write_lock();
}

inline
JTCSynchronized::~JTCSynchronized()
{
    switch(m_lock_type)
    {
    case monitor:
        m_monitor -> unlock();
        break;

    case mutex:
        m_mutex -> unlock();
        break;

    case recursive_mutex:
        m_rmutex -> unlock();
        break;

    case read_write_mutex:
        m_rwmutex -> unlock();
        break;
    }
}
# 17 "../../../jtc/include/JTC/JTC.h" 2
# 1 "../../../jtc/include/JTC/SyncT.h" 1
# 19 "../../../jtc/include/JTC/SyncT.h"
template <class T>
class JTCSyncT
{
public:

    JTCSyncT(const T& mutex)
        : m_mutex(mutex)
    {
        m_mutex.lock();
    }

    ~JTCSyncT()
    {
        m_mutex.unlock();
    }

private:

    const T& m_mutex;
};
# 18 "../../../jtc/include/JTC/JTC.h" 2
# 1 "../../../jtc/include/JTC/Runnable.h" 1
# 14 "../../../jtc/include/JTC/Runnable.h"
class JTCRunnable : public virtual JTCRefCount
{
public:

    virtual void run() = 0;
};
# 19 "../../../jtc/include/JTC/JTC.h" 2
# 1 "../../../jtc/include/JTC/TSS.h" 1
# 14 "../../../jtc/include/JTC/TSS.h"
# 1 "../../../jtc/include/JTC/Types.h" 1
# 15 "../../../jtc/include/JTC/TSS.h" 2

class JTCTSS
{
public:




    static JTCThreadKey
    allocate();






    static JTCThreadKey
    allocate(
        void (*cleanup)(void*)
    );




    static void
    release(
        JTCThreadKey key
    );




    static void*
    get(
        JTCThreadKey key
    );




    static void
    set(
        JTCThreadKey key,
        void* value
    );
};
# 20 "../../../jtc/include/JTC/JTC.h" 2
# 1 "../../../jtc/include/JTC/RWMutex.h" 1
# 21 "../../../jtc/include/JTC/JTC.h" 2

# 1 "../../../jtc/include/JTC/HandleI.h" 1
# 18 "../../../jtc/include/JTC/HandleI.h"
template <class T>
JTCHandleT<T>::JTCHandleT(
    T* tg
)
    : m_object(tg)
{
    if (m_object != 0)
    {






        m_object -> m_ref_mutex.lock();
        ++m_object -> m_refcount;
        m_object -> m_ref_mutex.unlock();

    }
}

template <class T>
JTCHandleT<T>::~JTCHandleT()
{




    if (m_object != 0)
    {
        bool delete_it = false;

        m_object -> m_ref_mutex.lock();
        if (--m_object -> m_refcount == 0)
            delete_it = true;
        m_object -> m_ref_mutex.unlock();

        if (delete_it)
            delete m_object;
    }

}





template <class T>
JTCHandleT<T>::JTCHandleT(
    const JTCHandleT<T>& rhs
)
    : m_object(rhs.m_object)
{
    if (m_object != 0)
    {






        m_object -> m_ref_mutex.lock();
        ++m_object -> m_refcount;
        m_object -> m_ref_mutex.unlock();

    }
}

template <class T>
JTCHandleT<T>&
JTCHandleT<T>::operator=(
    const JTCHandleT<T>& rhs
)
{
    if (m_object == rhs.m_object)
        return *this;
# 111 "../../../jtc/include/JTC/HandleI.h"
    if (m_object != 0)
    {



        bool delete_it = false;

        m_object -> m_ref_mutex.lock();
        if (--m_object -> m_refcount == 0)
            delete_it = true;
        m_object -> m_ref_mutex.unlock();

        if (delete_it)
            delete m_object;
    }

    m_object = rhs.m_object;
    if (m_object != 0)
    {
        m_object -> m_ref_mutex.lock();
        ++m_object -> m_refcount;
        m_object -> m_ref_mutex.unlock();
    }


    return *this;
}

template <class T>
JTCHandleT<T>&
JTCHandleT<T>::operator=(
    T* tg
)
{
    if (m_object == tg)
        return *this;
# 164 "../../../jtc/include/JTC/HandleI.h"
    if (m_object != 0)
    {



        bool delete_it = false;

        m_object -> m_ref_mutex.lock();
        if (--m_object -> m_refcount == 0)
            delete_it = true;
        m_object -> m_ref_mutex.unlock();

        if (delete_it)
            delete m_object;
    }

    m_object = tg;
    if (m_object != 0)
    {
        m_object -> m_ref_mutex.lock();
        ++m_object -> m_refcount;
        m_object -> m_ref_mutex.unlock();
    }


    return *this;
}
# 23 "../../../jtc/include/JTC/JTC.h" 2
# 1 "../../../jtc/include/JTC/MonitorI.h" 1
# 24 "../../../jtc/include/JTC/JTC.h" 2
# 28 "../../include/OB/Basic.h" 2
# 91 "../../include/OB/Basic.h"
namespace OB
{

          extern const char* Version;
          extern unsigned long IntegerVersion;

}
# 153 "../../include/OB/Basic.h"
# 1 "/usr/include/string.h" 1 3
# 154 "../../include/OB/Basic.h" 2
# 1 "/usr/include/assert.h" 1 3
# 36 "/usr/include/assert.h" 3
# 1 "/usr/include/features.h" 1 3
# 37 "/usr/include/assert.h" 2 3
# 65 "/usr/include/assert.h" 3
extern "C" {


extern void __assert_fail (__const char *__assertion, __const char *__file,
                           unsigned int __line, __const char *__function)
     throw () __attribute__ ((__noreturn__));


extern void __assert_perror_fail (int __errnum, __const char *__file,
                                  unsigned int __line,
                                  __const char *__function)
     throw () __attribute__ ((__noreturn__));




extern void __assert (const char *__assertion, const char *__file, int __line)
     throw () __attribute__ ((__noreturn__));


}
# 155 "../../include/OB/Basic.h" 2
# 1 "/usr/include/stdlib.h" 1 3
# 156 "../../include/OB/Basic.h" 2


# 1 "/usr/include/sys/types.h" 1 3
# 159 "../../include/OB/Basic.h" 2



# 1 "/usr/include/sys/time.h" 1 3
# 22 "/usr/include/sys/time.h" 3
# 1 "/usr/include/features.h" 1 3
# 23 "/usr/include/sys/time.h" 2 3

# 1 "/usr/include/bits/types.h" 1 3
# 25 "/usr/include/sys/time.h" 2 3

# 1 "/usr/include/time.h" 1 3
# 27 "/usr/include/sys/time.h" 2 3

# 1 "/usr/include/bits/time.h" 1 3
# 29 "/usr/include/sys/time.h" 2 3

# 1 "/usr/include/sys/select.h" 1 3
# 31 "/usr/include/sys/time.h" 2 3







extern "C" {
# 56 "/usr/include/sys/time.h" 3
struct timezone
  {
    int tz_minuteswest;
    int tz_dsttime;
  };

typedef struct timezone *__restrict __timezone_ptr_t;
# 72 "/usr/include/sys/time.h" 3
extern int gettimeofday (struct timeval *__restrict __tv,
                         __timezone_ptr_t __tz) throw ();




extern int settimeofday (__const struct timeval *__tv,
                         __const struct timezone *__tz) throw ();





extern int adjtime (__const struct timeval *__delta,
                    struct timeval *__olddelta) throw ();




enum __itimer_which
  {

    ITIMER_REAL = 0,


    ITIMER_VIRTUAL = 1,



    ITIMER_PROF = 2

  };



struct itimerval
  {

    struct timeval it_interval;

    struct timeval it_value;
  };


typedef enum __itimer_which __itimer_which_t;






extern int getitimer (__itimer_which_t __which,
                      struct itimerval *__value) throw ();




extern int setitimer (__itimer_which_t __which,
                      __const struct itimerval *__restrict __new,
                      struct itimerval *__restrict __old) throw ();



extern int utimes (__const char *__file, __const struct timeval __tvp[2])
     throw ();
# 169 "/usr/include/sys/time.h" 3
}
# 163 "../../include/OB/Basic.h" 2



# 1 "/opt/egcs/include/g++-v3/iostream" 1 3
# 167 "../../include/OB/Basic.h" 2
# 215 "../../include/OB/Basic.h"
namespace OB
{




enum NCAReason
{
    NCANotImpl,
    NCADeprecated,

    NCAWrongAlloc,
    NCADoubleFree,

    NCARefCountNotZero,
    NCARefCountZero,

    NCASeqLenGrMax,
    NCASeqRange,

    NCASeqBound,

    NCANullInit,
    NCANullPtr,
    NCANullDeref,
    NCANullString,
    NCANullValue,

    NCASelfAssign,

    NCAAnySelfReplace,

    NCADiscType,
    NCADiscMismatch,
    NCAUnionInit,

    NCANoExceptionTC,


    NCAUnembeddedRecTC,

    NCAEmbeddedRecTC,

    NCANoLongDouble
};

void NCA(NCAReason, const char*, const char*, unsigned int);
# 279 "../../include/OB/Basic.h"
size_t wcslen(const wchar_t*);
wchar_t* wcscpy(wchar_t*, const wchar_t*);
wchar_t* wcscat(wchar_t*, const wchar_t*);
int wcscmp(const wchar_t*, const wchar_t*);




class StrForStruct;
class StrForSeq;




class WStrForStruct;
class WStrForSeq;





          extern char* EmptyString;
          extern wchar_t* EmptyWString;

}

namespace CORBA
{





typedef bool Boolean;





typedef char Char;
typedef unsigned char Octet;





typedef wchar_t WChar;





typedef signed short Short;
typedef unsigned short UShort;
# 343 "../../include/OB/Basic.h"
typedef signed long Long;
typedef unsigned long ULong;
# 356 "../../include/OB/Basic.h"
typedef long long LongLong;
typedef unsigned long long ULongLong;
# 380 "../../include/OB/Basic.h"
typedef float Float;





typedef double Double;





typedef long double LongDouble;







typedef Short& Short_out;
typedef Long& Long_out;
typedef LongLong& LongLong_out;
typedef ULongLong& ULongLong_out;
typedef UShort& UShort_out;
typedef ULong& ULong_out;
typedef Float& Float_out;
typedef Double& Double_out;
typedef LongDouble& LongDouble_out;
typedef Char& Char_out;
typedef WChar& WChar_out;
typedef Boolean& Boolean_out;
typedef Octet& Octet_out;




typedef ULong Flags;
const Flags ARG_IN = 1;
const Flags ARG_OUT = 2;
const Flags ARG_INOUT = 3;
const Flags OUT_LIST_MEMORY = 4;
const Flags IN_COPY_VALUE = 5;
const Flags CTX_RESTRICT_SCOPE = 6;
# 438 "../../include/OB/Basic.h"
char* string_alloc(ULong);
wchar_t* wstring_alloc(ULong);

void string_free(char*);
void wstring_free(wchar_t*);

char* string_dup(const char*);
wchar_t* wstring_dup(const wchar_t*);




class String_var
{
protected:

    char* ptr_;

public:




    String_var() : ptr_(0) { }
    String_var(char*);
    String_var(const char* p) : ptr_(string_dup(p)) { }
    String_var(const String_var&);
    String_var(const OB::StrForSeq&);
    String_var(const OB::StrForStruct&);
    ~String_var() { string_free(ptr_); }

    String_var& operator=(char*);
    String_var& operator=(const char*);
    String_var& operator=(const String_var&);
    String_var& operator=(const OB::StrForStruct&);
    String_var& operator=(const OB::StrForSeq&);

    char& operator[](short idx) { return ptr_[idx]; }
    char operator[](short idx) const { return ptr_[idx]; }
    char& operator[](unsigned short idx) { return ptr_[idx]; }
    char operator[](unsigned short idx) const { return ptr_[idx]; }
    char& operator[](int idx) { return ptr_[idx]; }
    char operator[](int idx) const { return ptr_[idx]; }
    char& operator[](unsigned int idx) { return ptr_[idx]; }
    char operator[](unsigned int idx) const { return ptr_[idx]; }
    char& operator[](long idx) { return ptr_[idx]; }
    char operator[](long idx) const { return ptr_[idx]; }
    char& operator[](unsigned long idx) { return ptr_[idx]; }
    char operator[](unsigned long idx) const { return ptr_[idx]; }





    operator char*&() const { return (char*&)ptr_; }






    const char* in() const { return ptr_; }
    char*& inout() { return ptr_; }
    char*& out();
    char* _retn();




    char*& ptr() { return ptr_; }




    String_var& operator+=(const char*);
    String_var& operator+=(char);
    String_var& operator+=(unsigned char);

    String_var& operator+=(LongLong);
    String_var& operator+=(ULongLong);

    String_var& operator+=(long n)
    { return operator+=((LongLong)n); }
    String_var& operator+=(unsigned long n)
    { return operator+=((ULongLong)n); }

    String_var& operator+=(short n)
    { return operator+=((LongLong)n); }
    String_var& operator+=(unsigned short n)
    { return operator+=((ULongLong)n); }

    String_var& operator+=(int n)
    { return operator+=((LongLong)n); }
    String_var& operator+=(unsigned int n)
    { return operator+=((ULongLong)n); }




    friend class String_out;
};

class String_out;

}


namespace OB
{




class StrForStruct : public CORBA::String_var
{
public:




    StrForStruct() : CORBA::String_var(OB::EmptyString) { }
    StrForStruct(char* p) : CORBA::String_var(p) { }
    StrForStruct(const char* p) : CORBA::String_var(p) { }
    StrForStruct(const StrForStruct& r) : CORBA::String_var(r) { }
    StrForStruct(const StrForSeq& r) : CORBA::String_var(r) { }
# 576 "../../include/OB/Basic.h"
    StrForStruct& operator=(char* p)
    { CORBA::String_var::operator=(p); return *this; }
    StrForStruct& operator=(const char* p)
    { CORBA::String_var::operator=(p); return *this; }
    StrForStruct& operator=(const CORBA::String_var& r)
    { CORBA::String_var::operator=(r); return *this; }
    StrForStruct& operator=(const StrForStruct& r)
    { CORBA::String_var::operator=(r); return *this; }
    StrForStruct& operator=(const StrForSeq& r)
    { CORBA::String_var::operator=(r); return *this; }

};




class StrForSeq
{
    char** ptr_;
    CORBA::Boolean rel_;

public:





    StrForSeq(char** p, CORBA::Boolean rel) : ptr_(p), rel_(rel) { }
    StrForSeq(const StrForSeq& r) : ptr_(r.ptr_), rel_(r.rel_) { }




    StrForSeq& operator=(char*);
    StrForSeq& operator=(const char*);
    StrForSeq& operator=(const CORBA::String_var&);
    StrForSeq& operator=(const StrForStruct&);
    StrForSeq& operator=(const StrForSeq&);

    char& operator[](short idx) { return (*ptr_)[idx]; }
    char operator[](short idx) const { return (*ptr_)[idx]; }
    char& operator[](unsigned short idx) { return (*ptr_)[idx]; }
    char operator[](unsigned short idx) const { return (*ptr_)[idx]; }
    char& operator[](int idx) { return (*ptr_)[idx]; }
    char operator[](int idx) const { return (*ptr_)[idx]; }
    char& operator[](unsigned int idx) { return (*ptr_)[idx]; }
    char operator[](unsigned int idx) const { return (*ptr_)[idx]; }
    char& operator[](long idx) { return (*ptr_)[idx]; }
    char operator[](long idx) const { return (*ptr_)[idx]; }
    char& operator[](unsigned long idx) { return (*ptr_)[idx]; }
    char operator[](unsigned long idx) const { return (*ptr_)[idx]; }





    operator char*&() const { return (char*&)*ptr_; }






    const char* in() const { return *ptr_; }
    char*& inout() { return *ptr_; }
    char*& out();
    char* _retn();




    char*& ptr() { return *ptr_; }




    friend class CORBA::String_out;
};

}


namespace CORBA
{




class String_out
{

    void operator=(const String_var&);
    void operator=(const OB::StrForSeq&);

    char*& ptr_;

public:

    String_out(char*& p)
        : ptr_(p)
    {
        ptr_ = 0;
    }

    String_out(String_var& p)
        : ptr_(p.ptr_)
    {
        string_free(ptr_);
        ptr_ = 0;
    }

    String_out(OB::StrForSeq& p)
        : ptr_(*p.ptr_)
    {
        string_free(ptr_);
        ptr_ = 0;
    }

    String_out(const String_out& p)
        : ptr_(p.ptr_)
    {
    }

    String_out& operator=(const String_out& p)
    {
        ptr_ = p.ptr_;
        return *this;
    }

    String_out& operator=(char* p)
    {
        ptr_ = p;
        return *this;
    }

    String_out& operator=(const char* p)
    {
        ptr_ = string_dup(p);
        return *this;
    }

    char& operator[](short idx) { return ptr_[idx]; }
    char& operator[](unsigned short idx) { return ptr_[idx]; }
    char& operator[](int idx) { return ptr_[idx]; }
    char& operator[](unsigned int idx) { return ptr_[idx]; }
    char& operator[](long idx) { return ptr_[idx]; }
    char& operator[](unsigned long idx) { return ptr_[idx]; }




    operator char*&() { return ptr_; }


    char*& ptr() { return ptr_; }
};




class WString_var
{
protected:

    wchar_t* ptr_;

public:




    WString_var() : ptr_(0) { }
    WString_var(wchar_t*);
    WString_var(const wchar_t* p) : ptr_(wstring_dup(p)) { }
    WString_var(const WString_var&);
    WString_var(const OB::WStrForSeq&);
    WString_var(const OB::WStrForStruct&);
    ~WString_var() { wstring_free(ptr_); }

    WString_var& operator=(wchar_t*);
    WString_var& operator=(const wchar_t*);
    WString_var& operator=(const WString_var&);
    WString_var& operator=(const OB::WStrForStruct&);
    WString_var& operator=(const OB::WStrForSeq&);

    wchar_t& operator[](short idx) { return ptr_[idx]; }
    wchar_t operator[](short idx) const { return ptr_[idx]; }
    wchar_t& operator[](unsigned short idx) { return ptr_[idx]; }
    wchar_t operator[](unsigned short idx) const { return ptr_[idx]; }
    wchar_t& operator[](int idx) { return ptr_[idx]; }
    wchar_t operator[](int idx) const { return ptr_[idx]; }
    wchar_t& operator[](unsigned int idx) { return ptr_[idx]; }
    wchar_t operator[](unsigned int idx) const { return ptr_[idx]; }
    wchar_t& operator[](long idx) { return ptr_[idx]; }
    wchar_t operator[](long idx) const { return ptr_[idx]; }
    wchar_t& operator[](unsigned long idx) { return ptr_[idx]; }
    wchar_t operator[](unsigned long idx) const { return ptr_[idx]; }





    operator wchar_t*&() const { return (wchar_t*&)ptr_; }






    const wchar_t* in() const { return ptr_; }
    wchar_t*& inout() { return ptr_; }
    wchar_t*& out();
    wchar_t* _retn();




    wchar_t*& ptr() { return ptr_; }




    WString_var& operator+=(const wchar_t*);
    WString_var& operator+=(wchar_t);




    friend class WString_out;
};

class WString_out;

}


namespace OB
{




class WStrForStruct : public CORBA::WString_var
{
public:




    WStrForStruct() : CORBA::WString_var(OB::EmptyWString) { }
    WStrForStruct(wchar_t* p) : CORBA::WString_var(p) { }
    WStrForStruct(const wchar_t* p) : CORBA::WString_var(p) { }
    WStrForStruct(const WStrForStruct& r) : CORBA::WString_var(r) { }
    WStrForStruct(const WStrForSeq& r) : CORBA::WString_var(r) { }
# 843 "../../include/OB/Basic.h"
    WStrForStruct& operator=(wchar_t* p)
    { CORBA::WString_var::operator=(p); return *this; }
    WStrForStruct& operator=(const wchar_t* p)
    { CORBA::WString_var::operator=(p); return *this; }
    WStrForStruct& operator=(const CORBA::WString_var& r)
    { CORBA::WString_var::operator=(r); return *this; }
    WStrForStruct& operator=(const WStrForStruct& r)
    { CORBA::WString_var::operator=(r); return *this; }
    WStrForStruct& operator=(const WStrForSeq& r)
    { CORBA::WString_var::operator=(r); return *this; }

};




class WStrForSeq
{
    wchar_t** ptr_;
    CORBA::Boolean rel_;

public:





    WStrForSeq(wchar_t** p, CORBA::Boolean rel) : ptr_(p), rel_(rel) { }
    WStrForSeq(const WStrForSeq& r) : ptr_(r.ptr_), rel_(r.rel_) { }




    WStrForSeq& operator=(wchar_t*);
    WStrForSeq& operator=(const wchar_t*);
    WStrForSeq& operator=(const CORBA::WString_var&);
    WStrForSeq& operator=(const WStrForStruct&);
    WStrForSeq& operator=(const WStrForSeq&);

    wchar_t& operator[](short idx) { return (*ptr_)[idx]; }
    wchar_t operator[](short idx) const { return (*ptr_)[idx]; }
    wchar_t& operator[](unsigned short idx) { return (*ptr_)[idx]; }
    wchar_t operator[](unsigned short idx) const { return (*ptr_)[idx]; }
    wchar_t& operator[](int idx) { return (*ptr_)[idx]; }
    wchar_t operator[](int idx) const { return (*ptr_)[idx]; }
    wchar_t& operator[](unsigned int idx) { return (*ptr_)[idx]; }
    wchar_t operator[](unsigned int idx) const { return (*ptr_)[idx]; }
    wchar_t& operator[](long idx) { return (*ptr_)[idx]; }
    wchar_t operator[](long idx) const { return (*ptr_)[idx]; }
    wchar_t& operator[](unsigned long idx) { return (*ptr_)[idx]; }
    wchar_t operator[](unsigned long idx) const { return (*ptr_)[idx]; }





    operator wchar_t*&() const { return (wchar_t*&)*ptr_; }






    const wchar_t* in() const { return *ptr_; }
    wchar_t*& inout() { return *ptr_; }
    wchar_t*& out();
    wchar_t* _retn();




    wchar_t*& ptr() { return *ptr_; }




    friend class CORBA::WString_out;
};

}


namespace CORBA
{




class WString_out
{

    void operator=(const WString_var&);
    void operator=(const OB::WStrForSeq&);

    WChar*& ptr_;

public:

    WString_out(WChar*& p)
        : ptr_(p)
    {
        ptr_ = 0;
    }

    WString_out(WString_var& p)
        : ptr_(p.ptr_)
    {
        wstring_free(ptr_);
        ptr_ = 0;
    }

    WString_out(OB::WStrForSeq& p)
        : ptr_(*p.ptr_)
    {
        wstring_free(ptr_);
        ptr_ = 0;
    }

    WString_out(const WString_out& p)
        : ptr_(p.ptr_)
    {
    }

    WString_out& operator=(const WString_out& p)
    {
        ptr_ = p.ptr_;
        return *this;
    }

    WString_out& operator=(WChar* p)
    {
        ptr_ = p;
        return *this;
    }

    WString_out& operator=(const WChar* p)
    {
        ptr_ = wstring_dup(p);
        return *this;
    }

    wchar_t& operator[](short idx) { return ptr_[idx]; }
    wchar_t& operator[](unsigned short idx) { return ptr_[idx]; }
    wchar_t& operator[](int idx) { return ptr_[idx]; }
    wchar_t& operator[](unsigned int idx) { return ptr_[idx]; }
    wchar_t& operator[](long idx) { return ptr_[idx]; }
    wchar_t& operator[](unsigned long idx) { return ptr_[idx]; }




    operator wchar_t*&() { return ptr_; }


    wchar_t*& ptr() { return ptr_; }
};

}





std::ostream& operator<<(std::ostream&, const CORBA::String_var&);
std::ostream& operator<<(std::ostream&, CORBA::String_out&);
std::ostream& operator<<(std::ostream&, const OB::StrForSeq&);
std::istream& operator>>(std::istream&, CORBA::String_var&);
std::istream& operator>>(std::istream&, CORBA::String_out&);
std::istream& operator>>(std::istream&, OB::StrForSeq&);





std::ostream& operator<<(std::ostream&, const CORBA::WString_var&);
std::ostream& operator<<(std::ostream&, CORBA::WString_out&);
std::ostream& operator<<(std::ostream&, const OB::WStrForSeq&);
# 1030 "../../include/OB/Basic.h"
namespace OB
{
# 1042 "../../include/OB/Basic.h"
const CORBA::Boolean Endian = true;
# 1061 "../../include/OB/Basic.h"
void* Alloc(size_t, CORBA::ULong);




void Free(void*);
CORBA::ULong Allocated(const void*);



bool AllocCheck(const void*);





char** StrSeqAllocbuf(CORBA::ULong);
void StrSeqFreebuf(char**);
wchar_t** WStrSeqAllocbuf(CORBA::ULong);
void WStrSeqFreebuf(wchar_t**);




char* OctetsToAscii(const CORBA::Octet*, CORBA::ULong);
CORBA::Octet* AsciiToOctets(const char*);





bool StringToULongLong(const char*, const char**, CORBA::UShort,
                       CORBA::ULongLong&);
bool StringToLongLong(const char*, const char**, CORBA::UShort,
                      CORBA::LongLong&);
char* ULongLongToString(CORBA::ULongLong);
char* LongLongToString(CORBA::LongLong);




class SimpleRefCount
{
    CORBA::Long ref_;




    SimpleRefCount(const SimpleRefCount&);
    void operator=(const SimpleRefCount&);

public:

    SimpleRefCount() : ref_(1) { }
    virtual ~SimpleRefCount()
    { ( (int)(ref_ == 0) ? (void)0 : (OB::NCA(NCARefCountNotZero, "ref_ == 0", "../../include/OB/Basic.h", 1116), abort()) ); }




    void _OB_incRef() { ++ref_; }





    void _OB_decRef()
    {
        ( (int)(ref_ > 0) ? (void)0 : (OB::NCA(NCARefCountZero, "ref_ > 0", "../../include/OB/Basic.h", 1129), abort()) );
        if(--ref_ == 0)
            delete this;
    }




    CORBA::ULong _OB_getRef() const { return (CORBA::ULong)ref_; }
    void _OB_setRef(CORBA::ULong ref)
    { ref_ = (CORBA::Long)ref; (static_cast<void> ((ref_ >= 0) ? 0 : (__assert_fail ("ref_ >= 0", "../../include/OB/Basic.h", 1139, __PRETTY_FUNCTION__), 0))); }
};
# 1189 "../../include/OB/Basic.h"
class RefCount
{
    CORBA::Long ref_;
    JTCMutex mut_;




    RefCount(const RefCount&);
    void operator=(const RefCount&);

public:

    RefCount() : ref_(1) { }
    virtual ~RefCount() { ( (int)(ref_ == 0) ? (void)0 : (OB::NCA(NCARefCountNotZero, "ref_ == 0", "../../include/OB/Basic.h", 1203), abort()) ); }




    void _OB_incRef() { JTCSynchronized sync(mut_); ++ref_; }





    void _OB_decRef()
    {
        bool deleteThis;

        {
            JTCSynchronized sync(mut_);
            ( (int)(ref_ > 0) ? (void)0 : (OB::NCA(NCARefCountZero, "ref_ > 0", "../../include/OB/Basic.h", 1220), abort()) );
            deleteThis = (--ref_ == 0);
        }






        if(deleteThis)
            delete this;
    }




    CORBA::ULong _OB_getRef() const { return (CORBA::ULong)ref_; }
    void _OB_setRef(CORBA::ULong ref)
    { JTCSynchronized sync(mut_); ref_ = (CORBA::Long)ref; (static_cast<void> ((ref_ >= 0) ? 0 : (__assert_fail ("ref_ >= 0", "../../include/OB/Basic.h", 1238, __PRETTY_FUNCTION__), 0))); }
};






class RefCountable
{
public:

    virtual ~RefCountable() { }

    virtual void _add_ref() = 0;
    virtual void _remove_ref() = 0;
};

}
# 15 "../../include/OB/Template.h" 2

namespace OB
{




class InputStreamImpl;
class OutputStreamImpl;
# 32 "../../include/OB/Template.h"
template<class T>
class FixVar
{
    T* ptr_;

public:




    FixVar() : ptr_(0) { }
    FixVar(T* p) : ptr_(p) { ( (int)(p != 0) ? (void)0 : (OB::NCA(NCANullInit, "p != 0", "../../include/OB/Template.h", 43), abort()) ); }
    FixVar(const T& r) : ptr_(new T(r)) { }




    FixVar(const FixVar<T>& r)
        : ptr_(r.ptr_ ? new T(*r.ptr_) : 0) { }

    ~FixVar() { delete ptr_; }

    FixVar<T>& operator=(T*);
    FixVar<T>& operator=(const T&);
    FixVar<T>& operator=(const FixVar<T>&);


    T* operator->() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 59), abort()) ); return ptr_; }
# 69 "../../include/OB/Template.h"
    operator T&() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 69), abort()) ); return *ptr_; }






    const T& in() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 76), abort()) ); return *ptr_; }
    T& inout() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 77), abort()) ); return *ptr_; }
    T& out()
    {
        if(ptr_ == 0)
            ptr_ = new T;
        return *ptr_;
    }
    const T& _retn() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 84), abort()) ); return *ptr_; }




    T*& ptr() { return ptr_; }
};




template<class T> class VarOut;

template<class T>
class VarVar
{
    friend class VarOut<T>;
    T* ptr_;

public:




    VarVar() : ptr_(0) { }
    VarVar(T* p) : ptr_(p) { ( (int)(p != 0) ? (void)0 : (OB::NCA(NCANullInit, "p != 0", "../../include/OB/Template.h", 109), abort()) ); }




    VarVar(const VarVar<T>& r)
        : ptr_(r.ptr_ ? new T(*r.ptr_) : 0) { }

    ~VarVar() { delete ptr_; }

    VarVar<T>& operator=(T*);
    VarVar<T>& operator=(const VarVar<T>&);


    T* operator->() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 123), abort()) ); return ptr_; }
# 133 "../../include/OB/Template.h"
    operator T&() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 133), abort()) ); return *ptr_; }




    operator T*&() { return ptr_; }


    const T& in() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 141), abort()) ); return *ptr_; }
    T& inout() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 142), abort()) ); return *ptr_; }
    T*& out() { delete ptr_; ptr_ = 0; return ptr_; }
    T* _retn() { T* ret = ptr_; ptr_ = 0; return ret; }




    T*& ptr() { return ptr_; }
};




template <class T> class SeqOut;

template<class T>
class SeqVar
{
    friend class SeqOut<T>;
    T* ptr_;

public:




    SeqVar() : ptr_(0) { }
    SeqVar(T* p) : ptr_(p) { ( (int)(p != 0) ? (void)0 : (OB::NCA(NCANullInit, "p != 0", "../../include/OB/Template.h", 169), abort()) ); }




    SeqVar(const SeqVar<T>& r)
        : ptr_(r.ptr_ ? new T(*r.ptr_) : 0) { }

    ~SeqVar() { delete ptr_; }

    SeqVar<T>& operator=(T*);
    SeqVar<T>& operator=(const SeqVar<T>&);


    T* operator->() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 183), abort()) ); return ptr_; }
# 193 "../../include/OB/Template.h"
    typedef typename T::SubType SubType;
    typedef typename T::ConstSubType ConstSubType;


    SubType operator[](short idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 198), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](unsigned short idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 200), abort()) ); return ptr_ -> operator[](idx); }
# 209 "../../include/OB/Template.h"
    ConstSubType operator[](short idx) const
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 210), abort()) ); return ptr_ -> operator[](idx); }
    ConstSubType operator[](unsigned short idx) const
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 212), abort()) ); return ptr_ -> operator[](idx); }


    SubType operator[](int idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 216), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](unsigned int idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 218), abort()) ); return ptr_ -> operator[](idx); }
# 227 "../../include/OB/Template.h"
    ConstSubType operator[](int idx) const
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 228), abort()) ); return ptr_ -> operator[](idx); }
    ConstSubType operator[](unsigned int idx) const
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 230), abort()) ); return ptr_ -> operator[](idx); }


    SubType operator[](long idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 234), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](unsigned long idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 236), abort()) ); return ptr_ -> operator[](idx); }
# 245 "../../include/OB/Template.h"
    ConstSubType operator[](long idx) const
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 246), abort()) ); return ptr_ -> operator[](idx); }
    ConstSubType operator[](unsigned long idx) const
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 248), abort()) ); return ptr_ -> operator[](idx); }






    operator T&() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 255), abort()) ); return *ptr_; }




    operator T*&() { return ptr_; }


    const T& in() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 263), abort()) ); return *ptr_; }
    T& inout() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 264), abort()) ); return *ptr_; }
    T*& out() { delete ptr_; ptr_ = 0; return ptr_; }
    T* _retn() { T* ret = ptr_; ptr_ = 0; return ret; }




    T*& ptr() { return ptr_; }
};




template<class T_slice, class T, CORBA::ULong n>
class FixArrayVar
{
    T_slice* ptr_;

public:

    FixArrayVar() : ptr_(0) { }
    FixArrayVar(T_slice* p) : ptr_(p) { ( (int)(p != 0) ? (void)0 : (OB::NCA(NCANullInit, "p != 0", "../../include/OB/Template.h", 285), abort()) ); }
    FixArrayVar(const FixArrayVar<T_slice, T, n>&);
    ~FixArrayVar() { delete [] (T*) ptr_; }

    FixArrayVar<T_slice, T, n>& operator=(T_slice*);
    FixArrayVar<T_slice, T, n>&
    operator=(const FixArrayVar<T_slice, T, n>&);

    T_slice& operator[](short idx) { return ptr_[idx]; }
    const T_slice& operator[](short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned short idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](int idx) { return ptr_[idx]; }
    const T_slice& operator[](int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned int idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](long idx) { return ptr_[idx]; }
    const T_slice& operator[](long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned long idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
# 320 "../../include/OB/Template.h"
    operator T_slice*() const { return ptr_; }
# 334 "../../include/OB/Template.h"
    const T_slice* in() const { return ptr_; }

    T_slice* inout() { return ptr_; }
    T_slice* out() { delete [] (T*) ptr_; ptr_ = 0; return ptr_; }
    T_slice* _retn() { T_slice* ret = ptr_; ptr_ = 0; return ret; }




    T_slice* ptr() { return ptr_; }
};




template<class T_slice, class T, CORBA::ULong n> class VarArrayOut;

template<class T_slice, class T, CORBA::ULong n>
class VarArrayVar
{
    friend class VarArrayOut<T_slice, T, n>;
    T_slice* ptr_;

public:

    VarArrayVar() : ptr_(0) { }
    VarArrayVar(T_slice* p) : ptr_(p) { ( (int)(p != 0) ? (void)0 : (OB::NCA(NCANullInit, "p != 0", "../../include/OB/Template.h", 360), abort()) ); }
    VarArrayVar(const VarArrayVar<T_slice, T, n>&);
    ~VarArrayVar() { delete [] (T*) ptr_; }

    VarArrayVar<T_slice, T, n>& operator=(T_slice*);
    VarArrayVar<T_slice, T, n>&
    operator=(const VarArrayVar<T_slice, T, n>&);

    T_slice& operator[](short idx) { return ptr_[idx]; }
    const T_slice& operator[](short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned short idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](int idx) { return ptr_[idx]; }
    const T_slice& operator[](int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned int idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](long idx) { return ptr_[idx]; }
    const T_slice& operator[](long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned long idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
# 395 "../../include/OB/Template.h"
    operator T_slice*&() const { return (T_slice*&)ptr_; }
# 409 "../../include/OB/Template.h"
    const T_slice* in() const { return ptr_; }

    T_slice* inout() { return ptr_; }
    T_slice*& out() { delete [] (T*) ptr_; ptr_ = 0; return ptr_; }
    T_slice* _retn() { T_slice* ret = ptr_; ptr_ = 0; return ret; }




    T_slice* ptr() { return ptr_; }
};




template<class T_slice, class T, CORBA::ULong n, class U>
class FixArrayForAny
{





    typedef U Unique;

    T_slice* ptr_;
    CORBA::Boolean nocopy_;

public:

    FixArrayForAny() : ptr_(0), nocopy_(false) { }
    FixArrayForAny(T_slice* p, CORBA::Boolean nc = false)
        : ptr_(p), nocopy_(nc) { };
    FixArrayForAny(const FixArrayForAny<T_slice, T, n, U>& r,
                  CORBA::Boolean nc = false)
        : ptr_(r.ptr_), nocopy_(nc) { };

    CORBA::Boolean nocopy() const { return nocopy_; }

    FixArrayForAny<T_slice, T, n, U>& operator=(T_slice* p)
    { ptr_ = p; return *this; }
    FixArrayForAny<T_slice, T, n, U>&
    operator=(const FixArrayForAny<T_slice, T, n, U>& r)
    { ptr_ = r.ptr_; return *this; }

    T_slice& operator[](short idx) { return ptr_[idx]; }
    const T_slice& operator[](short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned short idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](int idx) { return ptr_[idx]; }
    const T_slice& operator[](int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned int idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](long idx) { return ptr_[idx]; }
    const T_slice& operator[](long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned long idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
# 481 "../../include/OB/Template.h"
    operator T_slice*() const { return ptr_; }
# 495 "../../include/OB/Template.h"
    const T_slice* in() const { return ptr_; }

    T_slice* inout() { return ptr_; }
    T_slice* out() { delete [] (T*) ptr_; ptr_ = 0; return ptr_; }
    T_slice* _retn() { T_slice* ret = ptr_; ptr_ = 0; return ret; }




    T_slice* ptr() { return ptr_; }
};




template<class T_slice, class T, CORBA::ULong n, class U>
class VarArrayForAny
{





    typedef U Unique;

    T_slice* ptr_;
    CORBA::Boolean nocopy_;

public:

    VarArrayForAny() : ptr_(0), nocopy_(false) { }
    VarArrayForAny(T_slice* p, CORBA::Boolean nc = false)
        : ptr_(p), nocopy_(nc) { };
    VarArrayForAny(const VarArrayForAny<T_slice, T, n, U>& r,
                  CORBA::Boolean nc = false)
        : ptr_(r.ptr_), nocopy_(nc) { };

    CORBA::Boolean nocopy() const { return nocopy_; }

    VarArrayForAny<T_slice, T, n, U>& operator=(T_slice* p)
    { ptr_ = p; return *this; }
    VarArrayForAny<T_slice, T, n, U>&
    operator=(const VarArrayForAny<T_slice, T, n, U>& r)
    { ptr_ = r.ptr_; return *this; }

    T_slice& operator[](short idx) { return ptr_[idx]; }
    const T_slice& operator[](short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned short idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned short idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](int idx) { return ptr_[idx]; }
    const T_slice& operator[](int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned int idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned int idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](long idx) { return ptr_[idx]; }
    const T_slice& operator[](long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
    T_slice& operator[](unsigned long idx) { return ptr_[idx]; }
    const T_slice& operator[](unsigned long idx) const
    { return ((const T_slice*)ptr_)[idx]; }
# 567 "../../include/OB/Template.h"
    operator T_slice*&() const { return (T_slice*&)ptr_; }
# 581 "../../include/OB/Template.h"
    const T_slice* in() const { return ptr_; }

    T_slice* inout() { return ptr_; }
    T_slice*& out() { delete [] (T*) ptr_; ptr_ = 0; return ptr_; }
    T_slice* _retn() { T_slice* ret = ptr_; ptr_ = 0; return ret; }




    T_slice* ptr() { return ptr_; }
};




class ObjBase
{
};

template<class T> class ObjForSeq;
template<class T> class ObjOut;

template<class T>
class ObjVar : public ObjBase
{




    ObjVar(const ObjBase&) { }
    void operator=(const ObjBase&) { }





    friend class ObjOut<T>;

    T* ptr_;

public:



    ObjVar() : ptr_(0) { }
    ObjVar(T* p) : ptr_(p) { }
    ObjVar(const ObjVar<T>& r) : ptr_(r.ptr_) { OBDuplicate(ptr_); }
    ObjVar(const ObjForSeq<T>&);
    ~ObjVar() { OBRelease(ptr_); }

    ObjVar<T>& operator=(T* p)
    {
        T* old = ptr_;
        ptr_ = p;
        OBRelease(old);
        return *this;
    }
    ObjVar<T>& operator=(const ObjVar<T>& r)
    {
        if(r.ptr_ != ptr_)
        {
            T* old = ptr_;
            ptr_ = r.ptr_;
            OBDuplicate(ptr_);
            OBRelease(old);
        }
        return *this;
    }
    ObjVar<T>& operator=(const ObjForSeq<T>&);

    T* operator->() const { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 651), abort()) ); return ptr_; }





    operator T*&() const { return (T*&)ptr_; }






    T* in() const { return ptr_; }
    T*& inout() { return ptr_; }
    T*& out() { T* old = ptr_; ptr_ = 0; OBRelease(old); return ptr_; }
    T* _retn() { T* ret = ptr_; ptr_ = 0; return ret; }




    T*& ptr() { return ptr_; }
};




template<class T>
class ObjForSeq : public ObjBase
{




    void operator=(const ObjBase&) { }
    ObjForSeq(const ObjBase&) { }

    T** ptr_;
    CORBA::Boolean rel_;

public:





    ObjForSeq(T** p, CORBA::Boolean rel) : ptr_(p), rel_(rel) { }
    ObjForSeq(const ObjForSeq<T>& r) : ptr_(r.ptr_), rel_(r.rel_) { }




    ObjForSeq<T>& operator=(T* p)
    {
        if(rel_)
        {
            T* old = *ptr_;
            *ptr_ = p;
            OBRelease(old);
        }
        else
            *ptr_ = p;
        return *this;
    }
    ObjForSeq<T>& operator=(const ObjVar<T>& r)
    {
        if(r.in() != *ptr_)
        {
            if(rel_)
            {
                T* old = *ptr_;
                *ptr_ = r.in();
                OBDuplicate(*ptr_);
                OBRelease(old);
            }
            else
            {
                *ptr_ = r.in();
                OBDuplicate(*ptr_);
            }
        }
        return *this;
    }
    ObjForSeq<T>& operator=(const ObjForSeq<T>& r)
    {
        if(*r.ptr_ != *ptr_)
        {
            if(rel_)
            {
                T* old = *ptr_;
                *ptr_ = *r.ptr_;
                OBDuplicate(*ptr_);
                OBRelease(old);
            }
            else
            {
                *ptr_ = *r.ptr_;
                OBDuplicate(*ptr_);
            }
        }
        return *this;
    }

    T* operator->() const { ( (int)(*ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "*ptr_ != 0", "../../include/OB/Template.h", 754), abort()) ); return *ptr_; }





    operator T*&() const { return (T*&)*ptr_; }






    T* in() const { return *ptr_; }
    T*& inout() { return *ptr_; }
    T*& out()
    {
        if(rel_)
        {
            T* old = *ptr_;
            *ptr_ = 0;
            OBRelease(old);
        }
        else
            *ptr_ = 0;
        return *ptr_;
    }
    T* _retn() { T* ret = *ptr_; *ptr_ = 0; return ret; }




    T*& ptr() { return *ptr_; }
};

template<class T>
inline
ObjVar<T>::ObjVar(const ObjForSeq<T>& r)
    : ptr_(r.in())
{
    OBDuplicate(ptr_);
}

template<class T>
inline ObjVar<T>&
ObjVar<T>::operator=(const ObjForSeq<T>& r)
{
    if(r.in() != ptr_)
    {
        T* old = ptr_;
        ptr_ = r.in();
        OBDuplicate(ptr_);
        OBRelease(old);
    }
    return *this;
}
# 823 "../../include/OB/Template.h"
template <class T>
class VarOut
{



    void operator=(const VarVar<T>&) { }

    T*& ptr_;

public:




    VarOut(T*& p)
        : ptr_(p)
    {
        ptr_ = 0;
    }

    VarOut(VarVar<T>& p)
        : ptr_(p.ptr_)
    {
        delete ptr_;
        ptr_ = 0;
    }

    VarOut(const VarOut<T>& p)
        : ptr_(p.ptr_)
    {
    }

    VarOut<T>& operator=(const VarOut<T>& p)
    {
        ptr_ = p.ptr_;
        return *this;
    }

    VarOut<T>& operator=(T* p)
    {
        ptr_ = p;
        return *this;
    }

    T* operator->() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 868), abort()) ); return ptr_; }




    operator T&() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 873), abort()) ); return *ptr_; }
    operator T*&() { return ptr_; }


    T*& ptr() { return ptr_; }
};




template<class T>
class SeqOut
{



    void operator=(const SeqVar<T>&) { }

    T*& ptr_;

public:




    SeqOut(T*& p)
        : ptr_(p)
    {
        ptr_ = 0;
    }

    SeqOut(SeqVar<T>& p)
        : ptr_(p.ptr_)
    {
        delete ptr_;
        ptr_ = 0;
    }

    SeqOut(const SeqOut<T>& p)
        : ptr_(p.ptr_)
    {
    }

    SeqOut<T>& operator=(const SeqOut<T>& p)
    {
        ptr_ = p.ptr_;
        return *this;
    }

    SeqOut<T>& operator=(T* p)
    {
        ptr_ = p;
        return *this;
    }

    T* operator->() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 928), abort()) ); return ptr_; }





    typedef typename T::SubType SubType;
    typedef typename T::ConstSubType ConstSubType;


    SubType operator[](short idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 939), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](unsigned short idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 941), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](int idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 943), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](unsigned int idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 945), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](long idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 947), abort()) ); return ptr_ -> operator[](idx); }
    SubType operator[](unsigned long idx)
    { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 949), abort()) ); return ptr_ -> operator[](idx); }




    operator T&() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullDeref, "ptr_ != 0", "../../include/OB/Template.h", 954), abort()) ); return *ptr_; }
    operator T*&() { return ptr_; }


    T*& ptr() { return ptr_; }
};




template<class T_slice, class T, CORBA::ULong n>
class VarArrayOut
{



    void operator=(const VarArrayVar<T_slice, T, n>&) { }
    T_slice*& ptr_;

public:




    VarArrayOut(T_slice*& p)
        : ptr_(p)
    {
        ptr_ = 0;
    }

    VarArrayOut(VarArrayVar<T_slice, T, n>& p)
        : ptr_(p.ptr_)
    {
        delete[] ptr_;
        ptr_ = 0;
    }

    VarArrayOut(const VarArrayOut<T_slice, T, n>& p)
        : ptr_(p.ptr_)
    {
    }

    VarArrayOut<T_slice, T, n>& operator=(const VarArrayOut<T_slice, T, n>& p)
    {
        ptr_ = p.ptr_;
        return *this;
    }

    VarArrayOut<T_slice, T, n>& operator=(T_slice* p)
    {
        ptr_ = p;
        return *this;
    }

    T_slice& operator[](short idx) { return ptr_[idx]; }
    T_slice& operator[](unsigned short idx) { return ptr_[idx]; }
    T_slice& operator[](int idx) { return ptr_[idx]; }
    T_slice& operator[](unsigned int idx) { return ptr_[idx]; }
    T_slice& operator[](long idx) { return ptr_[idx]; }
    T_slice& operator[](unsigned long idx) { return ptr_[idx]; }




    operator T_slice*&() { return ptr_; }


    T_slice*& ptr() { return ptr_; }
};




template <class T>
class ObjOut
{
    T*& ptr_;

public:




    ObjOut(T*& p)
        : ptr_(p)
    {
        ptr_ = 0;
    }

    ObjOut(ObjVar<T>& p)
        : ptr_(p.ptr_)
    {
        T* old = ptr_;
        ptr_ = 0;
        OBRelease(old);
    }

    ObjOut(const ObjOut<T>& p)
        : ptr_(p.ptr_)
    {
    }

    ObjOut<T>& operator=(const ObjOut<T>& p)
    {
        ptr_ = p.ptr_;
        return *this;
    }

    ObjOut<T>& operator=(const ObjVar<T>& p)
    {
        OBDuplicate(p);
        ptr_ = p.in();
        return *this;
    }

    ObjOut<T>& operator=(T* p)
    {
        ptr_ = p;
        return *this;
    }

    T* operator->() { ( (int)(ptr_ != 0) ? (void)0 : (OB::NCA(NCANullPtr, "ptr_ != 0", "../../include/OB/Template.h", 1075), abort()) ); return ptr_; }




    operator T*&() { return ptr_; }


    T*& ptr() { return ptr_; }
};
# 1093 "../../include/OB/Template.h"
template<class T, class U>
class FixSeq
{





    typedef U Unique;

    CORBA::ULong max_;
    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T* data_;

public:




    static T* allocbuf(CORBA::ULong n) { return new T[n]; }
    static void freebuf(T* p) { delete [] p; }

    FixSeq();
    FixSeq(CORBA::ULong);
    FixSeq(CORBA::ULong, CORBA::ULong, T*, CORBA::Boolean = false);
    FixSeq(const FixSeq<T, U>&);
    ~FixSeq() { if(rel_) freebuf(data_); }

    FixSeq<T, U>& operator=(const FixSeq<T, U>&);

    CORBA::ULong maximum() const { return max_; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T& SubType;
    typedef const T& ConstSubType;

    T& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1133), abort()) ); return data_[idx]; }
    const T& operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1135), abort()) ); return data_[idx]; }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, CORBA::ULong, T*,
                 CORBA::Boolean = false);
    T* get_buffer(CORBA::Boolean = false);
    const T* get_buffer() const { return data_; }
};




template<class T, CORBA::ULong max, class U>
class BndFixSeq
{





    typedef U Unique;

    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T* data_;

public:




    static T* allocbuf(CORBA::ULong);
    static void freebuf(T* p) { delete [] p; }

    BndFixSeq();
    BndFixSeq(CORBA::ULong, T*, CORBA::Boolean = false);
    BndFixSeq(const BndFixSeq<T, max, U>&);
    ~BndFixSeq() { if(rel_) freebuf(data_); }

    BndFixSeq<T, max, U>& operator=(const BndFixSeq<T, max, U>&);

    CORBA::ULong maximum() const { return max; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T& SubType;
    typedef const T& ConstSubType;

    T& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1185), abort()) ); return data_[idx]; }
    const T& operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1187), abort()) ); return data_[idx]; }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, T*, CORBA::Boolean = false);
    T* get_buffer(CORBA::Boolean = false);
    const T* get_buffer() const { return data_; }
};




template<class T, class U>
class VarSeq
{





    typedef U Unique;

    CORBA::ULong max_;
    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T* data_;

public:




    static T* allocbuf(CORBA::ULong n) { return new T[n]; }
    static void freebuf(T* p) { delete [] p; }

    VarSeq();
    VarSeq(CORBA::ULong);
    VarSeq(CORBA::ULong, CORBA::ULong, T*, CORBA::Boolean = false);
    VarSeq(const VarSeq<T, U>&);
    ~VarSeq() { if(rel_) freebuf(data_); }

    VarSeq<T, U>& operator=(const VarSeq<T, U>&);

    CORBA::ULong maximum() const { return max_; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T& SubType;
    typedef const T& ConstSubType;

    T& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1238), abort()) ); return data_[idx]; }
    const T& operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1240), abort()) ); return data_[idx]; }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, CORBA::ULong, T*, CORBA::Boolean = false);
    T* get_buffer(CORBA::Boolean = false);
    const T* get_buffer() const { return data_; }
};




template<class T, CORBA::ULong max, class U>
class BndVarSeq
{





    typedef U Unique;

    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T* data_;

public:




    static T* allocbuf(CORBA::ULong);
    static void freebuf(T* p) { delete [] p; }

    BndVarSeq();
    BndVarSeq(CORBA::ULong, T*, CORBA::Boolean = false);
    BndVarSeq(const BndVarSeq<T, max, U>&);
    ~BndVarSeq() { if(rel_) freebuf(data_); }

    BndVarSeq<T, max, U>& operator=(const BndVarSeq<T, max, U>&);

    CORBA::ULong maximum() const { return max; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T& SubType;
    typedef const T& ConstSubType;

    T& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1289), abort()) ); return data_[idx]; }
    const T& operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1291), abort()) ); return data_[idx]; }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, T*, CORBA::Boolean = false);
    T* get_buffer(CORBA::Boolean = false);
    const T* get_buffer() const { return data_; }
};




template<class T_slice, class T, CORBA::ULong n, class U>
class FixArraySeq
{





    typedef U Unique;

    CORBA::ULong max_;
    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T_slice** data_;

public:




    static T_slice** allocbuf(CORBA::ULong);
    static void freebuf(T_slice**);

    FixArraySeq();
    FixArraySeq(CORBA::ULong);
    FixArraySeq(CORBA::ULong, CORBA::ULong, T_slice**, CORBA::Boolean = false);
    FixArraySeq(const FixArraySeq<T_slice, T, n, U>&);
    ~FixArraySeq() { if(rel_) freebuf(data_); }

    FixArraySeq<T_slice, T, n, U>&
    operator=(const FixArraySeq<T_slice, T, n, U>&);

    CORBA::ULong maximum() const { return max_; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T_slice*& SubType;
    typedef const T_slice* ConstSubType;

    T_slice*& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1343), abort()) ); return data_[idx]; }





    const T_slice* operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1350), abort()) ); return data_[idx]; }


    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, CORBA::ULong, T_slice**,
                 CORBA::Boolean = false);
    T_slice** get_buffer(CORBA::Boolean = false);
    T_slice* const * get_buffer() const { return data_; }
};




template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
class BndFixArraySeq
{





    typedef U Unique;

    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T_slice** data_;

public:




    static T_slice** allocbuf(CORBA::ULong);
    static void freebuf(T_slice**);

    BndFixArraySeq();
    BndFixArraySeq(CORBA::ULong, T_slice**, CORBA::Boolean = false);
    BndFixArraySeq(const BndFixArraySeq<T_slice, T, n, max, U>&);
    ~BndFixArraySeq() { if(rel_) freebuf(data_); }

    BndFixArraySeq<T_slice, T, n, max, U>&
    operator=(const BndFixArraySeq<T_slice, T, n, max, U>&);

    CORBA::ULong maximum() const { return max; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T_slice*& SubType;
    typedef const T_slice* ConstSubType;

    T_slice*& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1402), abort()) ); return data_[idx]; }





    const T_slice* operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1409), abort()) ); return data_[idx]; }


    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, T_slice**, CORBA::Boolean = false);
    T_slice** get_buffer(CORBA::Boolean = false);
    T_slice* const * get_buffer() const { return data_; }
};




template<class T_slice, class T, CORBA::ULong n, class U>
class VarArraySeq
{





    typedef U Unique;

    CORBA::ULong max_;
    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T_slice** data_;

public:




    static T_slice** allocbuf(CORBA::ULong);
    static void freebuf(T_slice**);

    VarArraySeq();
    VarArraySeq(CORBA::ULong);
    VarArraySeq(CORBA::ULong, CORBA::ULong, T_slice**, CORBA::Boolean = false);
    VarArraySeq(const VarArraySeq<T_slice, T, n, U>&);
    ~VarArraySeq() { if(rel_) freebuf(data_); }

    VarArraySeq<T_slice, T, n, U>&
    operator=(const VarArraySeq<T_slice, T, n, U>&);

    CORBA::ULong maximum() const { return max_; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T_slice*& SubType;
    typedef const T_slice* ConstSubType;

    T_slice*& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1462), abort()) ); return data_[idx]; }





    const T_slice* operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1469), abort()) ); return data_[idx]; }


    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, CORBA::ULong, T_slice**,
                 CORBA::Boolean = false);
    T_slice** get_buffer(CORBA::Boolean = false);
    T_slice* const * get_buffer() const { return data_; }
};




template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
class BndVarArraySeq
{





    typedef U Unique;

    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T_slice** data_;

public:




    static T_slice** allocbuf(CORBA::ULong);
    static void freebuf(T_slice**);

    BndVarArraySeq();
    BndVarArraySeq(CORBA::ULong, T_slice**, CORBA::Boolean = false);
    BndVarArraySeq(const BndVarArraySeq<T_slice, T, n, max, U>&);
    ~BndVarArraySeq() { if(rel_) freebuf(data_); }

    BndVarArraySeq<T_slice, T, n, max, U>&
    operator=(const BndVarArraySeq<T_slice, T, n, max, U>&);

    CORBA::ULong maximum() const { return max; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef T_slice*& SubType;
    typedef const T_slice* ConstSubType;

    T_slice*& operator[](CORBA::ULong idx)
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1521), abort()) ); return data_[idx]; }





    const T_slice* operator[](CORBA::ULong idx) const
    { ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1528), abort()) ); return data_[idx]; }


    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, T_slice**, CORBA::Boolean = false);
    T_slice** get_buffer(CORBA::Boolean = false);
    T_slice* const * get_buffer() const { return data_; }
};




template<class T, class U>
class ObjSeq
{





    typedef U Unique;

    CORBA::ULong max_;
    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T** data_;

public:




    static T** allocbuf(CORBA::ULong);
    static void freebuf(T**);

    ObjSeq();
    ObjSeq(CORBA::ULong);
    ObjSeq(CORBA::ULong, CORBA::ULong, T**, CORBA::Boolean = false);
    ObjSeq(const ObjSeq<T, U>&);
    ~ObjSeq() { if(rel_) freebuf(data_); }

    ObjSeq<T, U>& operator=(const ObjSeq<T, U>&);

    CORBA::ULong maximum() const { return max_; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef ObjForSeq<T> SubType;
    typedef ObjForSeq<T> ConstSubType;
# 1587 "../../include/OB/Template.h"
    ObjForSeq<T> operator[](CORBA::ULong idx) const
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1589), abort()) );
        return ObjForSeq<T>(&data_[idx], rel_);
    }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, CORBA::ULong, T**,
                 CORBA::Boolean = false);
    T** get_buffer(CORBA::Boolean = false);
    T* const * get_buffer() const { return data_; }
};




template<class T, CORBA::ULong max, class U>
class BndObjSeq
{





    typedef U Unique;

    CORBA::ULong len_;
    CORBA::Boolean rel_;
    T** data_;

public:




    static T** allocbuf(CORBA::ULong);
    static void freebuf(T**);

    BndObjSeq();
    BndObjSeq(CORBA::ULong, T**, CORBA::Boolean = false);
    BndObjSeq(const BndObjSeq<T, max, U>&);
    ~BndObjSeq() { if(rel_) freebuf(data_); }

    BndObjSeq<T, max, U>&
    operator=(const BndObjSeq<T, max, U>&);

    CORBA::ULong maximum() const { return max; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef ObjForSeq<T> SubType;
    typedef ObjForSeq<T> ConstSubType;




    ObjForSeq<T> operator[](CORBA::ULong idx) const
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1646), abort()) );
        return ObjForSeq<T>(&data_[idx], rel_);
    }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, T**,
                 CORBA::Boolean = false);
    T** get_buffer(CORBA::Boolean = false);
    T* const * get_buffer() const { return data_; }
};




template<class U>
class StrSeq
{





    typedef U Unique;

    CORBA::ULong max_;
    CORBA::ULong len_;
    CORBA::Boolean rel_;
    char** data_;

public:




    static char** allocbuf(CORBA::ULong n)
    { return OB::StrSeqAllocbuf(n); }
    static void freebuf(char** p)
    { OB::StrSeqFreebuf(p); }

    StrSeq();
    StrSeq(CORBA::ULong);
    StrSeq(CORBA::ULong, CORBA::ULong, char**, CORBA::Boolean = false);
    StrSeq(const StrSeq<U>&);
    ~StrSeq() { if(rel_) freebuf(data_); }

    StrSeq& operator=(const StrSeq<U>&);

    CORBA::ULong maximum() const { return max_; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef StrForSeq SubType;
    typedef const char* ConstSubType;

    StrForSeq operator[](CORBA::ULong idx)
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1703), abort()) );
        return StrForSeq(&data_[idx], rel_);
    }

    const char* operator[](CORBA::ULong idx) const
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1709), abort()) );
        return data_[idx];
    }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, CORBA::ULong, char**,
                 CORBA::Boolean = false);
    char** get_buffer(CORBA::Boolean = false);
    const char* const * get_buffer() const { return data_; }
};




template<CORBA::ULong max, class U>
class BndStrSeq
{





    typedef U Unique;

    CORBA::ULong len_;
    CORBA::Boolean rel_;
    char** data_;

public:




    static char** allocbuf(CORBA::ULong);
    static void freebuf(char** p)
    { OB::StrSeqFreebuf(p); }

    BndStrSeq();
    BndStrSeq(CORBA::ULong, char**, CORBA::Boolean = false);
    BndStrSeq(const BndStrSeq<max, U>&);
    ~BndStrSeq() { if(rel_) freebuf(data_); }

    BndStrSeq<max, U>& operator=(const BndStrSeq<max, U>&);

    CORBA::ULong maximum() const { return max; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef StrForSeq SubType;
    typedef const char* ConstSubType;

    StrForSeq operator[](CORBA::ULong idx)
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1763), abort()) );
        return StrForSeq(&data_[idx], rel_);
    }

    const char* operator[](CORBA::ULong idx) const
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1769), abort()) );
        return data_[idx];
    }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, char**,
                 CORBA::Boolean = false);
    char** get_buffer(CORBA::Boolean = false);
    const char* const * get_buffer() const { return data_; }
};




template<class U>
class WStrSeq
{





    typedef U Unique;

    CORBA::ULong max_;
    CORBA::ULong len_;
    CORBA::Boolean rel_;
    wchar_t** data_;

public:




    static wchar_t** allocbuf(CORBA::ULong n)
    { return OB::WStrSeqAllocbuf(n); }
    static void freebuf(wchar_t** p)
    { OB::WStrSeqFreebuf(p); }

    WStrSeq();
    WStrSeq(CORBA::ULong);
    WStrSeq(CORBA::ULong, CORBA::ULong, wchar_t**, CORBA::Boolean = false);
    WStrSeq(const WStrSeq<U>&);
    ~WStrSeq() { if(rel_) freebuf(data_); }

    WStrSeq& operator=(const WStrSeq<U>&);

    CORBA::ULong maximum() const { return max_; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef WStrForSeq SubType;
    typedef const wchar_t* ConstSubType;

    WStrForSeq operator[](CORBA::ULong idx)
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1826), abort()) );
        return WStrForSeq(&data_[idx], rel_);
    }

    const wchar_t* operator[](CORBA::ULong idx) const
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1832), abort()) );
        return data_[idx];
    }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, CORBA::ULong, wchar_t**,
                 CORBA::Boolean = false);
    wchar_t** get_buffer(CORBA::Boolean = false);
    const wchar_t* const * get_buffer() const { return data_; }
};




template<CORBA::ULong max, class U>
class BndWStrSeq
{





    typedef U Unique;

    CORBA::ULong len_;
    CORBA::Boolean rel_;
    wchar_t** data_;

public:




    static wchar_t** allocbuf(CORBA::ULong);
    static void freebuf(wchar_t** p)
    { OB::WStrSeqFreebuf(p); }

    BndWStrSeq();
    BndWStrSeq(CORBA::ULong, wchar_t**, CORBA::Boolean = false);
    BndWStrSeq(const BndWStrSeq<max, U>&);
    ~BndWStrSeq() { if(rel_) freebuf(data_); }

    BndWStrSeq<max, U>& operator=(const BndWStrSeq<max, U>&);

    CORBA::ULong maximum() const { return max; }

    void length(CORBA::ULong);
    CORBA::ULong length() const { return len_; }

    typedef WStrForSeq SubType;
    typedef const wchar_t* ConstSubType;

    WStrForSeq operator[](CORBA::ULong idx)
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1886), abort()) );
        return WStrForSeq(&data_[idx], rel_);
    }

    const wchar_t* operator[](CORBA::ULong idx) const
    {
        ( (int)(idx < len_) ? (void)0 : (OB::NCA(NCASeqRange, "idx < len_", "../../include/OB/Template.h", 1892), abort()) );
        return data_[idx];
    }

    CORBA::Boolean release() const { return rel_; }
    void replace(CORBA::ULong, wchar_t**,
                 CORBA::Boolean = false);
    wchar_t** get_buffer(CORBA::Boolean = false);
    const wchar_t* const * get_buffer() const { return data_; }
};





class ConstructedInfo
{



    ConstructedInfo(const ConstructedInfo&);
    void operator=(const ConstructedInfo&);
    void operator==(const ConstructedInfo&);

public:

    ConstructedInfo() { };
    virtual ~ConstructedInfo() { };




    virtual void free(void*) const = 0;
    virtual void* dup(const void*) const = 0;




    virtual void marshal(const void*, OutputStreamImpl*) const = 0;
    virtual void unmarshal(void*, InputStreamImpl*) const = 0;
};
# 1941 "../../include/OB/Template.h"
template<class T>
class Info : public ConstructedInfo
{
public:

    Info() { };

    virtual void free(void* p) const
    { delete (T*)p; }

    virtual void* dup(const void* p) const
    { return new T(*(const T*)p); }

    virtual void marshal(const void* p, OutputStreamImpl* out) const
    { ((const T*)p) -> _OB_marshal(out); }

    virtual void unmarshal(void* p, InputStreamImpl* in) const
    { T::_OB_unmarshal(*(T*)p, in); }
};

}





# 1 "../../include/OB/TemplateI.h" 1
# 14 "../../include/OB/TemplateI.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/TemplateI.h" 2

namespace OB
{
# 26 "../../include/OB/TemplateI.h"
template<class T>
FixVar<T>&
FixVar<T>::operator=(T* p)
{
    ( (int)(ptr_ == 0 || p != ptr_) ? (void)0 : (OB::NCA(NCASelfAssign, "ptr_ == 0 || p != ptr_", "../../include/OB/TemplateI.h", 30), abort()) );
    delete ptr_;
    ptr_ = p;
    return *this;
}

template<class T>
FixVar<T>&
FixVar<T>::operator=(const T& t)
{
    if(&t != ptr_)
    {
        T* oldPtr = ptr_;
        ptr_ = new T(t);
        delete oldPtr;
    }
    return *this;
}

template<class T>
FixVar<T>&
FixVar<T>::operator=(const FixVar<T>& r)
{
    T* newPtr;

    if(r.ptr_)
        newPtr = new T(*r.ptr_);
    else
        newPtr = 0;

    if(ptr_)
        delete ptr_;

    ptr_ = newPtr;

    return *this;
}




template<class T>
VarVar<T>&
VarVar<T>::operator=(T* p)
{
    ( (int)(ptr_ == 0 || p != ptr_) ? (void)0 : (OB::NCA(NCASelfAssign, "ptr_ == 0 || p != ptr_", "../../include/OB/TemplateI.h", 75), abort()) );
    delete ptr_;
    ptr_ = p;
    return *this;
}

template<class T>
VarVar<T>&
VarVar<T>::operator=(const VarVar<T>& r)
{
    T* newPtr;

    if(r.ptr_)
        newPtr = new T(*r.ptr_);
    else
        newPtr = 0;

    if(ptr_)
        delete ptr_;

    ptr_ = newPtr;

    return *this;
}




template<class T>
SeqVar<T>&
SeqVar<T>::operator=(T* p)
{
    ( (int)(ptr_ == 0 || p != ptr_) ? (void)0 : (OB::NCA(NCASelfAssign, "ptr_ == 0 || p != ptr_", "../../include/OB/TemplateI.h", 107), abort()) );
    delete ptr_;
    ptr_ = p;
    return *this;
}

template<class T>
SeqVar<T>&
SeqVar<T>::operator=(const SeqVar<T>& r)
{
    T* newPtr;

    if(r.ptr_)
        newPtr = new T(*r.ptr_);
    else
        newPtr = 0;

    if(ptr_)
        delete ptr_;

    ptr_ = newPtr;

    return *this;
}




template<class T_slice, class T, CORBA::ULong n>
FixArrayVar<T_slice, T, n>::
FixArrayVar(const FixArrayVar<T_slice, T, n>& r)
{
    if(r.ptr_)
    {
        ptr_ = (T_slice*) new T[n];
        memcpy(ptr_, r.ptr_, n * sizeof(T));
    }
    else
        ptr_ = 0;
}

template<class T_slice, class T, CORBA::ULong n>
FixArrayVar<T_slice, T, n>&
FixArrayVar<T_slice, T, n>::operator=(T_slice* p)
{
    ( (int)(ptr_ == 0 || p != ptr_) ? (void)0 : (OB::NCA(NCASelfAssign, "ptr_ == 0 || p != ptr_", "../../include/OB/TemplateI.h", 152), abort()) );
    delete [] (T*) ptr_;
    ptr_ = p;
    return *this;
}

template<class T_slice, class T, CORBA::ULong n>
FixArrayVar<T_slice, T, n>&
FixArrayVar<T_slice, T, n>::
operator=(const FixArrayVar<T_slice, T, n>& r)
{
    if(this != &r)
    {
        delete [] (T*) ptr_;

        if(r.ptr_)
        {
            ptr_ = (T_slice*) new T[n];
            memcpy(ptr_, r.ptr_, n * sizeof(T));
        }
        else
            ptr_ = 0;
    }

    return *this;
}




template<class T_slice, class T, CORBA::ULong n>
VarArrayVar<T_slice, T, n>::
VarArrayVar(const VarArrayVar<T_slice, T, n>& r)
{
    if(r.ptr_)
    {
        ptr_ = (T_slice*) new T[n];
        T* to = (T*) ptr_;
        T* from = (T*) r.ptr_;
        for(CORBA::ULong i = 0 ; i < n ; i++)
            to[i] = from[i];
    }
    else
        ptr_ = 0;
}

template<class T_slice, class T, CORBA::ULong n>
VarArrayVar<T_slice, T, n>&
VarArrayVar<T_slice, T, n>::operator=(T_slice* p)
{
    ( (int)(ptr_ == 0 || p != ptr_) ? (void)0 : (OB::NCA(NCASelfAssign, "ptr_ == 0 || p != ptr_", "../../include/OB/TemplateI.h", 202), abort()) );
    delete [] (T*) ptr_;
    ptr_ = p;
    return *this;
}

template<class T_slice, class T, CORBA::ULong n>
VarArrayVar<T_slice, T, n>&
VarArrayVar<T_slice, T, n>::
operator=(const VarArrayVar<T_slice, T, n>& r)
{
    if(this != &r)
    {
        delete [] (T*) ptr_;

        if(r.ptr_)
        {
            ptr_ = (T_slice*) new T[n];
            T* to = (T*) ptr_;
            T* from = (T*) r.ptr_;
            for(CORBA::ULong i = 0 ; i < n ; i++)
                to[i] = from[i];
        }
        else
            ptr_ = 0;
    }

    return *this;
}
# 245 "../../include/OB/TemplateI.h"
template<class T, class U>
FixSeq<T, U>::FixSeq()
    : max_(0), len_(0), rel_(true), data_(0)
{
}

template<class T, class U>
FixSeq<T, U>::FixSeq(CORBA::ULong m)
    : max_(m), len_(0), rel_(true)
{
    if(max_ > 0)
        data_ = allocbuf(max_);
    else
        data_ = 0;
}

template<class T, class U>
FixSeq<T, U>::FixSeq(CORBA::ULong m, CORBA::ULong l, T* d, CORBA::Boolean r)
    : max_(m), len_(l), rel_(r)
{
    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 265), abort()) );
    data_ = d;
}

template<class T, class U>
FixSeq<T, U>::FixSeq(const FixSeq<T, U>& r)
    : max_(0), len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T, class U>
FixSeq<T, U>&
FixSeq<T, U>::operator=(const FixSeq<T, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        max_ = r.max_;
        len_ = r.len_;
        rel_ = true;

        if(max_ > 0)
        {
            data_ = allocbuf(max_);

            if(len_)
                memcpy(data_, r.data_, len_ * sizeof(T));
        }
        else
            data_ = 0;
    }

    return *this;
}

template<class T, class U>
void
FixSeq<T, U>::length(CORBA::ULong newLen)
{
    if(newLen > max_)
    {
        T* old = data_;

        max_ = newLen > max_ * 2 ? newLen : max_ * 2;
        data_ = allocbuf(max_);

        if(len_)
            memcpy(data_, old, len_ * sizeof(T));

        if(rel_)
            freebuf(old);

        rel_ = true;
    }

    len_ = newLen;
}

template<class T, class U>
void
FixSeq<T, U>::replace(CORBA::ULong max, CORBA::ULong len, T* data,
                      CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    max_ = max;
    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 338), abort()) );
    data_ = data;
}

template<class T, class U>
T*
FixSeq<T, U>::get_buffer(CORBA::Boolean orphan)
{




    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T* rc = data_;




    max_ = 0;
    len_ = 0;
    rel_ = true;
    data_ = 0;

    return rc;
}




template<class T, CORBA::ULong max, class U>
T*
BndFixSeq<T, max, U>::allocbuf(CORBA::ULong n)
{
    ( (int)(n == max) ? (void)0 : (OB::NCA(NCASeqBound, "n == max", "../../include/OB/TemplateI.h", 384), abort()) );
    return new T[n];
}

template<class T, CORBA::ULong max, class U>
BndFixSeq<T, max, U>::BndFixSeq()
    : len_(0), rel_(true), data_(0)
{
}

template<class T, CORBA::ULong max, class U>
BndFixSeq<T, max, U>::BndFixSeq(CORBA::ULong l, T* d, CORBA::Boolean r)
    : len_(l), rel_(r)
{
    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 398), abort()) );
    data_ = d;
}

template<class T, CORBA::ULong max, class U>
BndFixSeq<T, max, U>::BndFixSeq(const BndFixSeq<T, max, U>& r)
    : len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T, CORBA::ULong max, class U>
BndFixSeq<T, max, U>&
BndFixSeq<T, max, U>::operator=(const BndFixSeq<T, max, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        len_ = r.len_;
        rel_ = true;

        data_ = allocbuf(max);

        if(len_)
            memcpy(data_, r.data_, len_ * sizeof(T));
    }

    return *this;
}

template<class T, CORBA::ULong max, class U>
void
BndFixSeq<T, max, U>::length(CORBA::ULong newLen)
{
    ( (int)(newLen <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "newLen <= max", "../../include/OB/TemplateI.h", 434), abort()) );

    if(!data_)
        data_ = allocbuf(max);

    len_ = newLen;
}

template<class T, CORBA::ULong max, class U>
void
BndFixSeq<T, max, U>::replace(CORBA::ULong len, T* data,
                              CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 453), abort()) );
    data_ = data;
}

template<class T, CORBA::ULong max, class U>
T*
BndFixSeq<T, max, U>::get_buffer(CORBA::Boolean orphan)
{
    if(!data_)
        data_ = allocbuf(max);





    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T* rc = data_;




    len_ = 0;
    rel_ = true;
    data_ = allocbuf(max);

    return rc;
}




template<class T, class U>
VarSeq<T, U>::VarSeq()
    : max_(0), len_(0), rel_(true), data_(0)
{
}

template<class T, class U>
VarSeq<T, U>::VarSeq(CORBA::ULong m)
    : max_(m), len_(0), rel_(true)
{
    if(max_ > 0)
        data_ = allocbuf(max_);
    else
        data_ = 0;
}

template<class T, class U>
VarSeq<T, U>::VarSeq(CORBA::ULong m, CORBA::ULong l, T* d, CORBA::Boolean r)
    : max_(m), len_(l), rel_(r)
{
    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 517), abort()) );
    data_ = d;
}

template<class T, class U>
VarSeq<T, U>::VarSeq(const VarSeq<T, U>& r)
    : max_(0), len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T, class U>
VarSeq<T, U>&
VarSeq<T, U>::operator=(const VarSeq<T, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        max_ = r.max_;
        len_ = r.len_;
        rel_ = true;

        if(max_ > 0)
            data_ = allocbuf(max_);
        else
            data_ = 0;

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            data_[i] = r.data_[i];
    }

    return *this;
}

template<class T, class U>
void
VarSeq<T, U>::length(CORBA::ULong newLen)
{
    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
            data_[i] = T();
    }
    else if(newLen > max_)
    {
        T* old = data_;

        max_ = newLen > max_ * 2 ? newLen : max_ * 2;
        data_ = allocbuf(max_);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            data_[i] = old[i];

        if(rel_)
            freebuf(old);

        rel_ = true;
    }

    len_ = newLen;
}

template<class T, class U>
void
VarSeq<T, U>::replace(CORBA::ULong max, CORBA::ULong len, T* data,
                      CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    max_ = max;
    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 593), abort()) );
    data_ = data;
}

template<class T, class U>
T*
VarSeq<T, U>::get_buffer(CORBA::Boolean orphan)
{




    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T* rc = data_;




    max_ = 0;
    len_ = 0;
    rel_ = true;
    data_ = 0;

    return rc;
}




template<class T, CORBA::ULong max, class U>
T*
BndVarSeq<T, max, U>::allocbuf(CORBA::ULong n)
{
    ( (int)(n == max) ? (void)0 : (OB::NCA(NCASeqBound, "n == max", "../../include/OB/TemplateI.h", 639), abort()) );
    return new T[n];
}

template<class T, CORBA::ULong max, class U>
BndVarSeq<T, max, U>::BndVarSeq()
    : len_(0), rel_(true), data_(0)
{
}

template<class T, CORBA::ULong max, class U>
BndVarSeq<T, max, U>::BndVarSeq(CORBA::ULong l, T* d, CORBA::Boolean r)
    : len_(l), rel_(r)
{
    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 653), abort()) );
    data_ = d;
}

template<class T, CORBA::ULong max, class U>
BndVarSeq<T, max, U>::BndVarSeq(const BndVarSeq<T, max, U>& r)
    : len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T, CORBA::ULong max, class U>
BndVarSeq<T, max, U>&
BndVarSeq<T, max, U>::operator=(const BndVarSeq<T, max, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        len_ = r.len_;
        rel_ = true;

        data_ = allocbuf(max);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            data_[i] = r.data_[i];
    }

    return *this;
}

template<class T, CORBA::ULong max, class U>
void
BndVarSeq<T, max, U>::length(CORBA::ULong newLen)
{
    ( (int)(newLen <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "newLen <= max", "../../include/OB/TemplateI.h", 689), abort()) );

    if(!data_)
        data_ = allocbuf(max);

    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
            data_[i] = T();
    }

    len_ = newLen;
}

template<class T, CORBA::ULong max, class U>
void
BndVarSeq<T, max, U>::replace(CORBA::ULong len, T* data,
                              CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 714), abort()) );
    data_ = data;
}

template<class T, CORBA::ULong max, class U>
T*
BndVarSeq<T, max, U>::get_buffer(CORBA::Boolean orphan)
{
    if(!data_)
        data_ = allocbuf(max);





    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T* rc = data_;




    len_ = 0;
    rel_ = true;
    data_ = allocbuf(max);

    return rc;
}




template<class T_slice, class T, CORBA::ULong n, class U>
T_slice**
FixArraySeq<T_slice, T, n, U>::allocbuf(CORBA::ULong nn)
{
    T_slice** p = (T_slice**) Alloc(sizeof(T_slice*), nn);

    for(CORBA::ULong i = 0 ; i < nn ; i++)
        p[i] = (T_slice*) new T[n];

    return p;
}

template<class T_slice, class T, CORBA::ULong n, class U>
void
FixArraySeq<T_slice, T, n, U>::freebuf(T_slice** p)
{
    if(p)
    {
        CORBA::ULong nn = Allocated(p);

        for(CORBA::ULong i = 0 ; i < nn ; i++)
            delete [] (T*) p[i];

        Free(p);
    }
}

template<class T_slice, class T, CORBA::ULong n, class U>
FixArraySeq<T_slice, T, n, U>::FixArraySeq()
    : max_(0), len_(0), rel_(true), data_(0)
{
}

template<class T_slice, class T, CORBA::ULong n, class U>
FixArraySeq<T_slice, T, n, U>::FixArraySeq(CORBA::ULong m)
    : max_(m), len_(0), rel_(true)
{
    if(max_ > 0)
        data_ = allocbuf(max_);
    else
        data_ = 0;
}

template<class T_slice, class T, CORBA::ULong n, class U>
FixArraySeq<T_slice, T, n, U>::
FixArraySeq(CORBA::ULong m, CORBA::ULong l, T_slice** d, CORBA::Boolean r)
    : max_(m), len_(l), rel_(r)
{
    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 806), abort()) );
    data_ = d;
}

template<class T_slice, class T, CORBA::ULong n, class U>
FixArraySeq<T_slice, T, n, U>::
FixArraySeq(const FixArraySeq<T_slice, T, n, U>& r)
    : max_(0), len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T_slice, class T, CORBA::ULong n, class U>
FixArraySeq<T_slice, T, n, U>&
FixArraySeq<T_slice, T, n, U>::operator=(const
                                           FixArraySeq<T_slice, T, n, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        max_ = r.max_;
        len_ = r.len_;
        rel_ = true;

        if(max_ > 0)
            data_ = allocbuf(max_);
        else
            data_ = 0;

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            memcpy(data_[i], r.data_[i], n * sizeof(T));
    }

    return *this;
}

template<class T_slice, class T, CORBA::ULong n, class U>
void
FixArraySeq<T_slice, T, n, U>::length(CORBA::ULong newLen)
{
    if(newLen > max_)
    {
        T_slice** old = data_;

        max_ = newLen > max_ * 2 ? newLen : max_ * 2;
        data_ = allocbuf(max_);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            memcpy(data_[i], old[i], n * sizeof(T));

        if(rel_)
            freebuf(old);

        rel_ = true;
    }

    len_ = newLen;
}

template<class T_slice, class T, CORBA::ULong n, class U>
void
FixArraySeq<T_slice, T, n, U>::replace(CORBA::ULong max, CORBA::ULong len,
                                       T_slice** data, CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    max_ = max;
    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 879), abort()) );
    data_ = data;
}

template<class T_slice, class T, CORBA::ULong n, class U>
T_slice**
FixArraySeq<T_slice, T, n, U>::get_buffer(CORBA::Boolean orphan)
{




    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T_slice** rc = data_;




    max_ = 0;
    len_ = 0;
    rel_ = true;
    data_ = 0;

    return rc;
}




template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
T_slice**
BndFixArraySeq<T_slice, T, n, max, U>::allocbuf(CORBA::ULong nn)
{
    ( (int)(nn == max) ? (void)0 : (OB::NCA(NCASeqBound, "nn == max", "../../include/OB/TemplateI.h", 925), abort()) );

    T_slice** p = (T_slice**) Alloc(sizeof(T_slice*), nn);

    for(CORBA::ULong i = 0 ; i < nn ; i++)
        p[i] = (T_slice*) new T[n];

    return p;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
void
BndFixArraySeq<T_slice, T, n, max, U>::freebuf(T_slice** p)
{
    if(p)
    {
        CORBA::ULong num = Allocated(p);

        for(CORBA::ULong i = 0 ; i < num ; i++)
            delete [] (T*) p[i];

        Free(p);
    }
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndFixArraySeq<T_slice, T, n, max, U>::BndFixArraySeq()
    : len_(0), rel_(true), data_(0)
{
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndFixArraySeq<T_slice, T, n, max, U>::BndFixArraySeq(CORBA::ULong l,
                                                          T_slice** d,
                                                          CORBA::Boolean r)
    : len_(l), rel_(r)
{
    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 962), abort()) );
    data_ = d;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndFixArraySeq<T_slice, T, n, max, U>::
BndFixArraySeq(const BndFixArraySeq<T_slice, T, n, max, U>& r)
    : len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndFixArraySeq<T_slice, T, n, max, U>&
BndFixArraySeq<T_slice, T, n, max, U>::
operator=(const BndFixArraySeq<T_slice, T, n, max, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        len_ = r.len_;
        rel_ = true;

        data_ = allocbuf(max);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            memcpy(data_[i], r.data_[i], n * sizeof(T));
    }

    return *this;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
void
BndFixArraySeq<T_slice, T, n, max, U>::length(CORBA::ULong newLen)
{
    ( (int)(newLen <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "newLen <= max", "../../include/OB/TemplateI.h", 1000), abort()) );

    if(!data_)
        data_ = allocbuf(max);

    len_ = newLen;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
void
BndFixArraySeq<T_slice, T, n, max, U>::replace(CORBA::ULong len,
                                               T_slice** data,
                                               CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 1020), abort()) );
    data_ = data;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
T_slice**
BndFixArraySeq<T_slice, T, n, max, U>::get_buffer(CORBA::Boolean orphan)
{
    if(!data_)
        data_ = allocbuf(max);





    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T_slice** rc = data_;




    len_ = 0;
    rel_ = true;
    data_ = allocbuf(max);

    return rc;
}




template<class T_slice, class T, CORBA::ULong n, class U>
T_slice**
VarArraySeq<T_slice, T, n, U>::allocbuf(CORBA::ULong nn)
{
    T_slice** p = (T_slice**) Alloc(sizeof(T_slice*), nn);

    for(CORBA::ULong i = 0 ; i < nn ; i++)
        p[i] = (T_slice*) new T[n];

    return p;
}

template<class T_slice, class T, CORBA::ULong n, class U>
void
VarArraySeq<T_slice, T, n, U>::freebuf(T_slice** p)
{
    if(p)
    {
        CORBA::ULong nn = Allocated(p);

        for(CORBA::ULong i = 0 ; i < nn ; i++)
            delete [] (T*) p[i];

        Free(p);
    }
}

template<class T_slice, class T, CORBA::ULong n, class U>
VarArraySeq<T_slice, T, n, U>::VarArraySeq()
    : max_(0), len_(0), rel_(true), data_(0)
{
}

template<class T_slice, class T, CORBA::ULong n, class U>
VarArraySeq<T_slice, T, n, U>::VarArraySeq(CORBA::ULong m)
    : max_(m), len_(0), rel_(true)
{
    if(max_ > 0)
        data_ = allocbuf(max_);
    else
        data_ = 0;
}

template<class T_slice, class T, CORBA::ULong n, class U>
VarArraySeq<T_slice, T, n, U>::VarArraySeq(CORBA::ULong m, CORBA::ULong l,
                                               T_slice** d, CORBA::Boolean r)
    : max_(m), len_(l), rel_(r)
{
    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 1112), abort()) );
    data_ = d;
}

template<class T_slice, class T, CORBA::ULong n, class U>
VarArraySeq<T_slice, T, n, U>::
VarArraySeq(const VarArraySeq<T_slice, T, n, U>& r)
    : max_(0), len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T_slice, class T, CORBA::ULong n, class U>
VarArraySeq<T_slice, T, n, U>&
VarArraySeq<T_slice, T, n, U>::
operator=(const VarArraySeq<T_slice, T, n, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        max_ = r.max_;
        len_ = r.len_;
        rel_ = true;

        if(max_ > 0)
            data_ = allocbuf(max_);
        else
            data_ = 0;

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            T* to = (T*) data_[i];
            T* from = (T*) r.data_[i];
            for(CORBA::ULong j = 0 ; j < n ; j++)
                to[j] = from[j];
        }
    }

    return *this;
}

template<class T_slice, class T, CORBA::ULong n, class U>
void
VarArraySeq<T_slice, T, n, U>::length(CORBA::ULong newLen)
{
    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            T* p = (T*) data_[i];
            for(CORBA::ULong j = 0 ; j < n ; j++)
                p[j] = T();
        }
    }
    else if(newLen > max_)
    {
        T_slice** old = data_;

        max_ = newLen > max_ * 2 ? newLen : max_ * 2;
        data_ = allocbuf(max_);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            T* to = (T*) data_[i];
            T* from = (T*) old[i];
            for(CORBA::ULong j = 0 ; j < n ; j++)
                to[j] = from[j];
        }

        if(rel_)
            freebuf(old);

        rel_ = true;
    }

    len_ = newLen;
}

template<class T_slice, class T, CORBA::ULong n, class U>
void
VarArraySeq<T_slice, T, n, U>::replace(CORBA::ULong max, CORBA::ULong len,
                                       T_slice** data, CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    max_ = max;
    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 1204), abort()) );
    data_ = data;
}

template<class T_slice, class T, CORBA::ULong n, class U>
T_slice**
VarArraySeq<T_slice, T, n, U>::get_buffer(CORBA::Boolean orphan)
{




    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T_slice** rc = data_;




    max_ = 0;
    len_ = 0;
    rel_ = true;
    data_ = 0;

    return rc;
}




template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
T_slice**
BndVarArraySeq<T_slice, T, n, max, U>::allocbuf(CORBA::ULong nn)
{
    ( (int)(nn == max) ? (void)0 : (OB::NCA(NCASeqBound, "nn == max", "../../include/OB/TemplateI.h", 1250), abort()) );

    T_slice** p = (T_slice**) Alloc(sizeof(T_slice*), nn);

    for(CORBA::ULong i = 0 ; i < nn ; i++)
        p[i] = (T_slice*) new T[n];

    return p;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
void
BndVarArraySeq<T_slice, T, n, max, U>::freebuf(T_slice** p)
{
    if(p)
    {
        CORBA::ULong num = Allocated(p);

        for(CORBA::ULong i = 0 ; i < num ; i++)
            delete [] (T*) p[i];

        Free(p);
    }
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndVarArraySeq<T_slice, T, n, max, U>::BndVarArraySeq()
    : len_(0), rel_(true), data_(0)
{
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndVarArraySeq<T_slice, T, n, max, U>::
BndVarArraySeq(CORBA::ULong l, T_slice** d, CORBA::Boolean r)
    : len_(l), rel_(r)
{
    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 1286), abort()) );
    data_ = d;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndVarArraySeq<T_slice, T, n, max, U>::
BndVarArraySeq(const BndVarArraySeq<T_slice, T, n, max, U>& r)
    : len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
BndVarArraySeq<T_slice, T, n, max, U>&
BndVarArraySeq<T_slice, T, n, max, U>::
operator=(const BndVarArraySeq<T_slice, T, n, max, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        len_ = r.len_;
        rel_ = true;

        data_ = allocbuf(max);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            T* to = (T*) data_[i];
            T* from = (T*) r.data_[i];
            for(CORBA::ULong j = 0 ; j < n ; j++)
                to[j] = from[j];
        }
    }

    return *this;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
void
BndVarArraySeq<T_slice, T, n, max, U>::length(CORBA::ULong newLen)
{
    ( (int)(newLen <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "newLen <= max", "../../include/OB/TemplateI.h", 1329), abort()) );

    if(!data_)
        data_ = allocbuf(max);

    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            T* p = (T*) data_[i];
            for(CORBA::ULong j = 0 ; j < n ; j++)
                p[j] = T();
        }
    }

    len_ = newLen;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
void
BndVarArraySeq<T_slice, T, n, max, U>::replace(CORBA::ULong len,
                                               T_slice** data,
                                               CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 1359), abort()) );
    data_ = data;
}

template<class T_slice, class T, CORBA::ULong n, CORBA::ULong max, class U>
T_slice**
BndVarArraySeq<T_slice, T, n, max, U>::get_buffer(CORBA::Boolean orphan)
{
    if(!data_)
        data_ = allocbuf(max);





    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T_slice** rc = data_;




    len_ = 0;
    rel_ = true;
    data_ = allocbuf(max);

    return rc;
}




template<class T, class U>
T**
ObjSeq<T, U>::allocbuf(CORBA::ULong n)
{
    T** p = (T**) Alloc(sizeof(T*), n);

    for(CORBA::ULong i = 0 ; i < n ; i++)
        p[i] = 0;

    return p;
}

template<class T, class U>
void
ObjSeq<T, U>::freebuf(T** p)
{
    if(p)
    {
        CORBA::ULong n = Allocated(p);

        for(CORBA::ULong i = 0 ; i < n ; i++)
            OBRelease(p[i]);

        Free(p);
    }
}

template<class T, class U>
ObjSeq<T, U>::ObjSeq()
    : max_(0), len_(0), rel_(true), data_(0)
{
}

template<class T, class U>
ObjSeq<T, U>::ObjSeq(CORBA::ULong m)
    : max_(m), len_(0), rel_(true)
{
    if(max_ > 0)
        data_ = allocbuf(max_);
    else
        data_ = 0;
}

template<class T, class U>
ObjSeq<T, U>::ObjSeq(CORBA::ULong m, CORBA::ULong l, T** d, CORBA::Boolean r)
    : max_(m), len_(l), rel_(r)
{
    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 1450), abort()) );
    data_ = d;
}

template<class T, class U>
ObjSeq<T, U>::ObjSeq(const ObjSeq<T, U>& r)
    : max_(0), len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T, class U>
ObjSeq<T, U>&
ObjSeq<T, U>::operator=(const ObjSeq<T, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        max_ = r.max_;
        len_ = r.len_;
        rel_ = true;

        if(max_ > 0)
            data_ = allocbuf(max_);
        else
            data_ = 0;

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            data_[i] = r.data_[i];
            OBDuplicate(data_[i]);
        }
    }

    return *this;
}

template<class T, class U>
void
ObjSeq<T, U>::length(CORBA::ULong newLen)
{
    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            T* old = data_[i];
            data_[i] = 0;
            OBRelease(old);
        }
    }
    else if(newLen > max_)
    {
        T** old = data_;

        max_ = newLen > max_ * 2 ? newLen : max_ * 2;
        data_ = allocbuf(max_);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            if(rel_)
            {
                data_[i] = old[i];
                old[i] = 0;
            }
            else
            {
                data_[i] = old[i];
                OBDuplicate(data_[i]);
            }
        }

        if(rel_)
            freebuf(old);

        rel_ = true;
    }

    len_ = newLen;
}

template<class T, class U>
void
ObjSeq<T, U>::replace(CORBA::ULong max, CORBA::ULong len, T** data,
                      CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    max_ = max;
    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 1544), abort()) );
    data_ = data;
}

template<class T, class U>
T**
ObjSeq<T, U>::get_buffer(CORBA::Boolean orphan)
{




    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T** rc = data_;




    max_ = 0;
    len_ = 0;
    rel_ = true;
    data_ = 0;

    return rc;
}




template<class T, CORBA::ULong max, class U>
T**
BndObjSeq<T, max, U>::allocbuf(CORBA::ULong n)
{
    ( (int)(n == max) ? (void)0 : (OB::NCA(NCASeqBound, "n == max", "../../include/OB/TemplateI.h", 1590), abort()) );

    T** p = (T**) Alloc(sizeof(T*), n);

    for(CORBA::ULong i = 0 ; i < n ; i++)
        p[i] = 0;

    return p;
}

template<class T, CORBA::ULong max, class U>
void
BndObjSeq<T, max, U>::freebuf(T** p)
{
    if(p)
    {
        CORBA::ULong n = Allocated(p);

        for(CORBA::ULong i = 0 ; i < n ; i++)
            OBRelease(p[i]);

        Free(p);
    }
}

template<class T, CORBA::ULong max, class U>
BndObjSeq<T, max, U>::BndObjSeq()
    : len_(0), rel_(true), data_(0)
{
}

template<class T, CORBA::ULong max, class U>
BndObjSeq<T, max, U>
::BndObjSeq(CORBA::ULong l, T** d, CORBA::Boolean r)
    : len_(l), rel_(r)
{
    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 1626), abort()) );
    data_ = d;
}

template<class T, CORBA::ULong max, class U>
BndObjSeq<T, max, U>
::BndObjSeq(const BndObjSeq<T, max, U>& r)
    : len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class T, CORBA::ULong max, class U>
BndObjSeq<T, max, U>&
BndObjSeq<T, max, U>::
operator=(const BndObjSeq<T, max, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        len_ = r.len_;
        rel_ = true;

        data_ = allocbuf(max);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            data_[i] = r.data_[i];
            OBDuplicate(data_[i]);
        }
    }

    return *this;
}

template<class T, CORBA::ULong max, class U>
void
BndObjSeq<T, max, U>::length(CORBA::ULong newLen)
{
    ( (int)(newLen <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "newLen <= max", "../../include/OB/TemplateI.h", 1667), abort()) );

    if(!data_)
        data_ = allocbuf(max);

    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            T* old = data_[i];
            data_[i] = 0;
            OBRelease(old);
        }
    }

    len_ = newLen;
}

template<class T, CORBA::ULong max, class U>
void
BndObjSeq<T, max, U>::replace(CORBA::ULong len, T** data,
                              CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 1696), abort()) );
    data_ = data;
}

template<class T, CORBA::ULong max, class U>
T**
BndObjSeq<T, max, U>::get_buffer(CORBA::Boolean orphan)
{
    if(!data_)
        data_ = allocbuf(max);





    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    T** rc = data_;




    len_ = 0;
    rel_ = true;
    data_ = allocbuf(max);

    return rc;
}




template<class U>
StrSeq<U>::StrSeq()
    : max_(0), len_(0), rel_(true), data_(0)
{
}

template<class U>
StrSeq<U>::StrSeq(CORBA::ULong m)
    : max_(m), len_(0), rel_(true)
{
    if(max_ > 0)
        data_ = allocbuf(max_);
    else
        data_ = 0;

}

template<class U>
StrSeq<U>::StrSeq(CORBA::ULong m, CORBA::ULong l, char** d, CORBA::Boolean r)
    : max_(m), len_(l), rel_(r)
{
    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 1761), abort()) );
    data_ = d;
}

template<class U>
StrSeq<U>::StrSeq(const StrSeq<U>& r)
    : max_(0), len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class U>
StrSeq<U>&
StrSeq<U>::operator=(const StrSeq<U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        max_ = r.max_;
        len_ = r.len_;
        rel_ = true;

        if(max_ > 0)
            data_ = allocbuf(max_);
        else
            data_ = 0;

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            data_[i] = CORBA::string_dup(r.data_[i]);
    }

    return *this;
}

template<class U>
void
StrSeq<U>::length(CORBA::ULong newLen)
{
    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            CORBA::string_free(data_[i]);
            data_[i] = OB::EmptyString;
        }
    }
    else if(max_ < newLen)
    {
        char** old = data_;

        max_ = newLen > max_ * 2 ? newLen : max_ * 2;
        data_ = allocbuf(max_);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            if(rel_)
            {
                data_[i] = old[i];
                old[i] = OB::EmptyString;
            }
            else
                data_[i] = CORBA::string_dup(old[i]);
        }

        if(rel_)
            freebuf(old);

        rel_ = true;
    }






    len_ = newLen;
}

template<class U>
void
StrSeq<U>::replace(CORBA::ULong max, CORBA::ULong len, char** data,
                   CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    max_ = max;
    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 1853), abort()) );
    data_ = data;
}

template<class U>
char**
StrSeq<U>::get_buffer(CORBA::Boolean orphan)
{




    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    char** rc = data_;




    max_ = 0;
    len_ = 0;
    rel_ = true;
    data_ = 0;

    return rc;
}




template<CORBA::ULong max, class U>
char**
BndStrSeq<max, U>::allocbuf(CORBA::ULong n)
{
    ( (int)(n == max) ? (void)0 : (OB::NCA(NCASeqBound, "n == max", "../../include/OB/TemplateI.h", 1899), abort()) );
    return OB::StrSeqAllocbuf(n);
}

template<CORBA::ULong max, class U>
BndStrSeq<max, U>::BndStrSeq()
    : len_(0), rel_(true), data_(0)
{
}

template<CORBA::ULong max, class U>
BndStrSeq<max, U>::BndStrSeq(CORBA::ULong l, char** d, CORBA::Boolean r)
    : len_(l), rel_(r)
{
    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 1913), abort()) );
    data_ = d;
}

template<CORBA::ULong max, class U>
BndStrSeq<max, U>::BndStrSeq(const BndStrSeq<max, U>& r)
    : len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<CORBA::ULong max, class U>
BndStrSeq<max, U>&
BndStrSeq<max, U>::operator=(const BndStrSeq<max, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        len_ = r.len_;
        rel_ = true;

        data_ = allocbuf(max);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            data_[i] = CORBA::string_dup(r.data_[i]);
    }

    return *this;
}


template<CORBA::ULong max, class U>
void
BndStrSeq<max, U>::length(CORBA::ULong newLen)
{
    ( (int)(newLen <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "newLen <= max", "../../include/OB/TemplateI.h", 1950), abort()) );

    if(!data_)
        data_ = allocbuf(max);

    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            CORBA::string_free(data_[i]);
            data_[i] = OB::EmptyString;
        }
    }






    len_ = newLen;
}

template<CORBA::ULong max, class U>
void
BndStrSeq<max, U>::replace(CORBA::ULong len, char** data,
                           CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 1983), abort()) );
    data_ = data;
}

template<CORBA::ULong max, class U>
char**
BndStrSeq<max, U>::get_buffer(CORBA::Boolean orphan)
{
    if(!data_)
        data_ = allocbuf(max);





    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    char** rc = data_;




    len_ = 0;
    rel_ = true;
    data_ = allocbuf(max);

    return rc;
}




template<class U>
WStrSeq<U>::WStrSeq()
    : max_(0), len_(0), rel_(true), data_(0)
{
}

template<class U>
WStrSeq<U>::WStrSeq(CORBA::ULong m)
    : max_(m), len_(0), rel_(true)
{
    if(max_ > 0)
        data_ = allocbuf(max_);
    else
        data_ = 0;

}

template<class U>
WStrSeq<U>::WStrSeq(CORBA::ULong m, CORBA::ULong l, wchar_t** d,
                     CORBA::Boolean r)
    : max_(m), len_(l), rel_(r)
{
    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 2049), abort()) );
    data_ = d;
}

template<class U>
WStrSeq<U>::WStrSeq(const WStrSeq<U>& r)
    : max_(0), len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<class U>
WStrSeq<U>&
WStrSeq<U>::operator=(const WStrSeq<U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        max_ = r.max_;
        len_ = r.len_;
        rel_ = true;

        if(max_ > 0)
            data_ = allocbuf(max_);
        else
            data_ = 0;

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            data_[i] = CORBA::wstring_dup(r.data_[i]);
    }

    return *this;
}

template<class U>
void
WStrSeq<U>::length(CORBA::ULong newLen)
{
    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            CORBA::wstring_free(data_[i]);
            data_[i] = OB::EmptyWString;
        }
    }
    else if(max_ < newLen)
    {
        wchar_t** old = data_;

        max_ = newLen > max_ * 2 ? newLen : max_ * 2;
        data_ = allocbuf(max_);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
        {
            if(rel_)
            {
                data_[i] = old[i];
                old[i] = OB::EmptyWString;
            }
            else
                data_[i] = CORBA::wstring_dup(old[i]);
        }

        if(rel_)
            freebuf(old);

        rel_ = true;
    }






    len_ = newLen;
}

template<class U>
void
WStrSeq<U>::replace(CORBA::ULong max, CORBA::ULong len, wchar_t** data,
                    CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    max_ = max;
    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max_) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max_", "../../include/OB/TemplateI.h", 2141), abort()) );
    data_ = data;
}

template<class U>
wchar_t**
WStrSeq<U>::get_buffer(CORBA::Boolean orphan)
{




    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    wchar_t** rc = data_;




    max_ = 0;
    len_ = 0;
    rel_ = true;
    data_ = 0;

    return rc;
}




template<CORBA::ULong max, class U>
wchar_t**
BndWStrSeq<max, U>::allocbuf(CORBA::ULong n)
{
    ( (int)(n == max) ? (void)0 : (OB::NCA(NCASeqBound, "n == max", "../../include/OB/TemplateI.h", 2187), abort()) );
    return OB::WStrSeqAllocbuf(n);
}

template<CORBA::ULong max, class U>
BndWStrSeq<max, U>::BndWStrSeq()
    : len_(0), rel_(true), data_(0)
{
}

template<CORBA::ULong max, class U>
BndWStrSeq<max, U>::BndWStrSeq(CORBA::ULong l, wchar_t** d, CORBA::Boolean r)
    : len_(l), rel_(r)
{
    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 2201), abort()) );
    data_ = d;
}

template<CORBA::ULong max, class U>
BndWStrSeq<max, U>::BndWStrSeq(const BndWStrSeq<max, U>& r)
    : len_(0), rel_(true), data_(0)
{
    *this = r;
}

template<CORBA::ULong max, class U>
BndWStrSeq<max, U>&
BndWStrSeq<max, U>::operator=(const BndWStrSeq<max, U>& r)
{
    if(this != &r)
    {
        if(rel_)
            freebuf(data_);

        len_ = r.len_;
        rel_ = true;

        data_ = allocbuf(max);

        for(CORBA::ULong i = 0 ; i < len_ ; i++)
            data_[i] = CORBA::wstring_dup(r.data_[i]);
    }

    return *this;
}

template<CORBA::ULong max, class U>
void
BndWStrSeq<max, U>::length(CORBA::ULong newLen)
{
    ( (int)(newLen <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "newLen <= max", "../../include/OB/TemplateI.h", 2237), abort()) );

    if(!data_)
        data_ = allocbuf(max);

    if(newLen < len_ && rel_)
    {
        for(CORBA::ULong i = newLen ; i < len_ ; i++)
        {
            CORBA::wstring_free(data_[i]);
            data_[i] = OB::EmptyWString;
        }
    }






    len_ = newLen;
}

template<CORBA::ULong max, class U>
void
BndWStrSeq<max, U>::replace(CORBA::ULong len, wchar_t** data,
                            CORBA::Boolean release)
{
    if(rel_)
        freebuf(data_);

    len_ = len;
    rel_ = release;

    ( (int)(len_ <= max) ? (void)0 : (OB::NCA(NCASeqLenGrMax, "len_ <= max", "../../include/OB/TemplateI.h", 2270), abort()) );
    data_ = data;
}

template<CORBA::ULong max, class U>
wchar_t**
BndWStrSeq<max, U>::get_buffer(CORBA::Boolean orphan)
{
    if(!data_)
        data_ = allocbuf(max);





    if(!orphan)
        return data_;





    if(!rel_)
        return 0;





    wchar_t** rc = data_;




    len_ = 0;
    rel_ = true;
    data_ = allocbuf(max);

    return rc;
}

}
# 1968 "../../include/OB/Template.h" 2
# 15 "../../include/OB/Principal_fwd.h" 2

namespace CORBA
{

class Principal;
typedef Principal* Principal_ptr;
typedef Principal_ptr PrincipalRef;

}

void OBDuplicate(CORBA::Principal_ptr);
void OBRelease(CORBA::Principal_ptr);

namespace CORBA
{

typedef OB::ObjVar< Principal > Principal_var;

}
# 15 "../../include/OB/Any.h" 2
# 1 "../../include/OB/Object_fwd.h" 1
# 14 "../../include/OB/Object_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Object_fwd.h" 2

namespace CORBA
{

class Object;
typedef Object* Object_ptr;
typedef Object_ptr ObjectRef;

}

void OBDuplicate(CORBA::Object_ptr);
void OBRelease(CORBA::Object_ptr);

namespace CORBA
{

typedef OB::ObjVar< Object > Object_var;
typedef OB::ObjOut< Object > Object_out;

}
# 16 "../../include/OB/Any.h" 2
# 1 "../../include/OB/AbstractBase_fwd.h" 1
# 14 "../../include/OB/AbstractBase_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/AbstractBase_fwd.h" 2

namespace CORBA
{

class AbstractBase;
typedef AbstractBase* AbstractBase_ptr;

}

void OBRelease(CORBA::AbstractBase_ptr);
void OBDuplicate(CORBA::AbstractBase_ptr);

namespace CORBA
{

typedef OB::ObjVar< AbstractBase > AbstractBase_var;
typedef OB::ObjOut< AbstractBase > AbstractBase_out;

}
# 17 "../../include/OB/Any.h" 2
# 1 "../../include/OB/ValueBase_fwd.h" 1
# 14 "../../include/OB/ValueBase_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/ValueBase_fwd.h" 2

namespace CORBA
{

class ValueBase;

}

void OBRelease(CORBA::ValueBase*);
void OBDuplicate(CORBA::ValueBase*);

void OBMarshal(CORBA::ValueBase*, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ValueBase*&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< ValueBase > ValueBase_var;
typedef OB::ObjOut< ValueBase > ValueBase_out;

}
# 18 "../../include/OB/Any.h" 2
# 1 "../../include/OB/ORBInstance_fwd.h" 1
# 14 "../../include/OB/ORBInstance_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/ORBInstance_fwd.h" 2

namespace OB
{

class ORBInstance;
typedef ORBInstance* ORBInstance_ptr;
typedef ORBInstance_ptr ORBInstanceRef;

}

void OBDuplicate(OB::ORBInstance_ptr);
void OBRelease(OB::ORBInstance_ptr);

namespace OB
{

typedef OB::ObjVar< ORBInstance > ORBInstance_var;
typedef OB::ObjOut< ORBInstance > ORBInstance_out;

}
# 19 "../../include/OB/Any.h" 2
# 1 "../../include/OB/TypeCode_fwd.h" 1
# 14 "../../include/OB/TypeCode_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/TypeCode_fwd.h" 2

namespace CORBA
{

class TypeCode;
typedef TypeCode* TypeCode_ptr;
typedef TypeCode_ptr TypeCodeRef;

}

void OBDuplicate(CORBA::TypeCode_ptr);
void OBRelease(CORBA::TypeCode_ptr);

namespace CORBA
{

typedef OB::ObjVar< TypeCode > TypeCode_var;
typedef OB::ObjOut< TypeCode > TypeCode_out;

}
# 20 "../../include/OB/Any.h" 2
# 1 "../../include/OB/Stream_fwd.h" 1
# 14 "../../include/OB/Stream_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Stream_fwd.h" 2

namespace OB
{

class InputStream;
typedef InputStream* InputStream_ptr;

class OutputStream;
typedef OutputStream* OutputStream_ptr;

}

void OBDuplicate(OB::InputStream_ptr);
void OBRelease(OB::InputStream_ptr);

void OBDuplicate(OB::OutputStream_ptr);
void OBRelease(OB::OutputStream_ptr);

namespace OB
{

typedef OB::ObjVar< InputStream > InputStream_var;
typedef OB::ObjOut< InputStream > InputStream_out;

typedef OB::ObjVar< OutputStream > OutputStream_var;
typedef OB::ObjOut< OutputStream > OutputStream_out;

}
# 21 "../../include/OB/Any.h" 2

# 1 "../../include/OB/Fixed.h" 1
# 14 "../../include/OB/Fixed.h"
# 1 "../../include/OB/Basic.h" 1
# 15 "../../include/OB/Fixed.h" 2

namespace CORBA
{

class Fixed
{



    void fromLongLong(LongLong);
    void fromULongLong(ULongLong, Short = 1);
    void fromString(const char*);




    static void mul10(Fixed&, ULong);
    static void div10(Fixed&, ULong);

public:



    Octet value_[64];




    Short signum_;




    UShort scale_;

public:



    Fixed(int val = 0) { fromLongLong(val); }
    Fixed(unsigned int val) { fromULongLong(val); }
    Fixed(Long val) { fromLongLong(val); }



    Fixed(ULong val) { fromULongLong(val); }
    Fixed(LongLong val) { fromLongLong(val); }
    Fixed(ULongLong val) { fromULongLong(val); }
    Fixed(Double);
    Fixed(LongDouble);
    Fixed(const Fixed&);
    Fixed(const char* val) { fromString(val); }
    ~Fixed() { };




    Fixed(const Fixed&, UShort);


    operator LongLong() const;
    operator LongDouble() const;
    Fixed round(UShort) const;
    Fixed truncate(UShort) const;


    Fixed& operator=(const Fixed&);
    Fixed& operator+=(const Fixed&);
    Fixed& operator-=(const Fixed&);
    Fixed& operator*=(const Fixed&);
    Fixed& operator/=(const Fixed&);

    Fixed& operator++();
    Fixed operator++(int);
    Fixed& operator--();
    Fixed operator--(int);
    Fixed operator+() const;
    Fixed operator-() const;
    Boolean operator!() const;

    UShort fixed_digits() const;
    UShort fixed_scale() const;
# 105 "../../include/OB/Fixed.h"
    Fixed abs() const;




    Short signum() const;




    Fixed setScale(UShort) const;




    Fixed movePointLeft(Short) const;
    Fixed movePointRight(Short) const;

    char* toString() const;




    static CORBA::Fixed opAdd(const CORBA::Fixed&, const CORBA::Fixed&);
    static CORBA::Fixed opSub(const CORBA::Fixed&, const CORBA::Fixed&);
    static CORBA::Fixed opMul(const CORBA::Fixed&, const CORBA::Fixed&);
    static CORBA::Fixed opDiv(const CORBA::Fixed&, const CORBA::Fixed&);

    static CORBA::Boolean opGt(const CORBA::Fixed&, const CORBA::Fixed&);
};

typedef Fixed& Fixed_out;

}

std::istream& operator>>(std::istream&, CORBA::Fixed&);
std::ostream& operator<<(std::ostream&, const CORBA::Fixed&);

CORBA::Fixed operator+(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Fixed operator-(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Fixed operator*(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Fixed operator/(const CORBA::Fixed&, const CORBA::Fixed&);

CORBA::Boolean operator>(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Boolean operator<(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Boolean operator>=(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Boolean operator<=(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Boolean operator==(const CORBA::Fixed&, const CORBA::Fixed&);
CORBA::Boolean operator!=(const CORBA::Fixed&, const CORBA::Fixed&);
# 23 "../../include/OB/Any.h" 2
# 1 "../../include/OB/Except.h" 1
# 14 "../../include/OB/Except.h"
# 1 "../../include/OB/RefCounted_fwd.h" 1
# 14 "../../include/OB/RefCounted_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/RefCounted_fwd.h" 2

namespace OB
{

class RefCountIOR;
typedef RefCountIOR* RefCountIOR_ptr;

class RefCountPolicyList;
typedef RefCountPolicyList* RefCountPolicyList_ptr;

class RefCountProfileInfo;
typedef RefCountProfileInfo* RefCountProfileInfo_ptr;

}

void OBDuplicate(OB::RefCountIOR_ptr);
void OBRelease(OB::RefCountIOR_ptr);

void OBDuplicate(OB::RefCountPolicyList_ptr);
void OBRelease(OB::RefCountPolicyList_ptr);

void OBDuplicate(OB::RefCountProfileInfo_ptr);
void OBRelease(OB::RefCountProfileInfo_ptr);

namespace OB
{

typedef OB::ObjVar< RefCountIOR > RefCountIOR_var;
typedef OB::ObjOut< RefCountIOR > RefCountIOR_out;

typedef OB::ObjVar< RefCountPolicyList > RefCountPolicyList_var;
typedef OB::ObjOut< RefCountPolicyList > RefCountPolicyList_out;

typedef OB::ObjVar< RefCountProfileInfo > RefCountProfileInfo_var;
typedef OB::ObjOut< RefCountProfileInfo > RefCountProfileInfo_out;

}
# 15 "../../include/OB/Except.h" 2

# 1 "../../include/OB/Basic.h" 1
# 17 "../../include/OB/Except.h" 2
# 1 "../../include/OB/Fixed.h" 1
# 18 "../../include/OB/Except.h" 2
# 1 "../../include/OB/AnyDeclaration.h" 1
# 14 "../../include/OB/AnyDeclaration.h"
namespace OB
{

template <class T> class VarVar;
template <class T> class VarOut;

}

namespace CORBA
{

class Any;

typedef OB::VarVar< Any > Any_var;
typedef OB::VarOut< Any > Any_out;

}
# 19 "../../include/OB/Except.h" 2
# 1 "../../include/OB/TypeCodeConst.h" 1
# 14 "../../include/OB/TypeCodeConst.h"
# 1 "../../include/OB/TypeCode_fwd.h" 1
# 15 "../../include/OB/TypeCodeConst.h" 2

namespace OB
{

class TypeCodeConst : public JTCMutex
{
    TypeCodeConst(const TypeCodeConst&);
    void operator=(const TypeCodeConst&);

    CORBA::TypeCode_var typeCode_;
    const char* str_;
    const char** arr_;

public:

    TypeCodeConst(const char* s) : str_(s), arr_(0) { }
    TypeCodeConst(const char** arr) : str_(0), arr_(arr) { }
    ~TypeCodeConst();

    operator CORBA::TypeCode_ptr();
    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }
};

}
# 20 "../../include/OB/Except.h" 2
# 1 "../../include/OB/CompletionStatus.h" 1
# 37 "../../include/OB/CompletionStatus.h"
namespace CORBA
{

}

namespace CORBA
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




enum CompletionStatus
{
    COMPLETED_YES,
    COMPLETED_NO,
    COMPLETED_MAYBE
};

typedef CompletionStatus& CompletionStatus_out;

          extern OB::TypeCodeConst _tc_completion_status;

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::CompletionStatus);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::CompletionStatus&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::CompletionStatus val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::CompletionStatus& val)
{
    return any.in() >>= val;
}
# 21 "../../include/OB/Except.h" 2

namespace CORBA
{




class SystemException;

}

namespace OB
{




class ExceptionBase
{
public:
    virtual ~ExceptionBase() { }
    virtual void _raise() const = 0;
};




class StubImplChanged : public ExceptionBase
{
public:

    virtual void _raise() const { throw *this; }
};




class LocationForward : public ExceptionBase
{
public:

    RefCountIOR_var ior;
    bool perm;

    LocationForward(RefCountIOR_ptr, bool);

    virtual void _raise() const { throw *this; }
};




class FailureException : public ExceptionBase
{
public:




    CORBA::SystemException* exception;

    FailureException() : exception(0) { }
    FailureException(const CORBA::SystemException&);
    FailureException(const FailureException&);
    virtual ~FailureException();

    FailureException& operator=(const FailureException&);

    virtual void _raise() const { throw *this; }
};

}


namespace CORBA
{




class Exception : public OB::ExceptionBase
{
protected:

    Exception() { }

public:




    Exception(const Exception&) { }
    virtual ~Exception() { }
    Exception& operator=(const Exception&) { return *this; }

    virtual void _raise() const = 0;
    virtual const char* _name() const;
    virtual const char* _rep_id() const;




    virtual char* _to_string() const = 0;





    virtual Exception* _OB_clone() const = 0;
    virtual void _OB_insertInAny(Any&) = 0;
    virtual void _OB_marshal(OB::OutputStreamImpl*) const = 0;
};

}




std::ostream& operator<<(std::ostream&, const CORBA::Exception&);
std::ostream& operator<<(std::ostream&, const CORBA::Exception*);

namespace OB
{






}

namespace CORBA
{
# 193 "../../include/OB/Except.h"
class SystemException : public Exception
{



    String_var reason_;





    bool remote_;




    ULong minor_;
    CompletionStatus status_;

public:




    SystemException(const char* = "");
    SystemException(ULong, CompletionStatus);
    SystemException(const char*, ULong, CompletionStatus);
    SystemException(const SystemException&);
    SystemException& operator=(const SystemException&);

    ULong minor() const { return minor_; }
    void minor(ULong minor) { minor_ = minor; }

    CompletionStatus completed() const { return status_; }
    void completed(CompletionStatus status) { status_ = status; }

    static SystemException* _downcast(Exception* p)
    { return dynamic_cast<SystemException*>(p); }
    static const SystemException* _downcast(const Exception* p)
    { return dynamic_cast<const SystemException*>(p); }




    const char* reason() const { return reason_; }
    void reason(const char* reason) { reason_ = reason; }
    bool remote() const { return remote_; }
    void remote(bool remote) { remote_ = remote; }





    char* _OB_defaultToString(const char*) const;
    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static SystemException* _OB_unmarshal(OB::InputStreamImpl*);
};

class UserException : public Exception
{
public:




    UserException() { }
    UserException(const UserException&) { }
    UserException& operator=(const UserException&)
    { return *this; }

    static UserException* _downcast(Exception* p)
    { return dynamic_cast<UserException*>(p); }
    static const UserException* _downcast(const Exception* p)
    { return dynamic_cast<const UserException*>(p); }





    char* _OB_defaultToString(const char*) const;
    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
};
# 299 "../../include/OB/Except.h"
class UNKNOWN : public SystemException { public: UNKNOWN(const char* r = ""); UNKNOWN(ULong, CompletionStatus); UNKNOWN(const char*, ULong, CompletionStatus); UNKNOWN(const UNKNOWN&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static UNKNOWN* _downcast(Exception* p) { return dynamic_cast<UNKNOWN*>(p); } static const UNKNOWN* _downcast(const Exception* p) { return dynamic_cast<const UNKNOWN*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class BAD_PARAM : public SystemException { public: BAD_PARAM(const char* r = ""); BAD_PARAM(ULong, CompletionStatus); BAD_PARAM(const char*, ULong, CompletionStatus); BAD_PARAM(const BAD_PARAM&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static BAD_PARAM* _downcast(Exception* p) { return dynamic_cast<BAD_PARAM*>(p); } static const BAD_PARAM* _downcast(const Exception* p) { return dynamic_cast<const BAD_PARAM*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class NO_MEMORY : public SystemException { public: NO_MEMORY(const char* r = ""); NO_MEMORY(ULong, CompletionStatus); NO_MEMORY(const char*, ULong, CompletionStatus); NO_MEMORY(const NO_MEMORY&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static NO_MEMORY* _downcast(Exception* p) { return dynamic_cast<NO_MEMORY*>(p); } static const NO_MEMORY* _downcast(const Exception* p) { return dynamic_cast<const NO_MEMORY*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class IMP_LIMIT : public SystemException { public: IMP_LIMIT(const char* r = ""); IMP_LIMIT(ULong, CompletionStatus); IMP_LIMIT(const char*, ULong, CompletionStatus); IMP_LIMIT(const IMP_LIMIT&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static IMP_LIMIT* _downcast(Exception* p) { return dynamic_cast<IMP_LIMIT*>(p); } static const IMP_LIMIT* _downcast(const Exception* p) { return dynamic_cast<const IMP_LIMIT*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class COMM_FAILURE : public SystemException { public: COMM_FAILURE(const char* r = ""); COMM_FAILURE(ULong, CompletionStatus); COMM_FAILURE(const char*, ULong, CompletionStatus); COMM_FAILURE(const COMM_FAILURE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static COMM_FAILURE* _downcast(Exception* p) { return dynamic_cast<COMM_FAILURE*>(p); } static const COMM_FAILURE* _downcast(const Exception* p) { return dynamic_cast<const COMM_FAILURE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INV_OBJREF : public SystemException { public: INV_OBJREF(const char* r = ""); INV_OBJREF(ULong, CompletionStatus); INV_OBJREF(const char*, ULong, CompletionStatus); INV_OBJREF(const INV_OBJREF&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INV_OBJREF* _downcast(Exception* p) { return dynamic_cast<INV_OBJREF*>(p); } static const INV_OBJREF* _downcast(const Exception* p) { return dynamic_cast<const INV_OBJREF*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class NO_PERMISSION : public SystemException { public: NO_PERMISSION(const char* r = ""); NO_PERMISSION(ULong, CompletionStatus); NO_PERMISSION(const char*, ULong, CompletionStatus); NO_PERMISSION(const NO_PERMISSION&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static NO_PERMISSION* _downcast(Exception* p) { return dynamic_cast<NO_PERMISSION*>(p); } static const NO_PERMISSION* _downcast(const Exception* p) { return dynamic_cast<const NO_PERMISSION*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INTERNAL : public SystemException { public: INTERNAL(const char* r = ""); INTERNAL(ULong, CompletionStatus); INTERNAL(const char*, ULong, CompletionStatus); INTERNAL(const INTERNAL&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INTERNAL* _downcast(Exception* p) { return dynamic_cast<INTERNAL*>(p); } static const INTERNAL* _downcast(const Exception* p) { return dynamic_cast<const INTERNAL*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class MARSHAL : public SystemException { public: MARSHAL(const char* r = ""); MARSHAL(ULong, CompletionStatus); MARSHAL(const char*, ULong, CompletionStatus); MARSHAL(const MARSHAL&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static MARSHAL* _downcast(Exception* p) { return dynamic_cast<MARSHAL*>(p); } static const MARSHAL* _downcast(const Exception* p) { return dynamic_cast<const MARSHAL*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INITIALIZE : public SystemException { public: INITIALIZE(const char* r = ""); INITIALIZE(ULong, CompletionStatus); INITIALIZE(const char*, ULong, CompletionStatus); INITIALIZE(const INITIALIZE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INITIALIZE* _downcast(Exception* p) { return dynamic_cast<INITIALIZE*>(p); } static const INITIALIZE* _downcast(const Exception* p) { return dynamic_cast<const INITIALIZE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class NO_IMPLEMENT : public SystemException { public: NO_IMPLEMENT(const char* r = ""); NO_IMPLEMENT(ULong, CompletionStatus); NO_IMPLEMENT(const char*, ULong, CompletionStatus); NO_IMPLEMENT(const NO_IMPLEMENT&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static NO_IMPLEMENT* _downcast(Exception* p) { return dynamic_cast<NO_IMPLEMENT*>(p); } static const NO_IMPLEMENT* _downcast(const Exception* p) { return dynamic_cast<const NO_IMPLEMENT*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class BAD_TYPECODE : public SystemException { public: BAD_TYPECODE(const char* r = ""); BAD_TYPECODE(ULong, CompletionStatus); BAD_TYPECODE(const char*, ULong, CompletionStatus); BAD_TYPECODE(const BAD_TYPECODE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static BAD_TYPECODE* _downcast(Exception* p) { return dynamic_cast<BAD_TYPECODE*>(p); } static const BAD_TYPECODE* _downcast(const Exception* p) { return dynamic_cast<const BAD_TYPECODE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class BAD_OPERATION : public SystemException { public: BAD_OPERATION(const char* r = ""); BAD_OPERATION(ULong, CompletionStatus); BAD_OPERATION(const char*, ULong, CompletionStatus); BAD_OPERATION(const BAD_OPERATION&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static BAD_OPERATION* _downcast(Exception* p) { return dynamic_cast<BAD_OPERATION*>(p); } static const BAD_OPERATION* _downcast(const Exception* p) { return dynamic_cast<const BAD_OPERATION*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class NO_RESOURCES : public SystemException { public: NO_RESOURCES(const char* r = ""); NO_RESOURCES(ULong, CompletionStatus); NO_RESOURCES(const char*, ULong, CompletionStatus); NO_RESOURCES(const NO_RESOURCES&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static NO_RESOURCES* _downcast(Exception* p) { return dynamic_cast<NO_RESOURCES*>(p); } static const NO_RESOURCES* _downcast(const Exception* p) { return dynamic_cast<const NO_RESOURCES*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class NO_RESPONSE : public SystemException { public: NO_RESPONSE(const char* r = ""); NO_RESPONSE(ULong, CompletionStatus); NO_RESPONSE(const char*, ULong, CompletionStatus); NO_RESPONSE(const NO_RESPONSE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static NO_RESPONSE* _downcast(Exception* p) { return dynamic_cast<NO_RESPONSE*>(p); } static const NO_RESPONSE* _downcast(const Exception* p) { return dynamic_cast<const NO_RESPONSE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class PERSIST_STORE : public SystemException { public: PERSIST_STORE(const char* r = ""); PERSIST_STORE(ULong, CompletionStatus); PERSIST_STORE(const char*, ULong, CompletionStatus); PERSIST_STORE(const PERSIST_STORE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static PERSIST_STORE* _downcast(Exception* p) { return dynamic_cast<PERSIST_STORE*>(p); } static const PERSIST_STORE* _downcast(const Exception* p) { return dynamic_cast<const PERSIST_STORE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class BAD_INV_ORDER : public SystemException { public: BAD_INV_ORDER(const char* r = ""); BAD_INV_ORDER(ULong, CompletionStatus); BAD_INV_ORDER(const char*, ULong, CompletionStatus); BAD_INV_ORDER(const BAD_INV_ORDER&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static BAD_INV_ORDER* _downcast(Exception* p) { return dynamic_cast<BAD_INV_ORDER*>(p); } static const BAD_INV_ORDER* _downcast(const Exception* p) { return dynamic_cast<const BAD_INV_ORDER*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class TRANSIENT : public SystemException { public: TRANSIENT(const char* r = ""); TRANSIENT(ULong, CompletionStatus); TRANSIENT(const char*, ULong, CompletionStatus); TRANSIENT(const TRANSIENT&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static TRANSIENT* _downcast(Exception* p) { return dynamic_cast<TRANSIENT*>(p); } static const TRANSIENT* _downcast(const Exception* p) { return dynamic_cast<const TRANSIENT*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class FREE_MEM : public SystemException { public: FREE_MEM(const char* r = ""); FREE_MEM(ULong, CompletionStatus); FREE_MEM(const char*, ULong, CompletionStatus); FREE_MEM(const FREE_MEM&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static FREE_MEM* _downcast(Exception* p) { return dynamic_cast<FREE_MEM*>(p); } static const FREE_MEM* _downcast(const Exception* p) { return dynamic_cast<const FREE_MEM*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INV_IDENT : public SystemException { public: INV_IDENT(const char* r = ""); INV_IDENT(ULong, CompletionStatus); INV_IDENT(const char*, ULong, CompletionStatus); INV_IDENT(const INV_IDENT&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INV_IDENT* _downcast(Exception* p) { return dynamic_cast<INV_IDENT*>(p); } static const INV_IDENT* _downcast(const Exception* p) { return dynamic_cast<const INV_IDENT*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INV_FLAG : public SystemException { public: INV_FLAG(const char* r = ""); INV_FLAG(ULong, CompletionStatus); INV_FLAG(const char*, ULong, CompletionStatus); INV_FLAG(const INV_FLAG&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INV_FLAG* _downcast(Exception* p) { return dynamic_cast<INV_FLAG*>(p); } static const INV_FLAG* _downcast(const Exception* p) { return dynamic_cast<const INV_FLAG*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INTF_REPOS : public SystemException { public: INTF_REPOS(const char* r = ""); INTF_REPOS(ULong, CompletionStatus); INTF_REPOS(const char*, ULong, CompletionStatus); INTF_REPOS(const INTF_REPOS&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INTF_REPOS* _downcast(Exception* p) { return dynamic_cast<INTF_REPOS*>(p); } static const INTF_REPOS* _downcast(const Exception* p) { return dynamic_cast<const INTF_REPOS*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class BAD_CONTEXT : public SystemException { public: BAD_CONTEXT(const char* r = ""); BAD_CONTEXT(ULong, CompletionStatus); BAD_CONTEXT(const char*, ULong, CompletionStatus); BAD_CONTEXT(const BAD_CONTEXT&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static BAD_CONTEXT* _downcast(Exception* p) { return dynamic_cast<BAD_CONTEXT*>(p); } static const BAD_CONTEXT* _downcast(const Exception* p) { return dynamic_cast<const BAD_CONTEXT*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class OBJ_ADAPTER : public SystemException { public: OBJ_ADAPTER(const char* r = ""); OBJ_ADAPTER(ULong, CompletionStatus); OBJ_ADAPTER(const char*, ULong, CompletionStatus); OBJ_ADAPTER(const OBJ_ADAPTER&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static OBJ_ADAPTER* _downcast(Exception* p) { return dynamic_cast<OBJ_ADAPTER*>(p); } static const OBJ_ADAPTER* _downcast(const Exception* p) { return dynamic_cast<const OBJ_ADAPTER*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class DATA_CONVERSION : public SystemException { public: DATA_CONVERSION(const char* r = ""); DATA_CONVERSION(ULong, CompletionStatus); DATA_CONVERSION(const char*, ULong, CompletionStatus); DATA_CONVERSION(const DATA_CONVERSION&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static DATA_CONVERSION* _downcast(Exception* p) { return dynamic_cast<DATA_CONVERSION*>(p); } static const DATA_CONVERSION* _downcast(const Exception* p) { return dynamic_cast<const DATA_CONVERSION*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class OBJECT_NOT_EXIST : public SystemException { public: OBJECT_NOT_EXIST(const char* r = ""); OBJECT_NOT_EXIST(ULong, CompletionStatus); OBJECT_NOT_EXIST(const char*, ULong, CompletionStatus); OBJECT_NOT_EXIST(const OBJECT_NOT_EXIST&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static OBJECT_NOT_EXIST* _downcast(Exception* p) { return dynamic_cast<OBJECT_NOT_EXIST*>(p); } static const OBJECT_NOT_EXIST* _downcast(const Exception* p) { return dynamic_cast<const OBJECT_NOT_EXIST*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class TRANSACTION_REQUIRED : public SystemException { public: TRANSACTION_REQUIRED(const char* r = ""); TRANSACTION_REQUIRED(ULong, CompletionStatus); TRANSACTION_REQUIRED(const char*, ULong, CompletionStatus); TRANSACTION_REQUIRED(const TRANSACTION_REQUIRED&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static TRANSACTION_REQUIRED* _downcast(Exception* p) { return dynamic_cast<TRANSACTION_REQUIRED*>(p); } static const TRANSACTION_REQUIRED* _downcast(const Exception* p) { return dynamic_cast<const TRANSACTION_REQUIRED*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class TRANSACTION_ROLLEDBACK : public SystemException { public: TRANSACTION_ROLLEDBACK(const char* r = ""); TRANSACTION_ROLLEDBACK(ULong, CompletionStatus); TRANSACTION_ROLLEDBACK(const char*, ULong, CompletionStatus); TRANSACTION_ROLLEDBACK(const TRANSACTION_ROLLEDBACK&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static TRANSACTION_ROLLEDBACK* _downcast(Exception* p) { return dynamic_cast<TRANSACTION_ROLLEDBACK*>(p); } static const TRANSACTION_ROLLEDBACK* _downcast(const Exception* p) { return dynamic_cast<const TRANSACTION_ROLLEDBACK*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INVALID_TRANSACTION : public SystemException { public: INVALID_TRANSACTION(const char* r = ""); INVALID_TRANSACTION(ULong, CompletionStatus); INVALID_TRANSACTION(const char*, ULong, CompletionStatus); INVALID_TRANSACTION(const INVALID_TRANSACTION&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INVALID_TRANSACTION* _downcast(Exception* p) { return dynamic_cast<INVALID_TRANSACTION*>(p); } static const INVALID_TRANSACTION* _downcast(const Exception* p) { return dynamic_cast<const INVALID_TRANSACTION*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class INV_POLICY : public SystemException { public: INV_POLICY(const char* r = ""); INV_POLICY(ULong, CompletionStatus); INV_POLICY(const char*, ULong, CompletionStatus); INV_POLICY(const INV_POLICY&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static INV_POLICY* _downcast(Exception* p) { return dynamic_cast<INV_POLICY*>(p); } static const INV_POLICY* _downcast(const Exception* p) { return dynamic_cast<const INV_POLICY*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class CODESET_INCOMPATIBLE : public SystemException { public: CODESET_INCOMPATIBLE(const char* r = ""); CODESET_INCOMPATIBLE(ULong, CompletionStatus); CODESET_INCOMPATIBLE(const char*, ULong, CompletionStatus); CODESET_INCOMPATIBLE(const CODESET_INCOMPATIBLE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static CODESET_INCOMPATIBLE* _downcast(Exception* p) { return dynamic_cast<CODESET_INCOMPATIBLE*>(p); } static const CODESET_INCOMPATIBLE* _downcast(const Exception* p) { return dynamic_cast<const CODESET_INCOMPATIBLE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class REBIND : public SystemException { public: REBIND(const char* r = ""); REBIND(ULong, CompletionStatus); REBIND(const char*, ULong, CompletionStatus); REBIND(const REBIND&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static REBIND* _downcast(Exception* p) { return dynamic_cast<REBIND*>(p); } static const REBIND* _downcast(const Exception* p) { return dynamic_cast<const REBIND*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class TIMEOUT : public SystemException { public: TIMEOUT(const char* r = ""); TIMEOUT(ULong, CompletionStatus); TIMEOUT(const char*, ULong, CompletionStatus); TIMEOUT(const TIMEOUT&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static TIMEOUT* _downcast(Exception* p) { return dynamic_cast<TIMEOUT*>(p); } static const TIMEOUT* _downcast(const Exception* p) { return dynamic_cast<const TIMEOUT*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class TRANSACTION_UNAVAILABLE : public SystemException { public: TRANSACTION_UNAVAILABLE(const char* r = ""); TRANSACTION_UNAVAILABLE(ULong, CompletionStatus); TRANSACTION_UNAVAILABLE(const char*, ULong, CompletionStatus); TRANSACTION_UNAVAILABLE(const TRANSACTION_UNAVAILABLE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static TRANSACTION_UNAVAILABLE* _downcast(Exception* p) { return dynamic_cast<TRANSACTION_UNAVAILABLE*>(p); } static const TRANSACTION_UNAVAILABLE* _downcast(const Exception* p) { return dynamic_cast<const TRANSACTION_UNAVAILABLE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class TRANSACTION_MODE : public SystemException { public: TRANSACTION_MODE(const char* r = ""); TRANSACTION_MODE(ULong, CompletionStatus); TRANSACTION_MODE(const char*, ULong, CompletionStatus); TRANSACTION_MODE(const TRANSACTION_MODE&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static TRANSACTION_MODE* _downcast(Exception* p) { return dynamic_cast<TRANSACTION_MODE*>(p); } static const TRANSACTION_MODE* _downcast(const Exception* p) { return dynamic_cast<const TRANSACTION_MODE*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };
class BAD_QOS : public SystemException { public: BAD_QOS(const char* r = ""); BAD_QOS(ULong, CompletionStatus); BAD_QOS(const char*, ULong, CompletionStatus); BAD_QOS(const BAD_QOS&); virtual void _raise() const { throw *this; } virtual const char* _name() const; virtual const char* _rep_id() const; virtual char* _to_string() const; static BAD_QOS* _downcast(Exception* p) { return dynamic_cast<BAD_QOS*>(p); } static const BAD_QOS* _downcast(const Exception* p) { return dynamic_cast<const BAD_QOS*>(p); } virtual Exception* _OB_clone() const; virtual void _OB_insertInAny(Any&); };




class UnknownUserException : public UserException
{
    Any* any_;

public:




    UnknownUserException();
    UnknownUserException(const UnknownUserException&);
    UnknownUserException(const Any&);
    UnknownUserException& operator=(const UnknownUserException&);
    ~UnknownUserException();

    Any& exception();

    static UnknownUserException* _downcast(Exception* p)
    { return dynamic_cast<UnknownUserException*>(p); }
    static const UnknownUserException*
    _downcast(const Exception* p)
    { return dynamic_cast<const UnknownUserException*>(p); }
    virtual void _raise() const { throw *this; }
    virtual const char* _name() const { return "UnknownUserException"; }
    virtual const char* _rep_id() const
    { return "IDL:omg.org/CORBA/UnknownUserException:1.0"; }




    virtual char* _to_string() const
    { return _OB_defaultToString("CORBA::UnknownUserException"); }





    virtual Exception* _OB_clone() const
    { return new UnknownUserException(*this); }
    virtual void _OB_insertInAny(Any&);
    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(UnknownUserException&, OB::InputStreamImpl*);
};

}




void operator<<=(CORBA::Any&, CORBA::UnknownUserException*);
void operator<<=(CORBA::Any&, const CORBA::UnknownUserException&);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::UnknownUserException*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::UnknownUserException* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::UnknownUserException& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::UnknownUserException*& val)
{
    return any.in() >>= val;
}

namespace OB
{

enum VMCID
{
    OMGVMCID = 0x4f4d0000,
    OOCVMCID = 0x4f4f0000
};
# 426 "../../include/OB/Except.h"
enum MinorInitialize
{



    MinorORBDestroyed = 1 | OOCVMCID
};
# 441 "../../include/OB/Except.h"
enum MinorNoImplement
{



    MinorMissingLocalValueImplementation = 1 | OMGVMCID,
    MinorIncompatibleValueImplementationVersion = 2 | OMGVMCID,
    MinorNotSupportedByLocalObject = 3 | OMGVMCID,
    MinorDIINotSupportedByLocalObject = 4 | OMGVMCID
};
# 459 "../../include/OB/Except.h"
enum MinorObjectNotExist
{



    MinorUnregisteredValue = 1 | OMGVMCID,
    MinorCannotDispatch = 2 | OMGVMCID
};
# 475 "../../include/OB/Except.h"
enum MinorBadParam
{



    MinorValueFactoryError = 1 | OMGVMCID,
    MinorRepositoryIdExists = 2 | OMGVMCID,
    MinorNameExists = 3 | OMGVMCID,
    MinorInvalidContainer = 4 | OMGVMCID,
    MinorNameClashInInheritedContext = 5 | OMGVMCID,
    MinorBadAbstractInterfaceType = 6 | OMGVMCID,
    MinorBadSchemeName = 7 | OMGVMCID,
    MinorBadAddress = 8 | OMGVMCID,
    MinorBadSchemeSpecificPart = 9 | OMGVMCID,
    MinorOther = 10 | OMGVMCID,
    MinorInvalidAbstractInterfaceInheritance = 11 | OMGVMCID,
    MinorInvalidValueInheritance = 12 | OMGVMCID,
    MinorIncompleteTypeCodeParameter = 13 | OMGVMCID,
    MinorInvalidObjectId = 14 | OMGVMCID,
    MinorInvalidName = 15 | OMGVMCID,
    MinorInvalidId = 16 | OMGVMCID,
    MinorInvalidMemberName = 17 | OMGVMCID,
    MinorDuplicateLabel = 18 | OMGVMCID,
    MinorIncompatibleLabelType = 19 | OMGVMCID,
    MinorInvalidDiscriminatorType = 20 | OMGVMCID,
    MinorNoExceptionInAny = 21 | OMGVMCID,
    MinorUnlistedUserException = 22 | OMGVMCID,
    MinorNoWcharCodeSet = 23 | OMGVMCID,
    MinorServiceContextIdOutOfRange = 24 | OMGVMCID,
    MinorEnumValueOutOfRange = 25 | OMGVMCID,
    MinorInvalidServiceContextId = 26 | OMGVMCID,
    MinorObjectIsNull = 27 | OMGVMCID,
    MinorInvalidComponentId = 28 | OMGVMCID,
    MinorInvalidProfileId = 29 | OMGVMCID,
    MinorDuplicatePolicyType = 30 | OMGVMCID,




    MinorDuplicateDeclarator = 1 | OOCVMCID,
    MinorInvalidValueModifier = 2 | OOCVMCID,
    MinorDuplicateValueInit = 3 | OOCVMCID,
    MinorAbstractValueInit = 4 | OOCVMCID,
    MinorDuplicateBaseType = 5 | OOCVMCID,
    MinorSingleThreadedOnly = 6 | OOCVMCID,
    MinorNameRedefinitionInImmediateScope = 7 | OOCVMCID,
    MinorInvalidValueBoxType = 8 | OOCVMCID,
    MinorInvalidLocalInterfaceInheritance = 9 | OOCVMCID,
    MinorConstantTypeMismatch = 10 | OOCVMCID
};
# 533 "../../include/OB/Except.h"
enum MinorBadInvOrder
{



    MinorDependencyPreventsDestruction = 1 | OMGVMCID,
    MinorIndestructibleObject = 2 | OMGVMCID,
    MinorDestroyWouldBlock = 3 | OMGVMCID,
    MinorShutdownCalled = 4 | OMGVMCID,
    MinorDuplicateSend = 5 | OMGVMCID,
    MinorServantManagerAlreadySet = 6 | OMGVMCID,
    MinorInvalidUseOfDSIArguments = 7 | OMGVMCID,
    MinorInvalidUseOfDSIContext = 8 | OMGVMCID,
    MinorInvalidUseOfDSIResult = 9 | OMGVMCID,
    MinorRequestAlreadySent = 10 | OMGVMCID,
    MinorRequestNotSent = 11 | OMGVMCID,
    MinorResponseAlreadyReceived = 12 | OMGVMCID,
    MinorSynchronousRequest = 13 | OMGVMCID,
    MinorInvalidPICall = 14 | OMGVMCID,
    MinorServiceContextExists = 15 | OMGVMCID,
    MinorPolicyFactoryExists = 16 | OMGVMCID,
    MinorNoCreatePOA = 17 | OMGVMCID,




    MinorBadConcModel = 1 | OOCVMCID,
    MinorORBRunning = 2 | OOCVMCID
};
# 570 "../../include/OB/Except.h"
enum MinorCommFailure
{
# 580 "../../include/OB/Except.h"
    MinorRecv = 1 | OOCVMCID,
    MinorSend = 2 | OOCVMCID,
    MinorRecvZero = 3 | OOCVMCID,
    MinorSendZero = 4 | OOCVMCID,
    MinorSocket = 5 | OOCVMCID,
    MinorSetsockopt = 6 | OOCVMCID,
    MinorGetsockopt = 7 | OOCVMCID,
    MinorBind = 8 | OOCVMCID,
    MinorListen = 9 | OOCVMCID,
    MinorConnect = 10 | OOCVMCID,
    MinorAccept = 11 | OOCVMCID,
    MinorSelect = 12 | OOCVMCID,
    MinorSetSoTimeout = 26 | OOCVMCID,
    MinorGetsockname = 27 | OOCVMCID,
    MinorGetpeername = 28 | OOCVMCID,

    MinorGethostname = 13 | OOCVMCID,
    MinorGethostbyname = 14 | OOCVMCID,

    MinorWSAStartup = 15 | OOCVMCID,
    MinorWSACleanup = 16 | OOCVMCID,

    MinorNoGIOP = 17 | OOCVMCID,
    MinorUnknownMessage = 18 | OOCVMCID,
    MinorWrongMessage = 19 | OOCVMCID,
    MinorMessageError = 21 | OOCVMCID,
    MinorFragment = 22 | OOCVMCID,
    MinorUnknownReqId = 24 | OOCVMCID,
    MinorVersion = 25 | OOCVMCID,

    MinorPipe = 23 | OOCVMCID,




    MinorDeprecatedCloseConnection = 20 | OOCVMCID
};
# 625 "../../include/OB/Except.h"
enum MinorIntfRepos
{
# 635 "../../include/OB/Except.h"
    MinorNoIntfRepos = 1 | OOCVMCID,
    MinorLookupAmbiguous = 2 | OOCVMCID,
    MinorIllegalRecursion = 3 | OOCVMCID,
    MinorNoEntry = 4 | OOCVMCID
};
# 648 "../../include/OB/Except.h"
enum MinorMarshal
{



    MinorNoValueFactory = 1 | OMGVMCID,
    MinorDSIResultBeforeContext = 2 | OMGVMCID,
    MinorDSIInvalidParameterList = 3 | OMGVMCID,
    MinorLocalObject = 4 | OMGVMCID,
    MinorWcharSentByClient = 5 | OMGVMCID,
    MinorWcharSentByServer = 6 | OMGVMCID,




    MinorReadOverflow = 1 | OOCVMCID,
    MinorReadBooleanOverflow = 2 | OOCVMCID,
    MinorReadCharOverflow = 3 | OOCVMCID,
    MinorReadWCharOverflow = 4 | OOCVMCID,
    MinorReadOctetOverflow = 5 | OOCVMCID,
    MinorReadShortOverflow = 6 | OOCVMCID,
    MinorReadUShortOverflow = 7 | OOCVMCID,
    MinorReadLongOverflow = 8 | OOCVMCID,
    MinorReadULongOverflow = 9 | OOCVMCID,
    MinorReadLongLongOverflow = 10 | OOCVMCID,
    MinorReadULongLongOverflow = 11 | OOCVMCID,
    MinorReadFloatOverflow = 12 | OOCVMCID,
    MinorReadDoubleOverflow = 13 | OOCVMCID,
    MinorReadLongDoubleOverflow = 14 | OOCVMCID,
    MinorReadStringOverflow = 15 | OOCVMCID,
    MinorReadStringZeroLength = 16 | OOCVMCID,
    MinorReadStringNullChar = 17 | OOCVMCID,
    MinorReadStringNoTerminator = 18 | OOCVMCID,
    MinorReadWStringOverflow = 19 | OOCVMCID,
    MinorReadWStringZeroLength = 20 | OOCVMCID,
    MinorReadWStringNullWChar = 21 | OOCVMCID,
    MinorReadWStringNoTerminator = 22 | OOCVMCID,
    MinorReadFixedOverflow = 23 | OOCVMCID,
    MinorReadFixedInvalid = 24 | OOCVMCID,
    MinorReadBooleanArrayOverflow = 25 | OOCVMCID,
    MinorReadCharArrayOverflow = 26 | OOCVMCID,
    MinorReadWCharArrayOverflow = 27 | OOCVMCID,
    MinorReadOctetArrayOverflow = 28 | OOCVMCID,
    MinorReadShortArrayOverflow = 29 | OOCVMCID,
    MinorReadUShortArrayOverflow = 30 | OOCVMCID,
    MinorReadLongArrayOverflow = 31 | OOCVMCID,
    MinorReadULongArrayOverflow = 32 | OOCVMCID,
    MinorReadLongLongArrayOverflow = 33 | OOCVMCID,
    MinorReadULongLongArrayOverflow = 34 | OOCVMCID,
    MinorReadFloatArrayOverflow = 35 | OOCVMCID,
    MinorReadDoubleArrayOverflow = 36 | OOCVMCID,
    MinorReadLongDoubleArrayOverflow = 37 | OOCVMCID,
    MinorReadInvTypeCodeIndirection = 38 | OOCVMCID,
    MinorLongDoubleNotSupported = 40 | OOCVMCID,




    MinorDeprecatedWriteObjectLocal = 39 | OOCVMCID
};
# 716 "../../include/OB/Except.h"
enum MinorImpLimit
{



    MinorNoUsableProfile = 1 | OMGVMCID,




    MinorMessageSizeLimit = 1 | OOCVMCID,
    MinorThreadLimit = 2 | OOCVMCID
};
# 737 "../../include/OB/Except.h"
enum MinorNoMemory
{



    MinorAllocationFailure = 1 | OOCVMCID
};
# 752 "../../include/OB/Except.h"
enum MinorTransient
{



    MinorRequestDiscarded = 1 | OMGVMCID,
    MinorNoUsableProfileInIOR = 2 | OMGVMCID,
    MinorRequestCancelled = 3 | OMGVMCID,
    MinorPOADestroyed = 4 | OMGVMCID,




    MinorConnectFailed = 1 | OOCVMCID,
    MinorCloseConnection = 2 | OOCVMCID,
    MinorActiveConnectionManagement = 3 | OOCVMCID,
    MinorForcedShutdown = 4 | OOCVMCID,
    MinorLocationForwardHopCountExceeded = 5 | OOCVMCID
};
# 779 "../../include/OB/Except.h"
enum MinorNoResources
{



    MinorInvalidBinding = 1 | OMGVMCID
};
# 794 "../../include/OB/Except.h"
enum MinorUnknown
{



    MinorUnknownUserException = 1 | OMGVMCID,
    MinorSystemExceptionNotSupported = 2 | OMGVMCID
};
# 810 "../../include/OB/Except.h"
enum MinorInvPolicy
{



    MinorCannotReconcilePolicy = 1 | OMGVMCID,
    MinorInvalidPolicyType = 2 | OMGVMCID,
    MinorNoPolicyFactory = 3 | OMGVMCID
};
# 827 "../../include/OB/Except.h"
enum MinorInvObjref
{



    MinorNoWcharSupport = 1 | OMGVMCID,
    MinorWcharCodeSetRequired = 2 | OMGVMCID
};
# 843 "../../include/OB/Except.h"
enum MinorBadTypecode
{



    MinorIncompleteTypeCode = 1 | OMGVMCID,
    MinorInvalidMemberType = 2 | OMGVMCID
};
# 859 "../../include/OB/Except.h"
enum MinorObjAdapter
{



    MinorSystemExceptionInUnknownAdapter = 1 | OMGVMCID,
    MinorServantNotFound = 2 | OMGVMCID,
    MinorNoDefaultServant = 3 | OMGVMCID,
    MinorNoServantManager = 4 | OMGVMCID,
    MinorIncarnateViolatedPOAPolicy = 5 | OMGVMCID
};
# 878 "../../include/OB/Except.h"
enum MinorDataConversion
{



    MinorNoCharacterMapping = 1 | OMGVMCID
};

}
# 24 "../../include/OB/Any.h" 2

namespace CORBA
{




class Any
{
    TypeCode_var type_;
    void* value_;
    Boolean rel_;
    const OB::ConstructedInfo* info_;
    OB::ORBInstance_var orbInstance_;





    void operator<<=(unsigned char);
    Boolean operator>>=(unsigned char&) const;

    void operator<<=(bool);
    Boolean operator>>=(bool&) const;

public:

    Any();
    Any(const Any&);
    Any(TypeCode_ptr, void*, Boolean = false);
    ~Any();

    Any& operator=(const Any&);

    void operator<<=(Short);
    void operator<<=(UShort);
    void operator<<=(Long);
    void operator<<=(ULong);
    void operator<<=(LongLong);
    void operator<<=(ULongLong);
    void operator<<=(Float);
    void operator<<=(Double);
    void operator<<=(LongDouble);
    void operator<<=(const char*);
    void operator<<=(const CORBA::String_var&);
    void operator<<=(const OB::StrForSeq&);
    void operator<<=(const wchar_t*);
    void operator<<=(const CORBA::WString_var&);
    void operator<<=(const OB::WStrForSeq&);
    void operator<<=(const Any&);
    void operator<<=(Any*);
    void operator<<=(const Exception&);
    void operator<<=(Exception*);
    void operator<<=(TypeCode_ptr);
    void operator<<=(TypeCode_ptr*);
    void operator<<=(Principal_ptr);
    void operator<<=(Principal_ptr*);
    void operator<<=(Object_ptr);
    void operator<<=(Object_ptr*);

    Boolean operator>>=(Short&) const;
    Boolean operator>>=(UShort&) const;
    Boolean operator>>=(Long&) const;
    Boolean operator>>=(ULong&) const;
    Boolean operator>>=(LongLong&) const;
    Boolean operator>>=(ULongLong&) const;
    Boolean operator>>=(Float&) const;
    Boolean operator>>=(Double&) const;
    Boolean operator>>=(LongDouble&) const;
    Boolean operator>>=(const char*&) const;
    Boolean operator>>=(const wchar_t*&) const;
    Boolean operator>>=(const Any*&) const;
    Boolean operator>>=(const SystemException*&) const;
    Boolean operator>>=(TypeCode_ptr&) const;
    Boolean operator>>=(Principal_ptr&) const;
    Boolean operator>>=(Object_ptr&) const;




    struct from_boolean
    {
        Boolean val;

        from_boolean(Boolean v) : val(v) {}
        from_boolean(const from_boolean& v) : val(v.val) {}
    };

    struct from_octet
    {
        Octet val;

        from_octet(Octet v) : val(v) {}
        from_octet(const from_octet& v) : val(v.val) {}
    };

    struct from_char
    {
        Char val;

        from_char(Char v) : val(v) {}
        from_char(const from_char& v) : val(v.val) {}
    };

    struct from_wchar
    {
        WChar val;

        from_wchar(WChar v) : val(v) {}
        from_wchar(const from_wchar& v) : val(v.val) {}
    };

    struct from_string
    {
        char* val;
        ULong bound;
        Boolean nocopy;

        from_string(char* v, ULong b, Boolean nc = false)
            : val(v), bound(b), nocopy(nc) {}
        from_string(const char* v, ULong b)
            : val(const_cast<char*>(v)), bound(b), nocopy(false) {}
        from_string(const from_string& v)
            : val(v.val), bound(v.bound), nocopy(v.nocopy) {}
    };

    struct from_wstring
    {
        wchar_t* val;
        ULong bound;
        Boolean nocopy;

        from_wstring(wchar_t* v, ULong b, Boolean nc = false)
            : val(v), bound(b), nocopy(nc) {}
        from_wstring(const wchar_t* v, ULong b)
            : val(const_cast<wchar_t*>(v)), bound(b), nocopy(false) {}
        from_wstring(const from_wstring& v)
            : val(v.val), bound(v.bound), nocopy(v.nocopy) {}
    };

    struct from_fixed
    {
        const Fixed& val;
        UShort digits;
        UShort scale;

        from_fixed(const Fixed& f, UShort d, UShort s)
            : val(f), digits(d), scale(s) {}
        from_fixed(const from_fixed& v) : val(v.val), digits(v.digits),
            scale(v.scale) {}
    };

    void operator<<=(from_boolean);
    void operator<<=(from_octet);
    void operator<<=(from_char);
    void operator<<=(from_wchar);
    void operator<<=(from_string);
    void operator<<=(from_wstring);
    void operator<<=(from_fixed);

    struct to_boolean
    {
        Boolean& val;

        to_boolean(Boolean& v) : val(v) {}
        to_boolean(const to_boolean& v) : val(v.val) {}
    };

    struct to_octet
    {
        Octet& val;

        to_octet(Octet& v) : val(v) {}
        to_octet(const to_octet& v) : val(v.val) {}
    };

    struct to_char
    {
        Char& val;

        to_char(Char& v) : val(v) {}
        to_char(const to_char& v) : val(v.val) {}
    };

    struct to_wchar
    {
        WChar& val;

        to_wchar(WChar& v) : val(v) {}
        to_wchar(const to_wchar& v) : val(v.val) {}
    };

    struct to_string
    {
        const char*& val;
        ULong bound;

        to_string(const char*& v, ULong b) : val(v), bound(b) {}
        to_string(const to_string& v) : val(v.val), bound(v.bound) {}


        to_string(char*& v, ULong b) : val((const char*&)v), bound(b) {}
    };

    struct to_wstring
    {
        const wchar_t*& val;
        ULong bound;

        to_wstring(const wchar_t*& v, ULong b) : val(v), bound(b) {}
        to_wstring(const to_wstring& v) : val(v.val), bound(v.bound) {}


        to_wstring(wchar_t*& v, ULong b) : val((const wchar_t*&)v), bound(b) {}
    };

    struct to_fixed
    {
        Fixed& val;
        UShort digits;
        UShort scale;

        to_fixed(Fixed& f, UShort d, UShort s)
            : val(f), digits(d), scale(s) {}
        to_fixed(const to_fixed& v) : val(v.val), digits(v.digits),
            scale(v.scale) {}
    };

    struct to_object
    {
        Object_ptr& val;

        to_object(Object_out v) : val(v.ptr()) {}
        to_object(const to_object& v) : val(v.val) {}
    };

    struct to_abstract_base
    {
        AbstractBase_ptr& val;

        to_abstract_base(AbstractBase_ptr& v) : val(v) {}
        to_abstract_base(const to_abstract_base& v) : val(v.val) {}
    };

    struct to_value
    {
        ValueBase*& val;

        to_value(ValueBase*& v) : val(v) {}
        to_value(const to_value& v) : val(v.val) {}
    };

    Boolean operator>>=(to_boolean) const;
    Boolean operator>>=(to_octet) const;
    Boolean operator>>=(to_char) const;
    Boolean operator>>=(to_wchar) const;
    Boolean operator>>=(to_string) const;
    Boolean operator>>=(to_wstring) const;
    Boolean operator>>=(to_fixed) const;
    Boolean operator>>=(to_object) const;
    Boolean operator>>=(to_abstract_base) const;
    Boolean operator>>=(to_value) const;

    void replace(TypeCode_ptr, void*, Boolean = false);
    TypeCode_ptr type() const;
    void type(TypeCode_ptr);
    const void* value() const;




    void replace(TypeCode_ptr, void*, Boolean, const OB::ConstructedInfo*);
    Boolean check_type(TypeCode_ptr) const;
    const OB::ConstructedInfo* info() const { return info_; }
    OB::InputStream_ptr create_input_stream() const;





    void _OB_ORBInstance(OB::ORBInstance_ptr);
    OB::ORBInstance_ptr _OB_ORBInstance();

    TypeCode_ptr _OB_type_nodup() const;




    friend class ::OB::InputStreamImpl;
    friend class ::OB::OutputStreamImpl;
};




typedef OB::VarVar< Any > Any_var;
typedef OB::VarOut< Any > Any_out;

}




void operator<<=(CORBA::Any_var&, CORBA::Short);
void operator<<=(CORBA::Any_var&, CORBA::UShort);
void operator<<=(CORBA::Any_var&, CORBA::Long);
void operator<<=(CORBA::Any_var&, CORBA::ULong);
void operator<<=(CORBA::Any_var&, CORBA::LongLong);
void operator<<=(CORBA::Any_var&, CORBA::ULongLong);
void operator<<=(CORBA::Any_var&, CORBA::Float);
void operator<<=(CORBA::Any_var&, CORBA::Double);
void operator<<=(CORBA::Any_var&, CORBA::LongDouble);
void operator<<=(CORBA::Any_var&, const char*);
void operator<<=(CORBA::Any_var&, char*);
void operator<<=(CORBA::Any_var&, const CORBA::String_var&);
void operator<<=(CORBA::Any_var&, const OB::StrForSeq&);
void operator<<=(CORBA::Any_var&, const wchar_t*);
void operator<<=(CORBA::Any_var&, wchar_t*);
void operator<<=(CORBA::Any_var&, const CORBA::WString_var&);
void operator<<=(CORBA::Any_var&, const OB::WStrForSeq&);
void operator<<=(CORBA::Any_var&, const CORBA::Any&);
void operator<<=(CORBA::Any_var&, CORBA::Any*);
void operator<<=(CORBA::Any_var&, CORBA::TypeCode_ptr);
void operator<<=(CORBA::Any_var&, CORBA::TypeCode_ptr*);
void operator<<=(CORBA::Any_var&, CORBA::Principal_ptr);
void operator<<=(CORBA::Any_var&, CORBA::Principal_ptr*);
void operator<<=(CORBA::Any_var&, CORBA::Object_ptr);
void operator<<=(CORBA::Any_var&, CORBA::Object_ptr*);

CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Short&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::UShort&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Long&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::ULong&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::LongLong&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::ULongLong&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Float&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Double&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::LongDouble&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, const char*&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, const wchar_t*&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, const CORBA::Any*&);
CORBA::Boolean operator>>=(const CORBA::Any_var&,
                           const CORBA::SystemException*&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::TypeCode_ptr&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Principal_ptr&);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Object_ptr&);

void operator<<=(CORBA::Any_var&, CORBA::Any::from_boolean);
void operator<<=(CORBA::Any_var&, CORBA::Any::from_octet);
void operator<<=(CORBA::Any_var&, CORBA::Any::from_char);
void operator<<=(CORBA::Any_var&, CORBA::Any::from_wchar);
void operator<<=(CORBA::Any_var&, CORBA::Any::from_string);
void operator<<=(CORBA::Any_var&, CORBA::Any::from_wstring);
void operator<<=(CORBA::Any_var&, CORBA::Any::from_fixed);

CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_boolean);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_octet);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_char);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_wchar);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_string);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_wstring);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_fixed);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_object);
CORBA::Boolean operator>>=(const CORBA::Any_var&,
                           CORBA::Any::to_abstract_base);
CORBA::Boolean operator>>=(const CORBA::Any_var&, CORBA::Any::to_value);
# 412 "../../include/OB/Any.h"
namespace CORBA { class UNKNOWN; } void operator<<=(CORBA::Any&, CORBA::UNKNOWN*); void operator<<=(CORBA::Any&, const CORBA::UNKNOWN&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::UNKNOWN*&); inline void operator<<=(CORBA::Any_var& a, CORBA::UNKNOWN* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::UNKNOWN& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::UNKNOWN*& v) { return a.in() >>= v; }
namespace CORBA { class BAD_PARAM; } void operator<<=(CORBA::Any&, CORBA::BAD_PARAM*); void operator<<=(CORBA::Any&, const CORBA::BAD_PARAM&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::BAD_PARAM*&); inline void operator<<=(CORBA::Any_var& a, CORBA::BAD_PARAM* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::BAD_PARAM& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::BAD_PARAM*& v) { return a.in() >>= v; }
namespace CORBA { class NO_MEMORY; } void operator<<=(CORBA::Any&, CORBA::NO_MEMORY*); void operator<<=(CORBA::Any&, const CORBA::NO_MEMORY&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::NO_MEMORY*&); inline void operator<<=(CORBA::Any_var& a, CORBA::NO_MEMORY* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::NO_MEMORY& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::NO_MEMORY*& v) { return a.in() >>= v; }
namespace CORBA { class IMP_LIMIT; } void operator<<=(CORBA::Any&, CORBA::IMP_LIMIT*); void operator<<=(CORBA::Any&, const CORBA::IMP_LIMIT&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::IMP_LIMIT*&); inline void operator<<=(CORBA::Any_var& a, CORBA::IMP_LIMIT* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::IMP_LIMIT& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::IMP_LIMIT*& v) { return a.in() >>= v; }
namespace CORBA { class COMM_FAILURE; } void operator<<=(CORBA::Any&, CORBA::COMM_FAILURE*); void operator<<=(CORBA::Any&, const CORBA::COMM_FAILURE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::COMM_FAILURE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::COMM_FAILURE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::COMM_FAILURE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::COMM_FAILURE*& v) { return a.in() >>= v; }
namespace CORBA { class INV_OBJREF; } void operator<<=(CORBA::Any&, CORBA::INV_OBJREF*); void operator<<=(CORBA::Any&, const CORBA::INV_OBJREF&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INV_OBJREF*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INV_OBJREF* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INV_OBJREF& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INV_OBJREF*& v) { return a.in() >>= v; }
namespace CORBA { class NO_PERMISSION; } void operator<<=(CORBA::Any&, CORBA::NO_PERMISSION*); void operator<<=(CORBA::Any&, const CORBA::NO_PERMISSION&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::NO_PERMISSION*&); inline void operator<<=(CORBA::Any_var& a, CORBA::NO_PERMISSION* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::NO_PERMISSION& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::NO_PERMISSION*& v) { return a.in() >>= v; }
namespace CORBA { class INTERNAL; } void operator<<=(CORBA::Any&, CORBA::INTERNAL*); void operator<<=(CORBA::Any&, const CORBA::INTERNAL&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INTERNAL*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INTERNAL* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INTERNAL& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INTERNAL*& v) { return a.in() >>= v; }
namespace CORBA { class MARSHAL; } void operator<<=(CORBA::Any&, CORBA::MARSHAL*); void operator<<=(CORBA::Any&, const CORBA::MARSHAL&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::MARSHAL*&); inline void operator<<=(CORBA::Any_var& a, CORBA::MARSHAL* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::MARSHAL& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::MARSHAL*& v) { return a.in() >>= v; }
namespace CORBA { class INITIALIZE; } void operator<<=(CORBA::Any&, CORBA::INITIALIZE*); void operator<<=(CORBA::Any&, const CORBA::INITIALIZE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INITIALIZE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INITIALIZE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INITIALIZE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INITIALIZE*& v) { return a.in() >>= v; }
namespace CORBA { class NO_IMPLEMENT; } void operator<<=(CORBA::Any&, CORBA::NO_IMPLEMENT*); void operator<<=(CORBA::Any&, const CORBA::NO_IMPLEMENT&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::NO_IMPLEMENT*&); inline void operator<<=(CORBA::Any_var& a, CORBA::NO_IMPLEMENT* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::NO_IMPLEMENT& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::NO_IMPLEMENT*& v) { return a.in() >>= v; }
namespace CORBA { class BAD_TYPECODE; } void operator<<=(CORBA::Any&, CORBA::BAD_TYPECODE*); void operator<<=(CORBA::Any&, const CORBA::BAD_TYPECODE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::BAD_TYPECODE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::BAD_TYPECODE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::BAD_TYPECODE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::BAD_TYPECODE*& v) { return a.in() >>= v; }
namespace CORBA { class BAD_OPERATION; } void operator<<=(CORBA::Any&, CORBA::BAD_OPERATION*); void operator<<=(CORBA::Any&, const CORBA::BAD_OPERATION&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::BAD_OPERATION*&); inline void operator<<=(CORBA::Any_var& a, CORBA::BAD_OPERATION* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::BAD_OPERATION& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::BAD_OPERATION*& v) { return a.in() >>= v; }
namespace CORBA { class NO_RESOURCES; } void operator<<=(CORBA::Any&, CORBA::NO_RESOURCES*); void operator<<=(CORBA::Any&, const CORBA::NO_RESOURCES&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::NO_RESOURCES*&); inline void operator<<=(CORBA::Any_var& a, CORBA::NO_RESOURCES* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::NO_RESOURCES& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::NO_RESOURCES*& v) { return a.in() >>= v; }
namespace CORBA { class NO_RESPONSE; } void operator<<=(CORBA::Any&, CORBA::NO_RESPONSE*); void operator<<=(CORBA::Any&, const CORBA::NO_RESPONSE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::NO_RESPONSE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::NO_RESPONSE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::NO_RESPONSE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::NO_RESPONSE*& v) { return a.in() >>= v; }
namespace CORBA { class PERSIST_STORE; } void operator<<=(CORBA::Any&, CORBA::PERSIST_STORE*); void operator<<=(CORBA::Any&, const CORBA::PERSIST_STORE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::PERSIST_STORE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::PERSIST_STORE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::PERSIST_STORE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::PERSIST_STORE*& v) { return a.in() >>= v; }
namespace CORBA { class BAD_INV_ORDER; } void operator<<=(CORBA::Any&, CORBA::BAD_INV_ORDER*); void operator<<=(CORBA::Any&, const CORBA::BAD_INV_ORDER&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::BAD_INV_ORDER*&); inline void operator<<=(CORBA::Any_var& a, CORBA::BAD_INV_ORDER* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::BAD_INV_ORDER& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::BAD_INV_ORDER*& v) { return a.in() >>= v; }
namespace CORBA { class TRANSIENT; } void operator<<=(CORBA::Any&, CORBA::TRANSIENT*); void operator<<=(CORBA::Any&, const CORBA::TRANSIENT&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::TRANSIENT*&); inline void operator<<=(CORBA::Any_var& a, CORBA::TRANSIENT* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::TRANSIENT& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::TRANSIENT*& v) { return a.in() >>= v; }
namespace CORBA { class FREE_MEM; } void operator<<=(CORBA::Any&, CORBA::FREE_MEM*); void operator<<=(CORBA::Any&, const CORBA::FREE_MEM&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::FREE_MEM*&); inline void operator<<=(CORBA::Any_var& a, CORBA::FREE_MEM* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::FREE_MEM& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::FREE_MEM*& v) { return a.in() >>= v; }
namespace CORBA { class INV_IDENT; } void operator<<=(CORBA::Any&, CORBA::INV_IDENT*); void operator<<=(CORBA::Any&, const CORBA::INV_IDENT&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INV_IDENT*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INV_IDENT* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INV_IDENT& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INV_IDENT*& v) { return a.in() >>= v; }
namespace CORBA { class INV_FLAG; } void operator<<=(CORBA::Any&, CORBA::INV_FLAG*); void operator<<=(CORBA::Any&, const CORBA::INV_FLAG&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INV_FLAG*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INV_FLAG* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INV_FLAG& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INV_FLAG*& v) { return a.in() >>= v; }
namespace CORBA { class INTF_REPOS; } void operator<<=(CORBA::Any&, CORBA::INTF_REPOS*); void operator<<=(CORBA::Any&, const CORBA::INTF_REPOS&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INTF_REPOS*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INTF_REPOS* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INTF_REPOS& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INTF_REPOS*& v) { return a.in() >>= v; }
namespace CORBA { class BAD_CONTEXT; } void operator<<=(CORBA::Any&, CORBA::BAD_CONTEXT*); void operator<<=(CORBA::Any&, const CORBA::BAD_CONTEXT&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::BAD_CONTEXT*&); inline void operator<<=(CORBA::Any_var& a, CORBA::BAD_CONTEXT* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::BAD_CONTEXT& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::BAD_CONTEXT*& v) { return a.in() >>= v; }
namespace CORBA { class OBJ_ADAPTER; } void operator<<=(CORBA::Any&, CORBA::OBJ_ADAPTER*); void operator<<=(CORBA::Any&, const CORBA::OBJ_ADAPTER&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::OBJ_ADAPTER*&); inline void operator<<=(CORBA::Any_var& a, CORBA::OBJ_ADAPTER* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::OBJ_ADAPTER& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::OBJ_ADAPTER*& v) { return a.in() >>= v; }
namespace CORBA { class DATA_CONVERSION; } void operator<<=(CORBA::Any&, CORBA::DATA_CONVERSION*); void operator<<=(CORBA::Any&, const CORBA::DATA_CONVERSION&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::DATA_CONVERSION*&); inline void operator<<=(CORBA::Any_var& a, CORBA::DATA_CONVERSION* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::DATA_CONVERSION& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::DATA_CONVERSION*& v) { return a.in() >>= v; }
namespace CORBA { class OBJECT_NOT_EXIST; } void operator<<=(CORBA::Any&, CORBA::OBJECT_NOT_EXIST*); void operator<<=(CORBA::Any&, const CORBA::OBJECT_NOT_EXIST&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::OBJECT_NOT_EXIST*&); inline void operator<<=(CORBA::Any_var& a, CORBA::OBJECT_NOT_EXIST* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::OBJECT_NOT_EXIST& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::OBJECT_NOT_EXIST*& v) { return a.in() >>= v; }
namespace CORBA { class TRANSACTION_REQUIRED; } void operator<<=(CORBA::Any&, CORBA::TRANSACTION_REQUIRED*); void operator<<=(CORBA::Any&, const CORBA::TRANSACTION_REQUIRED&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::TRANSACTION_REQUIRED*&); inline void operator<<=(CORBA::Any_var& a, CORBA::TRANSACTION_REQUIRED* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::TRANSACTION_REQUIRED& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::TRANSACTION_REQUIRED*& v) { return a.in() >>= v; }
namespace CORBA { class TRANSACTION_ROLLEDBACK; } void operator<<=(CORBA::Any&, CORBA::TRANSACTION_ROLLEDBACK*); void operator<<=(CORBA::Any&, const CORBA::TRANSACTION_ROLLEDBACK&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::TRANSACTION_ROLLEDBACK*&); inline void operator<<=(CORBA::Any_var& a, CORBA::TRANSACTION_ROLLEDBACK* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::TRANSACTION_ROLLEDBACK& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::TRANSACTION_ROLLEDBACK*& v) { return a.in() >>= v; }
namespace CORBA { class INVALID_TRANSACTION; } void operator<<=(CORBA::Any&, CORBA::INVALID_TRANSACTION*); void operator<<=(CORBA::Any&, const CORBA::INVALID_TRANSACTION&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INVALID_TRANSACTION*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INVALID_TRANSACTION* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INVALID_TRANSACTION& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INVALID_TRANSACTION*& v) { return a.in() >>= v; }
namespace CORBA { class INV_POLICY; } void operator<<=(CORBA::Any&, CORBA::INV_POLICY*); void operator<<=(CORBA::Any&, const CORBA::INV_POLICY&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::INV_POLICY*&); inline void operator<<=(CORBA::Any_var& a, CORBA::INV_POLICY* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::INV_POLICY& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::INV_POLICY*& v) { return a.in() >>= v; }
namespace CORBA { class CODESET_INCOMPATIBLE; } void operator<<=(CORBA::Any&, CORBA::CODESET_INCOMPATIBLE*); void operator<<=(CORBA::Any&, const CORBA::CODESET_INCOMPATIBLE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::CODESET_INCOMPATIBLE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::CODESET_INCOMPATIBLE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::CODESET_INCOMPATIBLE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::CODESET_INCOMPATIBLE*& v) { return a.in() >>= v; }
namespace CORBA { class REBIND; } void operator<<=(CORBA::Any&, CORBA::REBIND*); void operator<<=(CORBA::Any&, const CORBA::REBIND&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::REBIND*&); inline void operator<<=(CORBA::Any_var& a, CORBA::REBIND* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::REBIND& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::REBIND*& v) { return a.in() >>= v; }
namespace CORBA { class TIMEOUT; } void operator<<=(CORBA::Any&, CORBA::TIMEOUT*); void operator<<=(CORBA::Any&, const CORBA::TIMEOUT&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::TIMEOUT*&); inline void operator<<=(CORBA::Any_var& a, CORBA::TIMEOUT* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::TIMEOUT& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::TIMEOUT*& v) { return a.in() >>= v; }
namespace CORBA { class TRANSACTION_UNAVAILABLE; } void operator<<=(CORBA::Any&, CORBA::TRANSACTION_UNAVAILABLE*); void operator<<=(CORBA::Any&, const CORBA::TRANSACTION_UNAVAILABLE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::TRANSACTION_UNAVAILABLE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::TRANSACTION_UNAVAILABLE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::TRANSACTION_UNAVAILABLE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::TRANSACTION_UNAVAILABLE*& v) { return a.in() >>= v; }
namespace CORBA { class TRANSACTION_MODE; } void operator<<=(CORBA::Any&, CORBA::TRANSACTION_MODE*); void operator<<=(CORBA::Any&, const CORBA::TRANSACTION_MODE&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::TRANSACTION_MODE*&); inline void operator<<=(CORBA::Any_var& a, CORBA::TRANSACTION_MODE* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::TRANSACTION_MODE& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::TRANSACTION_MODE*& v) { return a.in() >>= v; }
namespace CORBA { class BAD_QOS; } void operator<<=(CORBA::Any&, CORBA::BAD_QOS*); void operator<<=(CORBA::Any&, const CORBA::BAD_QOS&); CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::BAD_QOS*&); inline void operator<<=(CORBA::Any_var& a, CORBA::BAD_QOS* v) { a.inout() <<= v; } inline void operator<<=(CORBA::Any_var& a, const CORBA::BAD_QOS& v) { a.inout() <<= v; } inline CORBA::Boolean operator>>=(const CORBA::Any_var& a, const CORBA::BAD_QOS*& v) { return a.in() >>= v; }
# 15 "../../include/OB/TypeCode.h" 2
# 1 "../../include/OB/TypeCodeConst.h" 1
# 16 "../../include/OB/TypeCode.h" 2
# 1 "../../include/OB/TCKind.h" 1
# 37 "../../include/OB/TCKind.h"
namespace CORBA
{

}

namespace CORBA
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




enum TCKind
{
    tk_null,
    tk_void,
    tk_short,
    tk_long,
    tk_ushort,
    tk_ulong,
    tk_float,
    tk_double,
    tk_boolean,
    tk_char,
    tk_octet,
    tk_any,
    tk_TypeCode,
    tk_Principal,
    tk_objref,
    tk_struct,
    tk_union,
    tk_enum,
    tk_string,
    tk_sequence,
    tk_array,
    tk_alias,
    tk_except,
    tk_longlong,
    tk_ulonglong,
    tk_longdouble,
    tk_wchar,
    tk_wstring,
    tk_fixed,
    tk_value,
    tk_value_box,
    tk_native,
    tk_abstract_interface,
    tk_local_interface
};

typedef TCKind& TCKind_out;

          extern OB::TypeCodeConst _tc_TCKind;

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::TCKind);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::TCKind&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::TCKind val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::TCKind& val)
{
    return any.in() >>= val;
}
# 17 "../../include/OB/TypeCode.h" 2

namespace OB
{




class TypeCodeConst;
class TypeCodeFactory;

}

namespace CORBA
{




typedef CORBA::Short ValueModifier;
typedef CORBA::Short Visibility;




class TypeCode : public JTCMutex, public OB::SimpleRefCount
{



    TCKind kind_;





    String_var id_;
    String_var name_;




    OB::StrSeq< int > memberNames_;




    OB::ObjSeq< TypeCode, int > memberTypes_;




    OB::VarSeq< Any, int > labels_;




    TypeCode_var discriminatorType_;




    ULong length_;




    TypeCode_var contentType_;




    UShort fixedDigits_;
    Short fixedScale_;




    OB::FixSeq< Short, int > memberVisibility_;
    ValueModifier typeModifier_;
    TypeCode_var concreteBaseType_;







    String_var recId_;
    TypeCode_var recType_;




    bool equivalentRecHelper(TypeCode_ptr, OB::FixSeq< TypeCode_ptr, int >&,
                             OB::FixSeq< TypeCode_ptr, int >&) const;
    bool equivalentRec(TypeCode_ptr, OB::FixSeq< TypeCode_ptr, int >&,
                       OB::FixSeq< TypeCode_ptr, int >&) const;




    TypeCode_ptr getCompactTypeCodeRec(OB::FixSeq< TypeCode_ptr, int >&,
                                       OB::FixSeq< TypeCode_ptr, int >&) const;




    ULong tryRefCount_;
    bool releaseVisit_;
    bool tryReleaseVisit_;
    bool reachableVisit_;
    void resetTryRelease();
    void tryRelease();
    bool checkTryRelease(TypeCode_ptr);
    bool isReachable(TypeCode_ptr);

    bool gc_;




    TypeCode(const TypeCode&);
    void operator=(const TypeCode&);

protected:




    friend class ::OB::TypeCodeConst;
    friend class ::OB::TypeCodeFactory;




    friend class ::OB::InputStreamImpl;
    friend class ::OB::OutputStreamImpl;

    TypeCode(bool = false);
    virtual ~TypeCode();

public:




    static inline TypeCode_ptr _duplicate(TypeCode_ptr p)
    {
        if(p)
        {




            p -> _OB_duplicateWithGC();
        }

        return p;
    }

    static inline TypeCode_ptr _nil()
    { return 0; }

    struct Bounds : public UserException
    {



        Bounds() { }
        Bounds(const Bounds& ex) : UserException(ex) { }
        Bounds& operator=(const Bounds&) { return *this; }

        static Bounds* _downcast(Exception* p)
        { return dynamic_cast<Bounds*>(p); }
        static const Bounds* _downcast(const Exception* p)
        { return dynamic_cast<const Bounds*>(p); }
        virtual void _raise() const { throw *this; }
        virtual const char* _name() const { return "Bounds"; }
        virtual const char* _rep_id() const
        { return "IDL:omg.org/CORBA/TypeCode/Bounds:1.0"; }




        virtual char* _to_string() const
        { return _OB_defaultToString("CORBA::TypeCode::Bounds"); }





        virtual Exception* _OB_clone() const { return new Bounds(*this); }
        virtual void _OB_insertInAny(Any&);
        static void _OB_unmarshal(Bounds&, OB::InputStreamImpl*);
    };

    class TypeCodeConstForBounds : public JTCMutex
    {
        TypeCodeConstForBounds(const TypeCodeConstForBounds&);
        void operator=(const TypeCodeConstForBounds&);

        CORBA::TypeCode_var typeCode_;

    public:

        TypeCodeConstForBounds() { }

        operator CORBA::TypeCode_ptr();
        CORBA::TypeCode_ptr operator->()
        { return operator CORBA::TypeCode_ptr(); }
    };
    static TypeCodeConstForBounds _tc_Bounds;

    struct BadKind : public UserException
    {



        BadKind() { }
        BadKind(const BadKind& ex) : UserException(ex) { }
        BadKind& operator=(const BadKind&) { return *this; }

        static BadKind* _downcast(Exception* p)
        { return dynamic_cast<BadKind*>(p); }
        static const BadKind* _downcast(const Exception* p)
        { return dynamic_cast<const BadKind*>(p); }
        virtual void _raise() const { throw *this; }
        virtual const char* _name() const { return "BadKind"; }
        virtual const char* _rep_id() const
        { return "IDL:omg.org/CORBA/TypeCode/BadKind:1.0"; }




        virtual char* _to_string() const
        { return _OB_defaultToString("CORBA::TypeCode::BadKind"); }





        virtual Exception* _OB_clone() const { return new BadKind(*this); }
        virtual void _OB_insertInAny(Any&);
        static void _OB_unmarshal(BadKind&, OB::InputStreamImpl*);
    };

    class TypeCodeConstForBadKind : public JTCMutex
    {
        TypeCodeConstForBadKind(const TypeCodeConstForBadKind&);
        void operator=(const TypeCodeConstForBadKind&);

        CORBA::TypeCode_var typeCode_;

    public:

        TypeCodeConstForBadKind() { }

        operator CORBA::TypeCode_ptr();
        CORBA::TypeCode_ptr operator->()
        { return operator CORBA::TypeCode_ptr(); }
    };
    static TypeCodeConstForBadKind _tc_BadKind;

    Boolean equal(TypeCode_ptr) const;
    Boolean equivalent(TypeCode_ptr) const;
    TypeCode_ptr get_compact_typecode() const;
    TCKind kind() const;

    const char* id() const;
    const char* name() const;

    ULong member_count() const;
    const char* member_name(ULong index) const;

    TypeCode_ptr member_type(ULong index) const;

    Any* member_label(ULong index) const;
    TypeCode_ptr discriminator_type() const;
    Long default_index() const;

    ULong length() const;

    TypeCode_ptr content_type() const;

    UShort fixed_digits() const;
    Short fixed_scale() const;

    Visibility member_visibility(ULong) const;
    ValueModifier type_modifier() const;
    TypeCode_ptr concrete_base_type() const;





    bool _OB_isSystemException() const;
    bool _OB_isRecursive() const { return recId_.in() ? true : false; }
    void _OB_duplicateWithGC();
    void _OB_releaseWithGC();




    void _OB_disableGC();
    void _OB_enableGC();

    TypeCode_ptr _OB_contentType_nodup() const;
    TypeCode_ptr _OB_memberType_nodup(ULong index) const;
    TypeCode_ptr _OB_discriminatorType_nodup() const;
    TypeCode_ptr _OB_concreteBaseType_nodup() const;




    static void _OB_embedRecTC(TypeCode_ptr);
    static void _OB_embedRecTC(TypeCode_ptr, TypeCode_ptr);
};

inline Boolean
is_nil(TypeCode_ptr p)
{
    return p == 0;
}

inline void
release(TypeCode_ptr p)
{
    if(!is_nil(p))
    {




        p -> _OB_releaseWithGC();
    }
}

}




void operator<<=(CORBA::Any&, CORBA::TypeCode::Bounds*);
void operator<<=(CORBA::Any&, const CORBA::TypeCode::Bounds&);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::TypeCode::Bounds*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::TypeCode::Bounds* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::TypeCode::Bounds& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::TypeCode::Bounds*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::TypeCode::BadKind*);
void operator<<=(CORBA::Any&, const CORBA::TypeCode::BadKind&);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::TypeCode::BadKind*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::TypeCode::BadKind* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::TypeCode::BadKind& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::TypeCode::BadKind*& val)
{
    return any.in() >>= val;
}

namespace OB
{




class TypeCodePrimitiveConst
{
    TypeCodePrimitiveConst(const TypeCodePrimitiveConst&);
    void operator=(const TypeCodePrimitiveConst&);

    CORBA::TypeCode_var typeCode_;
    CORBA::TCKind kind_;

public:

    TypeCodePrimitiveConst(CORBA::TCKind);

    operator CORBA::TypeCode_ptr()
    { return typeCode_; }

    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }
};

class TypeCodeStringConst : public JTCMutex
{
    TypeCodeStringConst(const TypeCodeStringConst&);
    void operator=(const TypeCodeStringConst&);

    CORBA::TypeCode_var typeCode_;
    bool wide_;

public:

    TypeCodeStringConst(bool wide) : wide_(wide) { }

    operator CORBA::TypeCode_ptr();
    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }





    CORBA::TypeCode_ptr _OB_bounded(CORBA::ULong);
};

class TypeCodeFixedConst : public JTCMutex
{
    TypeCodeFixedConst(const TypeCodeFixedConst&);
    void operator=(const TypeCodeFixedConst&);

    CORBA::TypeCode_var typeCode_;

public:

    TypeCodeFixedConst() { }

    operator CORBA::TypeCode_ptr();
    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }





    CORBA::TypeCode_ptr _OB_fixed(CORBA::UShort, CORBA::UShort);
};

class TypeCodeObjectConst : public JTCMutex
{
    TypeCodeObjectConst(const TypeCodeObjectConst&);
    void operator=(const TypeCodeObjectConst&);

    CORBA::TypeCode_var typeCode_;

public:

    TypeCodeObjectConst() { }

    operator CORBA::TypeCode_ptr();
    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }
};

class TypeCodeAbstractBaseConst : public JTCMutex
{
    TypeCodeAbstractBaseConst(const TypeCodeAbstractBaseConst&);
    void operator=(const TypeCodeAbstractBaseConst&);

    CORBA::TypeCode_var typeCode_;

public:

    TypeCodeAbstractBaseConst() { }

    operator CORBA::TypeCode_ptr();
    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }
};

class TypeCodeValueBaseConst : public JTCMutex
{
    TypeCodeValueBaseConst(const TypeCodeValueBaseConst&);
    void operator=(const TypeCodeValueBaseConst&);

    CORBA::TypeCode_var typeCode_;

public:

    TypeCodeValueBaseConst() { }

    operator CORBA::TypeCode_ptr();
    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }
};

class TypeCodeSysExConst : public JTCMutex
{
    TypeCodeSysExConst(const TypeCodeSysExConst&);
    void operator=(const TypeCodeSysExConst&);

    CORBA::TypeCode_var typeCode_;
    const char* name_;

public:

    TypeCodeSysExConst(const char* name) : name_(name) { }

    operator CORBA::TypeCode_ptr();
    CORBA::TypeCode_ptr operator->()
    { return operator CORBA::TypeCode_ptr(); }
};




CORBA::TypeCode_ptr GetOrigType(CORBA::TypeCode_ptr);
CORBA::TypeCode_ptr GetOrigType_nodup(CORBA::TypeCode_ptr);

}

namespace CORBA
{




          extern OB::TypeCodePrimitiveConst _tc_null;
          extern OB::TypeCodePrimitiveConst _tc_void;
          extern OB::TypeCodePrimitiveConst _tc_short;
          extern OB::TypeCodePrimitiveConst _tc_long;
          extern OB::TypeCodePrimitiveConst _tc_longlong;
          extern OB::TypeCodePrimitiveConst _tc_ushort;
          extern OB::TypeCodePrimitiveConst _tc_ulong;
          extern OB::TypeCodePrimitiveConst _tc_ulonglong;
          extern OB::TypeCodePrimitiveConst _tc_float;
          extern OB::TypeCodePrimitiveConst _tc_double;
          extern OB::TypeCodePrimitiveConst _tc_longdouble;
          extern OB::TypeCodePrimitiveConst _tc_boolean;
          extern OB::TypeCodePrimitiveConst _tc_char;
          extern OB::TypeCodePrimitiveConst _tc_wchar;
          extern OB::TypeCodePrimitiveConst _tc_octet;
          extern OB::TypeCodePrimitiveConst _tc_any;
          extern OB::TypeCodePrimitiveConst _tc_TypeCode;
          extern OB::TypeCodePrimitiveConst _tc_Principal;

          extern OB::TypeCodeStringConst _tc_string;
          extern OB::TypeCodeStringConst _tc_wstring;

          extern OB::TypeCodeFixedConst _tc_fixed;

          extern OB::TypeCodeObjectConst _tc_Object;

          extern OB::TypeCodeAbstractBaseConst _tc_AbstractBase;

          extern OB::TypeCodeValueBaseConst _tc_ValueBase;

          extern OB::TypeCodeSysExConst _tc_UNKNOWN;
          extern OB::TypeCodeSysExConst _tc_BAD_PARAM;
          extern OB::TypeCodeSysExConst _tc_NO_MEMORY;
          extern OB::TypeCodeSysExConst _tc_IMP_LIMIT;
          extern OB::TypeCodeSysExConst _tc_COMM_FAILURE;
          extern OB::TypeCodeSysExConst _tc_INV_OBJREF;
          extern OB::TypeCodeSysExConst _tc_NO_PERMISSION;
          extern OB::TypeCodeSysExConst _tc_INTERNAL;
          extern OB::TypeCodeSysExConst _tc_MARSHAL;
          extern OB::TypeCodeSysExConst _tc_INITIALIZE;
          extern OB::TypeCodeSysExConst _tc_NO_IMPLEMENT;
          extern OB::TypeCodeSysExConst _tc_BAD_TYPECODE;
          extern OB::TypeCodeSysExConst _tc_BAD_OPERATION;
          extern OB::TypeCodeSysExConst _tc_NO_RESOURCES;
          extern OB::TypeCodeSysExConst _tc_NO_RESPONSE;
          extern OB::TypeCodeSysExConst _tc_PERSIST_STORE;
          extern OB::TypeCodeSysExConst _tc_BAD_INV_ORDER;
          extern OB::TypeCodeSysExConst _tc_TRANSIENT;
          extern OB::TypeCodeSysExConst _tc_FREE_MEM;
          extern OB::TypeCodeSysExConst _tc_INV_IDENT;
          extern OB::TypeCodeSysExConst _tc_INV_FLAG;
          extern OB::TypeCodeSysExConst _tc_INTF_REPOS;
          extern OB::TypeCodeSysExConst _tc_BAD_CONTEXT;
          extern OB::TypeCodeSysExConst _tc_OBJ_ADAPTER;
          extern OB::TypeCodeSysExConst _tc_DATA_CONVERSION;
          extern OB::TypeCodeSysExConst _tc_OBJECT_NOT_EXIST;
          extern OB::TypeCodeSysExConst _tc_TRANSACTION_REQUIRED;
          extern OB::TypeCodeSysExConst _tc_TRANSACTION_ROLLEDBACK;
          extern OB::TypeCodeSysExConst _tc_INVALID_TRANSACTION;
          extern OB::TypeCodeSysExConst _tc_INV_POLICY;
          extern OB::TypeCodeSysExConst _tc_CODESET_INCOMPATIBLE;
          extern OB::TypeCodeSysExConst _tc_REBIND;
          extern OB::TypeCodeSysExConst _tc_TIMEOUT;
          extern OB::TypeCodeSysExConst _tc_TRANSACTION_UNAVAILABLE;
          extern OB::TypeCodeSysExConst _tc_TRANSACTION_MODE;
          extern OB::TypeCodeSysExConst _tc_BAD_QOS;

}
# 16 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/Context.h" 1
# 14 "../../include/OB/Context.h"
# 1 "../../include/OB/Context_fwd.h" 1
# 14 "../../include/OB/Context_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Context_fwd.h" 2

namespace CORBA
{

class Context;
typedef Context* Context_ptr;
typedef Context_ptr ContextRef;

}

void OBDuplicate(CORBA::Context_ptr);
void OBRelease(CORBA::Context_ptr);

namespace CORBA
{

typedef OB::ObjVar< Context > Context_var;
typedef OB::ObjOut< Context > Context_out;

}
# 15 "../../include/OB/Context.h" 2
# 1 "../../include/OB/NamedValue_fwd.h" 1
# 14 "../../include/OB/NamedValue_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/NamedValue_fwd.h" 2

namespace CORBA
{

class NamedValue;
typedef NamedValue* NamedValue_ptr;
typedef NamedValue_ptr NamedValueRef;

class NVList;
typedef NVList* NVList_ptr;
typedef NVList_ptr NVListRef;

}

void OBDuplicate(CORBA::NamedValue_ptr);
void OBRelease(CORBA::NamedValue_ptr);

void OBDuplicate(CORBA::NVList_ptr);
void OBRelease(CORBA::NVList_ptr);

namespace CORBA
{

typedef OB::ObjVar< NamedValue > NamedValue_var;
typedef OB::ObjOut< NamedValue > NamedValue_out;

typedef OB::ObjVar< NVList > NVList_var;
typedef OB::ObjOut< NVList > NVList_out;

}
# 16 "../../include/OB/Context.h" 2
# 1 "../../include/OB/AnyDeclaration.h" 1
# 17 "../../include/OB/Context.h" 2
# 1 "../../include/OB/Hashtable.h" 1
# 14 "../../include/OB/Hashtable.h"
# 1 "../../include/OB/Basic.h" 1
# 15 "../../include/OB/Hashtable.h" 2
# 1 "../../include/OB/STLConfig.h" 1
# 16 "../../include/OB/Hashtable.h" 2
# 1 "../../include/OB/allocator.h" 1
# 15 "../../include/OB/allocator.h"
# 1 "/opt/egcs/include/g++-v3/backward/new.h" 1 3
# 33 "/opt/egcs/include/g++-v3/backward/new.h" 3
# 1 "/opt/egcs/include/g++-v3/backward/backward_warning.h" 1 3
# 34 "/opt/egcs/include/g++-v3/backward/new.h" 2 3
# 1 "/opt/egcs/include/g++-v3/new" 1 3
# 35 "/opt/egcs/include/g++-v3/backward/new.h" 2 3

using std::bad_alloc;
using std::nothrow_t;
using std::nothrow;
using std::new_handler;
using std::set_new_handler;
# 16 "../../include/OB/allocator.h" 2
# 1 "/usr/include/assert.h" 1 3
# 36 "/usr/include/assert.h" 3
# 1 "/usr/include/features.h" 1 3
# 37 "/usr/include/assert.h" 2 3
# 65 "/usr/include/assert.h" 3
extern "C" {


extern void __assert_fail (__const char *__assertion, __const char *__file,
                           unsigned int __line, __const char *__function)
     throw () __attribute__ ((__noreturn__));


extern void __assert_perror_fail (int __errnum, __const char *__file,
                                  unsigned int __line,
                                  __const char *__function)
     throw () __attribute__ ((__noreturn__));




extern void __assert (const char *__assertion, const char *__file, int __line)
     throw () __attribute__ ((__noreturn__));


}
# 17 "../../include/OB/allocator.h" 2
# 1 "/usr/include/stdlib.h" 1 3
# 18 "../../include/OB/allocator.h" 2

# 1 "../../include/OB/STLConfig.h" 1
# 20 "../../include/OB/allocator.h" 2




namespace OB
{

namespace stl
{





class Link
{
public:
    Link *next;
};
# 50 "../../include/OB/allocator.h"
template<class T>
class allocator
{




private:



    union Align
    {

        unsigned long long dummy;



        char mem[10 * ((sizeof(T) < sizeof(Link)) ? sizeof(Link) : sizeof(T))];
    };

private:





    struct Chunk
    {
        Chunk* next;
        Align mem;
    };



    Link* head_;


    Chunk* chunks_;





    Chunk chunk_;






    void grow()
    {
        Chunk* n = chunks_ ? new Chunk : &chunk_;

        n -> next = chunks_;
        chunks_ = n;

        char* start = n -> mem.mem;
        char* last = &start[(10 -1) * ((sizeof(T) < sizeof(Link)) ? sizeof(Link) : sizeof(T))];

        for (char* p = start; p < last; p += ((sizeof(T) < sizeof(Link)) ? sizeof(Link) : sizeof(T)))
            reinterpret_cast<Link*>(p) -> next =
                reinterpret_cast<Link*>(p + ((sizeof(T) < sizeof(Link)) ? sizeof(Link) : sizeof(T)));

        reinterpret_cast<Link*>(last) -> next = 0;
        head_ = reinterpret_cast<Link*>(start);
    }

public:
    typedef T value_type;
    typedef T* pointer;
    typedef const T* const_pointer;
    typedef T& reference;
    typedef const T& const_reference;
    typedef unsigned long size_type;




    allocator() : head_(0), chunks_(0)
    {
    }




    ~allocator()
    {
        if(chunks_)
        {
            Chunk* n = chunks_;

            while(n -> next)
            {
                Chunk* p = n;
                n = n -> next;
                delete p;
            }
        }
    }





    pointer allocate(size_type n)
    {
        (static_cast<void> ((n <= max_size()) ? 0 : (__assert_fail ("n <= max_size()", "../../include/OB/allocator.h", 158, __PRETTY_FUNCTION__), 0)));

        if(head_ == 0)
            grow();

        Link* p = head_;
        head_ = p -> next;

        return reinterpret_cast<pointer>(p);
    }





    void deallocate(pointer p, size_type n)
    {

        (static_cast<void> ((n <= max_size()) ? 0 : (__assert_fail ("n <= max_size()", "../../include/OB/allocator.h", 176, __PRETTY_FUNCTION__), 0)));

        Link *b = reinterpret_cast<Link*>(p);
        b -> next = head_;
        head_ = b;
    }





    size_type max_size()
    {
        return 1;
    }




    void construct(pointer p, const T& t)
    {
        new ((void*) p) T(t);
    }




    void destroy(pointer p)
    {
        ((T*) p) -> ~T();
    }




    pointer address(T& r)
    {
        return &r;
    }




    const_pointer address(const T& r)
    {
        return &r;
    }
};

}

}
# 17 "../../include/OB/Hashtable.h" 2

namespace OB
{




template<class K, class T, class H>
struct HashtableNode
{
    K key;
    T value;
    CORBA::ULong fullHash;
    HashtableNode<K, T, H>* next;

    HashtableNode()
    {
    }

    HashtableNode(const K& k, const T& val, HashtableNode<K, T, H>* n = 0)
        : key(k), value(val), next(n)
    {
        fullHash = H::hash(k);
    }
};




template<class K>
class HashEnumerator
{
   K* keys_;
   CORBA::ULong length_;
   CORBA::ULong *ref_;

   void dec()
   {
       if(ref_ != 0)
       {
           (*ref_)--;
           if(*ref_ == 0)
           {
               delete []keys_;
               delete ref_;
           }
       }
   }

public:

   HashEnumerator() : keys_(0), length_(0), ref_(0)
   {
   }

   HashEnumerator(K* keys, CORBA::ULong len)
       : keys_(keys), length_(len)
   {
       ref_ = new CORBA::ULong(0);
       *ref_ = 1;
   }

   HashEnumerator(const HashEnumerator<K>& e)
   {
       keys_ = e.keys_;
       length_ = e.length_;
       ref_ = e.ref_;
       (*ref_)++;
   }

   ~HashEnumerator()
   {
       dec();
   }

   HashEnumerator<K>& operator=(const HashEnumerator<K>& e)
   {
       if(keys_ != e.keys_)
       {
           dec();
           keys_ = e.keys_;
           length_ = e.length_;
           ref_ = e.ref_;
           (*ref_)++;
       }
       return *this;
   }

   CORBA::ULong length() const
   {
       return length_;
   }

   K operator[](CORBA::ULong i)
   {
       (static_cast<void> ((i < length_) ? 0 : (__assert_fail ("i < length_", "../../include/OB/Hashtable.h", 112, __PRETTY_FUNCTION__), 0)));
       return keys_[i];
   }
};






template<class K, class T, class H>
class Hashtable
{



    Hashtable(const Hashtable&);
    void operator=(const Hashtable&);

    typedef HashtableNode<K, T, H> node;
# 142 "../../include/OB/Hashtable.h"
    stl::allocator<node> allocator_;





    node* stable_[15];




    node** table_;
    CORBA::ULong length_;
    CORBA::Float load_;
    CORBA::ULong count_;
    CORBA::ULong threshold_;

    void removeAll();
    void resize();

public:

    typedef HashEnumerator<K> Enumerator;




    Hashtable(CORBA::ULong len = 15, CORBA::Float load = 0.75);




    ~Hashtable();




    void clear();




    bool containsKey(const K& key) const;




    void put(const K& key, const T& value);




    void remove(const K& key);




    bool get(const K& key, T& value) const;




    Enumerator keys() const;




    CORBA::ULong size() const;




    void displayStats(std::ostream&);
};






template<class K, class T, class H>
class SynchronizedHashtable : private Hashtable<K, T, H>,
                              public JTCRecursiveMutex
{
public:

    typedef HashEnumerator<K> Enumerator;

    SynchronizedHashtable(CORBA::ULong len = 15, CORBA::Float load = 0.75)
        : Hashtable<K,T,H>(len, load)
    {
    }

    ~SynchronizedHashtable() { }

    void clear()
    {
        JTCSynchronized sync(*this);
        Hashtable<K,T,H>::clear();
    }

    bool containsKey(const K& key) const
    {
        JTCSynchronized sync(*this);
        return Hashtable<K,T,H>::containsKey(key);
    }

    void put(const K& key, const T& value)
    {
        JTCSynchronized sync(*this);
        Hashtable<K,T,H>::put(key, value);
    }

    void remove(const K& key)
    {
        JTCSynchronized sync(*this);
        Hashtable<K,T,H>::remove(key);
    }

    bool get(const K& key, T& value) const
    {
        JTCSynchronized sync(*this);
        return Hashtable<K,T,H>::get(key, value);
    }

    Enumerator keys() const
    {
        JTCSynchronized sync(*this);
        return Hashtable<K,T,H>::keys();
    }

    CORBA::ULong size() const
    {
        JTCSynchronized sync(*this);
        return Hashtable<K,T,H>::size();
    }

    void displayStats(std::ostream& s)
    {
        JTCSynchronized sync(*this);
        Hashtable<K,T,H>::displayStats(s);
    }
};




struct LongHasher
{
    static CORBA::ULong hash(CORBA::Long k) { return (CORBA::ULong)k; }
    static bool comp(CORBA::Long k1, CORBA::Long k2) { return k1 == k2; }
};

struct ULongHasher
{
    static CORBA::ULong hash(CORBA::ULong k) { return k; }
    static bool comp(CORBA::ULong k1, CORBA::ULong k2) { return k1 == k2; }
};

struct StringHasher
{
    static CORBA::ULong hash(const char*);
    static bool comp(const char*, const char*);
};

template<class T> class StrSeq;

struct StringSeqHasher
{
    static CORBA::ULong hash(const StrSeq< int >&);
    static bool comp(const StrSeq< int >&, const StrSeq< int >&);
};

}





# 1 "../../include/OB/HashtableI.h" 1
# 14 "../../include/OB/HashtableI.h"
# 1 "../../include/OB/Hashtable.h" 1
# 15 "../../include/OB/HashtableI.h" 2

namespace OB
{





template<class K, class T, class H>
Hashtable<K, T, H>::Hashtable(CORBA::ULong len, CORBA::Float load)
    : length_(len), load_(load), count_(0)
{
    threshold_ = (CORBA::ULong)(length_ * load_);

    if(len <= 15)
    {
        table_ = stable_;
        memset(table_, 0, sizeof(node*) * length_);
    }
    else
    {
        table_ = new node*[length_];
        for(CORBA::ULong i = 0 ; i < length_ ; i++)
            table_[i] = 0;
    }
}

template<class K, class T, class H>
Hashtable<K, T, H>::~Hashtable()
{





    if(count_ > 0)
    {
        for(CORBA::ULong i = 0 ; i < length_ ; i++)
        {
            node* n = table_[i];





            table_[i] = 0;

            while(n)
            {
                node *n1 = n;
                n = n -> next;
                allocator_.destroy(n1);
            }
        }
    }

    if(table_ != stable_)
        delete []table_;
}





template<class K, class T, class H>
void
Hashtable<K, T, H>::clear()
{
    removeAll();
}

template<class K, class T, class H>
bool
Hashtable<K, T, H>::containsKey(const K& key) const
{
    CORBA::ULong fullHash = H::hash(key);
    CORBA::ULong h = fullHash % length_;

    node* n = table_[h];
    while(n != 0)
    {
        if(n -> fullHash == fullHash && H::comp(n -> key, key))
            return true;
        n = n -> next;
    }

    return false;
}

template<class K, class T, class H>
void
Hashtable<K, T, H>::put(const K& key, const T& value)
{
    CORBA::ULong fullHash = H::hash(key);
    CORBA::ULong h = fullHash % length_;

    node* n = table_[h];
    while(n != 0)
    {
        if(n -> fullHash == fullHash && H::comp(n -> key, key))
        {
            n -> value = value;
            return;
        }

        n = n -> next;
    }




    n = allocator_.allocate(1);
    allocator_.construct(n, node(key, value, table_[h]));

    table_[h] = n;

    count_++;
    if(count_ > threshold_)
        resize();
}

template<class K, class T, class H>
void
Hashtable<K, T, H>::remove(const K& key)
{
    CORBA::ULong fullHash = H::hash(key);
    CORBA::ULong h = fullHash % length_;

    node* prev = 0;
    node* n = table_[h];

    while(n != 0)
    {
        if(n -> fullHash == fullHash && H::comp(n -> key, key))
            break;

        prev = n;
        n = n -> next;
    }

    if(n != 0)
    {
        if(prev != 0)
            prev -> next = n -> next;
        else
            table_[h] = n -> next;

        count_--;

        allocator_.destroy(n);
        allocator_.deallocate(n, 1);
    }
}

template<class K, class T, class H>
bool
Hashtable<K, T, H>::get(const K& key, T& value) const
{
    CORBA::ULong fullHash = H::hash(key);
    CORBA::ULong h = fullHash % length_;

    node* n = table_[h];
    while(n != 0)
    {
        if(n -> fullHash == fullHash && H::comp(n -> key, key))
        {
            value = n -> value;
            return true;
        }

        n = n -> next;
    }

    return false;
}






template<class K, class T, class H>
typename Hashtable<K, T, H>::Enumerator
Hashtable<K, T, H>::keys() const

{
    CORBA::ULong index = 0;
    K* keys = new K[count_];

    for(CORBA::ULong i = 0 ; i < length_ ; i++)
    {
        for(node* n = table_[i] ; n != 0 ; n = n -> next)
            keys[index++] = n -> key;
    }

    Enumerator e(keys, count_);

    return e;
}

template<class K, class T, class H>
CORBA::ULong
Hashtable<K, T, H>::size() const
{
    return count_;
}

template<class K, class T, class H>
void
Hashtable<K, T, H>::displayStats(std::ostream& os)
{
    CORBA::ULong most = 0;
    CORBA::ULong occupied = 0;
    for(CORBA::ULong i = 0 ; i < length_ ; i++)
    {
        CORBA::ULong bucketLen = 0;
        for(node* n = table_[i] ; n != 0 ; n = n -> next, bucketLen++)
            ;
        if(bucketLen > most)
            most = bucketLen;
        if(bucketLen > 0)
            occupied++;
    }
    os << "Hash table: " << length_ << " buckets.\n";
    os << "Keys      : " << count_ << "\n";
    os << "Average   : " << (double)count_/(double)occupied << "\n";
    os << "Largest   : " << most << "\n";
    os << std::flush;
}





template<class K, class T, class H>
void
Hashtable<K, T, H>::removeAll()
{
    if(count_ > 0)
    {
        for(CORBA::ULong i = 0 ; i < length_ ; i++)
        {
            node* n = table_[i];





            table_[i] = 0;

            while(n)
            {
                node *n1 = n;
                n = n -> next;

                allocator_.destroy(n1);
                allocator_.deallocate(n1, 1);
            }
        }

        count_ = 0;
    }
}

template<class K, class T, class H>
void
Hashtable<K, T, H>::resize()
{
    CORBA::ULong i;
    CORBA::ULong size = length_ * 2 + 1;




    node** table = new node*[size];
    for(i = 0 ; i < size ; i++)
        table[i] = 0;




    for(i = 0 ; i < length_ ; i++)
    {
        node* n = table_[i];
        while(n != 0)
        {
            node* next = n -> next;
            CORBA::ULong h = n -> fullHash % size;
            n -> next = table[h];
            table[h] = n;
            n = next;
        }
    }




    length_ = size;
    threshold_ = (CORBA::ULong)(length_ * load_);
    if(table_ != stable_)
        delete []table_;
    table_ = table;
}

}
# 322 "../../include/OB/Hashtable.h" 2
# 18 "../../include/OB/Context.h" 2

namespace OBCORBA
{

class ORB_impl;

}

namespace CORBA
{




class Context : public OB::RefCount
{
    String_var name_;
    Context_var parent_;

    typedef OB::Hashtable<String_var, String_var, OB::StringHasher> ValueHash;
    ValueHash values_;







    Context(const Context&);
    void operator=(const Context&);

protected:

    Context(const char*);
    Context(const char*, Context_ptr);
    friend class ::OBCORBA::ORB_impl;

public:




    static inline Context_ptr _duplicate(Context_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline Context_ptr _nil()
    { return 0; }

    const char* context_name() const { return name_; }
    Context_ptr parent() const { return parent_; }

    void create_child(const char*, Context_out);

    void set_one_value(const char*, const Any&);
    void set_values(NVList_ptr);
    void delete_values(const char*);
    void get_values(const char*, Flags, const char*, NVList_out);





    void _OB_getValues(const char*, Flags, const char*, OB::StrSeq< int >&);
    static Context* _OB_create(const OB::StrSeq< int >&);
};

inline void
release(Context_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(Context_ptr p)
{
    return p == 0;
}

}
# 17 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/Principal.h" 1
# 14 "../../include/OB/Principal.h"
# 1 "../../include/OB/Principal_fwd.h" 1
# 15 "../../include/OB/Principal.h" 2

namespace CORBA
{




class Principal : public OB::RefCount
{



    Principal(const Principal&);
    void operator=(const Principal&);

protected:

    Principal() { };

public:




    static inline Principal_ptr _duplicate(Principal_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline Principal_ptr _nil()
    { return 0; }
};

inline void
release(Principal_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(Principal_ptr p)
{
    return p == 0;
}

}
# 18 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/MarshalStubImpl.h" 1
# 14 "../../include/OB/MarshalStubImpl.h"
# 1 "../../include/OB/MarshalStubImpl_fwd.h" 1
# 14 "../../include/OB/MarshalStubImpl_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/MarshalStubImpl_fwd.h" 2

namespace OB
{

class MarshalStubImpl;
typedef MarshalStubImpl* MarshalStubImpl_ptr;

}

void OBDuplicate(OB::MarshalStubImpl_ptr);
void OBRelease(OB::MarshalStubImpl_ptr);

namespace OB
{

typedef ObjVar< MarshalStubImpl > MarshalStubImpl_var;

}
# 15 "../../include/OB/MarshalStubImpl.h" 2
# 1 "../../include/OB/Client_fwd.h" 1
# 14 "../../include/OB/Client_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Client_fwd.h" 2

namespace OB
{

class Client;
typedef Client* Client_ptr;

struct ClientProfilePair;
typedef VarVar< ClientProfilePair > ClientProfilePair_var;

class ClientManager;
typedef ClientManager* ClientManager_ptr;

}

void OBDuplicate(OB::Client_ptr);
void OBRelease(OB::Client_ptr);

void OBDuplicate(OB::ClientManager_ptr);
void OBRelease(OB::ClientManager_ptr);

namespace OB
{

typedef ObjVar< Client > Client_var;

typedef ObjVar< ClientManager > ClientManager_var;

}
# 16 "../../include/OB/MarshalStubImpl.h" 2
# 1 "../../include/OB/Downcall_fwd.h" 1
# 14 "../../include/OB/Downcall_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Downcall_fwd.h" 2

namespace OB
{

class Downcall;
typedef Downcall* Downcall_ptr;

class PIDowncall;
typedef PIDowncall* PIDowncall_ptr;

class PIArgsDowncall;
typedef PIArgsDowncall* PIArgsDowncall_ptr;

class PIDIIDowncall;
typedef PIDIIDowncall* PIDIIDowncall_ptr;

class DowncallEmitter;
typedef DowncallEmitter* DowncallEmitter_ptr;

}

void OBDuplicate(OB::Downcall_ptr);
void OBRelease(OB::Downcall_ptr);
# 50 "../../include/OB/Downcall_fwd.h"
void OBDuplicate(OB::DowncallEmitter_ptr);
void OBRelease(OB::DowncallEmitter_ptr);

namespace OB
{

typedef ObjVar< Downcall > Downcall_var;
# 66 "../../include/OB/Downcall_fwd.h"
typedef ObjVar< DowncallEmitter > DowncallEmitter_var;

}
# 17 "../../include/OB/MarshalStubImpl.h" 2

# 1 "../../include/OB/DII_fwd.h" 1
# 14 "../../include/OB/DII_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/DII_fwd.h" 2

namespace CORBA
{

class ExceptionList;
typedef ExceptionList* ExceptionList_ptr;
typedef ExceptionList_ptr ExceptionListRef;

class ContextList;
typedef ContextList* ContextList_ptr;
typedef ContextList_ptr ContextListRef;

class Request;
typedef Request* Request_ptr;
typedef Request_ptr RequestRef;

}

void OBDuplicate(CORBA::ExceptionList_ptr);
void OBRelease(CORBA::ExceptionList_ptr);

void OBDuplicate(CORBA::ContextList_ptr);
void OBRelease(CORBA::ContextList_ptr);

void OBDuplicate(CORBA::Request_ptr);
void OBRelease(CORBA::Request_ptr);

namespace CORBA
{

typedef OB::ObjVar< ExceptionList > ExceptionList_var;
typedef OB::ObjOut< ExceptionList > ExceptionList_out;

typedef OB::ObjVar< ContextList > ContextList_var;
typedef OB::ObjOut< ContextList > ContextList_out;

typedef OB::ObjVar< Request > Request_var;
typedef OB::ObjOut< Request > Request_out;

}
# 19 "../../include/OB/MarshalStubImpl.h" 2
# 1 "../../include/OB/NamedValue_fwd.h" 1
# 20 "../../include/OB/MarshalStubImpl.h" 2
# 1 "../../include/OB/StubImpl.h" 1
# 14 "../../include/OB/StubImpl.h"
# 1 "../../include/OB/TypeCodeConst.h" 1
# 15 "../../include/OB/StubImpl.h" 2
# 1 "../../include/OB/Object_fwd.h" 1
# 16 "../../include/OB/StubImpl.h" 2
# 1 "../../include/OB/StubImpl_fwd.h" 1
# 14 "../../include/OB/StubImpl_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/StubImpl_fwd.h" 2

namespace OB
{

class StubImplBase;
typedef StubImplBase* StubImplBase_ptr;

}

void OBDuplicate(OB::StubImplBase_ptr);
void OBRelease(OB::StubImplBase_ptr);

namespace OB
{

typedef ObjVar< StubImplBase > StubImplBase_var;

}
# 17 "../../include/OB/StubImpl.h" 2
# 1 "../../include/OB/RefCounted_fwd.h" 1
# 18 "../../include/OB/StubImpl.h" 2
# 1 "../../include/OB/IFR2_fwd.h" 1
# 18 "../../include/OB/IFR2_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/IFR2_fwd.h" 2
# 39 "../../include/OB/IFR2_fwd.h"
namespace CORBA
{

class Repository;
typedef Repository* Repository_ptr;
typedef Repository* RepositoryRef;

          extern OB::TypeCodeConst _tc_Repository;

class Contained;
typedef Contained* Contained_ptr;
typedef Contained* ContainedRef;

          extern OB::TypeCodeConst _tc_Contained;

class ModuleDef;
typedef ModuleDef* ModuleDef_ptr;
typedef ModuleDef* ModuleDefRef;

          extern OB::TypeCodeConst _tc_ModuleDef;

class ConstantDef;
typedef ConstantDef* ConstantDef_ptr;
typedef ConstantDef* ConstantDefRef;

          extern OB::TypeCodeConst _tc_ConstantDef;

class StructDef;
typedef StructDef* StructDef_ptr;
typedef StructDef* StructDefRef;

          extern OB::TypeCodeConst _tc_StructDef;

class UnionDef;
typedef UnionDef* UnionDef_ptr;
typedef UnionDef* UnionDefRef;

          extern OB::TypeCodeConst _tc_UnionDef;

class EnumDef;
typedef EnumDef* EnumDef_ptr;
typedef EnumDef* EnumDefRef;

          extern OB::TypeCodeConst _tc_EnumDef;

class AliasDef;
typedef AliasDef* AliasDef_ptr;
typedef AliasDef* AliasDefRef;

          extern OB::TypeCodeConst _tc_AliasDef;

class AbstractInterfaceDef;
typedef AbstractInterfaceDef* AbstractInterfaceDef_ptr;
typedef AbstractInterfaceDef* AbstractInterfaceDefRef;

          extern OB::TypeCodeConst _tc_AbstractInterfaceDef;

class LocalInterfaceDef;
typedef LocalInterfaceDef* LocalInterfaceDef_ptr;
typedef LocalInterfaceDef* LocalInterfaceDefRef;

          extern OB::TypeCodeConst _tc_LocalInterfaceDef;

class NativeDef;
typedef NativeDef* NativeDef_ptr;
typedef NativeDef* NativeDefRef;

          extern OB::TypeCodeConst _tc_NativeDef;

class ValueDef;
typedef ValueDef* ValueDef_ptr;
typedef ValueDef* ValueDefRef;

          extern OB::TypeCodeConst _tc_ValueDef;

class ValueBoxDef;
typedef ValueBoxDef* ValueBoxDef_ptr;
typedef ValueBoxDef* ValueBoxDefRef;

          extern OB::TypeCodeConst _tc_ValueBoxDef;

class Container;
typedef Container* Container_ptr;
typedef Container* ContainerRef;

          extern OB::TypeCodeConst _tc_Container;

class AttributeDef;
typedef AttributeDef* AttributeDef_ptr;
typedef AttributeDef* AttributeDefRef;

          extern OB::TypeCodeConst _tc_AttributeDef;

class ExceptionDef;
typedef ExceptionDef* ExceptionDef_ptr;
typedef ExceptionDef* ExceptionDefRef;

          extern OB::TypeCodeConst _tc_ExceptionDef;

class OperationDef;
typedef OperationDef* OperationDef_ptr;
typedef OperationDef* OperationDefRef;

          extern OB::TypeCodeConst _tc_OperationDef;

class InterfaceDef;
typedef InterfaceDef* InterfaceDef_ptr;
typedef InterfaceDef* InterfaceDefRef;

          extern OB::TypeCodeConst _tc_InterfaceDef;

}

void OBDuplicate(CORBA::Repository_ptr);
void OBRelease(CORBA::Repository_ptr);

void OBMarshal(CORBA::Repository_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Repository_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::Contained_ptr);
void OBRelease(CORBA::Contained_ptr);

void OBMarshal(CORBA::Contained_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Contained_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ModuleDef_ptr);
void OBRelease(CORBA::ModuleDef_ptr);

void OBMarshal(CORBA::ModuleDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ModuleDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ConstantDef_ptr);
void OBRelease(CORBA::ConstantDef_ptr);

void OBMarshal(CORBA::ConstantDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ConstantDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::StructDef_ptr);
void OBRelease(CORBA::StructDef_ptr);

void OBMarshal(CORBA::StructDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::StructDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::UnionDef_ptr);
void OBRelease(CORBA::UnionDef_ptr);

void OBMarshal(CORBA::UnionDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::UnionDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::EnumDef_ptr);
void OBRelease(CORBA::EnumDef_ptr);

void OBMarshal(CORBA::EnumDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::EnumDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::AliasDef_ptr);
void OBRelease(CORBA::AliasDef_ptr);

void OBMarshal(CORBA::AliasDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::AliasDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::AbstractInterfaceDef_ptr);
void OBRelease(CORBA::AbstractInterfaceDef_ptr);

void OBMarshal(CORBA::AbstractInterfaceDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::AbstractInterfaceDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::LocalInterfaceDef_ptr);
void OBRelease(CORBA::LocalInterfaceDef_ptr);

void OBMarshal(CORBA::LocalInterfaceDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::LocalInterfaceDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::NativeDef_ptr);
void OBRelease(CORBA::NativeDef_ptr);

void OBMarshal(CORBA::NativeDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::NativeDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ValueDef_ptr);
void OBRelease(CORBA::ValueDef_ptr);

void OBMarshal(CORBA::ValueDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ValueDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ValueBoxDef_ptr);
void OBRelease(CORBA::ValueBoxDef_ptr);

void OBMarshal(CORBA::ValueBoxDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ValueBoxDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::Container_ptr);
void OBRelease(CORBA::Container_ptr);

void OBMarshal(CORBA::Container_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Container_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::AttributeDef_ptr);
void OBRelease(CORBA::AttributeDef_ptr);

void OBMarshal(CORBA::AttributeDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::AttributeDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ExceptionDef_ptr);
void OBRelease(CORBA::ExceptionDef_ptr);

void OBMarshal(CORBA::ExceptionDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ExceptionDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::OperationDef_ptr);
void OBRelease(CORBA::OperationDef_ptr);

void OBMarshal(CORBA::OperationDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::OperationDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::InterfaceDef_ptr);
void OBRelease(CORBA::InterfaceDef_ptr);

void OBMarshal(CORBA::InterfaceDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::InterfaceDef_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< Repository > Repository_var;
typedef OB::ObjOut< Repository > Repository_out;

typedef OB::ObjVar< Contained > Contained_var;
typedef OB::ObjOut< Contained > Contained_out;

typedef OB::ObjVar< ModuleDef > ModuleDef_var;
typedef OB::ObjOut< ModuleDef > ModuleDef_out;

typedef OB::ObjVar< ConstantDef > ConstantDef_var;
typedef OB::ObjOut< ConstantDef > ConstantDef_out;

typedef OB::ObjVar< StructDef > StructDef_var;
typedef OB::ObjOut< StructDef > StructDef_out;

typedef OB::ObjVar< UnionDef > UnionDef_var;
typedef OB::ObjOut< UnionDef > UnionDef_out;

typedef OB::ObjVar< EnumDef > EnumDef_var;
typedef OB::ObjOut< EnumDef > EnumDef_out;

typedef OB::ObjVar< AliasDef > AliasDef_var;
typedef OB::ObjOut< AliasDef > AliasDef_out;

typedef OB::ObjVar< AbstractInterfaceDef > AbstractInterfaceDef_var;
typedef OB::ObjOut< AbstractInterfaceDef > AbstractInterfaceDef_out;

typedef OB::ObjVar< LocalInterfaceDef > LocalInterfaceDef_var;
typedef OB::ObjOut< LocalInterfaceDef > LocalInterfaceDef_out;

typedef OB::ObjVar< NativeDef > NativeDef_var;
typedef OB::ObjOut< NativeDef > NativeDef_out;

typedef OB::ObjVar< ValueDef > ValueDef_var;
typedef OB::ObjOut< ValueDef > ValueDef_out;

typedef OB::ObjVar< ValueBoxDef > ValueBoxDef_var;
typedef OB::ObjOut< ValueBoxDef > ValueBoxDef_out;

typedef OB::ObjVar< Container > Container_var;
typedef OB::ObjOut< Container > Container_out;

typedef OB::ObjVar< AttributeDef > AttributeDef_var;
typedef OB::ObjOut< AttributeDef > AttributeDef_out;

typedef OB::ObjVar< ExceptionDef > ExceptionDef_var;
typedef OB::ObjOut< ExceptionDef > ExceptionDef_out;

typedef OB::ObjVar< OperationDef > OperationDef_var;
typedef OB::ObjOut< OperationDef > OperationDef_out;

typedef OB::ObjVar< InterfaceDef > InterfaceDef_var;
typedef OB::ObjOut< InterfaceDef > InterfaceDef_out;

}
# 19 "../../include/OB/StubImpl.h" 2
# 1 "../../include/OB/OCIClient_fwd.h" 1
# 18 "../../include/OB/OCIClient_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/OCIClient_fwd.h" 2
# 39 "../../include/OB/OCIClient_fwd.h"
namespace OCI
{

class AcceptorInfo;
typedef AcceptorInfo* AcceptorInfo_ptr;
typedef AcceptorInfo* AcceptorInfoRef;

class Plugin;
typedef Plugin* Plugin_ptr;
typedef Plugin* PluginRef;

class Transport;
typedef Transport* Transport_ptr;
typedef Transport* TransportRef;

class TransportInfo;
typedef TransportInfo* TransportInfo_ptr;
typedef TransportInfo* TransportInfoRef;

class CloseCB;
typedef CloseCB* CloseCB_ptr;
typedef CloseCB* CloseCBRef;

class Connector;
typedef Connector* Connector_ptr;
typedef Connector* ConnectorRef;

class ConnectorInfo;
typedef ConnectorInfo* ConnectorInfo_ptr;
typedef ConnectorInfo* ConnectorInfoRef;

class ConnectCB;
typedef ConnectCB* ConnectCB_ptr;
typedef ConnectCB* ConnectCBRef;

class ConFactory;
typedef ConFactory* ConFactory_ptr;
typedef ConFactory* ConFactoryRef;

class ConFactoryInfo;
typedef ConFactoryInfo* ConFactoryInfo_ptr;
typedef ConFactoryInfo* ConFactoryInfoRef;

class ConFactoryRegistry;
typedef ConFactoryRegistry* ConFactoryRegistry_ptr;
typedef ConFactoryRegistry* ConFactoryRegistryRef;

}

void OBDuplicate(OCI::AcceptorInfo_ptr);
void OBRelease(OCI::AcceptorInfo_ptr);

void OBMarshal(OCI::AcceptorInfo_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::AcceptorInfo_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::Plugin_ptr);
void OBRelease(OCI::Plugin_ptr);

void OBMarshal(OCI::Plugin_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::Plugin_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::Transport_ptr);
void OBRelease(OCI::Transport_ptr);

void OBMarshal(OCI::Transport_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::Transport_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::TransportInfo_ptr);
void OBRelease(OCI::TransportInfo_ptr);

void OBMarshal(OCI::TransportInfo_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::TransportInfo_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::CloseCB_ptr);
void OBRelease(OCI::CloseCB_ptr);

void OBMarshal(OCI::CloseCB_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::CloseCB_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::Connector_ptr);
void OBRelease(OCI::Connector_ptr);

void OBMarshal(OCI::Connector_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::Connector_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::ConnectorInfo_ptr);
void OBRelease(OCI::ConnectorInfo_ptr);

void OBMarshal(OCI::ConnectorInfo_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::ConnectorInfo_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::ConnectCB_ptr);
void OBRelease(OCI::ConnectCB_ptr);

void OBMarshal(OCI::ConnectCB_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::ConnectCB_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::ConFactory_ptr);
void OBRelease(OCI::ConFactory_ptr);

void OBMarshal(OCI::ConFactory_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::ConFactory_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::ConFactoryInfo_ptr);
void OBRelease(OCI::ConFactoryInfo_ptr);

void OBMarshal(OCI::ConFactoryInfo_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::ConFactoryInfo_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::ConFactoryRegistry_ptr);
void OBRelease(OCI::ConFactoryRegistry_ptr);

void OBMarshal(OCI::ConFactoryRegistry_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::ConFactoryRegistry_ptr&, OB::InputStreamImpl*);

namespace OCI
{

typedef OB::ObjVar< AcceptorInfo > AcceptorInfo_var;
typedef OB::ObjOut< AcceptorInfo > AcceptorInfo_out;

typedef OB::ObjVar< Plugin > Plugin_var;
typedef OB::ObjOut< Plugin > Plugin_out;

typedef OB::ObjVar< Transport > Transport_var;
typedef OB::ObjOut< Transport > Transport_out;

typedef OB::ObjVar< TransportInfo > TransportInfo_var;
typedef OB::ObjOut< TransportInfo > TransportInfo_out;

typedef OB::ObjVar< CloseCB > CloseCB_var;
typedef OB::ObjOut< CloseCB > CloseCB_out;

typedef OB::ObjVar< Connector > Connector_var;
typedef OB::ObjOut< Connector > Connector_out;

typedef OB::ObjVar< ConnectorInfo > ConnectorInfo_var;
typedef OB::ObjOut< ConnectorInfo > ConnectorInfo_out;

typedef OB::ObjVar< ConnectCB > ConnectCB_var;
typedef OB::ObjOut< ConnectCB > ConnectCB_out;

typedef OB::ObjVar< ConFactory > ConFactory_var;
typedef OB::ObjOut< ConFactory > ConFactory_out;

typedef OB::ObjVar< ConFactoryInfo > ConFactoryInfo_var;
typedef OB::ObjOut< ConFactoryInfo > ConFactoryInfo_out;

typedef OB::ObjVar< ConFactoryRegistry > ConFactoryRegistry_var;
typedef OB::ObjOut< ConFactoryRegistry > ConFactoryRegistry_out;

}
# 20 "../../include/OB/StubImpl.h" 2

# 1 "../../include/OB/Except.h" 1
# 22 "../../include/OB/StubImpl.h" 2

namespace OB
{




class StubImplBase : public RefCount
{



    StubImplBase(const StubImplBase&);
    void operator=(const StubImplBase&);

public:

    StubImplBase() { }
    virtual ~StubImplBase() { }

    static inline StubImplBase_ptr _duplicate(StubImplBase_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline StubImplBase_ptr _nil()
    { return 0; }

    virtual CORBA::InterfaceDef_ptr _get_interface() = 0;
    virtual CORBA::Boolean _is_a(const char*) = 0;
    virtual CORBA::Boolean _non_existent() = 0;
    virtual CORBA::Boolean _locate_request() = 0;

    virtual OCI::ConnectorInfo_ptr _get_oci_connector_info() = 0;
    virtual OCI::TransportInfo_ptr _get_oci_transport_info() = 0;
};

}

namespace CORBA
{

inline void
release(OB::StubImplBase_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::StubImplBase_ptr p)
{
    return p == 0;
}

}
# 21 "../../include/OB/MarshalStubImpl.h" 2
# 1 "../../include/OB/list.h" 1
# 22 "../../include/OB/list.h"
# 1 "../../include/OB/STLConfig.h" 1
# 23 "../../include/OB/list.h" 2

# 1 "../../include/OB/allocator.h" 1
# 25 "../../include/OB/list.h" 2
# 1 "../../include/OB/algorithms.h" 1
# 14 "../../include/OB/algorithms.h"
# 1 "../../include/OB/STLConfig.h" 1
# 15 "../../include/OB/algorithms.h" 2

namespace OB
{

namespace stl
{

template<class InputIterator, class OutputIterator>
OutputIterator copy(InputIterator first1, InputIterator last1,
                    OutputIterator first2)
{
    while (first1 != last1)
    {
        *first2 = *first1;
        first1++;
        first2++;
    }

    return first2;
}

template<class InputIterator>
InputIterator find(InputIterator first, InputIterator last,
                   typename InputIterator::value_type value)
{
    while (first != last)
    {
        if (*first == value)
            return first;

        first++;
    }

    return first;
}

template<class InputIterator, class Predicate>
InputIterator find_if(InputIterator first, InputIterator last, Predicate pred)
{
    while (first != last)
    {
        if (pred(*first))
            return first;

        first++;
    }

    return first;
}

template<class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T initial_value)
{
    T result = initial_value;

    while (first != last)
    {
        result = result + *first;
        first++;
    }

    return result;
}


template<class InputIterator, class T, class BinaryOperation>
T accumulate(InputIterator first, InputIterator last,
            T initial_value, BinaryOperation binary_op)
{
    T result = initial_value;

    while (first != last)
    {
        result = binary_op(result, *first);
        first++;
    }

    return result;
}


template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
                          Predicate pred)
{
    while (first != last)
    {
        if (!pred(*first))
        {
            typename ForwardIterator::value_type value = *first;
            last--;
            *first = *last;
            *last = value;
            continue;
        }

        first++;
    }

    return first;
}


template<class InputIterator, class UnaryFunction>
void for_each(InputIterator first, InputIterator last,
                       UnaryFunction f)
{
    while (first != last)
    {
        f(*first);
        first++;
    }
}

}

}
# 26 "../../include/OB/list.h" 2
# 1 "../../include/OB/iterator.h" 1
# 14 "../../include/OB/iterator.h"
# 1 "../../include/OB/STLConfig.h" 1
# 15 "../../include/OB/iterator.h" 2

namespace OB
{

namespace stl
{
# 32 "../../include/OB/iterator.h"
template<class ContainerT>
class back_insert_iterator
{
private:
    ContainerT &container_;

public:
    explicit back_insert_iterator(ContainerT &container)
        : container_(container)
    {
    }

    back_insert_iterator& operator=(
        const typename ContainerT::value_type& value)
    {
        container_.push_back(value);
        return *this;
    }

    back_insert_iterator& operator*()
    {
        return *this;
    }

    back_insert_iterator& operator++()
    {
        return *this;
    }

    back_insert_iterator& operator++(int)
    {
        return *this;
    }
};




template<class ContainerT>
back_insert_iterator<ContainerT> back_inserter(ContainerT& container)
{
    return back_insert_iterator<ContainerT>(container);
}

}

}
# 27 "../../include/OB/list.h" 2
# 1 "/usr/include/assert.h" 1 3
# 36 "/usr/include/assert.h" 3
# 1 "/usr/include/features.h" 1 3
# 37 "/usr/include/assert.h" 2 3
# 65 "/usr/include/assert.h" 3
extern "C" {


extern void __assert_fail (__const char *__assertion, __const char *__file,
                           unsigned int __line, __const char *__function)
     throw () __attribute__ ((__noreturn__));


extern void __assert_perror_fail (int __errnum, __const char *__file,
                                  unsigned int __line,
                                  __const char *__function)
     throw () __attribute__ ((__noreturn__));




extern void __assert (const char *__assertion, const char *__file, int __line)
     throw () __attribute__ ((__noreturn__));


}
# 28 "../../include/OB/list.h" 2


namespace OB
{


namespace stl
{


template<class T> class list;
# 49 "../../include/OB/list.h"
template<class T, class Ref, class NodePtr, class ListPtr>
class iterator_template
{
    ListPtr list_;
    NodePtr current_node_;

    friend class list<T>;





    iterator_template(ListPtr list, NodePtr position) :
        list_(list), current_node_(position)
    {
    }

public:
    typedef T value_type;






    iterator_template() : list_(0), current_node_(0)
    {
    }





    iterator_template(const iterator_template& other_iterator) :
        list_(other_iterator.list_),
        current_node_(other_iterator.current_node_)
    {
    }




    ~iterator_template()
    {
    }






    bool operator==(const iterator_template& other_iterator) const
    {
        return other_iterator.current_node_ == current_node_;
    }






    bool operator!=(const iterator_template& other_iterator) const
    {
        return !(*this == other_iterator);
    }






    const iterator_template& operator=(const iterator_template& other_iterator)
    {
        list_ = other_iterator.list_;
        current_node_ = other_iterator.current_node_;
        return *this;
    }




    Ref operator*() const
    {
        (static_cast<void> ((current_node_ != 0) ? 0 : (__assert_fail ("current_node_ != 0", "../../include/OB/list.h", 132, __PRETTY_FUNCTION__), 0)));
        (static_cast<void> ((current_node_ != list_ -> head_) ? 0 : (__assert_fail ("current_node_ != list_ -> head_", "../../include/OB/list.h", 133, __PRETTY_FUNCTION__), 0)));
        (static_cast<void> ((current_node_ != list_ -> tail_) ? 0 : (__assert_fail ("current_node_ != list_ -> tail_", "../../include/OB/list.h", 134, __PRETTY_FUNCTION__), 0)));

        return current_node_->item();
    }




    iterator_template& operator++()
    {
        (static_cast<void> ((current_node_ != 0) ? 0 : (__assert_fail ("current_node_ != 0", "../../include/OB/list.h", 144, __PRETTY_FUNCTION__), 0)));
        (static_cast<void> ((current_node_ != list_ -> tail_) ? 0 : (__assert_fail ("current_node_ != list_ -> tail_", "../../include/OB/list.h", 145, __PRETTY_FUNCTION__), 0)));

        current_node_ = current_node_->next();
        return *this;
    }





    iterator_template operator++(int)
    {
        iterator_template previous_state = *this;
        ++(*this);
        return previous_state;
    }




    iterator_template& operator--()
    {
        (static_cast<void> ((current_node_ != 0) ? 0 : (__assert_fail ("current_node_ != 0", "../../include/OB/list.h", 167, __PRETTY_FUNCTION__), 0)));
        (static_cast<void> ((current_node_ != list_ -> head_) ? 0 : (__assert_fail ("current_node_ != list_ -> head_", "../../include/OB/list.h", 168, __PRETTY_FUNCTION__), 0)));

        current_node_ = current_node_->prev();
        return *this;
    }





    iterator_template operator--(int)
    {
        iterator_template previous_state = *this;
        --(*this);
        return previous_state;
    }
};
# 196 "../../include/OB/list.h"
template<class T, class Ref, class Iterator, class ListPtr>
class reverse_iterator_template
{
private:
    friend class list<T>;





    Iterator current_;




    reverse_iterator_template(const Iterator& current)
        : current_(current)
    {
    }

public:
    typedef T value_type;






    reverse_iterator_template()
    {
    }





    reverse_iterator_template(
        const reverse_iterator_template& other_iterator)
        : current_(other_iterator.current_)
    {
    }




    ~reverse_iterator_template()
    {
    }






    bool operator==(
        const reverse_iterator_template& other_iterator) const
    {
        return other_iterator.current_ == current_;
    }






    bool operator!=(
        const reverse_iterator_template& other_iterator) const
    {
        return !(*this == other_iterator);
    }






    const reverse_iterator_template& operator=(
        const reverse_iterator_template& other_iterator)
    {
        current_ = other_iterator.current_;
        return *this;
    }




    Ref operator*() const
    {
        return *current_;
    }




    reverse_iterator_template& operator++()
    {
        --current_;
        return *this;
    }





    reverse_iterator_template operator++(int)
    {
        reverse_iterator_template previous_state = *this;
        current_--;
        return previous_state;
    }




    reverse_iterator_template& operator--()
    {
        ++current_;
        return *this;
    }





    reverse_iterator_template operator--(int)
    {
        reverse_iterator_template previous_state = *this;
        current_++;
        return previous_state;
    }
};
# 360 "../../include/OB/list.h"
template <class T>
class list
{
private:
# 373 "../../include/OB/list.h"
    class ListNode
    {
        T item_;
        ListNode *next_;
        ListNode *prev_;

    public:
        ListNode() : next_(0), prev_(0)
        {
        }

        ListNode(const T& item, ListNode *next, ListNode *prev)
            : item_(item), next_(next), prev_(prev)
        {
        }

        ~ListNode()
        {
        }

        T& item()
        {
            return item_;
        }

        const T& item() const
        {
            return item_;
        }

        ListNode* next()
        {
            return next_;
        }

        const ListNode* next() const
        {
            return next_;
        }

        void next(ListNode* node)
        {
            next_ = node;
        }

        ListNode* prev()
        {
            return prev_;
        }

        const ListNode* prev() const
        {
            return prev_;
        }

        void prev(ListNode* node)
        {
            prev_ = node;
        }
    };
# 441 "../../include/OB/list.h"
    allocator<ListNode> node_allocator;

public:

    typedef unsigned long size_type;
    typedef T& reference;
    typedef const T& const_reference;
    typedef T value_type;





    typedef iterator_template<T, T&, ListNode*, list*>
    iterator;

    typedef iterator_template<T, const T&, const ListNode*, const list*>
    const_iterator;






    typedef reverse_iterator_template
    <T, T&, iterator, list*>
    reverse_iterator;

    typedef reverse_iterator_template
    <T, const T&, const_iterator, const list*>
    const_reverse_iterator;

private:


    friend class
        iterator_template<T, T&, ListNode*, list*>;

    friend class
        reverse_iterator_template<T, T&, iterator, list*>;

    friend class
        iterator_template<T, const T&, const ListNode*, const list*>;

    friend class
        reverse_iterator_template<T, const T&, const_iterator, const list*>;


    ListNode *head_;
    ListNode *tail_;


    size_type size_;

public:




    list() :
        head_(new ListNode(T(), 0, 0)),
        tail_(new ListNode(T(), 0, 0)),
        size_(0)
    {
        head_ -> next(tail_);
        tail_ -> prev(head_);
    }




    ~list()
    {
        erase(begin(), end());
        delete head_;
        delete tail_;
    }





    list(const list& other_list) :
        head_(new ListNode(T(), 0, 0)),
        tail_(new ListNode(T(), 0, 0)),
        size_(0)
    {
        head_ -> next(tail_);
        tail_ -> prev(head_);
        OB::stl::copy(other_list.begin(), other_list.end(),
                     OB::stl::back_inserter(*this));
    }






    const list& operator=(const list& other_list)
    {
        erase(begin(), end());
        OB::stl::copy(other_list.begin(), other_list.end(),
                     OB::stl::back_inserter(*this));
        return *this;
    }




    iterator begin()
    {
        return iterator(this, head_ -> next());
    }




    const_iterator begin() const
    {
        return const_iterator(this, head_ -> next());
    }




    iterator end()
    {
        return iterator(this, tail_);
    }




    const_iterator end() const
    {
        return const_iterator(this, tail_);
    }




    reverse_iterator rbegin()
    {
        return reverse_iterator(--end());
    }




    const_reverse_iterator rbegin() const
    {
        return const_reverse_iterator(--end());
    }




    reverse_iterator rend()
    {
        return reverse_iterator(--begin());
    }




    const_reverse_iterator rend() const
    {
        return const_reverse_iterator(--begin());
    }




    size_type size() const
    {
        return size_;
    }




    bool empty() const
    {
        return size_ == 0;
    }





    reference front()
    {
        (static_cast<void> ((size_ != 0) ? 0 : (__assert_fail ("size_ != 0", "../../include/OB/list.h", 633, __PRETTY_FUNCTION__), 0)));
        return *begin();
    }





    const_reference front() const
    {
        (static_cast<void> ((size_ != 0) ? 0 : (__assert_fail ("size_ != 0", "../../include/OB/list.h", 643, __PRETTY_FUNCTION__), 0)));
        return *begin();
    }





    reference back()
    {
        (static_cast<void> ((size_ != 0) ? 0 : (__assert_fail ("size_ != 0", "../../include/OB/list.h", 653, __PRETTY_FUNCTION__), 0)));
        return *(--end());
    }





    const_reference back() const
    {
        (static_cast<void> ((size_ != 0) ? 0 : (__assert_fail ("size_ != 0", "../../include/OB/list.h", 663, __PRETTY_FUNCTION__), 0)));
        return *(--end());
    }




    void push_front(const T& x)
    {
        insert(begin(), x);
    }




    void push_back(const T& x)
    {
        insert(end(), x);
    }





    void splice(const iterator& position, list<T>& x)
    {
        splice(position, x, x.begin(), x.end());
    }





    void splice(const iterator& position, list<T>& x, iterator i)
    {
        insert(position, *i);
        x.erase(i);
    }






    void splice(const iterator& position, list<T>& x,
                iterator first, iterator last)
    {
        for (iterator x_iter = first; x_iter != last; x_iter++)
        {
            insert(position, *x_iter);
        }

        x.erase(first, last);
    }






    iterator insert(const iterator& position, const T& x)
    {
        (static_cast<void> ((position != --begin()) ? 0 : (__assert_fail ("position != --begin()", "../../include/OB/list.h", 725, __PRETTY_FUNCTION__), 0)));

        ListNode* current_node = position.current_node_;

        typename allocator<ListNode>::pointer new_node =
            node_allocator.allocate(1);
        node_allocator.construct(new_node,
                                 ListNode(x,
                                          current_node,
                                          current_node->prev()));

        current_node->prev()->next(new_node);
        current_node->prev(new_node);

        size_++;

        return iterator(this, new_node);
    }





    void pop_front()
    {
        (static_cast<void> ((size_ != 0) ? 0 : (__assert_fail ("size_ != 0", "../../include/OB/list.h", 750, __PRETTY_FUNCTION__), 0)));
        erase(begin());
    }





    void pop_back()
    {
        (static_cast<void> ((size_ != 0) ? 0 : (__assert_fail ("size_ != 0", "../../include/OB/list.h", 760, __PRETTY_FUNCTION__), 0)));
        erase(--end());
    }




    void erase(const iterator &position)
    {
        (static_cast<void> ((size_ != 0) ? 0 : (__assert_fail ("size_ != 0", "../../include/OB/list.h", 769, __PRETTY_FUNCTION__), 0)));
        (static_cast<void> ((position != end()) ? 0 : (__assert_fail ("position != end()", "../../include/OB/list.h", 770, __PRETTY_FUNCTION__), 0)));
        (static_cast<void> ((position != --begin()) ? 0 : (__assert_fail ("position != --begin()", "../../include/OB/list.h", 771, __PRETTY_FUNCTION__), 0)));

        ListNode* current_node = position.current_node_;

        current_node->prev()->next(current_node->next());
        current_node->next()->prev(current_node->prev());

        size_--;

        node_allocator.destroy(current_node);
        node_allocator.deallocate(current_node, 1);
    }




    void erase(const iterator& first, const iterator& last)
    {
        iterator position = first;
        while(position != last)
        {
            iterator victim = position;
            position++;
            erase(victim);
        }
    }


    void clear()
    {
        erase(begin(), end());
    }

};


}

}
# 22 "../../include/OB/MarshalStubImpl.h" 2

# 1 "../../include/OB/OBObject.h" 1
# 14 "../../include/OB/OBObject.h"
# 1 "../../include/OB/Object.h" 1
# 14 "../../include/OB/Object.h"
# 1 "../../include/OB/TypeCodeConst.h" 1
# 15 "../../include/OB/Object.h" 2
# 1 "../../include/OB/Object_fwd.h" 1
# 16 "../../include/OB/Object.h" 2
# 1 "../../include/OB/Policy_fwd.h" 1
# 18 "../../include/OB/Policy_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Policy_fwd.h" 2
# 39 "../../include/OB/Policy_fwd.h"
namespace CORBA
{

class Policy;
typedef Policy* Policy_ptr;
typedef Policy* PolicyRef;

          extern OB::TypeCodeConst _tc_Policy;

class PolicyManager;
typedef PolicyManager* PolicyManager_ptr;
typedef PolicyManager* PolicyManagerRef;

          extern OB::TypeCodeConst _tc_PolicyManager;

}

void OBDuplicate(CORBA::Policy_ptr);
void OBRelease(CORBA::Policy_ptr);

void OBMarshal(CORBA::Policy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Policy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::PolicyManager_ptr);
void OBRelease(CORBA::PolicyManager_ptr);

void OBMarshal(CORBA::PolicyManager_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::PolicyManager_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< Policy > Policy_var;
typedef OB::ObjOut< Policy > Policy_out;

typedef OB::ObjVar< PolicyManager > PolicyManager_var;
typedef OB::ObjOut< PolicyManager > PolicyManager_out;

}
# 17 "../../include/OB/Object.h" 2
# 1 "../../include/OB/IFR2_fwd.h" 1
# 18 "../../include/OB/Object.h" 2
# 1 "../../include/OB/AbstractBase_fwd.h" 1
# 19 "../../include/OB/Object.h" 2
# 1 "../../include/OB/DII_fwd.h" 1
# 20 "../../include/OB/Object.h" 2
# 1 "../../include/OB/Context_fwd.h" 1
# 21 "../../include/OB/Object.h" 2
# 1 "../../include/OB/NamedValue_fwd.h" 1
# 22 "../../include/OB/Object.h" 2
# 1 "../../include/OB/OCIClient_fwd.h" 1
# 23 "../../include/OB/Object.h" 2
# 1 "../../include/OB/RefCounted_fwd.h" 1
# 24 "../../include/OB/Object.h" 2

namespace CORBA
{




class OBUnique_PolicyList;
typedef OB::ObjSeq< Policy, OBUnique_PolicyList > PolicyList;
typedef OB::SeqVar< OB::ObjSeq< Policy, OBUnique_PolicyList > > PolicyList_var;
typedef OB::SeqOut< OB::ObjSeq< Policy, OBUnique_PolicyList > > PolicyList_out;




typedef ULong PolicyType;
typedef ULong_out PolicyType_out;




class OBUnique_PolicyTypeSeq;
typedef OB::FixSeq< CORBA::ULong, OBUnique_PolicyTypeSeq > PolicyTypeSeq;




enum SetOverrideType
{
    SET_OVERRIDE,
    ADD_OVERRIDE
};

}

namespace CORBA
{




class Object : virtual public OB::RefCountable
{



    Object(const Object&);
    void operator=(const Object&);

protected:





    static const char* ids_[];




    Object();

public:

    virtual ~Object();




    static inline Object_ptr _duplicate(Object_ptr p)
    { if(p) p -> _add_ref(); return p; }
    static inline Object_ptr _nil()
    { return 0; }

    virtual InterfaceDef_ptr _get_interface() = 0;
    virtual Boolean _is_a(const char*) = 0;
    virtual Boolean _non_existent() = 0;

    virtual Boolean _is_equivalent(Object_ptr) = 0;
    virtual ULong _hash(ULong) = 0;

    static Object_ptr _narrow(AbstractBase_ptr);
    static Object_ptr _unchecked_narrow(AbstractBase_ptr);

    virtual void _create_request(Context_ptr, const char*, NVList_ptr,
                                 NamedValue_ptr, Request_out, Flags) = 0;

    virtual void _create_request(Context_ptr, const char*, NVList_ptr,
                                 NamedValue_ptr,
                                 ExceptionList_ptr, ContextList_ptr,
                                 Request_out, Flags) = 0;

    virtual Request_ptr _request(const char* operation) = 0;

    virtual Policy_ptr _get_policy(PolicyType) = 0;
    virtual Object_ptr _set_policy_overrides(const PolicyList&,
                                             SetOverrideType) = 0;






    virtual PolicyList* _get_policy_overrides(const PolicyTypeSeq&) = 0;
    virtual Policy_ptr _get_client_policy(PolicyType) = 0;
    virtual Boolean _validate_connection(PolicyList_out) = 0;




    virtual OCI::ConnectorInfo_ptr _get_oci_connector_info() = 0;
    virtual OCI::TransportInfo_ptr _get_oci_transport_info() = 0;





    virtual const char** _OB_ids() const = 0;

    static const char** _OB_staticIds();

    virtual CORBA::AbstractBase_ptr _OB_toAbstractBase() = 0;
# 155 "../../include/OB/Object.h"
    virtual OB::RefCountIOR_ptr _OB_origIOR() const = 0;
    virtual OB::RefCountIOR_ptr _OB_IOR() const = 0;
    virtual void _OB_marshalOrigIOR(OB::OutputStreamImpl*) const = 0;
};




inline void
release(Object_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(Object_ptr p)
{
    return p == 0;
}

}
# 15 "../../include/OB/OBObject.h" 2
# 1 "../../include/OB/OBObject_fwd.h" 1
# 14 "../../include/OB/OBObject_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/OBObject_fwd.h" 2

namespace OBCORBA
{

class Object;
typedef Object* Object_ptr;
typedef Object_ptr ObjectRef;

}

namespace OB
{

class ObjectFactory;
typedef ObjectFactory* ObjectFactory_ptr;

}

void OBDuplicate(OBCORBA::Object_ptr);
void OBRelease(OBCORBA::Object_ptr);

void OBDuplicate(OB::ObjectFactory_ptr);
void OBRelease(OB::ObjectFactory_ptr);

namespace OBCORBA
{

typedef OB::ObjVar< Object > Object_var;
typedef OB::ObjOut< Object > Object_out;

}

namespace OB
{

typedef OB::ObjVar< ObjectFactory > ObjectFactory_var;
typedef OB::ObjOut< ObjectFactory > ObjectFactory_out;

}
# 16 "../../include/OB/OBObject.h" 2
# 1 "../../include/OB/StubImpl_fwd.h" 1
# 17 "../../include/OB/OBObject.h" 2
# 1 "../../include/OB/MarshalStubImpl_fwd.h" 1
# 18 "../../include/OB/OBObject.h" 2
# 1 "../../include/OB/ORBInstance_fwd.h" 1
# 19 "../../include/OB/OBObject.h" 2
# 1 "../../include/OB/RefCounted_fwd.h" 1
# 20 "../../include/OB/OBObject.h" 2

# 1 "../../include/OB/Any.h" 1
# 22 "../../include/OB/OBObject.h" 2
# 1 "../../include/OB/TypeCodeConst.h" 1
# 23 "../../include/OB/OBObject.h" 2

namespace OBCORBA
{




class Object : virtual public CORBA::Object, virtual public OB::RefCount
{



    Object(const Object&);
    void operator=(const Object&);






    JTCMutex mutex_;




    OB::ORBInstance_var orbInstance_;




    OB::RefCountIOR_var IOR_;
    OB::RefCountIOR_var origIOR_;




    OB::RefCountPolicyList_var policies_;




    OB::StubImplBase_var stubImpl_;




    void _OB_checkRetry(CORBA::ULong, const CORBA::SystemException&);

protected:




    OB::StubImplBase_ptr _OB_getStubImpl();
    OB::MarshalStubImpl_ptr _OB_getMarshalStubImpl();






    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();




    Object();




    friend class ::OB::ObjectFactory;




    friend class ::CORBA::Request;

public:

    virtual ~Object();

    static inline Object_ptr _duplicate(Object_ptr p)
        { if(p) p -> _add_ref(); return p; }
    static inline Object_ptr _nil()
        { return 0; }

    static Object_ptr _narrow(CORBA::Object_ptr);
    static Object_ptr _narrow(CORBA::AbstractBase_ptr);

    virtual CORBA::InterfaceDef_ptr _get_interface();
    virtual CORBA::Boolean _is_a(const char*);
    virtual CORBA::Boolean _non_existent();

    virtual CORBA::Boolean _is_equivalent(CORBA::Object_ptr);
    virtual CORBA::ULong _hash(CORBA::ULong);

    virtual void _create_request(CORBA::Context_ptr, const char*,
                                 CORBA::NVList_ptr, CORBA::NamedValue_ptr,
                                 CORBA::Request_out, CORBA::Flags);

    virtual void _create_request(CORBA::Context_ptr, const char*,
                                 CORBA::NVList_ptr,
                                 CORBA::NamedValue_ptr,
                                 CORBA::ExceptionList_ptr,
                                 CORBA::ContextList_ptr,
                                 CORBA::Request_out,
                                 CORBA::Flags);

    virtual CORBA::Request_ptr _request(const char*);

    virtual CORBA::Policy_ptr _get_policy(CORBA::PolicyType);
    virtual CORBA::Object_ptr _set_policy_overrides(
        const CORBA::PolicyList&, CORBA::SetOverrideType);






    virtual CORBA::PolicyList* _get_policy_overrides(
        const CORBA::PolicyTypeSeq&);
    virtual CORBA::Policy_ptr _get_client_policy(CORBA::PolicyType);
    virtual CORBA::Boolean _validate_connection(CORBA::PolicyList_out);




    virtual OCI::ConnectorInfo_ptr _get_oci_connector_info();
    virtual OCI::TransportInfo_ptr _get_oci_transport_info();




    virtual void _add_ref();
    virtual void _remove_ref();





    virtual const char** _OB_ids() const;

    void _OB_setup(OB::ORBInstance_ptr, OB::RefCountIOR_ptr,
                   OB::RefCountPolicyList_ptr);
    void _OB_copyFrom(CORBA::Object_ptr);

    OB::ORBInstance_ptr _OB_ORBInstance() const;

    virtual OB::RefCountIOR_ptr _OB_IOR() const;
    virtual OB::RefCountIOR_ptr _OB_origIOR() const;

    virtual void _OB_marshalOrigIOR(OB::OutputStreamImpl*) const;

    OB::RefCountPolicyList_ptr _OB_policies() const;
    CORBA::Policy_ptr _OB_getPolicy(CORBA::PolicyType) const;

    void _OB_handleException(const OB::ExceptionBase&, CORBA::ULong&,
                             CORBA::ULong&, bool = false);

    virtual CORBA::AbstractBase_ptr _OB_toAbstractBase();

    friend class OB::InputStream;
    friend class OB::OutputStream;
};

}

namespace OBCORBA
{

class ORB_impl;

}

namespace OB
{




class ObjectFactory : public RefCount
{



    ObjectFactory(const ObjectFactory&);
    void operator=(const ObjectFactory&);

    bool destroy_;
    ORBInstance_var orbInstance_;
    CORBA::PolicyManager_var policyManager_;

    ObjectFactory();
    ~ObjectFactory();
    friend class ::OBCORBA::ORB_impl;

public:




    static inline ObjectFactory_ptr _duplicate(ObjectFactory_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline ObjectFactory_ptr _nil()
    { return 0; }




    void destroy();




    void setORBInstance(ORBInstance_ptr);




    void setPolicyManager(CORBA::PolicyManager_ptr);




    CORBA::Object_ptr createObject(OB::RefCountIOR_ptr);




    CORBA::Object_ptr stringToObject(const char*);




    OB::RefCountPolicyList_ptr policies();
};

}

namespace CORBA
{

inline void
release(OB::ObjectFactory_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::ObjectFactory_ptr p)
{
    return p == 0;
}

}
# 24 "../../include/OB/MarshalStubImpl.h" 2

namespace OB
{




typedef ObjSeq< Client, int > ClientSeq;
typedef SeqVar< ClientSeq > ClientSeq_var;




typedef ObjSeq< RefCountProfileInfo, int > RefCountProfileInfoSeq;
typedef SeqVar< RefCountProfileInfoSeq > RefCountProfileInfoSeq_var;




struct ParameterDesc;




class MarshalStubImpl : virtual public StubImplBase, public JTCMutex
{



    MarshalStubImpl(const MarshalStubImpl&);
    void operator=(const MarshalStubImpl&);




    ORBInstance_var orbInstance_;




    RefCountIOR_var IOR_;
    RefCountIOR_var origIOR_;




    RefCountPolicyList_var policies_;




    OB::stl::list<ClientProfilePair_var>* clientProfilePairs_;




    Client_ptr getClientProfilePair(RefCountProfileInfo_out);

protected:




    Downcall_ptr _OB_createDowncall(const char*, bool);
    Downcall_ptr _OB_createLocateRequestDowncall();
    Downcall_ptr _OB_createPIArgsDowncall(const char*, bool, ParameterDesc[],
                                          CORBA::ULong, ParameterDesc*,
                                          CORBA::TypeCode_ptr*, CORBA::ULong);
    Downcall_ptr _OB_createPIDIIDowncall(const char*, bool, CORBA::NVList_ptr,
                                         CORBA::NamedValue_ptr,
                                         CORBA::ExceptionList_ptr);




    static OutputStream_ptr _OB_preMarshal(Downcall_ptr);
    static void _OB_marshalEx(Downcall_ptr, const CORBA::SystemException&);
    static void _OB_postMarshal(Downcall_ptr);




    static void _OB_locate(Downcall_ptr);
    static void _OB_request(Downcall_ptr);
    static void _OB_oneway(Downcall_ptr);
    static void _OB_deferred(Downcall_ptr);
    static void _OB_response(Downcall_ptr);
    static bool _OB_poll(Downcall_ptr);




    static InputStream_ptr _OB_preUnmarshal(Downcall_ptr);
    static InputStream_ptr _OB_preUnmarshal(Downcall_ptr, bool&);
    static void _OB_unmarshalEx(Downcall_ptr, const CORBA::SystemException&);
    static void _OB_postUnmarshal(Downcall_ptr);




    static char* _OB_unmarshalExceptionId(Downcall_ptr);
    static void _OB_setUserException(Downcall_ptr, CORBA::UserException*,
                                     const char*);
    static void _OB_setUserException(Downcall_ptr,
                                     const CORBA::UserException&);




    void _OB_handleFailureException(Downcall_ptr, const FailureException&);




    friend class ::CORBA::Request;

public:

    MarshalStubImpl();
    virtual ~MarshalStubImpl();

    static inline MarshalStubImpl_ptr _duplicate(MarshalStubImpl_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline MarshalStubImpl_ptr _nil()
    { return 0; }

    virtual CORBA::InterfaceDef_ptr _get_interface();
    virtual CORBA::Boolean _is_a(const char*);
    virtual CORBA::Boolean _non_existent();
    virtual CORBA::Boolean _locate_request();

    virtual OCI::ConnectorInfo_ptr _get_oci_connector_info();
    virtual OCI::TransportInfo_ptr _get_oci_transport_info();





    void _OB_setup(ORBInstance_ptr, RefCountIOR_ptr, RefCountIOR_ptr,
                   RefCountPolicyList_ptr);
};

}

namespace CORBA
{

inline void
release(OB::MarshalStubImpl_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::MarshalStubImpl_ptr p)
{
    return p == 0;
}

}
# 19 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/PIArgs.h" 1
# 14 "../../include/OB/PIArgs.h"
# 1 "../../include/OB/TypeCode_fwd.h" 1
# 15 "../../include/OB/PIArgs.h" 2

namespace OB
{





struct ParameterDesc
{
    void* param;
    CORBA::TypeCode_ptr tc;
    const OB::ConstructedInfo* info;
    int mode;
};

}
# 20 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/OBObject.h" 1
# 21 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/AbstractBase.h" 1
# 14 "../../include/OB/AbstractBase.h"
# 1 "../../include/OB/Object_fwd.h" 1
# 15 "../../include/OB/AbstractBase.h" 2
# 1 "../../include/OB/AbstractBase_fwd.h" 1
# 16 "../../include/OB/AbstractBase.h" 2
# 1 "../../include/OB/ValueBase_fwd.h" 1
# 17 "../../include/OB/AbstractBase.h" 2

# 1 "../../include/OB/AnyDeclaration.h" 1
# 19 "../../include/OB/AbstractBase.h" 2

namespace OB
{

class AbstractBaseInfo : public ConstructedInfo
{
public:

    AbstractBaseInfo() { }
    virtual ~AbstractBaseInfo() { }




    virtual void free(void*) const;
    virtual void* dup(const void*) const;




    virtual void marshal(const void*, OutputStreamImpl*) const;
    virtual void unmarshal(void*, InputStreamImpl*) const;
};

}

namespace CORBA
{

class AbstractBase
{



    void operator=(const AbstractBase&);
# 63 "../../include/OB/AbstractBase.h"
protected:

    AbstractBase();
    AbstractBase(const AbstractBase&);

    virtual ~AbstractBase() = 0;

public:

    static OB::AbstractBaseInfo _OB_abstractBaseInfo;

    static AbstractBase_ptr _duplicate(AbstractBase_ptr);
    static AbstractBase_ptr _narrow(AbstractBase_ptr);
    static AbstractBase_ptr _nil();

    virtual Object_ptr _to_object();
    virtual ValueBase* _to_value();
};

Boolean is_nil(AbstractBase_ptr);
void release(AbstractBase_ptr);

}





void operator<<=(CORBA::Any&, CORBA::AbstractBase_ptr*);
void operator<<=(CORBA::Any&, CORBA::AbstractBase_ptr);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AbstractBase_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::AbstractBase_ptr val)
{
    any.inout() <<= val;
}
# 22 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/ValueBase.h" 1
# 14 "../../include/OB/ValueBase.h"
# 1 "../../include/OB/ValueBase_fwd.h" 1
# 15 "../../include/OB/ValueBase.h" 2
# 1 "../../include/OB/ValueFactoryBase_fwd.h" 1
# 14 "../../include/OB/ValueFactoryBase_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/ValueFactoryBase_fwd.h" 2

namespace CORBA
{

class ValueFactoryBase;

}

void OBRelease(CORBA::ValueFactoryBase*);
void OBDuplicate(CORBA::ValueFactoryBase*);

namespace CORBA
{

typedef OB::ObjVar< ValueFactoryBase > ValueFactoryBase_var;

}
# 16 "../../include/OB/ValueBase.h" 2
# 1 "../../include/OB/AbstractBase_fwd.h" 1
# 17 "../../include/OB/ValueBase.h" 2
# 1 "../../include/OB/ORBInstance_fwd.h" 1
# 18 "../../include/OB/ValueBase.h" 2

# 1 "../../include/OB/POAServantBase.h" 1
# 14 "../../include/OB/POAServantBase.h"
# 1 "../../include/OB/TypeCodeConst.h" 1
# 15 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/POAServantBase_fwd.h" 1
# 14 "../../include/OB/POAServantBase_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/POAServantBase_fwd.h" 2

namespace PortableServer
{

class ServantBase;


}

void OBRelease(PortableServer::ServantBase*);
void OBDuplicate(PortableServer::ServantBase*);

namespace PortableServer
{

typedef OB::ObjVar< ServantBase > ServantBase_var;

}
# 16 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/Object_fwd.h" 1
# 17 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/POAInterface_fwd.h" 1
# 18 "../../include/OB/POAInterface_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POAInterface_fwd.h" 2
# 39 "../../include/OB/POAInterface_fwd.h"
namespace PortableServer
{

class POA;
typedef POA* POA_ptr;
typedef POA* POARef;

}

void OBDuplicate(PortableServer::POA_ptr);
void OBRelease(PortableServer::POA_ptr);

void OBMarshal(PortableServer::POA_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::POA_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< POA > POA_var;
typedef OB::ObjOut< POA > POA_out;

}
# 18 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/Upcall_fwd.h" 1
# 14 "../../include/OB/Upcall_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Upcall_fwd.h" 2

namespace OB
{

class Upcall;
typedef Upcall* Upcall_ptr;

class PIUpcall;
typedef PIUpcall* PIUpcall_ptr;

class UpcallReturn;
typedef UpcallReturn* UpcallReturn_ptr;

}

void OBDuplicate(OB::Upcall_ptr);
void OBRelease(OB::Upcall_ptr);

void OBDuplicate(OB::PIUpcall_ptr);
void OBRelease(OB::PIUpcall_ptr);

void OBDuplicate(OB::UpcallReturn_ptr);
void OBRelease(OB::UpcallReturn_ptr);

namespace OB
{

typedef OB::ObjVar< Upcall > Upcall_var;

typedef OB::ObjVar< PIUpcall > PIUpcall_var;

typedef OB::ObjVar< UpcallReturn > UpcallReturn_var;

}
# 19 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/DirectStubImpl_fwd.h" 1
# 14 "../../include/OB/DirectStubImpl_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/DirectStubImpl_fwd.h" 2

namespace OB
{

class DirectStubImpl;
typedef DirectStubImpl* DirectStubImpl_ptr;

class DirectStubImplFactory;
typedef DirectStubImplFactory* DirectStubImplFactory_ptr;

}




void OBDuplicate(OB::DirectStubImplFactory_ptr);
void OBRelease(OB::DirectStubImplFactory_ptr);

namespace OB
{



typedef ObjVar< DirectStubImplFactory > DirectStubImplFactory_var;

}
# 20 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/IFR2_fwd.h" 1
# 21 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/OBPOAManager_fwd.h" 1
# 18 "../../include/OB/OBPOAManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/OBPOAManager_fwd.h" 2
# 39 "../../include/OB/OBPOAManager_fwd.h"
namespace OBPortableServer
{

class POAManager;
typedef POAManager* POAManager_ptr;
typedef POAManager* POAManagerRef;

class POAManagerFactory;
typedef POAManagerFactory* POAManagerFactory_ptr;
typedef POAManagerFactory* POAManagerFactoryRef;

}

void OBDuplicate(OBPortableServer::POAManager_ptr);
void OBRelease(OBPortableServer::POAManager_ptr);

void OBMarshal(OBPortableServer::POAManager_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OBPortableServer::POAManager_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OBPortableServer::POAManagerFactory_ptr);
void OBRelease(OBPortableServer::POAManagerFactory_ptr);

void OBMarshal(OBPortableServer::POAManagerFactory_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OBPortableServer::POAManagerFactory_ptr&, OB::InputStreamImpl*);

namespace OBPortableServer
{

typedef OB::ObjVar< POAManager > POAManager_var;
typedef OB::ObjOut< POAManager > POAManager_out;

typedef OB::ObjVar< POAManagerFactory > POAManagerFactory_var;
typedef OB::ObjOut< POAManagerFactory > POAManagerFactory_out;

}
# 22 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/Stream_fwd.h" 1
# 23 "../../include/OB/POAServantBase.h" 2

# 1 "../../include/OB/PIArgs.h" 1
# 25 "../../include/OB/POAServantBase.h" 2

# 1 "../../include/OB/Basic.h" 1
# 27 "../../include/OB/POAServantBase.h" 2
# 1 "../../include/OB/Except.h" 1
# 28 "../../include/OB/POAServantBase.h" 2

namespace CORBA
{

class ServerRequest;




typedef char* RepositoryId;

}

namespace PortableServer
{




class OBUnique_ObjectId;
typedef OB::FixSeq< CORBA::Octet, OBUnique_ObjectId > ObjectId;
typedef OB::SeqVar< OB::FixSeq< CORBA::Octet, OBUnique_ObjectId > >
    ObjectId_var;




char* ObjectId_to_string(const ObjectId&);
CORBA::WChar* ObjectId_to_wstring(const ObjectId&);

ObjectId* string_to_ObjectId(const char*);
ObjectId* wstring_to_ObjectId(const CORBA::WChar*);





class ServantBase : public virtual OB::RefCountable
{
# 76 "../../include/OB/POAServantBase.h"
protected:




    void _OB_dispatchBase(OB::Upcall_ptr);




    static CORBA::Long _OB_findOperation(OB::Upcall_ptr, const char*[],
                                         CORBA::ULong);




    static OB::InputStream_ptr _OB_preUnmarshal(OB::Upcall_ptr);
    static void _OB_unmarshalEx(OB::Upcall_ptr, const CORBA::SystemException&);
    static void _OB_postUnmarshal(OB::Upcall_ptr);




    static OB::OutputStream_ptr _OB_preMarshal(OB::Upcall_ptr);
    static void _OB_marshalEx(OB::Upcall_ptr, const CORBA::SystemException&);
    static void _OB_postMarshal(OB::Upcall_ptr);




    static void _OB_setArgDesc(OB::Upcall_ptr,
                        OB::ParameterDesc*, CORBA::ULong,
                        OB::ParameterDesc*,
                        CORBA::TypeCode_ptr*, CORBA::ULong);




    friend class ::CORBA::ServerRequest;

    ServantBase() { }
    ServantBase(const ServantBase&) { }
    ServantBase& operator=(const ServantBase&) { return *this; }

public:

    virtual ~ServantBase() { }

    virtual POA_ptr _default_POA();

    virtual CORBA::InterfaceDef_ptr _get_interface()
        throw(CORBA::SystemException);

    virtual CORBA::Boolean _is_a(const char* logical_type_id)
        throw(CORBA::SystemException);

    virtual CORBA::Boolean _non_existent()
        throw(CORBA::SystemException);

    virtual CORBA::RepositoryId _primary_interface(const ObjectId&,
                                                   POA_ptr) = 0;

    virtual void _add_ref() { }
    virtual void _remove_ref() { }





    virtual void _OB_dispatch(OB::Upcall_ptr) = 0;

    CORBA::Object_ptr _OB_createReference();
    virtual OB::DirectStubImpl_ptr _OB_createDirectStubImpl(POA_ptr,
                                                            const ObjectId&);
    virtual CORBA::ULong _OB_getRefCount();
};





class RefCountServantBase : public virtual ServantBase,
                            public virtual OB::RefCount
{
protected:

    RefCountServantBase() { }
    RefCountServantBase(const RefCountServantBase&) { }
    RefCountServantBase&
    operator=(const RefCountServantBase&) { return *this; }

public:

    virtual void _add_ref();
    virtual void _remove_ref();
    virtual CORBA::ULong _OB_getRefCount();
};

}
# 20 "../../include/OB/ValueBase.h" 2

namespace OB
{

class ValueBaseInfo : public ConstructedInfo
{
public:

    ValueBaseInfo() { }
    virtual ~ValueBaseInfo() { }




    virtual void free(void*) const;
    virtual void* dup(const void*) const;




    virtual void marshal(const void*, OutputStreamImpl*) const;
    virtual void unmarshal(void*, InputStreamImpl*) const;
};

}

namespace CORBA
{

class ValueBase
{



    void operator=(const ValueBase&);
# 64 "../../include/OB/ValueBase.h"
    static const char* _ob_id_;
    static const char* _ob_truncatable_ids_[];

protected:

    ValueBase();
    ValueBase(const ValueBase&);

    virtual ~ValueBase();

public:

    static OB::ValueBaseInfo _OB_valueBaseInfo;

    virtual ValueBase* _add_ref() = 0;
    virtual void _remove_ref() = 0;
    virtual ULong _refcount_value() = 0;
    virtual ValueBase* _copy_value() = 0;

    virtual ValueDef_ptr _get_value_def();

    static ValueBase* _downcast(ValueBase*);
    static ValueBase* _downcast(AbstractBase_ptr);

    virtual const char* _OB_typeId() const;
    static const char* _OB_id();
    virtual const char** _OB_truncatableIds() const;

    virtual Boolean _OB_isCustom() const;
    virtual Boolean _OB_isTruncatable() const;

    virtual AbstractBase_ptr _OB_toAbstractBase();

    virtual void _OB_marshal(OB::OutputStreamImpl*);
    virtual void _OB_unmarshal(OB::InputStreamImpl*);

    static ValueBase* _OB_createValue(OB::ORBInstance_ptr,
                                      const OB::StrSeq< int >&,
                                      const char*);
    static ValueBase* _OB_createValue(CORBA::ValueFactoryBase*);
};

inline void
add_ref(ValueBase* vb)
{
    if(vb != 0)
        vb -> _add_ref();
}

inline void
remove_ref(ValueBase* vb)
{
    if(vb != 0)
        vb -> _remove_ref();
}

class DefaultValueRefCountBase : public virtual ValueBase,
                                 public virtual OB::RefCount
{
private:




    void operator=(const DefaultValueRefCountBase&);

protected:

    DefaultValueRefCountBase();
    DefaultValueRefCountBase(const DefaultValueRefCountBase&);
    virtual ~DefaultValueRefCountBase();

public:

    virtual ValueBase* _add_ref();
    virtual void _remove_ref();
    virtual ULong _refcount_value();
};

}

namespace OB
{






class ValueRefCountBaseHelper : public virtual CORBA::ValueBase
{
private:




    void operator=(const ValueRefCountBaseHelper&);

    virtual void servantAddRefImpl() = 0;

public:

    virtual CORBA::ValueBase* _add_ref()
    {
        servantAddRefImpl();
        return this;
    }
};

}

namespace PortableServer
{





class ValueRefCountBase : public virtual OB::ValueRefCountBaseHelper,
                          public virtual RefCountServantBase
{
private:




    void operator=(const ValueRefCountBase&);

    virtual void servantAddRefImpl();

protected:

    ValueRefCountBase();
    ValueRefCountBase(const ValueRefCountBase&);
    virtual ~ValueRefCountBase();

public:

    virtual void _remove_ref();
    virtual CORBA::ULong _refcount_value();
};

}
# 23 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/ValueFactoryBase.h" 1
# 14 "../../include/OB/ValueFactoryBase.h"
# 1 "../../include/OB/ValueFactoryBase_fwd.h" 1
# 15 "../../include/OB/ValueFactoryBase.h" 2
# 1 "../../include/OB/ValueBase_fwd.h" 1
# 16 "../../include/OB/ValueFactoryBase.h" 2

namespace CORBA
{

class ValueFactoryBase : public virtual OB::RefCount
{
    virtual ValueBase* create_for_unmarshal() = 0;
    friend class CORBA::ValueBase;

protected:

    ValueFactoryBase();

public:

    virtual ~ValueFactoryBase();
    virtual void _add_ref();
    virtual void _remove_ref();

    static ValueFactoryBase* _downcast(ValueFactoryBase*);

    struct BooleanValue
    {
        BooleanValue(Boolean b) : value(b) {}
        Boolean value;
    };

    struct CharValue
    {
        CharValue(Char c) : value(c) {}
        Char value;
    };

    struct OctetValue
    {
        OctetValue(Octet o) : value(o) {}
        Octet value;
    };

    struct WCharValue
    {
        WCharValue(WChar wc) : value(wc) {}
        WChar value;
    };
};

typedef ValueFactoryBase* ValueFactory;

}
# 24 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/Custom.h" 1
# 27 "../../include/OB/Custom.h"
# 1 "../../include/OB/Types.h" 1
# 37 "../../include/OB/Types.h"
namespace CORBA
{

}

namespace CORBA
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




class OBUnique_AnySeq { };

typedef OB::VarSeq< CORBA::Any, OBUnique_AnySeq > AnySeq;
typedef OB::SeqVar< OB::VarSeq< CORBA::Any, OBUnique_AnySeq > > AnySeq_var;
typedef OB::SeqOut< OB::VarSeq< CORBA::Any, OBUnique_AnySeq > > AnySeq_out;
          extern OB::TypeCodeConst _tc_AnySeq;

struct OBInfo_AnySeq : public OB::ConstructedInfo
{
    OBInfo_AnySeq() { }

    virtual void free(void* p) const
    {
        delete (AnySeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new AnySeq(*(const AnySeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_BooleanSeq { };

typedef OB::FixSeq< CORBA::Boolean, OBUnique_BooleanSeq > BooleanSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::Boolean, OBUnique_BooleanSeq > > BooleanSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Boolean, OBUnique_BooleanSeq > > BooleanSeq_out;
          extern OB::TypeCodeConst _tc_BooleanSeq;

struct OBInfo_BooleanSeq : public OB::ConstructedInfo
{
    OBInfo_BooleanSeq() { }

    virtual void free(void* p) const
    {
        delete (BooleanSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new BooleanSeq(*(const BooleanSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_CharSeq { };

typedef OB::FixSeq< CORBA::Char, OBUnique_CharSeq > CharSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::Char, OBUnique_CharSeq > > CharSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Char, OBUnique_CharSeq > > CharSeq_out;
          extern OB::TypeCodeConst _tc_CharSeq;

struct OBInfo_CharSeq : public OB::ConstructedInfo
{
    OBInfo_CharSeq() { }

    virtual void free(void* p) const
    {
        delete (CharSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new CharSeq(*(const CharSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_WCharSeq { };

typedef OB::FixSeq< CORBA::WChar, OBUnique_WCharSeq > WCharSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::WChar, OBUnique_WCharSeq > > WCharSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::WChar, OBUnique_WCharSeq > > WCharSeq_out;
          extern OB::TypeCodeConst _tc_WCharSeq;

struct OBInfo_WCharSeq : public OB::ConstructedInfo
{
    OBInfo_WCharSeq() { }

    virtual void free(void* p) const
    {
        delete (WCharSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new WCharSeq(*(const WCharSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_OctetSeq { };

typedef OB::FixSeq< CORBA::Octet, OBUnique_OctetSeq > OctetSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::Octet, OBUnique_OctetSeq > > OctetSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Octet, OBUnique_OctetSeq > > OctetSeq_out;
          extern OB::TypeCodeConst _tc_OctetSeq;

struct OBInfo_OctetSeq : public OB::ConstructedInfo
{
    OBInfo_OctetSeq() { }

    virtual void free(void* p) const
    {
        delete (OctetSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new OctetSeq(*(const OctetSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_ShortSeq { };

typedef OB::FixSeq< CORBA::Short, OBUnique_ShortSeq > ShortSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::Short, OBUnique_ShortSeq > > ShortSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Short, OBUnique_ShortSeq > > ShortSeq_out;
          extern OB::TypeCodeConst _tc_ShortSeq;

struct OBInfo_ShortSeq : public OB::ConstructedInfo
{
    OBInfo_ShortSeq() { }

    virtual void free(void* p) const
    {
        delete (ShortSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ShortSeq(*(const ShortSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_UShortSeq { };

typedef OB::FixSeq< CORBA::UShort, OBUnique_UShortSeq > UShortSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::UShort, OBUnique_UShortSeq > > UShortSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::UShort, OBUnique_UShortSeq > > UShortSeq_out;
          extern OB::TypeCodeConst _tc_UShortSeq;

struct OBInfo_UShortSeq : public OB::ConstructedInfo
{
    OBInfo_UShortSeq() { }

    virtual void free(void* p) const
    {
        delete (UShortSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new UShortSeq(*(const UShortSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_LongSeq { };

typedef OB::FixSeq< CORBA::Long, OBUnique_LongSeq > LongSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::Long, OBUnique_LongSeq > > LongSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Long, OBUnique_LongSeq > > LongSeq_out;
          extern OB::TypeCodeConst _tc_LongSeq;

struct OBInfo_LongSeq : public OB::ConstructedInfo
{
    OBInfo_LongSeq() { }

    virtual void free(void* p) const
    {
        delete (LongSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new LongSeq(*(const LongSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_ULongSeq { };

typedef OB::FixSeq< CORBA::ULong, OBUnique_ULongSeq > ULongSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::ULong, OBUnique_ULongSeq > > ULongSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::ULong, OBUnique_ULongSeq > > ULongSeq_out;
          extern OB::TypeCodeConst _tc_ULongSeq;

struct OBInfo_ULongSeq : public OB::ConstructedInfo
{
    OBInfo_ULongSeq() { }

    virtual void free(void* p) const
    {
        delete (ULongSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ULongSeq(*(const ULongSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_LongLongSeq { };

typedef OB::FixSeq< CORBA::LongLong, OBUnique_LongLongSeq > LongLongSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::LongLong, OBUnique_LongLongSeq > > LongLongSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::LongLong, OBUnique_LongLongSeq > > LongLongSeq_out;
          extern OB::TypeCodeConst _tc_LongLongSeq;

struct OBInfo_LongLongSeq : public OB::ConstructedInfo
{
    OBInfo_LongLongSeq() { }

    virtual void free(void* p) const
    {
        delete (LongLongSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new LongLongSeq(*(const LongLongSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_ULongLongSeq { };

typedef OB::FixSeq< CORBA::ULongLong, OBUnique_ULongLongSeq > ULongLongSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::ULongLong, OBUnique_ULongLongSeq > > ULongLongSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::ULongLong, OBUnique_ULongLongSeq > > ULongLongSeq_out;
          extern OB::TypeCodeConst _tc_ULongLongSeq;

struct OBInfo_ULongLongSeq : public OB::ConstructedInfo
{
    OBInfo_ULongLongSeq() { }

    virtual void free(void* p) const
    {
        delete (ULongLongSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ULongLongSeq(*(const ULongLongSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_FloatSeq { };

typedef OB::FixSeq< CORBA::Float, OBUnique_FloatSeq > FloatSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::Float, OBUnique_FloatSeq > > FloatSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Float, OBUnique_FloatSeq > > FloatSeq_out;
          extern OB::TypeCodeConst _tc_FloatSeq;

struct OBInfo_FloatSeq : public OB::ConstructedInfo
{
    OBInfo_FloatSeq() { }

    virtual void free(void* p) const
    {
        delete (FloatSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new FloatSeq(*(const FloatSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_DoubleSeq { };

typedef OB::FixSeq< CORBA::Double, OBUnique_DoubleSeq > DoubleSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::Double, OBUnique_DoubleSeq > > DoubleSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Double, OBUnique_DoubleSeq > > DoubleSeq_out;
          extern OB::TypeCodeConst _tc_DoubleSeq;

struct OBInfo_DoubleSeq : public OB::ConstructedInfo
{
    OBInfo_DoubleSeq() { }

    virtual void free(void* p) const
    {
        delete (DoubleSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new DoubleSeq(*(const DoubleSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_StringSeq { };

typedef OB::StrSeq< OBUnique_StringSeq > StringSeq;
typedef OB::SeqVar< OB::StrSeq< OBUnique_StringSeq > > StringSeq_var;
typedef OB::SeqOut< OB::StrSeq< OBUnique_StringSeq > > StringSeq_out;
          extern OB::TypeCodeConst _tc_StringSeq;

struct OBInfo_StringSeq : public OB::ConstructedInfo
{
    OBInfo_StringSeq() { }

    virtual void free(void* p) const
    {
        delete (StringSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new StringSeq(*(const StringSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_WStringSeq { };

typedef OB::WStrSeq< OBUnique_WStringSeq > WStringSeq;
typedef OB::SeqVar< OB::WStrSeq< OBUnique_WStringSeq > > WStringSeq_var;
typedef OB::SeqOut< OB::WStrSeq< OBUnique_WStringSeq > > WStringSeq_out;
          extern OB::TypeCodeConst _tc_WStringSeq;

struct OBInfo_WStringSeq : public OB::ConstructedInfo
{
    OBInfo_WStringSeq() { }

    virtual void free(void* p) const
    {
        delete (WStringSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new WStringSeq(*(const WStringSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef char* RepositoryId;
typedef CORBA::String_var RepositoryId_var;
typedef CORBA::String_out RepositoryId_out;
          extern OB::TypeCodeConst _tc_RepositoryId;




typedef char* ScopedName;
typedef CORBA::String_var ScopedName_var;
typedef CORBA::String_out ScopedName_out;
          extern OB::TypeCodeConst _tc_ScopedName;




typedef char* Identifier;
typedef CORBA::String_var Identifier_var;
typedef CORBA::String_out Identifier_out;
          extern OB::TypeCodeConst _tc_Identifier;




typedef char* VersionSpec;
typedef CORBA::String_var VersionSpec_var;
typedef CORBA::String_out VersionSpec_out;
          extern OB::TypeCodeConst _tc_VersionSpec;




enum ParameterMode
{
    PARAM_IN,
    PARAM_OUT,
    PARAM_INOUT
};

typedef ParameterMode& ParameterMode_out;

          extern OB::TypeCodeConst _tc_ParameterMode;

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::AnySeq*);
void operator<<=(CORBA::Any&, const CORBA::AnySeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::AnySeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AnySeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::AnySeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::AnySeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::BooleanSeq*);
void operator<<=(CORBA::Any&, const CORBA::BooleanSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::BooleanSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::BooleanSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::BooleanSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::BooleanSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::CharSeq*);
void operator<<=(CORBA::Any&, const CORBA::CharSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::CharSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::CharSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::CharSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::CharSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::WCharSeq*);
void operator<<=(CORBA::Any&, const CORBA::WCharSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::WCharSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::WCharSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::WCharSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::WCharSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::OctetSeq*);
void operator<<=(CORBA::Any&, const CORBA::OctetSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::OctetSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::OctetSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::OctetSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::OctetSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ShortSeq*);
void operator<<=(CORBA::Any&, const CORBA::ShortSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ShortSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ShortSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ShortSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ShortSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::UShortSeq*);
void operator<<=(CORBA::Any&, const CORBA::UShortSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::UShortSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::UShortSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::UShortSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::UShortSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::LongSeq*);
void operator<<=(CORBA::Any&, const CORBA::LongSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::LongSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::LongSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::LongSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::LongSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ULongSeq*);
void operator<<=(CORBA::Any&, const CORBA::ULongSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ULongSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ULongSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ULongSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ULongSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::LongLongSeq*);
void operator<<=(CORBA::Any&, const CORBA::LongLongSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::LongLongSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::LongLongSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::LongLongSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::LongLongSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ULongLongSeq*);
void operator<<=(CORBA::Any&, const CORBA::ULongLongSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ULongLongSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ULongLongSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ULongLongSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ULongLongSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::FloatSeq*);
void operator<<=(CORBA::Any&, const CORBA::FloatSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::FloatSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::FloatSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::FloatSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::FloatSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::DoubleSeq*);
void operator<<=(CORBA::Any&, const CORBA::DoubleSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::DoubleSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::DoubleSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::DoubleSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::DoubleSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::StringSeq*);
void operator<<=(CORBA::Any&, const CORBA::StringSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::StringSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::StringSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::StringSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::StringSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::WStringSeq*);
void operator<<=(CORBA::Any&, const CORBA::WStringSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::WStringSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::WStringSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::WStringSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::WStringSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ParameterMode);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ParameterMode&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ParameterMode val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ParameterMode& val)
{
    return any.in() >>= val;
}
# 28 "../../include/OB/Custom.h" 2
# 1 "../../include/OB/Native.h" 1
# 37 "../../include/OB/Native.h"
namespace CORBA
{

}

namespace CORBA
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




typedef OBNative_CORBA::ValueFactory ValueFactory;

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}
# 29 "../../include/OB/Custom.h" 2
# 1 "../../include/OB/Custom_fwd.h" 1
# 18 "../../include/OB/Custom_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Custom_fwd.h" 2
# 39 "../../include/OB/Custom_fwd.h"
namespace CORBA
{

class DataOutputStream;

class DataInputStream;

class CustomMarshal;

}

void OBDuplicate(CORBA::DataOutputStream*);
void OBRelease(CORBA::DataOutputStream*);

void OBMarshal(CORBA::DataOutputStream*, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::DataOutputStream*&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::DataInputStream*);
void OBRelease(CORBA::DataInputStream*);

void OBMarshal(CORBA::DataInputStream*, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::DataInputStream*&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::CustomMarshal*);
void OBRelease(CORBA::CustomMarshal*);

void OBMarshal(CORBA::CustomMarshal*, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::CustomMarshal*&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< DataOutputStream > DataOutputStream_var;
typedef OB::ObjOut< DataOutputStream > DataOutputStream_out;

typedef OB::ObjVar< DataInputStream > DataInputStream_var;
typedef OB::ObjOut< DataInputStream > DataInputStream_out;

typedef OB::ObjVar< CustomMarshal > CustomMarshal_var;
typedef OB::ObjOut< CustomMarshal > CustomMarshal_out;

}
# 30 "../../include/OB/Custom.h" 2
# 41 "../../include/OB/Custom.h"
namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




class DataOutputStream : virtual public CORBA::ValueBase
{
    void operator=(const DataOutputStream&);

    static const char* _ob_id_;

protected:

    DataOutputStream() { }
    virtual ~DataOutputStream() { }

public:

    typedef DataOutputStream_var _var_type;

    static DataOutputStream* _downcast(CORBA::ValueBase*);
    static DataOutputStream* _downcast(CORBA::AbstractBase_ptr);




    virtual void write_any(const CORBA::Any& value) = 0;




    virtual void write_boolean(CORBA::Boolean value) = 0;




    virtual void write_char(CORBA::Char value) = 0;




    virtual void write_wchar(CORBA::WChar value) = 0;




    virtual void write_octet(CORBA::Octet value) = 0;




    virtual void write_short(CORBA::Short value) = 0;




    virtual void write_ushort(CORBA::UShort value) = 0;




    virtual void write_long(CORBA::Long value) = 0;




    virtual void write_ulong(CORBA::ULong value) = 0;




    virtual void write_longlong(CORBA::LongLong value) = 0;




    virtual void write_ulonglong(CORBA::ULongLong value) = 0;




    virtual void write_float(CORBA::Float value) = 0;




    virtual void write_double(CORBA::Double value) = 0;




    virtual void write_longdouble(CORBA::LongDouble value) = 0;




    virtual void write_string(const char* value) = 0;




    virtual void write_wstring(const CORBA::WChar* value) = 0;




    virtual void write_Object(CORBA::Object_ptr value) = 0;




    virtual void write_Abstract(AbstractBase_ptr value) = 0;




    virtual void write_Value(CORBA::ValueBase* value) = 0;




    virtual void write_TypeCode(CORBA::TypeCode_ptr value) = 0;




    virtual void write_any_array(const AnySeq& seq,
                                 CORBA::ULong offset,
                                 CORBA::ULong length) = 0;




    virtual void write_boolean_array(const BooleanSeq& seq,
                                     CORBA::ULong offset,
                                     CORBA::ULong length) = 0;




    virtual void write_char_array(const CharSeq& seq,
                                  CORBA::ULong offset,
                                  CORBA::ULong length) = 0;




    virtual void write_wchar_array(const WCharSeq& seq,
                                   CORBA::ULong offset,
                                   CORBA::ULong length) = 0;




    virtual void write_octet_array(const OctetSeq& seq,
                                   CORBA::ULong offset,
                                   CORBA::ULong length) = 0;




    virtual void write_short_array(const ShortSeq& seq,
                                   CORBA::ULong offset,
                                   CORBA::ULong length) = 0;




    virtual void write_ushort_array(const UShortSeq& seq,
                                    CORBA::ULong offset,
                                    CORBA::ULong length) = 0;




    virtual void write_long_array(const LongSeq& seq,
                                  CORBA::ULong offset,
                                  CORBA::ULong length) = 0;




    virtual void write_ulong_array(const ULongSeq& seq,
                                   CORBA::ULong offset,
                                   CORBA::ULong length) = 0;




    virtual void write_ulonglong_array(const ULongLongSeq& seq,
                                       CORBA::ULong offset,
                                       CORBA::ULong length) = 0;




    virtual void write_longlong_array(const LongLongSeq& seq,
                                      CORBA::ULong offset,
                                      CORBA::ULong length) = 0;




    virtual void write_float_array(const FloatSeq& seq,
                                   CORBA::ULong offset,
                                   CORBA::ULong length) = 0;




    virtual void write_double_array(const DoubleSeq& seq,
                                    CORBA::ULong offset,
                                    CORBA::ULong length) = 0;

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;
};




class DataInputStream : virtual public CORBA::ValueBase
{
    void operator=(const DataInputStream&);

    static const char* _ob_id_;

protected:

    DataInputStream() { }
    virtual ~DataInputStream() { }

public:

    typedef DataInputStream_var _var_type;

    static DataInputStream* _downcast(CORBA::ValueBase*);
    static DataInputStream* _downcast(CORBA::AbstractBase_ptr);




    virtual CORBA::Any* read_any() = 0;




    virtual CORBA::Boolean read_boolean() = 0;




    virtual CORBA::Char read_char() = 0;




    virtual CORBA::WChar read_wchar() = 0;




    virtual CORBA::Octet read_octet() = 0;




    virtual CORBA::Short read_short() = 0;




    virtual CORBA::UShort read_ushort() = 0;




    virtual CORBA::Long read_long() = 0;




    virtual CORBA::ULong read_ulong() = 0;




    virtual CORBA::LongLong read_longlong() = 0;




    virtual CORBA::ULongLong read_ulonglong() = 0;




    virtual CORBA::Float read_float() = 0;




    virtual CORBA::Double read_double() = 0;




    virtual CORBA::LongDouble read_longdouble() = 0;




    virtual char* read_string() = 0;




    virtual CORBA::WChar* read_wstring() = 0;




    virtual CORBA::Object_ptr read_Object() = 0;




    virtual AbstractBase_ptr read_Abstract() = 0;




    virtual CORBA::ValueBase* read_Value() = 0;




    virtual CORBA::TypeCode_ptr read_TypeCode() = 0;




    virtual void read_any_array(AnySeq& seq,
                                CORBA::ULong offset,
                                CORBA::ULong length) = 0;




    virtual void read_boolean_array(BooleanSeq& seq,
                                    CORBA::ULong offset,
                                    CORBA::ULong length) = 0;




    virtual void read_char_array(CharSeq& seq,
                                 CORBA::ULong offset,
                                 CORBA::ULong length) = 0;




    virtual void read_wchar_array(WCharSeq& seq,
                                  CORBA::ULong offset,
                                  CORBA::ULong length) = 0;




    virtual void read_octet_array(OctetSeq& seq,
                                  CORBA::ULong offset,
                                  CORBA::ULong length) = 0;




    virtual void read_short_array(ShortSeq& seq,
                                  CORBA::ULong offset,
                                  CORBA::ULong length) = 0;




    virtual void read_ushort_array(UShortSeq& seq,
                                   CORBA::ULong offset,
                                   CORBA::ULong length) = 0;




    virtual void read_long_array(LongSeq& seq,
                                 CORBA::ULong offset,
                                 CORBA::ULong length) = 0;




    virtual void read_ulong_array(ULongSeq& seq,
                                  CORBA::ULong offset,
                                  CORBA::ULong length) = 0;




    virtual void read_ulonglong_array(ULongLongSeq& seq,
                                      CORBA::ULong offset,
                                      CORBA::ULong length) = 0;




    virtual void read_longlong_array(LongLongSeq& seq,
                                     CORBA::ULong offset,
                                     CORBA::ULong length) = 0;




    virtual void read_float_array(FloatSeq& seq,
                                  CORBA::ULong offset,
                                  CORBA::ULong length) = 0;




    virtual void read_double_array(DoubleSeq& seq,
                                   CORBA::ULong offset,
                                   CORBA::ULong length) = 0;

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;
};




class CustomMarshal : virtual public CORBA::ValueBase
{
    void operator=(const CustomMarshal&);

    static const char* _ob_id_;

protected:

    CustomMarshal() { }
    virtual ~CustomMarshal() { }

public:

    typedef CustomMarshal_var _var_type;

    static CustomMarshal* _downcast(CORBA::ValueBase*);
    static CustomMarshal* _downcast(CORBA::AbstractBase_ptr);




    virtual void marshal(DataOutputStream* os) = 0;




    virtual void unmarshal(DataInputStream* is) = 0;

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;
};

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}
# 25 "../../include/OB/CORBAClient.h" 2
# 1 "../../include/OB/Stream.h" 1
# 14 "../../include/OB/Stream.h"
# 1 "../../include/OB/Stream_fwd.h" 1
# 15 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/Principal_fwd.h" 1
# 16 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/Object_fwd.h" 1
# 17 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/ValueBase_fwd.h" 1
# 18 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/AbstractBase_fwd.h" 1
# 19 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/Custom_fwd.h" 1
# 20 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/TypeCode_fwd.h" 1
# 21 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/ORBInstance_fwd.h" 1
# 22 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/OCIBuffer_fwd.h" 1
# 14 "../../include/OB/OCIBuffer_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/OCIBuffer_fwd.h" 2

namespace OCI
{

class Buffer;
typedef Buffer* Buffer_ptr;
typedef Buffer_ptr BufferRef;

}

void OBDuplicate(OCI::Buffer_ptr);
void OBRelease(OCI::Buffer_ptr);

namespace OCI
{

typedef OB::ObjVar< Buffer > Buffer_var;

}
# 23 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/ValueReaderWriter_fwd.h" 1
# 14 "../../include/OB/ValueReaderWriter_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/ValueReaderWriter_fwd.h" 2

namespace OB
{

class ValueReader;
typedef ValueReader* ValueReader_ptr;

class ValueWriter;
typedef ValueWriter* ValueWriter_ptr;

}

void OBDuplicate(OB::ValueReader_ptr);
void OBRelease(OB::ValueReader_ptr);

void OBDuplicate(OB::ValueWriter_ptr);
void OBRelease(OB::ValueWriter_ptr);

namespace OB
{

typedef OB::ObjVar< ValueReader > ValueReader_var;

typedef OB::ObjVar< ValueWriter > ValueWriter_var;

}
# 24 "../../include/OB/Stream.h" 2

# 1 "../../include/OB/Any.h" 1
# 26 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/TypeCodeConst.h" 1
# 27 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/OCITypes.h" 1
# 27 "../../include/OB/OCITypes.h"
# 1 "../../include/OB/IOP.h" 1
# 37 "../../include/OB/IOP.h"
namespace IOP
{

}

namespace IOP
{

}

namespace OBStubImpl_IOP
{

}

namespace OBStubImpl_IOP
{

}




namespace IOP
{




typedef CORBA::ULong ProfileId;
typedef CORBA::ULong_out ProfileId_out;




const ProfileId TAG_INTERNET_IOP = 0U;




const ProfileId TAG_MULTIPLE_COMPONENTS = 1U;




struct TaggedProfile;
typedef OB::VarVar< TaggedProfile > TaggedProfile_var;
typedef OB::VarOut< TaggedProfile > TaggedProfile_out;

struct TaggedProfile
{



    TaggedProfile() { }

    TaggedProfile(const TaggedProfile&);
    TaggedProfile& operator=(const TaggedProfile&);

    typedef TaggedProfile_var _var_type;

    ProfileId tag;
    class OBUnique_profile_data { };
    typedef OB::FixSeq< CORBA::Octet, OBUnique_profile_data > _profile_data_seq;
    _profile_data_seq profile_data;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(TaggedProfile&, OB::InputStreamImpl*);
};




struct IOR;
typedef OB::VarVar< IOR > IOR_var;
typedef OB::VarOut< IOR > IOR_out;

struct IOR
{
    IOR() { }
    IOR(const IOR&);
    IOR& operator=(const IOR&);

    typedef IOR_var _var_type;

    OB::StrForStruct type_id;
    class OBUnique_profiles { };
    typedef OB::VarSeq< TaggedProfile, OBUnique_profiles > _profiles_seq;
    _profiles_seq profiles;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(IOR&, OB::InputStreamImpl*);
};




typedef CORBA::ULong ComponentId;
typedef CORBA::ULong_out ComponentId_out;




struct TaggedComponent;
typedef OB::VarVar< TaggedComponent > TaggedComponent_var;
typedef OB::VarOut< TaggedComponent > TaggedComponent_out;

struct TaggedComponent
{



    TaggedComponent() { }

    TaggedComponent(const TaggedComponent&);
    TaggedComponent& operator=(const TaggedComponent&);

    typedef TaggedComponent_var _var_type;

    ComponentId tag;
    class OBUnique_component_data { };
    typedef OB::FixSeq< CORBA::Octet, OBUnique_component_data > _component_data_seq;
    _component_data_seq component_data;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(TaggedComponent&, OB::InputStreamImpl*);
};




class OBUnique_MultipleComponentProfile { };

typedef OB::VarSeq< TaggedComponent, OBUnique_MultipleComponentProfile > MultipleComponentProfile;
typedef OB::SeqVar< OB::VarSeq< TaggedComponent, OBUnique_MultipleComponentProfile > > MultipleComponentProfile_var;
typedef OB::SeqOut< OB::VarSeq< TaggedComponent, OBUnique_MultipleComponentProfile > > MultipleComponentProfile_out;




class OBUnique_TaggedComponentSeq { };

typedef OB::VarSeq< TaggedComponent, OBUnique_TaggedComponentSeq > TaggedComponentSeq;
typedef OB::SeqVar< OB::VarSeq< TaggedComponent, OBUnique_TaggedComponentSeq > > TaggedComponentSeq_var;
typedef OB::SeqOut< OB::VarSeq< TaggedComponent, OBUnique_TaggedComponentSeq > > TaggedComponentSeq_out;




const ComponentId TAG_ORB_TYPE = 0U;




const ComponentId TAG_CODE_SETS = 1U;




const ComponentId TAG_POLICIES = 2U;




const ComponentId TAG_ALTERNATE_IIOP_ADDRESS = 3U;




const ComponentId TAG_ASSOCIATION_OPTIONS = 13U;




const ComponentId TAG_SEC_NAME = 14U;




const ComponentId TAG_SPKM_1_SEC_MECH = 15U;




const ComponentId TAG_SPKM_2_SEC_MECH = 16U;




const ComponentId TAG_KerberosV5_SEC_MECH = 17U;




const ComponentId TAG_CSI_ECMA_Secret_SEC_MECH = 18U;




const ComponentId TAG_CSI_ECMA_Hybrid_SEC_MECH = 19U;




const ComponentId TAG_SSL_SEC_TRANS = 20U;




const ComponentId TAG_CSI_ECMA_Public_SEC_MECH = 21U;




const ComponentId TAG_GENERIC_SEC_MECH = 22U;




const ComponentId TAG_JAVA_CODEBASE = 25U;




const ComponentId TAG_COMPLETE_OBJECT_KEY = 5U;




const ComponentId TAG_ENDPOINT_ID_POSITION = 6U;




const ComponentId TAG_LOCATION_POLICY = 12U;




const ComponentId TAG_DCE_STRING_BINDING = 100U;




const ComponentId TAG_DCE_BINDING_NAME = 101U;




const ComponentId TAG_DCE_NO_PIPES = 102U;




const ComponentId TAG_DCE_SEC_MECH = 103U;




typedef CORBA::ULong ServiceId;
typedef CORBA::ULong_out ServiceId_out;




struct ServiceContext;
typedef OB::VarVar< ServiceContext > ServiceContext_var;
typedef OB::VarOut< ServiceContext > ServiceContext_out;

struct ServiceContext
{



    ServiceContext() { }

    ServiceContext(const ServiceContext&);
    ServiceContext& operator=(const ServiceContext&);

    typedef ServiceContext_var _var_type;

    ServiceId context_id;
    class OBUnique_context_data { };
    typedef OB::FixSeq< CORBA::Octet, OBUnique_context_data > _context_data_seq;
    _context_data_seq context_data;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ServiceContext&, OB::InputStreamImpl*);
};




class OBUnique_ServiceContextList { };

typedef OB::VarSeq< ServiceContext, OBUnique_ServiceContextList > ServiceContextList;
typedef OB::SeqVar< OB::VarSeq< ServiceContext, OBUnique_ServiceContextList > > ServiceContextList_var;
typedef OB::SeqOut< OB::VarSeq< ServiceContext, OBUnique_ServiceContextList > > ServiceContextList_out;




const ServiceId TransactionService = 0U;




const ServiceId CodeSets = 1U;




const ServiceId ChainBypassCheck = 2U;




const ServiceId ChainBypassInfo = 3U;




const ServiceId LogicalThreadId = 4U;




const ServiceId BI_DIR_IIOP = 5U;




const ServiceId SendingContextRunTime = 6U;




const ServiceId INVOCATION_POLICIES = 7U;




const ServiceId FORWARDED_IDENTITY = 8U;




const ServiceId UnknownExceptionInfo = 9U;

}




namespace OBProxy_IOP
{

}




namespace OBStubImpl_IOP
{

}




namespace OBMarshalStubImpl_IOP
{

}




namespace OBV_IOP
{

}
# 28 "../../include/OB/OCITypes.h" 2
# 1 "../../include/OB/OCIBuffer.h" 1
# 14 "../../include/OB/OCIBuffer.h"
# 1 "../../include/OB/OCIBuffer_fwd.h" 1
# 15 "../../include/OB/OCIBuffer.h" 2

namespace OCI
{
# 28 "../../include/OB/OCIBuffer.h"
class BufferImpl
{






    CORBA::Octet defBuf_[1200];

    bool rel_;
    CORBA::Octet* real_;
    CORBA::ULong max_;

public:

    CORBA::Octet* data_;
    CORBA::ULong len_;
    CORBA::Octet* cur_;
    CORBA::Octet* last_;

    void doRealloc(CORBA::ULong);

public:

    BufferImpl()
        : rel_(false), real_(0), max_(0), data_(0), len_(0), cur_(0), last_(0)
    {
    }

    BufferImpl(CORBA::Octet* data, CORBA::ULong len)
        : rel_(false), real_(data), max_(len), data_(data), len_(len),
          cur_(data), last_(data_ + len_)
    {
    }

    BufferImpl(CORBA::ULong);

    virtual ~BufferImpl();




    CORBA::Octet* data() { return data_; }
    CORBA::Octet* rest() { return cur_; }

    CORBA::ULong length() { return len_; }
    CORBA::ULong rest_length() { return len_ - (cur_ - data_); }

    CORBA::ULong pos() { return (cur_ - data_); }
    void pos(CORBA::ULong pos) { cur_ = data_ + pos; }
    void advance(CORBA::ULong delta) { cur_ += delta; }

    CORBA::Boolean is_full() { return cur_ >= last_; }




    void alloc(CORBA::ULong);

    void realloc(CORBA::ULong n)
    {



        (static_cast<void> ((n >= len_) ? 0 : (__assert_fail ("n >= len_", "../../include/OB/OCIBuffer.h", 93, __PRETTY_FUNCTION__), 0)));

        if(n > max_)
        {
            doRealloc(n);
        }
        else
        {



            len_ = n;
            last_ = data_ + len_;
        }
    }

    void consume(BufferImpl*);
};




class Buffer : public BufferImpl, public OB::SimpleRefCount
{
public:

    Buffer() { }
    Buffer(CORBA::Octet* data, CORBA::ULong len) : BufferImpl(data, len) { }
    Buffer(CORBA::ULong n) : BufferImpl(n) { }




    static inline Buffer_ptr _duplicate(Buffer_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline Buffer_ptr _nil()
    { return 0; }
};

typedef OB::ObjSeq< Buffer, int > BufferSeq;
typedef OB::SeqVar< OB::ObjSeq< Buffer, int > > BufferSeq_var;

}

namespace CORBA
{

inline void
release(OCI::Buffer_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OCI::Buffer_ptr p)
{
    return p == 0;
}

}
# 29 "../../include/OB/OCITypes.h" 2
# 1 "../../include/OB/Types.h" 1
# 30 "../../include/OB/OCITypes.h" 2
# 41 "../../include/OB/OCITypes.h"
namespace OCI
{

}

namespace OCI
{

}

namespace OBStubImpl_OCI
{

}

namespace OBStubImpl_OCI
{

}




namespace OCI
{




typedef ::IOP::IOR IOR;
typedef ::IOP::IOR_var IOR_var;
typedef ::IOP::IOR_out IOR_out;
          extern OB::TypeCodeConst _tc_IOR;




typedef CORBA::ULong ProfileId;
typedef CORBA::ULong_out ProfileId_out;
          extern OB::TypeCodeConst _tc_ProfileId;




class OBUnique_ProfileIdSeq { };

typedef OB::FixSeq< CORBA::ULong, OBUnique_ProfileIdSeq > ProfileIdSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::ULong, OBUnique_ProfileIdSeq > > ProfileIdSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::ULong, OBUnique_ProfileIdSeq > > ProfileIdSeq_out;
          extern OB::TypeCodeConst _tc_ProfileIdSeq;

struct OBInfo_ProfileIdSeq : public OB::ConstructedInfo
{
    OBInfo_ProfileIdSeq() { }

    virtual void free(void* p) const
    {
        delete (ProfileIdSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ProfileIdSeq(*(const ProfileIdSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef char* PluginId;
typedef CORBA::String_var PluginId_var;
typedef CORBA::String_out PluginId_out;
          extern OB::TypeCodeConst _tc_PluginId;




class OBUnique_PluginIdSeq { };

typedef OB::StrSeq< OBUnique_PluginIdSeq > PluginIdSeq;
typedef OB::SeqVar< OB::StrSeq< OBUnique_PluginIdSeq > > PluginIdSeq_var;
typedef OB::SeqOut< OB::StrSeq< OBUnique_PluginIdSeq > > PluginIdSeq_out;
          extern OB::TypeCodeConst _tc_PluginIdSeq;

struct OBInfo_PluginIdSeq : public OB::ConstructedInfo
{
    OBInfo_PluginIdSeq() { }

    virtual void free(void* p) const
    {
        delete (PluginIdSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new PluginIdSeq(*(const PluginIdSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef OB::FixSeq< CORBA::Octet, CORBA::OBUnique_OctetSeq > ObjectKey;
typedef OB::SeqVar< OB::FixSeq< CORBA::Octet, CORBA::OBUnique_OctetSeq > > ObjectKey_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Octet, CORBA::OBUnique_OctetSeq > > ObjectKey_out;
          extern OB::TypeCodeConst _tc_ObjectKey;

struct OBInfo_ObjectKey : public OB::ConstructedInfo
{
    OBInfo_ObjectKey() { }

    virtual void free(void* p) const
    {
        delete (ObjectKey*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ObjectKey(*(const ObjectKey*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef OB::VarSeq< ::IOP::TaggedComponent, IOP::OBUnique_TaggedComponentSeq > TaggedComponentSeq;
typedef OB::SeqVar< OB::VarSeq< ::IOP::TaggedComponent, IOP::OBUnique_TaggedComponentSeq > > TaggedComponentSeq_var;
typedef OB::SeqOut< OB::VarSeq< ::IOP::TaggedComponent, IOP::OBUnique_TaggedComponentSeq > > TaggedComponentSeq_out;
          extern OB::TypeCodeConst _tc_TaggedComponentSeq;

struct OBInfo_TaggedComponentSeq : public OB::ConstructedInfo
{
    OBInfo_TaggedComponentSeq() { }

    virtual void free(void* p) const
    {
        delete (TaggedComponentSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new TaggedComponentSeq(*(const TaggedComponentSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef CORBA::Long Handle;
typedef CORBA::Long_out Handle_out;
          extern OB::TypeCodeConst _tc_Handle;




enum SendReceiveMode
{
    SendOnly,
    ReceiveOnly,
    SendReceive
};

typedef SendReceiveMode& SendReceiveMode_out;

          extern OB::TypeCodeConst _tc_SendReceiveMode;




struct ProfileInfo;
typedef OB::VarVar< ProfileInfo > ProfileInfo_var;
typedef OB::VarOut< ProfileInfo > ProfileInfo_out;

struct ProfileInfo
{



    ProfileInfo() { }

    ProfileInfo(const ProfileInfo&);
    ProfileInfo& operator=(const ProfileInfo&);

    typedef ProfileInfo_var _var_type;

    ObjectKey key;
    CORBA::Octet major;
    CORBA::Octet minor;
    ProfileId id;
    CORBA::ULong index;
    TaggedComponentSeq components;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ProfileInfo&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ProfileInfo;




class OBUnique_ProfileInfoSeq { };

typedef OB::VarSeq< ProfileInfo, OBUnique_ProfileInfoSeq > ProfileInfoSeq;
typedef OB::SeqVar< OB::VarSeq< ProfileInfo, OBUnique_ProfileInfoSeq > > ProfileInfoSeq_var;
typedef OB::SeqOut< OB::VarSeq< ProfileInfo, OBUnique_ProfileInfoSeq > > ProfileInfoSeq_out;
          extern OB::TypeCodeConst _tc_ProfileInfoSeq;

struct OBInfo_ProfileInfoSeq : public OB::ConstructedInfo
{
    OBInfo_ProfileInfoSeq() { }

    virtual void free(void* p) const
    {
        delete (ProfileInfoSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ProfileInfoSeq(*(const ProfileInfoSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_ParamSeq { };

typedef OB::StrSeq< OBUnique_ParamSeq > ParamSeq;
typedef OB::SeqVar< OB::StrSeq< OBUnique_ParamSeq > > ParamSeq_var;
typedef OB::SeqOut< OB::StrSeq< OBUnique_ParamSeq > > ParamSeq_out;
          extern OB::TypeCodeConst _tc_ParamSeq;

struct OBInfo_ParamSeq : public OB::ConstructedInfo
{
    OBInfo_ParamSeq() { }

    virtual void free(void* p) const
    {
        delete (ParamSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ParamSeq(*(const ParamSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};

}




namespace OBProxy_OCI
{

}




namespace OBStubImpl_OCI
{

}




namespace OBMarshalStubImpl_OCI
{

}




namespace OBV_OCI
{

}




void operator<<=(CORBA::Any&, OCI::ProfileIdSeq*);
void operator<<=(CORBA::Any&, const OCI::ProfileIdSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const OCI::ProfileIdSeq*&);

inline void
operator<<=(CORBA::Any_var& any, OCI::ProfileIdSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const OCI::ProfileIdSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const OCI::ProfileIdSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, OCI::PluginIdSeq*);
void operator<<=(CORBA::Any&, const OCI::PluginIdSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const OCI::PluginIdSeq*&);

inline void
operator<<=(CORBA::Any_var& any, OCI::PluginIdSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const OCI::PluginIdSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const OCI::PluginIdSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, OCI::SendReceiveMode);
CORBA::Boolean operator>>=(const CORBA::Any&, OCI::SendReceiveMode&);

inline void
operator<<=(CORBA::Any_var& any, OCI::SendReceiveMode val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OCI::SendReceiveMode& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, OCI::ProfileInfo*);
void operator<<=(CORBA::Any&, const OCI::ProfileInfo&);
CORBA::Boolean operator>>=(const CORBA::Any&, const OCI::ProfileInfo*&);

inline void
operator<<=(CORBA::Any_var& any, OCI::ProfileInfo* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const OCI::ProfileInfo& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const OCI::ProfileInfo*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, OCI::ProfileInfoSeq*);
void operator<<=(CORBA::Any&, const OCI::ProfileInfoSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const OCI::ProfileInfoSeq*&);

inline void
operator<<=(CORBA::Any_var& any, OCI::ProfileInfoSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const OCI::ProfileInfoSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const OCI::ProfileInfoSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, OCI::ParamSeq*);
void operator<<=(CORBA::Any&, const OCI::ParamSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const OCI::ParamSeq*&);

inline void
operator<<=(CORBA::Any_var& any, OCI::ParamSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const OCI::ParamSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const OCI::ParamSeq*& val)
{
    return any.in() >>= val;
}
# 28 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/CodeConverters.h" 1
# 14 "../../include/OB/CodeConverters.h"
namespace OB
{




class CodeConverterBase;




struct CodeConverters
{
    CodeConverterBase* inputCharConverter;
    CodeConverterBase* outputCharConverter;
    CodeConverterBase* inputWcharConverter;
    CodeConverterBase* outputWcharConverter;




    bool equal(const CodeConverters& other) const
    {
        return inputCharConverter == other.inputCharConverter &&
            outputCharConverter == other.outputCharConverter &&
            inputWcharConverter == other.inputWcharConverter &&
            outputWcharConverter == other.outputWcharConverter;
    }
};

}
# 29 "../../include/OB/Stream.h" 2
# 1 "../../include/OB/Hashtable.h" 1
# 30 "../../include/OB/Stream.h" 2

namespace OB
{



class TypeCodeCache;




class InputStreamImpl
{



    InputStreamImpl(const InputStreamImpl&);
    InputStreamImpl& operator=(const InputStreamImpl&);

protected:

    ORBInstance_var orbInstance_;
    OCI::BufferImpl* buf_;
    CORBA::Octet* origCur_;
    bool origSwap_;
    bool swap_;
    CodeConverters codeConverters_;
    CORBA::UShort GIOPVersion_;
    ValueReader_var valueReader_;
    bool charConversionRequired_;
    bool wCharConversionRequired_;
    TypeCodeCache* cache_;







    bool charReaderRequired_;
    bool charReaderOrConversionRequired_;

    struct OctetPtrHasher
    {
        static CORBA::ULong
        hash(const CORBA::Octet* k)
        {
            return (CORBA::ULong)((long)k);
        }

        static bool
        comp(const CORBA::Octet* k1, const CORBA::Octet* k2)
        {
            return k1 == k2;
        }
    };
    typedef Hashtable<const CORBA::Octet*, CORBA::TypeCode_ptr,
        OctetPtrHasher> ReadTCHistory;

    CORBA::TypeCode_ptr checkCache(const char*, CORBA::Octet*, CORBA::ULong);

    CORBA::TypeCode_ptr readTypeCodeImpl(ReadTCHistory&, bool = false);
    ValueReader_ptr valueReader();
    void checkChunk();

    friend class OutputStreamImpl;

public:

    InputStreamImpl(OCI::BufferImpl*, CORBA::ULong, bool,
                    const CodeConverters* = 0, CORBA::UShort = 0);
    virtual ~InputStreamImpl();

    void _OB_codeConverters(const CodeConverters*, CORBA::UShort);
    const CodeConverters* _OB_codeConverters()
    { return &codeConverters_; }

    OCI::BufferImpl* _OB_bufferImpl() { return buf_; }

    CORBA::ULong _OB_pos() { return buf_ -> pos(); }
    void _OB_pos(CORBA::ULong pos) { buf_ -> pos(pos); }

    bool _OB_swap() const { return swap_; }
    void _OB_swap(bool s) { swap_ = s; }

    void _OB_reset();

    void _OB_skip(CORBA::ULong length)
    {
        register CORBA::Octet* newCur = buf_ -> cur_ + length;
        if(newCur > buf_ -> last_)
            throw CORBA::MARSHAL(MinorReadOverflow, CORBA::COMPLETED_NO);
        buf_ -> cur_ = newCur;
    }

    void _OB_skipAlign(CORBA::ULong align)
    {
        register CORBA::Octet* newCur = buf_ -> cur_ + align - 1;
        newCur -= (unsigned long)newCur % align;
        if(newCur > buf_ -> last_)
            throw CORBA::MARSHAL(MinorReadOverflow, CORBA::COMPLETED_NO);
        buf_ -> cur_ = newCur;
    }

    void _OB_ORBInstance(ORBInstance_ptr);
    ORBInstance_ptr _OB_ORBInstance();

    void _OB_readEndian();

    CORBA::Long _OB_readLongUnchecked();

    void _OB_beginValue();
    void _OB_endValue();
    void _OB_remarshalValue(CORBA::TypeCode_ptr, OutputStreamImpl*);

    CORBA::DataInputStream* _OB_createDataInputStream();

    CORBA::Boolean read_boolean()
    {
        if(valueReader_.in())
            checkChunk();

        if(buf_ -> cur_ > buf_ -> last_)
            throw CORBA::MARSHAL(MinorReadBooleanOverflow,
                                 CORBA::COMPLETED_NO);

        CORBA::Boolean val = (*(buf_ -> cur_)++) ? true : false;
        return val;
    }

    CORBA::Octet read_octet()
    {
        if(valueReader_.in())
            checkChunk();

        if(buf_ -> cur_ > buf_ -> last_)
            throw CORBA::MARSHAL(MinorReadOctetOverflow, CORBA::COMPLETED_NO);

        CORBA::Octet val = *(buf_ -> cur_)++;
        return val;
    }

    CORBA::Short read_short();
    CORBA::UShort read_ushort();
    CORBA::Long read_long();
    CORBA::ULong read_ulong();
    CORBA::LongLong read_longlong();
    CORBA::ULongLong read_ulonglong();
    CORBA::Float read_float();
    CORBA::Double read_double();
    CORBA::LongDouble read_longdouble();
    CORBA::Char read_char();
    void read_char_array(CORBA::Char*, CORBA::ULong);
    CORBA::WChar read_wchar();
    char* read_string();
    wchar_t* read_wstring();
    CORBA::Object_ptr read_Object();
    CORBA::TypeCode_ptr read_TypeCode();
    CORBA::Principal_ptr read_Principal();
    CORBA::Any* read_any();
    void read_any(CORBA::Any&);
    CORBA::Fixed read_fixed();





    CORBA::ValueBase* read_value(const char* = 0);

    void read_value(CORBA::Any&, CORBA::TypeCode_ptr);

    CORBA::AbstractBase_ptr read_abstract_interface();

    void read_boolean_array(CORBA::Boolean* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 207), abort()) );

            if(valueReader_.in())
                checkChunk();

            register CORBA::Octet* nextCur = buf_ -> cur_ + length;
            if(nextCur > buf_ -> last_)
                throw CORBA::MARSHAL(MinorReadBooleanArrayOverflow,
                                     CORBA::COMPLETED_NO);

            memcpy(value, buf_ -> cur_, length);
            buf_ -> cur_ = nextCur;
        }
    }

    void read_octet_array(CORBA::Octet* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 226), abort()) );

            if(valueReader_.in())
                checkChunk();

            register CORBA::Octet* nextCur = buf_ -> cur_ + length;
            if(nextCur > buf_ -> last_)
                throw CORBA::MARSHAL(MinorReadOctetArrayOverflow,
                                     CORBA::COMPLETED_NO);

            memcpy(value, buf_ -> cur_, length);
            buf_ -> cur_ = nextCur;
        }
    }

    void read_wchar_array(CORBA::WChar*, CORBA::ULong);
    void read_short_array(CORBA::Short*, CORBA::ULong);
    void read_ushort_array(CORBA::UShort*, CORBA::ULong);
    void read_long_array(CORBA::Long*, CORBA::ULong);
    void read_ulong_array(CORBA::ULong*, CORBA::ULong);
    void read_longlong_array(CORBA::LongLong*, CORBA::ULong);
    void read_ulonglong_array(CORBA::ULongLong*, CORBA::ULong);
    void read_float_array(CORBA::Float*, CORBA::ULong);
    void read_double_array(CORBA::Double*, CORBA::ULong);
    void read_longdouble_array(CORBA::LongDouble*, CORBA::ULong);

    void read_any_NoTypeCode(CORBA::Any&, CORBA::TypeCode_ptr);
};




class OutputStreamImpl
{



    OutputStreamImpl(const OutputStreamImpl&);
    OutputStreamImpl& operator=(const OutputStreamImpl&);

protected:

    OCI::BufferImpl* buf_;
    CodeConverters codeConverters_;
    CORBA::UShort GIOPVersion_;
    bool charConversionRequired_;
    bool wCharConversionRequired_;







    bool charWriterRequired_;
    bool charWriterOrConversionRequired_;




    ValueWriter_var valueWriter_;





    CORBA::ULong alignNext_;

    struct TypeCodePtrHasher
    {
        static CORBA::ULong
        hash(const CORBA::TypeCode_ptr k)
        {
            return (CORBA::ULong)((long)k);
        }

        static bool
        comp(const CORBA::TypeCode_ptr k1, const CORBA::TypeCode_ptr k2)
        {
            return k1 == k2;
        }
    };
    typedef Hashtable<CORBA::TypeCode_ptr, CORBA::Long,
        TypeCodePtrHasher> WriteTCHistory;

    CORBA::ULong writeGap();
    void writeLength(CORBA::ULong);
    void writeTypeCodeImpl(CORBA::TypeCode_ptr, WriteTCHistory&);

    void checkBeginChunk();
    ValueWriter_ptr valueWriter();

    void addCapacity(CORBA::ULong size)
    {
# 331 "../../include/OB/Stream.h"
        if(alignNext_ > 0)
        {
            CORBA::ULong align = alignNext_;
            alignNext_ = 0;
            addCapacity(size, align);
        }
        else
        {





            if(buf_ -> cur_ == buf_ -> last_ && valueWriter_.in())
                checkBeginChunk();




            CORBA::ULong len = buf_ -> cur_ - buf_ -> data_ + size;
            if(len > buf_ -> len_)
                buf_ -> realloc(len);
        }
    }

    void addCapacity(CORBA::ULong size, CORBA::ULong align)
    {
        (static_cast<void> ((align > 0) ? 0 : (__assert_fail ("align > 0", "../../include/OB/Stream.h", 358, __PRETTY_FUNCTION__), 0)));






        if(buf_ -> cur_ == buf_ -> last_ && valueWriter_.in())
            checkBeginChunk();




        if(alignNext_ > 0)
        {
            align = (alignNext_ > align ? alignNext_ : align);
            alignNext_ = 0;
        }




        register CORBA::Octet* newCur = buf_ -> cur_ + align - 1;
        newCur -= CORBA::ULong((long)newCur) % align;
        buf_ -> cur_ = newCur;




        if(newCur + size > buf_ -> last_)
            buf_ -> realloc(newCur - buf_ -> data_ + size);
    }

    friend class InputStreamImpl;

public:

    OutputStreamImpl(OCI::BufferImpl*, const CodeConverters* = 0,
                     CORBA::UShort = 0);
    virtual ~OutputStreamImpl();

    OCI::BufferImpl* _OB_bufferImpl() { return buf_; }

    CORBA::ULong _OB_pos() { return buf_ -> pos(); }
    void _OB_pos(CORBA::ULong pos) { buf_ -> pos(pos); }

    void _OB_align(CORBA::ULong n)
    {
        if(CORBA::ULong((long)(buf_ -> cur_)) % n != 0)
            addCapacity(0, n);
    }

    void _OB_alignNext(CORBA::ULong n)
    {
        alignNext_ = n;
    }

    void _OB_beginValue(CORBA::Long, const OB::StrSeq< int >&, bool);
    void _OB_endValue();

    CORBA::DataOutputStream* _OB_createDataOutputStream();

    void _OB_writeEndian() { write_boolean(Endian); }

    InputStream_ptr create_input_stream();

    void write_boolean(CORBA::Boolean value)
    {
        addCapacity(1);
        *(buf_ -> cur_) = value;
        buf_ -> cur_ += 1;
    }

    void write_octet(CORBA::Octet value)
    {
        addCapacity(1);
        *(buf_ -> cur_) = value;
        buf_ -> cur_ += 1;
    }

    void write_short(CORBA::Short value)
    {
        addCapacity(2, 2);
        *(CORBA::Short*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 2;
    }

    void write_ushort(CORBA::UShort value)
    {
        addCapacity(2, 2);
        *(CORBA::UShort*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 2;
    }

    void write_long(CORBA::Long value)
    {
        addCapacity(4, 4);
        *(CORBA::Long*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 4;
    }

    void write_ulong(CORBA::ULong value)
    {
        addCapacity(4, 4);
        *(CORBA::ULong*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 4;
    }

    void write_longlong(CORBA::LongLong value)
    {
        addCapacity(8, 8);
        *(CORBA::LongLong*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 8;
    }

    void write_ulonglong(CORBA::ULongLong value)
    {
        addCapacity(8, 8);
        *(CORBA::ULongLong*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 8;
    }

    void write_float(CORBA::Float value)
    {
        addCapacity(4, 4);
        *(CORBA::Float*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 4;
    }

    void write_double(CORBA::Double value)
    {
        addCapacity(8, 8);
        *(CORBA::Double*)(buf_ -> cur_) = value;
        buf_ -> cur_ += 8;
    }

    void write_longdouble(CORBA::LongDouble);
    void write_char(CORBA::Char);
    void write_char_array(const CORBA::Char*, CORBA::ULong);
    void write_wchar(CORBA::WChar);
    void write_string(const char*);
    void write_wstring(const wchar_t*);
    void write_Object(CORBA::Object_ptr);
    void write_TypeCode(CORBA::TypeCode_ptr);
    void write_Principal(CORBA::Principal_ptr);
    void write_any(const CORBA::Any&);
    void write_fixed(const CORBA::Fixed&);





    void write_value(CORBA::ValueBase*, const char* = 0);

    void write_abstract_interface(CORBA::AbstractBase_ptr);

    void write_boolean_array(const CORBA::Boolean* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 518), abort()) );
            addCapacity(length);

            memcpy(buf_ -> cur_, value, length);
            buf_ -> cur_ += length;







        }
    }

    void write_octet_array(const CORBA::Octet* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 537), abort()) );
            addCapacity(length);
            memcpy(buf_ -> cur_, value, length);
            buf_ -> cur_ += length;
        }
    }

    void write_short_array(const CORBA::Short* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 548), abort()) );
            CORBA::ULong arrsize = length * 2;
            addCapacity(arrsize, 2);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_ushort_array(const CORBA::UShort* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 560), abort()) );
            CORBA::ULong arrsize = length * 2;
            addCapacity(arrsize, 2);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_long_array(const CORBA::Long* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 572), abort()) );
            CORBA::ULong arrsize = length * 4;
            addCapacity(arrsize, 4);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_ulong_array(const CORBA::ULong* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 584), abort()) );
            CORBA::ULong arrsize = length * 4;
            addCapacity(arrsize, 4);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_longlong_array(const CORBA::LongLong* value,
                              CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 597), abort()) );
            CORBA::ULong arrsize = length * 8;
            addCapacity(arrsize, 8);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_ulonglong_array(const CORBA::ULongLong* value,
                               CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 610), abort()) );
            CORBA::ULong arrsize = length * 8;
            addCapacity(arrsize, 8);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_float_array(const CORBA::Float* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 622), abort()) );
            CORBA::ULong arrsize = length * 4;
            addCapacity(arrsize, 4);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_double_array(const CORBA::Double* value, CORBA::ULong length)
    {
        if(length)
        {
            ( (int)(value != 0) ? (void)0 : (OB::NCA(NCANullValue, "value != 0", "../../include/OB/Stream.h", 634), abort()) );
            CORBA::ULong arrsize = length * 8;
            addCapacity(arrsize, 8);
            memcpy(buf_ -> cur_, value, arrsize);
            buf_ -> cur_ += arrsize;
        }
    }

    void write_wchar_array(const CORBA::WChar*, CORBA::ULong);
    void write_longdouble_array(const CORBA::LongDouble*, CORBA::ULong);

    void write_any_NoTypeCode(const CORBA::Any&);
    void write_InputStreamImpl(InputStreamImpl*, CORBA::TypeCode_ptr);
};




class InputStream : public InputStreamImpl, public SimpleRefCount
{
    OCI::Buffer_var bufVar_;

public:

    InputStream(OCI::Buffer_ptr, CORBA::ULong, bool, const CodeConverters* = 0,
                CORBA::UShort = 0);
    virtual ~InputStream();

    static inline InputStream_ptr _duplicate(InputStream_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline InputStream_ptr _nil()
    { return 0; }

    InputStream_ptr _OB_clone();
    OCI::Buffer_ptr _OB_buffer_nodup() { return bufVar_.in(); }
    OCI::Buffer_ptr _OB_buffer_retn() { return bufVar_._retn(); }
};




class OutputStream : public OutputStreamImpl, public SimpleRefCount
{
    OCI::Buffer_var bufVar_;

public:

    OutputStream(OCI::Buffer_ptr, const CodeConverters* = 0,
                 CORBA::UShort = 0);
    virtual ~OutputStream();

    static inline OutputStream_ptr _duplicate(OutputStream_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline OutputStream_ptr _nil()
    { return 0; }

    OCI::Buffer_ptr _OB_buffer_nodup() { return bufVar_.in(); }
    OCI::Buffer_ptr _OB_buffer_retn() { return bufVar_._retn(); }
};

}

namespace CORBA
{

inline void
release(OB::InputStream_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::InputStream_ptr p)
{
    return p == 0;
}

inline void
release(OB::OutputStream_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::OutputStream_ptr p)
{
    return p == 0;
}

}
# 26 "../../include/OB/CORBAClient.h" 2
# 15 "../../include/OB/CORBAServer.h" 2

# 1 "../../include/OB/PortableServer.h" 1
# 27 "../../include/OB/PortableServer.h"
# 1 "../../include/OB/POACommon.h" 1
# 27 "../../include/OB/POACommon.h"
# 1 "../../include/OB/POACommon_fwd.h" 1
# 18 "../../include/OB/POACommon_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POACommon_fwd.h" 2
# 39 "../../include/OB/POACommon_fwd.h"
namespace PortableServer
{

}

namespace PortableServer
{

}
# 28 "../../include/OB/POACommon.h" 2
# 39 "../../include/OB/POACommon.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




typedef OBNative_PortableServer::Servant Servant;




class OBUnique_ObjectId { };

typedef OB::FixSeq< CORBA::Octet, OBUnique_ObjectId > ObjectId;
typedef OB::SeqVar< OB::FixSeq< CORBA::Octet, OBUnique_ObjectId > > ObjectId_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Octet, OBUnique_ObjectId > > ObjectId_out;
          extern OB::TypeCodeConst _tc_ObjectId;

struct OBInfo_ObjectId : public OB::ConstructedInfo
{
    OBInfo_ObjectId() { }

    virtual void free(void* p) const
    {
        delete (ObjectId*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ObjectId(*(const ObjectId*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




struct ForwardRequest : public CORBA::UserException
{
    ForwardRequest() { }
    ForwardRequest(const ForwardRequest&);
    ForwardRequest& operator=(const ForwardRequest&);

    static ForwardRequest* _downcast(CORBA::Exception*);
    static const ForwardRequest* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    CORBA::Object_var forward_reference;

    ForwardRequest(CORBA::Object_ptr);

    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ForwardRequest&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ForwardRequest;

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




void operator<<=(CORBA::Any&, PortableServer::ObjectId*);
void operator<<=(CORBA::Any&, const PortableServer::ObjectId&);
CORBA::Boolean operator>>=(const CORBA::Any&, const PortableServer::ObjectId*&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ObjectId* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const PortableServer::ObjectId& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const PortableServer::ObjectId*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableServer::ForwardRequest*);
void operator<<=(CORBA::Any&, const PortableServer::ForwardRequest&);
CORBA::Boolean operator>>=(const CORBA::Any&, const PortableServer::ForwardRequest*&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ForwardRequest* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const PortableServer::ForwardRequest& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const PortableServer::ForwardRequest*& val)
{
    return any.in() >>= val;
}
# 28 "../../include/OB/PortableServer.h" 2
# 1 "../../include/OB/POAServantLocator.h" 1
# 27 "../../include/OB/POAServantLocator.h"
# 1 "../../include/OB/POAServantManager.h" 1
# 27 "../../include/OB/POAServantManager.h"
# 1 "../../include/OB/POAServantManager_fwd.h" 1
# 18 "../../include/OB/POAServantManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POAServantManager_fwd.h" 2
# 39 "../../include/OB/POAServantManager_fwd.h"
namespace PortableServer
{

class ServantManager;
typedef ServantManager* ServantManager_ptr;
typedef ServantManager* ServantManagerRef;

}

void OBDuplicate(PortableServer::ServantManager_ptr);
void OBRelease(PortableServer::ServantManager_ptr);

void OBMarshal(PortableServer::ServantManager_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::ServantManager_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< ServantManager > ServantManager_var;
typedef OB::ObjOut< ServantManager > ServantManager_out;

}
# 28 "../../include/OB/POAServantManager.h" 2
# 39 "../../include/OB/POAServantManager.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




class ServantManager : virtual public CORBA::Object
{
    ServantManager(const ServantManager&);
    void operator=(const ServantManager&);

protected:

    static const char* ids_[];

public:

    ServantManager() { }
    virtual ~ServantManager() { }

    typedef ServantManager_ptr _ptr_type;
    typedef ServantManager_var _var_type;

    static inline ServantManager_ptr
    _duplicate(ServantManager_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ServantManager_ptr
    _nil()
    {
        return 0;
    }

    static ServantManager_ptr _narrow(CORBA::Object_ptr);

    static ServantManager_ptr _narrow(CORBA::AbstractBase_ptr);

};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




namespace CORBA
{

inline void
release(::PortableServer::ServantManager_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::ServantManager_ptr p)
{
    return p == 0;
}

}
# 28 "../../include/OB/POAServantLocator.h" 2
# 1 "../../include/OB/POACommon.h" 1
# 29 "../../include/OB/POAServantLocator.h" 2
# 1 "../../include/OB/POAServantLocator_fwd.h" 1
# 18 "../../include/OB/POAServantLocator_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POAServantLocator_fwd.h" 2
# 39 "../../include/OB/POAServantLocator_fwd.h"
namespace PortableServer
{

class POA;
typedef POA* POA_ptr;
typedef POA* POARef;

class ServantLocator;
typedef ServantLocator* ServantLocator_ptr;
typedef ServantLocator* ServantLocatorRef;

}

void OBDuplicate(PortableServer::POA_ptr);
void OBRelease(PortableServer::POA_ptr);

void OBMarshal(PortableServer::POA_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::POA_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::ServantLocator_ptr);
void OBRelease(PortableServer::ServantLocator_ptr);

void OBMarshal(PortableServer::ServantLocator_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::ServantLocator_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< POA > POA_var;
typedef OB::ObjOut< POA > POA_out;

typedef OB::ObjVar< ServantLocator > ServantLocator_var;
typedef OB::ObjOut< ServantLocator > ServantLocator_out;

}
# 30 "../../include/OB/POAServantLocator.h" 2
# 41 "../../include/OB/POAServantLocator.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




class ServantLocator : virtual public ::PortableServer::ServantManager
{
    ServantLocator(const ServantLocator&);
    void operator=(const ServantLocator&);

protected:

    static const char* ids_[];

public:

    ServantLocator() { }
    virtual ~ServantLocator() { }

    typedef ServantLocator_ptr _ptr_type;
    typedef ServantLocator_var _var_type;

    static inline ServantLocator_ptr
    _duplicate(ServantLocator_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ServantLocator_ptr
    _nil()
    {
        return 0;
    }

    static ServantLocator_ptr _narrow(CORBA::Object_ptr);

    static ServantLocator_ptr _narrow(CORBA::AbstractBase_ptr);





    typedef OBNative_PortableServer::ServantLocator::Cookie Cookie;




    virtual Servant preinvoke(const ObjectId& oid,
                              POA_ptr adapter,
                              const char* operation,
                              Cookie& the_cookie) = 0;




    virtual void postinvoke(const ObjectId& oid,
                            POA_ptr adapter,
                            const char* operation,
                            Cookie the_cookie,
                            Servant the_servant) = 0;
};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




namespace CORBA
{

inline void
release(::PortableServer::ServantLocator_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::ServantLocator_ptr p)
{
    return p == 0;
}

}
# 29 "../../include/OB/PortableServer.h" 2
# 1 "../../include/OB/POAServantActivator.h" 1
# 27 "../../include/OB/POAServantActivator.h"
# 1 "../../include/OB/POAServantManager.h" 1
# 28 "../../include/OB/POAServantActivator.h" 2
# 1 "../../include/OB/POACommon.h" 1
# 29 "../../include/OB/POAServantActivator.h" 2
# 1 "../../include/OB/POAServantActivator_fwd.h" 1
# 18 "../../include/OB/POAServantActivator_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POAServantActivator_fwd.h" 2
# 39 "../../include/OB/POAServantActivator_fwd.h"
namespace PortableServer
{

class POA;
typedef POA* POA_ptr;
typedef POA* POARef;

class ServantActivator;
typedef ServantActivator* ServantActivator_ptr;
typedef ServantActivator* ServantActivatorRef;

}

void OBDuplicate(PortableServer::POA_ptr);
void OBRelease(PortableServer::POA_ptr);

void OBMarshal(PortableServer::POA_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::POA_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::ServantActivator_ptr);
void OBRelease(PortableServer::ServantActivator_ptr);

void OBMarshal(PortableServer::ServantActivator_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::ServantActivator_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< POA > POA_var;
typedef OB::ObjOut< POA > POA_out;

typedef OB::ObjVar< ServantActivator > ServantActivator_var;
typedef OB::ObjOut< ServantActivator > ServantActivator_out;

}
# 30 "../../include/OB/POAServantActivator.h" 2
# 41 "../../include/OB/POAServantActivator.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




class ServantActivator : virtual public ::PortableServer::ServantManager
{
    ServantActivator(const ServantActivator&);
    void operator=(const ServantActivator&);

protected:

    static const char* ids_[];

public:

    ServantActivator() { }
    virtual ~ServantActivator() { }

    typedef ServantActivator_ptr _ptr_type;
    typedef ServantActivator_var _var_type;

    static inline ServantActivator_ptr
    _duplicate(ServantActivator_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ServantActivator_ptr
    _nil()
    {
        return 0;
    }

    static ServantActivator_ptr _narrow(CORBA::Object_ptr);

    static ServantActivator_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual Servant incarnate(const ObjectId& oid,
                              POA_ptr adapter) = 0;




    virtual void etherealize(const ObjectId& oid,
                             POA_ptr adapter,
                             Servant serv,
                             CORBA::Boolean cleanup_in_progress,
                             CORBA::Boolean remaining_activations) = 0;
};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




namespace CORBA
{

inline void
release(::PortableServer::ServantActivator_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::ServantActivator_ptr p)
{
    return p == 0;
}

}
# 30 "../../include/OB/PortableServer.h" 2
# 1 "../../include/OB/POAAdapterActivator.h" 1
# 27 "../../include/OB/POAAdapterActivator.h"
# 1 "../../include/OB/POAAdapterActivator_fwd.h" 1
# 18 "../../include/OB/POAAdapterActivator_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POAAdapterActivator_fwd.h" 2
# 39 "../../include/OB/POAAdapterActivator_fwd.h"
namespace PortableServer
{

class POA;
typedef POA* POA_ptr;
typedef POA* POARef;

          extern OB::TypeCodeConst _tc_POA;

class AdapterActivator;
typedef AdapterActivator* AdapterActivator_ptr;
typedef AdapterActivator* AdapterActivatorRef;

          extern OB::TypeCodeConst _tc_AdapterActivator;

}

void OBDuplicate(PortableServer::POA_ptr);
void OBRelease(PortableServer::POA_ptr);

void OBMarshal(PortableServer::POA_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::POA_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::AdapterActivator_ptr);
void OBRelease(PortableServer::AdapterActivator_ptr);

void OBMarshal(PortableServer::AdapterActivator_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::AdapterActivator_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< POA > POA_var;
typedef OB::ObjOut< POA > POA_out;

typedef OB::ObjVar< AdapterActivator > AdapterActivator_var;
typedef OB::ObjOut< AdapterActivator > AdapterActivator_out;

}
# 28 "../../include/OB/POAAdapterActivator.h" 2
# 39 "../../include/OB/POAAdapterActivator.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




class AdapterActivator : virtual public CORBA::Object
{
    AdapterActivator(const AdapterActivator&);
    void operator=(const AdapterActivator&);

protected:

    static const char* ids_[];

public:

    AdapterActivator() { }
    virtual ~AdapterActivator() { }

    typedef AdapterActivator_ptr _ptr_type;
    typedef AdapterActivator_var _var_type;

    static inline AdapterActivator_ptr
    _duplicate(AdapterActivator_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AdapterActivator_ptr
    _nil()
    {
        return 0;
    }

    static AdapterActivator_ptr _narrow(CORBA::Object_ptr);

    static AdapterActivator_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Boolean unknown_adapter(POA_ptr parent,
                                           const char* name) = 0;
};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




namespace CORBA
{

inline void
release(::PortableServer::AdapterActivator_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::AdapterActivator_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::AdapterActivator_ptr*);
void operator<<=(CORBA::Any&, PortableServer::AdapterActivator_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::AdapterActivator_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::AdapterActivator_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::AdapterActivator_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::AdapterActivator_ptr& val)
{
    return any.in() >>= val;
}
# 31 "../../include/OB/PortableServer.h" 2
# 1 "../../include/OB/POAInterface.h" 1
# 27 "../../include/OB/POAInterface.h"
# 1 "../../include/OB/POAPolicies.h" 1
# 27 "../../include/OB/POAPolicies.h"
# 1 "../../include/OB/Policy.h" 1
# 27 "../../include/OB/Policy.h"
# 1 "../../include/OB/Policy_fwd.h" 1
# 28 "../../include/OB/Policy.h" 2
# 39 "../../include/OB/Policy.h"
namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




typedef CORBA::ULong PolicyType;
typedef CORBA::ULong_out PolicyType_out;
          extern OB::TypeCodeConst _tc_PolicyType;




class OBUnique_PolicyTypeSeq { };

typedef OB::FixSeq< CORBA::ULong, OBUnique_PolicyTypeSeq > PolicyTypeSeq;
typedef OB::SeqVar< OB::FixSeq< CORBA::ULong, OBUnique_PolicyTypeSeq > > PolicyTypeSeq_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::ULong, OBUnique_PolicyTypeSeq > > PolicyTypeSeq_out;
          extern OB::TypeCodeConst _tc_PolicyTypeSeq;

struct OBInfo_PolicyTypeSeq : public OB::ConstructedInfo
{
    OBInfo_PolicyTypeSeq() { }

    virtual void free(void* p) const
    {
        delete (PolicyTypeSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new PolicyTypeSeq(*(const PolicyTypeSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class Policy : virtual public CORBA::Object
{
    Policy(const Policy&);
    void operator=(const Policy&);

protected:

    static const char* ids_[];

public:

    Policy() { }
    virtual ~Policy() { }

    typedef Policy_ptr _ptr_type;
    typedef Policy_var _var_type;

    static inline Policy_ptr
    _duplicate(Policy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Policy_ptr
    _nil()
    {
        return 0;
    }

    static Policy_ptr _narrow(CORBA::Object_ptr);

    static Policy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PolicyType policy_type() = 0;




    virtual Policy_ptr copy() = 0;




    virtual void destroy() = 0;
};




class OBUnique_PolicyList { };

typedef OB::ObjSeq< Policy, OBUnique_PolicyList > PolicyList;
typedef OB::SeqVar< OB::ObjSeq< Policy, OBUnique_PolicyList > > PolicyList_var;
typedef OB::SeqOut< OB::ObjSeq< Policy, OBUnique_PolicyList > > PolicyList_out;
          extern OB::TypeCodeConst _tc_PolicyList;

struct OBInfo_PolicyList : public OB::ConstructedInfo
{
    OBInfo_PolicyList() { }

    virtual void free(void* p) const
    {
        delete (PolicyList*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new PolicyList(*(const PolicyList*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef CORBA::Short PolicyErrorCode;
typedef CORBA::Short_out PolicyErrorCode_out;
          extern OB::TypeCodeConst _tc_PolicyErrorCode;




const PolicyErrorCode BAD_POLICY = 0;




const PolicyErrorCode UNSUPPORTED_POLICY = 1;




const PolicyErrorCode BAD_POLICY_TYPE = 2;




const PolicyErrorCode BAD_POLICY_VALUE = 3;




const PolicyErrorCode UNSUPPORTED_POLICY_VALUE = 4;




struct PolicyError : public CORBA::UserException
{



    PolicyError() { }

    PolicyError(const PolicyError&);
    PolicyError& operator=(const PolicyError&);

    static PolicyError* _downcast(CORBA::Exception*);
    static const PolicyError* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    PolicyErrorCode reason;

    PolicyError(PolicyErrorCode);

    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(PolicyError&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_PolicyError;




class PolicyManager : virtual public CORBA::Object
{
    PolicyManager(const PolicyManager&);
    void operator=(const PolicyManager&);

protected:

    static const char* ids_[];

public:

    PolicyManager() { }
    virtual ~PolicyManager() { }

    typedef PolicyManager_ptr _ptr_type;
    typedef PolicyManager_var _var_type;

    static inline PolicyManager_ptr
    _duplicate(PolicyManager_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline PolicyManager_ptr
    _nil()
    {
        return 0;
    }

    static PolicyManager_ptr _narrow(CORBA::Object_ptr);

    static PolicyManager_ptr _narrow(CORBA::AbstractBase_ptr);





    struct InvalidPolicies : public CORBA::UserException
    {
        InvalidPolicies() { }
        InvalidPolicies(const InvalidPolicies&);
        InvalidPolicies& operator=(const InvalidPolicies&);

        static InvalidPolicies* _downcast(CORBA::Exception*);
        static const InvalidPolicies* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        class OBUnique_indices { };
        typedef OB::FixSeq< CORBA::UShort, OBUnique_indices > _indices_seq;
        _indices_seq indices;

        InvalidPolicies(const OB::FixSeq< CORBA::UShort, OBUnique_indices >&);

        virtual void _OB_marshal(OB::OutputStreamImpl*) const;
        static void _OB_unmarshal(InvalidPolicies&, OB::InputStreamImpl*);
    };

              static OB::TypeCodeConst _tc_InvalidPolicies;




    virtual Policy_ptr get_policy_override(PolicyType t) = 0;




    virtual PolicyList* get_specific_policy_overrides(const PolicyTypeSeq& ts) = 0;




    virtual PolicyList* get_all_policy_overrides() = 0;




    virtual void add_policy_overrides(const PolicyList& policies) = 0;




    virtual void remove_policy_overrides(const PolicyTypeSeq& ts) = 0;




    virtual void replace_all_policy_overrides(const PolicyList& policies) = 0;
};

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::PolicyTypeSeq*);
void operator<<=(CORBA::Any&, const CORBA::PolicyTypeSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::PolicyTypeSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::PolicyTypeSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::PolicyTypeSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::PolicyTypeSeq*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::Policy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::Policy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::Policy_ptr*);
void operator<<=(CORBA::Any&, CORBA::Policy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::Policy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Policy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::Policy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::Policy_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::PolicyList*);
void operator<<=(CORBA::Any&, const CORBA::PolicyList&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::PolicyList*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::PolicyList* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::PolicyList& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::PolicyList*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::PolicyError*);
void operator<<=(CORBA::Any&, const CORBA::PolicyError&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::PolicyError*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::PolicyError* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::PolicyError& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::PolicyError*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::PolicyManager_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::PolicyManager_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::PolicyManager_ptr*);
void operator<<=(CORBA::Any&, CORBA::PolicyManager_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::PolicyManager_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::PolicyManager_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::PolicyManager_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::PolicyManager_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::PolicyManager::InvalidPolicies*);
void operator<<=(CORBA::Any&, const CORBA::PolicyManager::InvalidPolicies&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::PolicyManager::InvalidPolicies*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::PolicyManager::InvalidPolicies* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::PolicyManager::InvalidPolicies& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::PolicyManager::InvalidPolicies*& val)
{
    return any.in() >>= val;
}
# 28 "../../include/OB/POAPolicies.h" 2
# 1 "../../include/OB/POAPolicies_fwd.h" 1
# 18 "../../include/OB/POAPolicies_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POAPolicies_fwd.h" 2
# 39 "../../include/OB/POAPolicies_fwd.h"
namespace PortableServer
{

class ThreadPolicy;
typedef ThreadPolicy* ThreadPolicy_ptr;
typedef ThreadPolicy* ThreadPolicyRef;

          extern OB::TypeCodeConst _tc_ThreadPolicy;

class LifespanPolicy;
typedef LifespanPolicy* LifespanPolicy_ptr;
typedef LifespanPolicy* LifespanPolicyRef;

          extern OB::TypeCodeConst _tc_LifespanPolicy;

class IdUniquenessPolicy;
typedef IdUniquenessPolicy* IdUniquenessPolicy_ptr;
typedef IdUniquenessPolicy* IdUniquenessPolicyRef;

          extern OB::TypeCodeConst _tc_IdUniquenessPolicy;

class IdAssignmentPolicy;
typedef IdAssignmentPolicy* IdAssignmentPolicy_ptr;
typedef IdAssignmentPolicy* IdAssignmentPolicyRef;

          extern OB::TypeCodeConst _tc_IdAssignmentPolicy;

class ImplicitActivationPolicy;
typedef ImplicitActivationPolicy* ImplicitActivationPolicy_ptr;
typedef ImplicitActivationPolicy* ImplicitActivationPolicyRef;

          extern OB::TypeCodeConst _tc_ImplicitActivationPolicy;

class ServantRetentionPolicy;
typedef ServantRetentionPolicy* ServantRetentionPolicy_ptr;
typedef ServantRetentionPolicy* ServantRetentionPolicyRef;

          extern OB::TypeCodeConst _tc_ServantRetentionPolicy;

class RequestProcessingPolicy;
typedef RequestProcessingPolicy* RequestProcessingPolicy_ptr;
typedef RequestProcessingPolicy* RequestProcessingPolicyRef;

          extern OB::TypeCodeConst _tc_RequestProcessingPolicy;

}

void OBDuplicate(PortableServer::ThreadPolicy_ptr);
void OBRelease(PortableServer::ThreadPolicy_ptr);

void OBMarshal(PortableServer::ThreadPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::ThreadPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::LifespanPolicy_ptr);
void OBRelease(PortableServer::LifespanPolicy_ptr);

void OBMarshal(PortableServer::LifespanPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::LifespanPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::IdUniquenessPolicy_ptr);
void OBRelease(PortableServer::IdUniquenessPolicy_ptr);

void OBMarshal(PortableServer::IdUniquenessPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::IdUniquenessPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::IdAssignmentPolicy_ptr);
void OBRelease(PortableServer::IdAssignmentPolicy_ptr);

void OBMarshal(PortableServer::IdAssignmentPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::IdAssignmentPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::ImplicitActivationPolicy_ptr);
void OBRelease(PortableServer::ImplicitActivationPolicy_ptr);

void OBMarshal(PortableServer::ImplicitActivationPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::ImplicitActivationPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::ServantRetentionPolicy_ptr);
void OBRelease(PortableServer::ServantRetentionPolicy_ptr);

void OBMarshal(PortableServer::ServantRetentionPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::ServantRetentionPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::RequestProcessingPolicy_ptr);
void OBRelease(PortableServer::RequestProcessingPolicy_ptr);

void OBMarshal(PortableServer::RequestProcessingPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::RequestProcessingPolicy_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< ThreadPolicy > ThreadPolicy_var;
typedef OB::ObjOut< ThreadPolicy > ThreadPolicy_out;

typedef OB::ObjVar< LifespanPolicy > LifespanPolicy_var;
typedef OB::ObjOut< LifespanPolicy > LifespanPolicy_out;

typedef OB::ObjVar< IdUniquenessPolicy > IdUniquenessPolicy_var;
typedef OB::ObjOut< IdUniquenessPolicy > IdUniquenessPolicy_out;

typedef OB::ObjVar< IdAssignmentPolicy > IdAssignmentPolicy_var;
typedef OB::ObjOut< IdAssignmentPolicy > IdAssignmentPolicy_out;

typedef OB::ObjVar< ImplicitActivationPolicy > ImplicitActivationPolicy_var;
typedef OB::ObjOut< ImplicitActivationPolicy > ImplicitActivationPolicy_out;

typedef OB::ObjVar< ServantRetentionPolicy > ServantRetentionPolicy_var;
typedef OB::ObjOut< ServantRetentionPolicy > ServantRetentionPolicy_out;

typedef OB::ObjVar< RequestProcessingPolicy > RequestProcessingPolicy_var;
typedef OB::ObjOut< RequestProcessingPolicy > RequestProcessingPolicy_out;

}
# 29 "../../include/OB/POAPolicies.h" 2
# 40 "../../include/OB/POAPolicies.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




const ::CORBA::PolicyType THREAD_POLICY_ID = 16U;




const ::CORBA::PolicyType LIFESPAN_POLICY_ID = 17U;




const ::CORBA::PolicyType ID_UNIQUENESS_POLICY_ID = 18U;




const ::CORBA::PolicyType ID_ASSIGNMENT_POLICY_ID = 19U;




const ::CORBA::PolicyType IMPLICIT_ACTIVATION_POLICY_ID = 20U;




const ::CORBA::PolicyType SERVANT_RETENTION_POLICY_ID = 21U;




const ::CORBA::PolicyType REQUEST_PROCESSING_POLICY_ID = 22U;




enum ThreadPolicyValue
{
    ORB_CTRL_MODEL,
    SINGLE_THREAD_MODEL
};

typedef ThreadPolicyValue& ThreadPolicyValue_out;

          extern OB::TypeCodeConst _tc_ThreadPolicyValue;




enum LifespanPolicyValue
{
    TRANSIENT,
    PERSISTENT
};

typedef LifespanPolicyValue& LifespanPolicyValue_out;

          extern OB::TypeCodeConst _tc_LifespanPolicyValue;




enum IdUniquenessPolicyValue
{
    UNIQUE_ID,
    MULTIPLE_ID
};

typedef IdUniquenessPolicyValue& IdUniquenessPolicyValue_out;

          extern OB::TypeCodeConst _tc_IdUniquenessPolicyValue;




enum IdAssignmentPolicyValue
{
    USER_ID,
    SYSTEM_ID
};

typedef IdAssignmentPolicyValue& IdAssignmentPolicyValue_out;

          extern OB::TypeCodeConst _tc_IdAssignmentPolicyValue;




enum ImplicitActivationPolicyValue
{
    IMPLICIT_ACTIVATION,
    NO_IMPLICIT_ACTIVATION
};

typedef ImplicitActivationPolicyValue& ImplicitActivationPolicyValue_out;

          extern OB::TypeCodeConst _tc_ImplicitActivationPolicyValue;




enum ServantRetentionPolicyValue
{
    RETAIN,
    NON_RETAIN
};

typedef ServantRetentionPolicyValue& ServantRetentionPolicyValue_out;

          extern OB::TypeCodeConst _tc_ServantRetentionPolicyValue;




enum RequestProcessingPolicyValue
{
    USE_ACTIVE_OBJECT_MAP_ONLY,
    USE_DEFAULT_SERVANT,
    USE_SERVANT_MANAGER
};

typedef RequestProcessingPolicyValue& RequestProcessingPolicyValue_out;

          extern OB::TypeCodeConst _tc_RequestProcessingPolicyValue;




class ThreadPolicy : virtual public ::CORBA::Policy
{
    ThreadPolicy(const ThreadPolicy&);
    void operator=(const ThreadPolicy&);

protected:

    static const char* ids_[];

public:

    ThreadPolicy() { }
    virtual ~ThreadPolicy() { }

    typedef ThreadPolicy_ptr _ptr_type;
    typedef ThreadPolicy_var _var_type;

    static inline ThreadPolicy_ptr
    _duplicate(ThreadPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ThreadPolicy_ptr
    _nil()
    {
        return 0;
    }

    static ThreadPolicy_ptr _narrow(CORBA::Object_ptr);

    static ThreadPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ThreadPolicyValue value() = 0;
};




class LifespanPolicy : virtual public ::CORBA::Policy
{
    LifespanPolicy(const LifespanPolicy&);
    void operator=(const LifespanPolicy&);

protected:

    static const char* ids_[];

public:

    LifespanPolicy() { }
    virtual ~LifespanPolicy() { }

    typedef LifespanPolicy_ptr _ptr_type;
    typedef LifespanPolicy_var _var_type;

    static inline LifespanPolicy_ptr
    _duplicate(LifespanPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline LifespanPolicy_ptr
    _nil()
    {
        return 0;
    }

    static LifespanPolicy_ptr _narrow(CORBA::Object_ptr);

    static LifespanPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual LifespanPolicyValue value() = 0;
};




class IdUniquenessPolicy : virtual public ::CORBA::Policy
{
    IdUniquenessPolicy(const IdUniquenessPolicy&);
    void operator=(const IdUniquenessPolicy&);

protected:

    static const char* ids_[];

public:

    IdUniquenessPolicy() { }
    virtual ~IdUniquenessPolicy() { }

    typedef IdUniquenessPolicy_ptr _ptr_type;
    typedef IdUniquenessPolicy_var _var_type;

    static inline IdUniquenessPolicy_ptr
    _duplicate(IdUniquenessPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline IdUniquenessPolicy_ptr
    _nil()
    {
        return 0;
    }

    static IdUniquenessPolicy_ptr _narrow(CORBA::Object_ptr);

    static IdUniquenessPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual IdUniquenessPolicyValue value() = 0;
};




class IdAssignmentPolicy : virtual public ::CORBA::Policy
{
    IdAssignmentPolicy(const IdAssignmentPolicy&);
    void operator=(const IdAssignmentPolicy&);

protected:

    static const char* ids_[];

public:

    IdAssignmentPolicy() { }
    virtual ~IdAssignmentPolicy() { }

    typedef IdAssignmentPolicy_ptr _ptr_type;
    typedef IdAssignmentPolicy_var _var_type;

    static inline IdAssignmentPolicy_ptr
    _duplicate(IdAssignmentPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline IdAssignmentPolicy_ptr
    _nil()
    {
        return 0;
    }

    static IdAssignmentPolicy_ptr _narrow(CORBA::Object_ptr);

    static IdAssignmentPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual IdAssignmentPolicyValue value() = 0;
};




class ImplicitActivationPolicy : virtual public ::CORBA::Policy
{
    ImplicitActivationPolicy(const ImplicitActivationPolicy&);
    void operator=(const ImplicitActivationPolicy&);

protected:

    static const char* ids_[];

public:

    ImplicitActivationPolicy() { }
    virtual ~ImplicitActivationPolicy() { }

    typedef ImplicitActivationPolicy_ptr _ptr_type;
    typedef ImplicitActivationPolicy_var _var_type;

    static inline ImplicitActivationPolicy_ptr
    _duplicate(ImplicitActivationPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ImplicitActivationPolicy_ptr
    _nil()
    {
        return 0;
    }

    static ImplicitActivationPolicy_ptr _narrow(CORBA::Object_ptr);

    static ImplicitActivationPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ImplicitActivationPolicyValue value() = 0;
};




class ServantRetentionPolicy : virtual public ::CORBA::Policy
{
    ServantRetentionPolicy(const ServantRetentionPolicy&);
    void operator=(const ServantRetentionPolicy&);

protected:

    static const char* ids_[];

public:

    ServantRetentionPolicy() { }
    virtual ~ServantRetentionPolicy() { }

    typedef ServantRetentionPolicy_ptr _ptr_type;
    typedef ServantRetentionPolicy_var _var_type;

    static inline ServantRetentionPolicy_ptr
    _duplicate(ServantRetentionPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ServantRetentionPolicy_ptr
    _nil()
    {
        return 0;
    }

    static ServantRetentionPolicy_ptr _narrow(CORBA::Object_ptr);

    static ServantRetentionPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ServantRetentionPolicyValue value() = 0;
};




class RequestProcessingPolicy : virtual public ::CORBA::Policy
{
    RequestProcessingPolicy(const RequestProcessingPolicy&);
    void operator=(const RequestProcessingPolicy&);

protected:

    static const char* ids_[];

public:

    RequestProcessingPolicy() { }
    virtual ~RequestProcessingPolicy() { }

    typedef RequestProcessingPolicy_ptr _ptr_type;
    typedef RequestProcessingPolicy_var _var_type;

    static inline RequestProcessingPolicy_ptr
    _duplicate(RequestProcessingPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RequestProcessingPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RequestProcessingPolicy_ptr _narrow(CORBA::Object_ptr);

    static RequestProcessingPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual RequestProcessingPolicyValue value() = 0;
};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




void operator<<=(CORBA::Any&, PortableServer::ThreadPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::ThreadPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ThreadPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::ThreadPolicyValue& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableServer::LifespanPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::LifespanPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::LifespanPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::LifespanPolicyValue& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableServer::IdUniquenessPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::IdUniquenessPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::IdUniquenessPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::IdUniquenessPolicyValue& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableServer::IdAssignmentPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::IdAssignmentPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::IdAssignmentPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::IdAssignmentPolicyValue& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableServer::ImplicitActivationPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::ImplicitActivationPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ImplicitActivationPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::ImplicitActivationPolicyValue& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableServer::ServantRetentionPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::ServantRetentionPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ServantRetentionPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::ServantRetentionPolicyValue& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableServer::RequestProcessingPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::RequestProcessingPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::RequestProcessingPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::RequestProcessingPolicyValue& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::PortableServer::ThreadPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::ThreadPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::ThreadPolicy_ptr*);
void operator<<=(CORBA::Any&, PortableServer::ThreadPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::ThreadPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ThreadPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ThreadPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::ThreadPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::PortableServer::LifespanPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::LifespanPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::LifespanPolicy_ptr*);
void operator<<=(CORBA::Any&, PortableServer::LifespanPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::LifespanPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::LifespanPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::LifespanPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::LifespanPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::PortableServer::IdUniquenessPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::IdUniquenessPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::IdUniquenessPolicy_ptr*);
void operator<<=(CORBA::Any&, PortableServer::IdUniquenessPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::IdUniquenessPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::IdUniquenessPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::IdUniquenessPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::IdUniquenessPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::PortableServer::IdAssignmentPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::IdAssignmentPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::IdAssignmentPolicy_ptr*);
void operator<<=(CORBA::Any&, PortableServer::IdAssignmentPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::IdAssignmentPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::IdAssignmentPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::IdAssignmentPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::IdAssignmentPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::PortableServer::ImplicitActivationPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::ImplicitActivationPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::ImplicitActivationPolicy_ptr*);
void operator<<=(CORBA::Any&, PortableServer::ImplicitActivationPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::ImplicitActivationPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ImplicitActivationPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ImplicitActivationPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::ImplicitActivationPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::PortableServer::ServantRetentionPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::ServantRetentionPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::ServantRetentionPolicy_ptr*);
void operator<<=(CORBA::Any&, PortableServer::ServantRetentionPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::ServantRetentionPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ServantRetentionPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::ServantRetentionPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::ServantRetentionPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::PortableServer::RequestProcessingPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::RequestProcessingPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableServer::RequestProcessingPolicy_ptr*);
void operator<<=(CORBA::Any&, PortableServer::RequestProcessingPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableServer::RequestProcessingPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableServer::RequestProcessingPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableServer::RequestProcessingPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableServer::RequestProcessingPolicy_ptr& val)
{
    return any.in() >>= val;
}
# 28 "../../include/OB/POAInterface.h" 2
# 1 "../../include/OB/POAManager.h" 1
# 27 "../../include/OB/POAManager.h"
# 1 "../../include/OB/POAManager_fwd.h" 1
# 18 "../../include/OB/POAManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POAManager_fwd.h" 2
# 39 "../../include/OB/POAManager_fwd.h"
namespace PortableServer
{

class POAManager;
typedef POAManager* POAManager_ptr;
typedef POAManager* POAManagerRef;

}

void OBDuplicate(PortableServer::POAManager_ptr);
void OBRelease(PortableServer::POAManager_ptr);

void OBMarshal(PortableServer::POAManager_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::POAManager_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< POAManager > POAManager_var;
typedef OB::ObjOut< POAManager > POAManager_out;

}
# 28 "../../include/OB/POAManager.h" 2
# 39 "../../include/OB/POAManager.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




class POAManager : virtual public CORBA::Object
{
    POAManager(const POAManager&);
    void operator=(const POAManager&);

protected:

    static const char* ids_[];

public:

    POAManager() { }
    virtual ~POAManager() { }

    typedef POAManager_ptr _ptr_type;
    typedef POAManager_var _var_type;

    static inline POAManager_ptr
    _duplicate(POAManager_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline POAManager_ptr
    _nil()
    {
        return 0;
    }

    static POAManager_ptr _narrow(CORBA::Object_ptr);

    static POAManager_ptr _narrow(CORBA::AbstractBase_ptr);





    struct AdapterInactive : public CORBA::UserException
    {
        AdapterInactive() { }
        AdapterInactive(const AdapterInactive&);
        AdapterInactive& operator=(const AdapterInactive&);

        static AdapterInactive* _downcast(CORBA::Exception*);
        static const AdapterInactive* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(AdapterInactive&, OB::InputStreamImpl*);
    };




    enum State
    {
        HOLDING,
        ACTIVE,
        DISCARDING,
        INACTIVE
    };

    typedef State& State_out;




    virtual void activate() = 0;




    virtual void hold_requests(CORBA::Boolean wait_for_completion) = 0;




    virtual void discard_requests(CORBA::Boolean wait_for_completion) = 0;




    virtual void deactivate(CORBA::Boolean etherealize_objects,
                            CORBA::Boolean wait_for_completion) = 0;




    virtual State get_state() = 0;
};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




namespace CORBA
{

inline void
release(::PortableServer::POAManager_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::POAManager_ptr p)
{
    return p == 0;
}

}
# 29 "../../include/OB/POAInterface.h" 2
# 1 "../../include/OB/POAAdapterActivator.h" 1
# 30 "../../include/OB/POAInterface.h" 2
# 1 "../../include/OB/POAServantManager.h" 1
# 31 "../../include/OB/POAInterface.h" 2
# 1 "../../include/OB/POACommon.h" 1
# 32 "../../include/OB/POAInterface.h" 2
# 1 "../../include/OB/Dispatch.h" 1
# 27 "../../include/OB/Dispatch.h"
# 1 "../../include/OB/Dispatch_fwd.h" 1
# 18 "../../include/OB/Dispatch_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Dispatch_fwd.h" 2
# 39 "../../include/OB/Dispatch_fwd.h"
namespace OB
{

class DispatchRequest;
typedef DispatchRequest* DispatchRequest_ptr;
typedef DispatchRequest* DispatchRequestRef;

class DispatchStrategy;
typedef DispatchStrategy* DispatchStrategy_ptr;
typedef DispatchStrategy* DispatchStrategyRef;

class DispatchStrategyFactory;
typedef DispatchStrategyFactory* DispatchStrategyFactory_ptr;
typedef DispatchStrategyFactory* DispatchStrategyFactoryRef;

}

void OBDuplicate(OB::DispatchRequest_ptr);
void OBRelease(OB::DispatchRequest_ptr);

void OBMarshal(OB::DispatchRequest_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::DispatchRequest_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::DispatchStrategy_ptr);
void OBRelease(OB::DispatchStrategy_ptr);

void OBMarshal(OB::DispatchStrategy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::DispatchStrategy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::DispatchStrategyFactory_ptr);
void OBRelease(OB::DispatchStrategyFactory_ptr);

void OBMarshal(OB::DispatchStrategyFactory_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::DispatchStrategyFactory_ptr&, OB::InputStreamImpl*);

namespace OB
{

typedef OB::ObjVar< DispatchRequest > DispatchRequest_var;
typedef OB::ObjOut< DispatchRequest > DispatchRequest_out;

typedef OB::ObjVar< DispatchStrategy > DispatchStrategy_var;
typedef OB::ObjOut< DispatchStrategy > DispatchStrategy_out;

typedef OB::ObjVar< DispatchStrategyFactory > DispatchStrategyFactory_var;
typedef OB::ObjOut< DispatchStrategyFactory > DispatchStrategyFactory_out;

}
# 28 "../../include/OB/Dispatch.h" 2
# 39 "../../include/OB/Dispatch.h"
namespace OBStubImpl_OB
{

}

namespace OBStubImpl_OB
{

}




namespace OB
{




class DispatchRequest : virtual public CORBA::Object
{
    DispatchRequest(const DispatchRequest&);
    void operator=(const DispatchRequest&);

protected:

    static const char* ids_[];

public:

    DispatchRequest() { }
    virtual ~DispatchRequest() { }

    typedef DispatchRequest_ptr _ptr_type;
    typedef DispatchRequest_var _var_type;

    static inline DispatchRequest_ptr
    _duplicate(DispatchRequest_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DispatchRequest_ptr
    _nil()
    {
        return 0;
    }

    static DispatchRequest_ptr _narrow(CORBA::Object_ptr);

    static DispatchRequest_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual void invoke() = 0;
};




typedef CORBA::ULong DispatchStrategyId;
typedef CORBA::ULong_out DispatchStrategyId_out;




const DispatchStrategyId SAME_THREAD = 0U;




const DispatchStrategyId THREAD_PER_REQUEST = 1U;




const DispatchStrategyId THREAD_POOL = 2U;




class DispatchStrategy : virtual public CORBA::Object
{
    DispatchStrategy(const DispatchStrategy&);
    void operator=(const DispatchStrategy&);

protected:

    static const char* ids_[];

public:

    DispatchStrategy() { }
    virtual ~DispatchStrategy() { }

    typedef DispatchStrategy_ptr _ptr_type;
    typedef DispatchStrategy_var _var_type;

    static inline DispatchStrategy_ptr
    _duplicate(DispatchStrategy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DispatchStrategy_ptr
    _nil()
    {
        return 0;
    }

    static DispatchStrategy_ptr _narrow(CORBA::Object_ptr);

    static DispatchStrategy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual DispatchStrategyId id() = 0;




    virtual CORBA::Any* info() = 0;




    virtual void dispatch(DispatchRequest_ptr r) = 0;
};




typedef CORBA::ULong ThreadPoolId;
typedef CORBA::ULong_out ThreadPoolId_out;




struct InvalidThreadPool : public CORBA::UserException
{
    InvalidThreadPool() { }
    InvalidThreadPool(const InvalidThreadPool&);
    InvalidThreadPool& operator=(const InvalidThreadPool&);

    static InvalidThreadPool* _downcast(CORBA::Exception*);
    static const InvalidThreadPool* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    static void _OB_unmarshal(InvalidThreadPool&, OB::InputStreamImpl*);
};




class DispatchStrategyFactory : virtual public CORBA::Object
{
    DispatchStrategyFactory(const DispatchStrategyFactory&);
    void operator=(const DispatchStrategyFactory&);

protected:

    static const char* ids_[];

public:

    DispatchStrategyFactory() { }
    virtual ~DispatchStrategyFactory() { }

    typedef DispatchStrategyFactory_ptr _ptr_type;
    typedef DispatchStrategyFactory_var _var_type;

    static inline DispatchStrategyFactory_ptr
    _duplicate(DispatchStrategyFactory_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DispatchStrategyFactory_ptr
    _nil()
    {
        return 0;
    }

    static DispatchStrategyFactory_ptr _narrow(CORBA::Object_ptr);

    static DispatchStrategyFactory_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ThreadPoolId create_thread_pool(CORBA::Long nthreads) = 0;




    virtual void destroy_thread_pool(ThreadPoolId id) = 0;




    virtual DispatchStrategy_ptr create_thread_pool_strategy(ThreadPoolId id) = 0;




    virtual DispatchStrategy_ptr create_same_thread_strategy() = 0;




    virtual DispatchStrategy_ptr create_thread_per_request_strategy() = 0;




    virtual DispatchStrategy_ptr create_default_dispatch_strategy() = 0;
};

}




namespace OBProxy_OB
{

}




namespace OBStubImpl_OB
{

}




namespace OBMarshalStubImpl_OB
{

}




namespace OBV_OB
{

}




namespace CORBA
{

inline void
release(::OB::DispatchRequest_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::DispatchRequest_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OB::DispatchStrategy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::DispatchStrategy_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OB::DispatchStrategyFactory_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::DispatchStrategyFactory_ptr p)
{
    return p == 0;
}

}
# 33 "../../include/OB/POAInterface.h" 2
# 1 "../../include/OB/Types.h" 1
# 34 "../../include/OB/POAInterface.h" 2
# 1 "../../include/OB/POAInterface_fwd.h" 1
# 35 "../../include/OB/POAInterface.h" 2
# 46 "../../include/OB/POAInterface.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




class OBUnique_POAList { };

typedef OB::ObjSeq< POA, OBUnique_POAList > POAList;
typedef OB::SeqVar< OB::ObjSeq< POA, OBUnique_POAList > > POAList_var;
typedef OB::SeqOut< OB::ObjSeq< POA, OBUnique_POAList > > POAList_out;




class POA : virtual public CORBA::Object
{
    POA(const POA&);
    void operator=(const POA&);

protected:

    static const char* ids_[];

public:

    POA() { }
    virtual ~POA() { }

    typedef POA_ptr _ptr_type;
    typedef POA_var _var_type;

    static inline POA_ptr
    _duplicate(POA_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline POA_ptr
    _nil()
    {
        return 0;
    }

    static POA_ptr _narrow(CORBA::Object_ptr);

    static POA_ptr _narrow(CORBA::AbstractBase_ptr);





    struct AdapterAlreadyExists : public CORBA::UserException
    {
        AdapterAlreadyExists() { }
        AdapterAlreadyExists(const AdapterAlreadyExists&);
        AdapterAlreadyExists& operator=(const AdapterAlreadyExists&);

        static AdapterAlreadyExists* _downcast(CORBA::Exception*);
        static const AdapterAlreadyExists* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(AdapterAlreadyExists&, OB::InputStreamImpl*);
    };




    struct AdapterNonExistent : public CORBA::UserException
    {
        AdapterNonExistent() { }
        AdapterNonExistent(const AdapterNonExistent&);
        AdapterNonExistent& operator=(const AdapterNonExistent&);

        static AdapterNonExistent* _downcast(CORBA::Exception*);
        static const AdapterNonExistent* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(AdapterNonExistent&, OB::InputStreamImpl*);
    };




    struct InvalidPolicy : public CORBA::UserException
    {



        InvalidPolicy() { }

        InvalidPolicy(const InvalidPolicy&);
        InvalidPolicy& operator=(const InvalidPolicy&);

        static InvalidPolicy* _downcast(CORBA::Exception*);
        static const InvalidPolicy* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        CORBA::UShort index;

        InvalidPolicy(CORBA::UShort);

        virtual void _OB_marshal(OB::OutputStreamImpl*) const;
        static void _OB_unmarshal(InvalidPolicy&, OB::InputStreamImpl*);
    };




    struct NoServant : public CORBA::UserException
    {
        NoServant() { }
        NoServant(const NoServant&);
        NoServant& operator=(const NoServant&);

        static NoServant* _downcast(CORBA::Exception*);
        static const NoServant* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(NoServant&, OB::InputStreamImpl*);
    };




    struct ObjectAlreadyActive : public CORBA::UserException
    {
        ObjectAlreadyActive() { }
        ObjectAlreadyActive(const ObjectAlreadyActive&);
        ObjectAlreadyActive& operator=(const ObjectAlreadyActive&);

        static ObjectAlreadyActive* _downcast(CORBA::Exception*);
        static const ObjectAlreadyActive* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(ObjectAlreadyActive&, OB::InputStreamImpl*);
    };




    struct ObjectNotActive : public CORBA::UserException
    {
        ObjectNotActive() { }
        ObjectNotActive(const ObjectNotActive&);
        ObjectNotActive& operator=(const ObjectNotActive&);

        static ObjectNotActive* _downcast(CORBA::Exception*);
        static const ObjectNotActive* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(ObjectNotActive&, OB::InputStreamImpl*);
    };




    struct ServantAlreadyActive : public CORBA::UserException
    {
        ServantAlreadyActive() { }
        ServantAlreadyActive(const ServantAlreadyActive&);
        ServantAlreadyActive& operator=(const ServantAlreadyActive&);

        static ServantAlreadyActive* _downcast(CORBA::Exception*);
        static const ServantAlreadyActive* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(ServantAlreadyActive&, OB::InputStreamImpl*);
    };




    struct ServantNotActive : public CORBA::UserException
    {
        ServantNotActive() { }
        ServantNotActive(const ServantNotActive&);
        ServantNotActive& operator=(const ServantNotActive&);

        static ServantNotActive* _downcast(CORBA::Exception*);
        static const ServantNotActive* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(ServantNotActive&, OB::InputStreamImpl*);
    };




    struct WrongAdapter : public CORBA::UserException
    {
        WrongAdapter() { }
        WrongAdapter(const WrongAdapter&);
        WrongAdapter& operator=(const WrongAdapter&);

        static WrongAdapter* _downcast(CORBA::Exception*);
        static const WrongAdapter* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(WrongAdapter&, OB::InputStreamImpl*);
    };




    struct WrongPolicy : public CORBA::UserException
    {
        WrongPolicy() { }
        WrongPolicy(const WrongPolicy&);
        WrongPolicy& operator=(const WrongPolicy&);

        static WrongPolicy* _downcast(CORBA::Exception*);
        static const WrongPolicy* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(WrongPolicy&, OB::InputStreamImpl*);
    };




    virtual POA_ptr create_POA(const char* adapter_name,
                               POAManager_ptr a_POAManager,
                               const ::CORBA::PolicyList& policies) = 0;




    virtual POA_ptr find_POA(const char* adapter_name,
                             CORBA::Boolean activate_it) = 0;




    virtual void destroy(CORBA::Boolean etherealize_objects,
                         CORBA::Boolean wait_for_completion) = 0;




    virtual ThreadPolicy_ptr create_thread_policy(ThreadPolicyValue value) = 0;




    virtual LifespanPolicy_ptr create_lifespan_policy(LifespanPolicyValue value) = 0;




    virtual IdUniquenessPolicy_ptr create_id_uniqueness_policy(IdUniquenessPolicyValue value) = 0;




    virtual IdAssignmentPolicy_ptr create_id_assignment_policy(IdAssignmentPolicyValue value) = 0;




    virtual ImplicitActivationPolicy_ptr create_implicit_activation_policy(ImplicitActivationPolicyValue value) = 0;




    virtual ServantRetentionPolicy_ptr create_servant_retention_policy(ServantRetentionPolicyValue value) = 0;




    virtual RequestProcessingPolicy_ptr create_request_processing_policy(RequestProcessingPolicyValue value) = 0;




    virtual char* the_name() = 0;




    virtual POA_ptr the_parent() = 0;




    virtual POAList* the_children() = 0;




    virtual POAManager_ptr the_POAManager() = 0;




    virtual AdapterActivator_ptr the_activator() = 0;
    virtual void the_activator(AdapterActivator_ptr) = 0;




    virtual ServantManager_ptr get_servant_manager() = 0;




    virtual void set_servant_manager(ServantManager_ptr imgr) = 0;




    virtual Servant get_servant() = 0;




    virtual void set_servant(Servant p_servant) = 0;




    virtual ObjectId* activate_object(Servant p_servant) = 0;




    virtual void activate_object_with_id(const ObjectId& id,
                                         Servant p_servant) = 0;




    virtual void deactivate_object(const ObjectId& oid) = 0;




    virtual CORBA::Object_ptr create_reference(const char* intf) = 0;




    virtual CORBA::Object_ptr create_reference_with_id(const ObjectId& oid,
                                                       const char* intf) = 0;




    virtual ObjectId* servant_to_id(Servant p_servant) = 0;




    virtual CORBA::Object_ptr servant_to_reference(Servant p_servant) = 0;




    virtual Servant reference_to_servant(CORBA::Object_ptr reference) = 0;




    virtual ObjectId* reference_to_id(CORBA::Object_ptr reference) = 0;




    virtual Servant id_to_servant(const ObjectId& oid) = 0;




    virtual CORBA::Object_ptr id_to_reference(const ObjectId& oid) = 0;
};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




namespace CORBA
{

inline void
release(::PortableServer::POA_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::POA_ptr p)
{
    return p == 0;
}

}
# 32 "../../include/OB/PortableServer.h" 2
# 1 "../../include/OB/PortableServer_fwd.h" 1
# 18 "../../include/OB/PortableServer_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/PortableServer_fwd.h" 2
# 33 "../../include/OB/PortableServer.h" 2
# 17 "../../include/OB/CORBAServer.h" 2
# 1 "../../include/OB/DirectStubImpl.h" 1
# 14 "../../include/OB/DirectStubImpl.h"
# 1 "../../include/OB/DirectStubImpl_fwd.h" 1
# 15 "../../include/OB/DirectStubImpl.h" 2
# 1 "../../include/OB/POAInterface_fwd.h" 1
# 16 "../../include/OB/DirectStubImpl.h" 2
# 1 "../../include/OB/POAServantBase_fwd.h" 1
# 17 "../../include/OB/DirectStubImpl.h" 2
# 1 "../../include/OB/Object_fwd.h" 1
# 18 "../../include/OB/DirectStubImpl.h" 2
# 1 "../../include/OB/ORBInstance_fwd.h" 1
# 19 "../../include/OB/DirectStubImpl.h" 2
# 1 "../../include/OB/Stream_fwd.h" 1
# 20 "../../include/OB/DirectStubImpl.h" 2

# 1 "../../include/OB/NativeTypes.h" 1
# 22 "../../include/OB/DirectStubImpl.h" 2
# 1 "../../include/OB/StubImpl.h" 1
# 23 "../../include/OB/DirectStubImpl.h" 2
# 1 "../../include/OB/POACommon.h" 1
# 24 "../../include/OB/DirectStubImpl.h" 2

namespace OBPortableServer
{

class POA_impl;

}

namespace OB
{




class DirectStubImpl : virtual public StubImplBase
{



    DirectStubImpl(const DirectStubImpl&);
    void operator=(const DirectStubImpl&);




    OBPortableServer::POA_impl* poa_;




    PortableServer::ObjectId oid_;




    bool deactivated_;
    JTCMutex deactivatedMutex_;

protected:




    PortableServer::ServantBase* _ob_servant_;





    OutputStream_ptr _OB_createOutputStream();
    InputStream_ptr _OB_createInputStream(OutputStream_ptr);
# 89 "../../include/OB/DirectStubImpl.h"
public:

    DirectStubImpl(PortableServer::POA_ptr,
                   const PortableServer::ObjectId&,
                   PortableServer::ServantBase*);

    virtual ~DirectStubImpl();

    static inline DirectStubImpl_ptr _duplicate(DirectStubImpl_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline DirectStubImpl_ptr _nil()
    { return 0; }

    virtual CORBA::InterfaceDef_ptr _get_interface();
    virtual CORBA::Boolean _is_a(const char*);
    virtual CORBA::Boolean _non_existent();
    virtual CORBA::Boolean _locate_request();

    virtual OCI::ConnectorInfo_ptr _get_oci_connector_info();
    virtual OCI::TransportInfo_ptr _get_oci_transport_info();





    void _OB_deactivate();
    PortableServer::ServantBase* _OB_setupServant();
    void _OB_preinvoke(const char*);
    void _OB_postinvoke();
    OB::ORBInstance_ptr _OB_ORBInstance();
};





class InvocationHandler
{
    DirectStubImpl* directStubImpl_;
    PortableServer::ServantBase_var dummy_;

public:

    InvocationHandler(DirectStubImpl* directStubImpl, const char* op)
        : directStubImpl_(directStubImpl)
    {
# 143 "../../include/OB/DirectStubImpl.h"
        dummy_ = directStubImpl_ -> _OB_setupServant();




        directStubImpl_ -> _OB_preinvoke(op);
    }

    ~InvocationHandler()
    {



        directStubImpl_ -> _OB_postinvoke();
    }
};

}

namespace CORBA
{

inline void
release(OB::DirectStubImpl_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::DirectStubImpl_ptr p)
{
    return p == 0;
}

}

namespace OBCORBA
{

class ORB_impl;

}

namespace OB
{




class DirectStubImplFactory : public RefCount
{



    DirectStubImplFactory(const DirectStubImplFactory&);
    void operator=(const DirectStubImplFactory&);

    bool destroy_;




    ORBInstance_var orbInstance_;

    DirectStubImplFactory();
    ~DirectStubImplFactory();
    friend class ::OBCORBA::ORB_impl;

public:

    static inline DirectStubImplFactory_ptr
    _duplicate(DirectStubImplFactory_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline DirectStubImplFactory_ptr _nil()
    { return 0; }




    void destroy();




    void setORBInstance(ORBInstance_ptr);




    DirectStubImpl_ptr createStubImpl(RefCountIOR_ptr,
                                      RefCountIOR_ptr,
                                      RefCountPolicyList_ptr)
        throw(LocationForward, CORBA::SystemException);
};

}

namespace CORBA
{

inline void
release(OB::DirectStubImplFactory_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::DirectStubImplFactory_ptr p)
{
    return p == 0;
}

}
# 18 "../../include/OB/CORBAServer.h" 2
# 15 "../../include/OB/CORBA.h" 2

# 1 "../../include/OB/ORBInstance.h" 1
# 14 "../../include/OB/ORBInstance.h"
# 1 "../../include/OB/ORBInstance_fwd.h" 1
# 15 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/OBORB_fwd.h" 1
# 18 "../../include/OB/OBORB_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/OBORB_fwd.h" 2
# 39 "../../include/OB/OBORB_fwd.h"
namespace CORBA
{

class Context;
typedef Context* Context_ptr;
typedef Context* ContextRef;

class NVList;
typedef NVList* NVList_ptr;
typedef NVList* NVListRef;

class NamedValue;
typedef NamedValue* NamedValue_ptr;
typedef NamedValue* NamedValueRef;

class ContextList;
typedef ContextList* ContextList_ptr;
typedef ContextList* ContextListRef;

class ExceptionList;
typedef ExceptionList* ExceptionList_ptr;
typedef ExceptionList* ExceptionListRef;

class Environment;
typedef Environment* Environment_ptr;
typedef Environment* EnvironmentRef;

class OperationDef;
typedef OperationDef* OperationDef_ptr;
typedef OperationDef* OperationDefRef;

class Request;
typedef Request* Request_ptr;
typedef Request* RequestRef;

class ORB;
typedef ORB* ORB_ptr;
typedef ORB* ORBRef;

}

namespace OB
{

class Logger;
typedef Logger* Logger_ptr;
typedef Logger* LoggerRef;

class Reactor;
typedef Reactor* Reactor_ptr;
typedef Reactor* ReactorRef;

class UnknownExceptionStrategy;
typedef UnknownExceptionStrategy* UnknownExceptionStrategy_ptr;
typedef UnknownExceptionStrategy* UnknownExceptionStrategyRef;

}

namespace OBCORBA
{

class ORB;
typedef ORB* ORB_ptr;
typedef ORB* ORBRef;

}

void OBDuplicate(CORBA::Context_ptr);
void OBRelease(CORBA::Context_ptr);

void OBMarshal(CORBA::Context_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Context_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::NVList_ptr);
void OBRelease(CORBA::NVList_ptr);

void OBMarshal(CORBA::NVList_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::NVList_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::NamedValue_ptr);
void OBRelease(CORBA::NamedValue_ptr);

void OBMarshal(CORBA::NamedValue_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::NamedValue_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ContextList_ptr);
void OBRelease(CORBA::ContextList_ptr);

void OBMarshal(CORBA::ContextList_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ContextList_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ExceptionList_ptr);
void OBRelease(CORBA::ExceptionList_ptr);

void OBMarshal(CORBA::ExceptionList_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ExceptionList_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::Environment_ptr);
void OBRelease(CORBA::Environment_ptr);

void OBMarshal(CORBA::Environment_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Environment_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::OperationDef_ptr);
void OBRelease(CORBA::OperationDef_ptr);

void OBMarshal(CORBA::OperationDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::OperationDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::Request_ptr);
void OBRelease(CORBA::Request_ptr);

void OBMarshal(CORBA::Request_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Request_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ORB_ptr);
void OBRelease(CORBA::ORB_ptr);

void OBMarshal(CORBA::ORB_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ORB_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::Logger_ptr);
void OBRelease(OB::Logger_ptr);

void OBMarshal(OB::Logger_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::Logger_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::Reactor_ptr);
void OBRelease(OB::Reactor_ptr);

void OBMarshal(OB::Reactor_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::Reactor_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::UnknownExceptionStrategy_ptr);
void OBRelease(OB::UnknownExceptionStrategy_ptr);

void OBMarshal(OB::UnknownExceptionStrategy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::UnknownExceptionStrategy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OBCORBA::ORB_ptr);
void OBRelease(OBCORBA::ORB_ptr);

void OBMarshal(OBCORBA::ORB_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OBCORBA::ORB_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< Context > Context_var;
typedef OB::ObjOut< Context > Context_out;

typedef OB::ObjVar< NVList > NVList_var;
typedef OB::ObjOut< NVList > NVList_out;

typedef OB::ObjVar< NamedValue > NamedValue_var;
typedef OB::ObjOut< NamedValue > NamedValue_out;

typedef OB::ObjVar< ContextList > ContextList_var;
typedef OB::ObjOut< ContextList > ContextList_out;

typedef OB::ObjVar< ExceptionList > ExceptionList_var;
typedef OB::ObjOut< ExceptionList > ExceptionList_out;

typedef OB::ObjVar< Environment > Environment_var;
typedef OB::ObjOut< Environment > Environment_out;

typedef OB::ObjVar< OperationDef > OperationDef_var;
typedef OB::ObjOut< OperationDef > OperationDef_out;

typedef OB::ObjVar< Request > Request_var;
typedef OB::ObjOut< Request > Request_out;

typedef OB::ObjVar< ORB > ORB_var;
typedef OB::ObjOut< ORB > ORB_out;

}

namespace OB
{

typedef OB::ObjVar< Logger > Logger_var;
typedef OB::ObjOut< Logger > Logger_out;

typedef OB::ObjVar< Reactor > Reactor_var;
typedef OB::ObjOut< Reactor > Reactor_out;

typedef OB::ObjVar< UnknownExceptionStrategy > UnknownExceptionStrategy_var;
typedef OB::ObjOut< UnknownExceptionStrategy > UnknownExceptionStrategy_out;

}

namespace OBCORBA
{

typedef OB::ObjVar< ORB > ORB_var;
typedef OB::ObjOut< ORB > ORB_out;

}
# 16 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/OBObject_fwd.h" 1
# 17 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/DirectStubImpl_fwd.h" 1
# 18 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/Client_fwd.h" 1
# 19 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/InitialServiceManager_fwd.h" 1
# 14 "../../include/OB/InitialServiceManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/InitialServiceManager_fwd.h" 2

namespace OB
{

class InitialServiceManager;
typedef InitialServiceManager* InitialServiceManager_ptr;

}

void OBDuplicate(OB::InitialServiceManager_ptr);
void OBRelease(OB::InitialServiceManager_ptr);

namespace OB
{

typedef ObjVar< InitialServiceManager > InitialServiceManager_var;

}
# 20 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/ValueFactoryManager_fwd.h" 1
# 14 "../../include/OB/ValueFactoryManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/ValueFactoryManager_fwd.h" 2

namespace OB
{

class ValueFactoryManager;
typedef ValueFactoryManager* ValueFactoryManager_ptr;

}

void OBDuplicate(OB::ValueFactoryManager_ptr);
void OBRelease(OB::ValueFactoryManager_ptr);

namespace OB
{

typedef ObjVar< ValueFactoryManager > ValueFactoryManager_var;

}
# 21 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/PolicyFactoryManager_fwd.h" 1
# 14 "../../include/OB/PolicyFactoryManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/PolicyFactoryManager_fwd.h" 2

namespace OB
{

class PolicyFactoryManager;
typedef PolicyFactoryManager* PolicyFactoryManager_ptr;

}

void OBDuplicate(OB::PolicyFactoryManager_ptr);
void OBRelease(OB::PolicyFactoryManager_ptr);

namespace OB
{

typedef ObjVar< PolicyFactoryManager > PolicyFactoryManager_var;

}
# 22 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/PIManager_fwd.h" 1
# 14 "../../include/OB/PIManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/PIManager_fwd.h" 2

namespace OB
{

class PIManager;
typedef PIManager* PIManager_ptr;

}

void OBDuplicate(OB::PIManager_ptr);
void OBRelease(OB::PIManager_ptr);

namespace OB
{

typedef ObjVar< PIManager > PIManager_var;

}
# 23 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/Codec_fwd.h" 1
# 18 "../../include/OB/Codec_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Codec_fwd.h" 2
# 39 "../../include/OB/Codec_fwd.h"
namespace IOP
{

class Codec;
typedef Codec* Codec_ptr;
typedef Codec* CodecRef;

class CodecFactory;
typedef CodecFactory* CodecFactory_ptr;
typedef CodecFactory* CodecFactoryRef;

}

void OBDuplicate(IOP::Codec_ptr);
void OBRelease(IOP::Codec_ptr);

void OBMarshal(IOP::Codec_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(IOP::Codec_ptr&, OB::InputStreamImpl*);

void OBDuplicate(IOP::CodecFactory_ptr);
void OBRelease(IOP::CodecFactory_ptr);

void OBMarshal(IOP::CodecFactory_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(IOP::CodecFactory_ptr&, OB::InputStreamImpl*);

namespace IOP
{

typedef OB::ObjVar< Codec > Codec_var;
typedef OB::ObjOut< Codec > Codec_out;

typedef OB::ObjVar< CodecFactory > CodecFactory_var;
typedef OB::ObjOut< CodecFactory > CodecFactory_out;

}
# 24 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/OBPOAManager_fwd.h" 1
# 25 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/MultiRequestSender_fwd.h" 1
# 14 "../../include/OB/MultiRequestSender_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/MultiRequestSender_fwd.h" 2

namespace OB
{

class MultiRequestSender;
typedef MultiRequestSender* MultiRequestSender_ptr;
typedef MultiRequestSender_ptr MultiRequestSenderRef;

}

void OBDuplicate(OB::MultiRequestSender_ptr);
void OBRelease(OB::MultiRequestSender_ptr);

namespace OB
{

typedef OB::ObjVar< MultiRequestSender > MultiRequestSender_var;
typedef OB::ObjOut< MultiRequestSender > MultiRequestSender_out;

}
# 26 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/Properties_fwd.h" 1
# 14 "../../include/OB/Properties_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Properties_fwd.h" 2

namespace OB
{

class Properties;
typedef Properties* Properties_ptr;

}

void OBDuplicate(OB::Properties_ptr);
void OBRelease(OB::Properties_ptr);

namespace OB
{

typedef ObjVar< Properties > Properties_var;

}
# 27 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/Dispatch_fwd.h" 1
# 28 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/BootManager_fwd.h" 1
# 18 "../../include/OB/BootManager_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/BootManager_fwd.h" 2
# 39 "../../include/OB/BootManager_fwd.h"
namespace OB
{

class BootManager;
typedef BootManager* BootManager_ptr;
typedef BootManager* BootManagerRef;

class BootLocator;
typedef BootLocator* BootLocator_ptr;
typedef BootLocator* BootLocatorRef;

}

void OBDuplicate(OB::BootManager_ptr);
void OBRelease(OB::BootManager_ptr);

void OBMarshal(OB::BootManager_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::BootManager_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::BootLocator_ptr);
void OBRelease(OB::BootLocator_ptr);

void OBMarshal(OB::BootLocator_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::BootLocator_ptr&, OB::InputStreamImpl*);

namespace OB
{

typedef OB::ObjVar< BootManager > BootManager_var;
typedef OB::ObjOut< BootManager > BootManager_out;

typedef OB::ObjVar< BootLocator > BootLocator_var;
typedef OB::ObjOut< BootLocator > BootLocator_out;

}
# 29 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/Reactor_fwd.h" 1
# 18 "../../include/OB/Reactor_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Reactor_fwd.h" 2
# 39 "../../include/OB/Reactor_fwd.h"
namespace OB
{

class Reactor;
typedef Reactor* Reactor_ptr;
typedef Reactor* ReactorRef;

}

void OBDuplicate(OB::Reactor_ptr);
void OBRelease(OB::Reactor_ptr);

void OBMarshal(OB::Reactor_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::Reactor_ptr&, OB::InputStreamImpl*);

namespace OB
{

typedef OB::ObjVar< Reactor > Reactor_var;
typedef OB::ObjOut< Reactor > Reactor_out;

}
# 30 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/Logger_fwd.h" 1
# 18 "../../include/OB/Logger_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Logger_fwd.h" 2
# 39 "../../include/OB/Logger_fwd.h"
namespace OB
{

class Logger;
typedef Logger* Logger_ptr;
typedef Logger* LoggerRef;

}

void OBDuplicate(OB::Logger_ptr);
void OBRelease(OB::Logger_ptr);

void OBMarshal(OB::Logger_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::Logger_ptr&, OB::InputStreamImpl*);

namespace OB
{

typedef OB::ObjVar< Logger > Logger_var;
typedef OB::ObjOut< Logger > Logger_out;

}
# 31 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/CoreTraceLevels_fwd.h" 1
# 14 "../../include/OB/CoreTraceLevels_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/CoreTraceLevels_fwd.h" 2

namespace OB
{

class CoreTraceLevels;
typedef CoreTraceLevels* CoreTraceLevels_ptr;
typedef CoreTraceLevels_ptr CoreTraceLevelsRef;

}

void OBDuplicate(OB::CoreTraceLevels_ptr);
void OBRelease(OB::CoreTraceLevels_ptr);

namespace OB
{

typedef OB::ObjVar< CoreTraceLevels > CoreTraceLevels_var;
typedef OB::ObjOut< CoreTraceLevels > CoreTraceLevels_out;

}
# 32 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/OCIClient_fwd.h" 1
# 33 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/OCI_fwd.h" 1
# 18 "../../include/OB/OCI_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/OCI_fwd.h" 2
# 39 "../../include/OB/OCI_fwd.h"
namespace OCI
{

class Acceptor;
typedef Acceptor* Acceptor_ptr;
typedef Acceptor* AcceptorRef;

class AcceptorInfo;
typedef AcceptorInfo* AcceptorInfo_ptr;
typedef AcceptorInfo* AcceptorInfoRef;

class AcceptCB;
typedef AcceptCB* AcceptCB_ptr;
typedef AcceptCB* AcceptCBRef;

class AccFactory;
typedef AccFactory* AccFactory_ptr;
typedef AccFactory* AccFactoryRef;

class AccFactoryInfo;
typedef AccFactoryInfo* AccFactoryInfo_ptr;
typedef AccFactoryInfo* AccFactoryInfoRef;

class AccFactoryRegistry;
typedef AccFactoryRegistry* AccFactoryRegistry_ptr;
typedef AccFactoryRegistry* AccFactoryRegistryRef;

class Current;
typedef Current* Current_ptr;
typedef Current* CurrentRef;

}

void OBDuplicate(OCI::Acceptor_ptr);
void OBRelease(OCI::Acceptor_ptr);

void OBMarshal(OCI::Acceptor_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::Acceptor_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::AcceptorInfo_ptr);
void OBRelease(OCI::AcceptorInfo_ptr);

void OBMarshal(OCI::AcceptorInfo_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::AcceptorInfo_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::AcceptCB_ptr);
void OBRelease(OCI::AcceptCB_ptr);

void OBMarshal(OCI::AcceptCB_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::AcceptCB_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::AccFactory_ptr);
void OBRelease(OCI::AccFactory_ptr);

void OBMarshal(OCI::AccFactory_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::AccFactory_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::AccFactoryInfo_ptr);
void OBRelease(OCI::AccFactoryInfo_ptr);

void OBMarshal(OCI::AccFactoryInfo_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::AccFactoryInfo_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::AccFactoryRegistry_ptr);
void OBRelease(OCI::AccFactoryRegistry_ptr);

void OBMarshal(OCI::AccFactoryRegistry_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::AccFactoryRegistry_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OCI::Current_ptr);
void OBRelease(OCI::Current_ptr);

void OBMarshal(OCI::Current_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OCI::Current_ptr&, OB::InputStreamImpl*);

namespace OCI
{

typedef OB::ObjVar< Acceptor > Acceptor_var;
typedef OB::ObjOut< Acceptor > Acceptor_out;

typedef OB::ObjVar< AcceptorInfo > AcceptorInfo_var;
typedef OB::ObjOut< AcceptorInfo > AcceptorInfo_out;

typedef OB::ObjVar< AcceptCB > AcceptCB_var;
typedef OB::ObjOut< AcceptCB > AcceptCB_out;

typedef OB::ObjVar< AccFactory > AccFactory_var;
typedef OB::ObjOut< AccFactory > AccFactory_out;

typedef OB::ObjVar< AccFactoryInfo > AccFactoryInfo_var;
typedef OB::ObjOut< AccFactoryInfo > AccFactoryInfo_out;

typedef OB::ObjVar< AccFactoryRegistry > AccFactoryRegistry_var;
typedef OB::ObjOut< AccFactoryRegistry > AccFactoryRegistry_out;

typedef OB::ObjVar< Current > Current_var;
typedef OB::ObjOut< Current > Current_out;

}
# 34 "../../include/OB/ORBInstance.h" 2
# 1 "../../include/OB/UnknownException_fwd.h" 1
# 18 "../../include/OB/UnknownException_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/UnknownException_fwd.h" 2
# 39 "../../include/OB/UnknownException_fwd.h"
namespace OB
{

class UnknownExceptionInfo;
typedef UnknownExceptionInfo* UnknownExceptionInfo_ptr;
typedef UnknownExceptionInfo* UnknownExceptionInfoRef;

class UnknownExceptionStrategy;
typedef UnknownExceptionStrategy* UnknownExceptionStrategy_ptr;
typedef UnknownExceptionStrategy* UnknownExceptionStrategyRef;

}

void OBDuplicate(OB::UnknownExceptionInfo_ptr);
void OBRelease(OB::UnknownExceptionInfo_ptr);

void OBMarshal(OB::UnknownExceptionInfo_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::UnknownExceptionInfo_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::UnknownExceptionStrategy_ptr);
void OBRelease(OB::UnknownExceptionStrategy_ptr);

void OBMarshal(OB::UnknownExceptionStrategy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::UnknownExceptionStrategy_ptr&, OB::InputStreamImpl*);

namespace OB
{

typedef OB::ObjVar< UnknownExceptionInfo > UnknownExceptionInfo_var;
typedef OB::ObjOut< UnknownExceptionInfo > UnknownExceptionInfo_out;

typedef OB::ObjVar< UnknownExceptionStrategy > UnknownExceptionStrategy_var;
typedef OB::ObjOut< UnknownExceptionStrategy > UnknownExceptionStrategy_out;

}
# 35 "../../include/OB/ORBInstance.h" 2

namespace OBCORBA
{

class ORB_impl;

}

namespace OB
{

class GlobalStateMutexDestroyer;







class ORBInstance : public RefCount
{



    ORBInstance(const ORBInstance&);
    void operator=(const ORBInstance&);

    bool destroy_;




    CORBA::ULong nativeCs_;
    CORBA::ULong nativeWcs_;




    CORBA::ULong defaultWcs_;




    CORBA::String_var orbId_;




    CORBA::String_var serverId_;




    CORBA::String_var serverInstance_;
# 99 "../../include/OB/ORBInstance.h"
    ObjectFactory_var objectFactory_;
    DirectStubImplFactory_var directStubImplFactory_;
    ClientManager_var clientManager_;
    PolicyFactoryManager_var policyFactoryManager_;
    PIManager_var interceptorManager_;
    InitialServiceManager_var initServiceManager_;
    ValueFactoryManager_var valueFactoryManager_;
    IOP::CodecFactory_var codecFactory_;
    OBPortableServer::POAManagerFactory_var pmFactory_;
    MultiRequestSender_var multiRequestSender_;
    Properties_var properties_;
    DispatchStrategyFactory_var dispatchStrategyFactory_;
    BootManager_var bootManager_;
    Reactor_var reactor_;
    Logger_var logger_;
    CoreTraceLevels_var coreTraceLevels_;
    OCI::ConFactoryRegistry_var conFactoryRegistry_;
    OCI::AccFactoryRegistry_var accFactoryRegistry_;
    UnknownExceptionStrategy_var unknownExceptionStrategy_;
    bool useTypeCodeCache_;
    bool extendedWchar_;

    JTCRecursiveMutex orbSyncMutex_;
    JTCThreadGroupHandle serverWorkerGroup_;
    JTCThreadGroupHandle clientWorkerGroup_;




    friend class ::OB::GlobalStateMutexDestroyer;
    static JTCMutex* globalStateMutex_;
    static JTCInitialize* globalStateJTC_;
    static int globalStateCounter_;




    void createGlobalState();
    void destroyGlobalState();

    ORBInstance(const char*,
                const char*,
                const char*,
                ObjectFactory_ptr,
                DirectStubImplFactory_ptr,
                ClientManager_ptr,
                PolicyFactoryManager_ptr,
                PIManager_ptr,
                InitialServiceManager_ptr,
                ValueFactoryManager_ptr,
                IOP::CodecFactory_ptr,
                OBPortableServer::POAManagerFactory_ptr,
                MultiRequestSender_ptr,
                Properties_ptr,
                DispatchStrategyFactory_ptr,
                BootManager_ptr,
                Reactor_ptr,
                Logger_ptr,
                CoreTraceLevels_ptr,
                OCI::ConFactoryRegistry_ptr,
                OCI::AccFactoryRegistry_ptr,
                UnknownExceptionStrategy_ptr,
                CORBA::ULong, CORBA::ULong, CORBA::ULong);

    virtual ~ORBInstance();
    friend class ::OBCORBA::ORB_impl;

public:

    static inline ORBInstance_ptr _duplicate(ORBInstance_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline ORBInstance_ptr _nil()
    { return 0; }




    void destroy();




    CORBA::ULong getNativeCs();
    CORBA::ULong getNativeWcs();
    CORBA::ULong getDefaultWcs();




    ObjectFactory_ptr getObjectFactory();




    DirectStubImplFactory_ptr getDirectStubImplFactory();




    ClientManager_ptr getClientManager();




    PolicyFactoryManager_ptr getPolicyFactoryManager();




    PIManager_ptr getPIManager();




    InitialServiceManager_ptr getInitialServiceManager();




    ValueFactoryManager_ptr getValueFactoryManager();




    IOP::CodecFactory_ptr getCodecFactory();




    OBPortableServer::POAManagerFactory_ptr getPOAManagerFactory();




    MultiRequestSender_ptr getMultiRequestSender();




    Properties_ptr getProperties();




    DispatchStrategyFactory_ptr getDispatchStrategyFactory();




    BootManager_ptr getBootManager();




    Reactor_ptr getReactor();




    Logger_ptr getLogger();




    CoreTraceLevels_ptr getCoreTraceLevels();




    JTCRecursiveMutex& getORBSyncMutex();




    JTCThreadGroupHandle getServerWorkerGroup();




    JTCThreadGroupHandle getClientWorkerGroup();




    OCI::ConFactoryRegistry_ptr getConFactoryRegistry();




    OCI::AccFactoryRegistry_ptr getAccFactoryRegistry();




    UnknownExceptionStrategy_ptr getUnknownExceptionStrategy();
    UnknownExceptionStrategy_ptr setUnknownExceptionStrategy(
        UnknownExceptionStrategy_ptr);




    const char* getOrbId() const;




    const char* getServerId() const;




    const char* getServerInstance() const;




    bool useTypeCodeCache() const;




    bool extendedWchar() const;
};

}

namespace CORBA
{

inline void
release(OB::ORBInstance_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OB::ORBInstance_ptr p)
{
    return p == 0;
}

}

namespace OB
{




ORBInstance_ptr GetORBInstance(CORBA::ORB_ptr);

}
# 17 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/OBORB.h" 1
# 27 "../../include/OB/OBORB.h"
# 1 "../../include/OB/Policy.h" 1
# 28 "../../include/OB/OBORB.h" 2
# 1 "../../include/OB/OBPolicies.h" 1
# 27 "../../include/OB/OBPolicies.h"
# 1 "../../include/OB/Policy.h" 1
# 28 "../../include/OB/OBPolicies.h" 2
# 1 "../../include/OB/OCITypes.h" 1
# 29 "../../include/OB/OBPolicies.h" 2
# 1 "../../include/OB/OBPolicies_fwd.h" 1
# 18 "../../include/OB/OBPolicies_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/OBPolicies_fwd.h" 2
# 39 "../../include/OB/OBPolicies_fwd.h"
namespace OB
{

class ProtocolPolicy;
typedef ProtocolPolicy* ProtocolPolicy_ptr;
typedef ProtocolPolicy* ProtocolPolicyRef;

          extern OB::TypeCodeConst _tc_ProtocolPolicy;

class ConnectionReusePolicy;
typedef ConnectionReusePolicy* ConnectionReusePolicy_ptr;
typedef ConnectionReusePolicy* ConnectionReusePolicyRef;

          extern OB::TypeCodeConst _tc_ConnectionReusePolicy;

class RetryPolicy;
typedef RetryPolicy* RetryPolicy_ptr;
typedef RetryPolicy* RetryPolicyRef;

          extern OB::TypeCodeConst _tc_RetryPolicy;

class TimeoutPolicy;
typedef TimeoutPolicy* TimeoutPolicy_ptr;
typedef TimeoutPolicy* TimeoutPolicyRef;

          extern OB::TypeCodeConst _tc_TimeoutPolicy;

class LocationTransparencyPolicy;
typedef LocationTransparencyPolicy* LocationTransparencyPolicy_ptr;
typedef LocationTransparencyPolicy* LocationTransparencyPolicyRef;

          extern OB::TypeCodeConst _tc_LocationTransparencyPolicy;

class InterceptorPolicy;
typedef InterceptorPolicy* InterceptorPolicy_ptr;
typedef InterceptorPolicy* InterceptorPolicyRef;

          extern OB::TypeCodeConst _tc_InterceptorPolicy;

class ConnectTimeoutPolicy;
typedef ConnectTimeoutPolicy* ConnectTimeoutPolicy_ptr;
typedef ConnectTimeoutPolicy* ConnectTimeoutPolicyRef;

          extern OB::TypeCodeConst _tc_ConnectTimeoutPolicy;

class RequestTimeoutPolicy;
typedef RequestTimeoutPolicy* RequestTimeoutPolicy_ptr;
typedef RequestTimeoutPolicy* RequestTimeoutPolicyRef;

          extern OB::TypeCodeConst _tc_RequestTimeoutPolicy;

class LocateRequestPolicy;
typedef LocateRequestPolicy* LocateRequestPolicy_ptr;
typedef LocateRequestPolicy* LocateRequestPolicyRef;

          extern OB::TypeCodeConst _tc_LocateRequestPolicy;

}

void OBDuplicate(OB::ProtocolPolicy_ptr);
void OBRelease(OB::ProtocolPolicy_ptr);

void OBMarshal(OB::ProtocolPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::ProtocolPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::ConnectionReusePolicy_ptr);
void OBRelease(OB::ConnectionReusePolicy_ptr);

void OBMarshal(OB::ConnectionReusePolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::ConnectionReusePolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::RetryPolicy_ptr);
void OBRelease(OB::RetryPolicy_ptr);

void OBMarshal(OB::RetryPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::RetryPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::TimeoutPolicy_ptr);
void OBRelease(OB::TimeoutPolicy_ptr);

void OBMarshal(OB::TimeoutPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::TimeoutPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::LocationTransparencyPolicy_ptr);
void OBRelease(OB::LocationTransparencyPolicy_ptr);

void OBMarshal(OB::LocationTransparencyPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::LocationTransparencyPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::InterceptorPolicy_ptr);
void OBRelease(OB::InterceptorPolicy_ptr);

void OBMarshal(OB::InterceptorPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::InterceptorPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::ConnectTimeoutPolicy_ptr);
void OBRelease(OB::ConnectTimeoutPolicy_ptr);

void OBMarshal(OB::ConnectTimeoutPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::ConnectTimeoutPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::RequestTimeoutPolicy_ptr);
void OBRelease(OB::RequestTimeoutPolicy_ptr);

void OBMarshal(OB::RequestTimeoutPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::RequestTimeoutPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OB::LocateRequestPolicy_ptr);
void OBRelease(OB::LocateRequestPolicy_ptr);

void OBMarshal(OB::LocateRequestPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OB::LocateRequestPolicy_ptr&, OB::InputStreamImpl*);

namespace OB
{

typedef OB::ObjVar< ProtocolPolicy > ProtocolPolicy_var;
typedef OB::ObjOut< ProtocolPolicy > ProtocolPolicy_out;

typedef OB::ObjVar< ConnectionReusePolicy > ConnectionReusePolicy_var;
typedef OB::ObjOut< ConnectionReusePolicy > ConnectionReusePolicy_out;

typedef OB::ObjVar< RetryPolicy > RetryPolicy_var;
typedef OB::ObjOut< RetryPolicy > RetryPolicy_out;

typedef OB::ObjVar< TimeoutPolicy > TimeoutPolicy_var;
typedef OB::ObjOut< TimeoutPolicy > TimeoutPolicy_out;

typedef OB::ObjVar< LocationTransparencyPolicy > LocationTransparencyPolicy_var;
typedef OB::ObjOut< LocationTransparencyPolicy > LocationTransparencyPolicy_out;

typedef OB::ObjVar< InterceptorPolicy > InterceptorPolicy_var;
typedef OB::ObjOut< InterceptorPolicy > InterceptorPolicy_out;

typedef OB::ObjVar< ConnectTimeoutPolicy > ConnectTimeoutPolicy_var;
typedef OB::ObjOut< ConnectTimeoutPolicy > ConnectTimeoutPolicy_out;

typedef OB::ObjVar< RequestTimeoutPolicy > RequestTimeoutPolicy_var;
typedef OB::ObjOut< RequestTimeoutPolicy > RequestTimeoutPolicy_out;

typedef OB::ObjVar< LocateRequestPolicy > LocateRequestPolicy_var;
typedef OB::ObjOut< LocateRequestPolicy > LocateRequestPolicy_out;

}
# 30 "../../include/OB/OBPolicies.h" 2
# 41 "../../include/OB/OBPolicies.h"
namespace OBStubImpl_OB
{

}

namespace OBStubImpl_OB
{

}




namespace OB
{




const ::CORBA::PolicyType PROTOCOL_POLICY_ID = 1330577410U;




class ProtocolPolicy : virtual public ::CORBA::Policy
{
    ProtocolPolicy(const ProtocolPolicy&);
    void operator=(const ProtocolPolicy&);

protected:

    static const char* ids_[];

public:

    ProtocolPolicy() { }
    virtual ~ProtocolPolicy() { }

    typedef ProtocolPolicy_ptr _ptr_type;
    typedef ProtocolPolicy_var _var_type;

    static inline ProtocolPolicy_ptr
    _duplicate(ProtocolPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ProtocolPolicy_ptr
    _nil()
    {
        return 0;
    }

    static ProtocolPolicy_ptr _narrow(CORBA::Object_ptr);

    static ProtocolPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::OCI::PluginIdSeq* value() = 0;




    virtual CORBA::Boolean contains(const char* id) = 0;
};




const ::CORBA::PolicyType CONNECTION_REUSE_POLICY_ID = 1330577411U;




class ConnectionReusePolicy : virtual public ::CORBA::Policy
{
    ConnectionReusePolicy(const ConnectionReusePolicy&);
    void operator=(const ConnectionReusePolicy&);

protected:

    static const char* ids_[];

public:

    ConnectionReusePolicy() { }
    virtual ~ConnectionReusePolicy() { }

    typedef ConnectionReusePolicy_ptr _ptr_type;
    typedef ConnectionReusePolicy_var _var_type;

    static inline ConnectionReusePolicy_ptr
    _duplicate(ConnectionReusePolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConnectionReusePolicy_ptr
    _nil()
    {
        return 0;
    }

    static ConnectionReusePolicy_ptr _narrow(CORBA::Object_ptr);

    static ConnectionReusePolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Boolean value() = 0;
};




const CORBA::Short RETRY_NEVER = 0;




const CORBA::Short RETRY_STRICT = 1;




const CORBA::Short RETRY_ALWAYS = 2;




struct RetryAttributes;
typedef OB::FixVar< RetryAttributes > RetryAttributes_var;
typedef RetryAttributes& RetryAttributes_out;

struct RetryAttributes
{
    typedef RetryAttributes_var _var_type;

    CORBA::Short mode;
    CORBA::ULong interval;
    CORBA::ULong max;
    CORBA::Boolean remote;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(RetryAttributes&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_RetryAttributes;




const ::CORBA::PolicyType RETRY_POLICY_ID = 1330577412U;




class RetryPolicy : virtual public ::CORBA::Policy
{
    RetryPolicy(const RetryPolicy&);
    void operator=(const RetryPolicy&);

protected:

    static const char* ids_[];

public:

    RetryPolicy() { }
    virtual ~RetryPolicy() { }

    typedef RetryPolicy_ptr _ptr_type;
    typedef RetryPolicy_var _var_type;

    static inline RetryPolicy_ptr
    _duplicate(RetryPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RetryPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RetryPolicy_ptr _narrow(CORBA::Object_ptr);

    static RetryPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Short retry_mode() = 0;




    virtual CORBA::ULong retry_interval() = 0;




    virtual CORBA::ULong retry_max() = 0;




    virtual CORBA::Boolean retry_remote() = 0;
};




const ::CORBA::PolicyType TIMEOUT_POLICY_ID = 1330577413U;




class TimeoutPolicy : virtual public ::CORBA::Policy
{
    TimeoutPolicy(const TimeoutPolicy&);
    void operator=(const TimeoutPolicy&);

protected:

    static const char* ids_[];

public:

    TimeoutPolicy() { }
    virtual ~TimeoutPolicy() { }

    typedef TimeoutPolicy_ptr _ptr_type;
    typedef TimeoutPolicy_var _var_type;

    static inline TimeoutPolicy_ptr
    _duplicate(TimeoutPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline TimeoutPolicy_ptr
    _nil()
    {
        return 0;
    }

    static TimeoutPolicy_ptr _narrow(CORBA::Object_ptr);

    static TimeoutPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::ULong value() = 0;
};




const CORBA::Short LOCATION_TRANSPARENCY_STRICT = 0;




const CORBA::Short LOCATION_TRANSPARENCY_RELAXED = 1;




const ::CORBA::PolicyType LOCATION_TRANSPARENCY_POLICY_ID = 1330577414U;




class LocationTransparencyPolicy : virtual public ::CORBA::Policy
{
    LocationTransparencyPolicy(const LocationTransparencyPolicy&);
    void operator=(const LocationTransparencyPolicy&);

protected:

    static const char* ids_[];

public:

    LocationTransparencyPolicy() { }
    virtual ~LocationTransparencyPolicy() { }

    typedef LocationTransparencyPolicy_ptr _ptr_type;
    typedef LocationTransparencyPolicy_var _var_type;

    static inline LocationTransparencyPolicy_ptr
    _duplicate(LocationTransparencyPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline LocationTransparencyPolicy_ptr
    _nil()
    {
        return 0;
    }

    static LocationTransparencyPolicy_ptr _narrow(CORBA::Object_ptr);

    static LocationTransparencyPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Short value() = 0;
};




const ::CORBA::PolicyType INTERCEPTOR_POLICY_ID = 1330577415U;




class InterceptorPolicy : virtual public ::CORBA::Policy
{
    InterceptorPolicy(const InterceptorPolicy&);
    void operator=(const InterceptorPolicy&);

protected:

    static const char* ids_[];

public:

    InterceptorPolicy() { }
    virtual ~InterceptorPolicy() { }

    typedef InterceptorPolicy_ptr _ptr_type;
    typedef InterceptorPolicy_var _var_type;

    static inline InterceptorPolicy_ptr
    _duplicate(InterceptorPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline InterceptorPolicy_ptr
    _nil()
    {
        return 0;
    }

    static InterceptorPolicy_ptr _narrow(CORBA::Object_ptr);

    static InterceptorPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Boolean value() = 0;
};




const ::CORBA::PolicyType CONNECT_TIMEOUT_POLICY_ID = 1330577416U;




class ConnectTimeoutPolicy : virtual public ::CORBA::Policy
{
    ConnectTimeoutPolicy(const ConnectTimeoutPolicy&);
    void operator=(const ConnectTimeoutPolicy&);

protected:

    static const char* ids_[];

public:

    ConnectTimeoutPolicy() { }
    virtual ~ConnectTimeoutPolicy() { }

    typedef ConnectTimeoutPolicy_ptr _ptr_type;
    typedef ConnectTimeoutPolicy_var _var_type;

    static inline ConnectTimeoutPolicy_ptr
    _duplicate(ConnectTimeoutPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConnectTimeoutPolicy_ptr
    _nil()
    {
        return 0;
    }

    static ConnectTimeoutPolicy_ptr _narrow(CORBA::Object_ptr);

    static ConnectTimeoutPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::ULong value() = 0;
};




const ::CORBA::PolicyType REQUEST_TIMEOUT_POLICY_ID = 1330577417U;




class RequestTimeoutPolicy : virtual public ::CORBA::Policy
{
    RequestTimeoutPolicy(const RequestTimeoutPolicy&);
    void operator=(const RequestTimeoutPolicy&);

protected:

    static const char* ids_[];

public:

    RequestTimeoutPolicy() { }
    virtual ~RequestTimeoutPolicy() { }

    typedef RequestTimeoutPolicy_ptr _ptr_type;
    typedef RequestTimeoutPolicy_var _var_type;

    static inline RequestTimeoutPolicy_ptr
    _duplicate(RequestTimeoutPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RequestTimeoutPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RequestTimeoutPolicy_ptr _narrow(CORBA::Object_ptr);

    static RequestTimeoutPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::ULong value() = 0;
};




const ::CORBA::PolicyType LOCATE_REQUEST_POLICY_ID = 1330577418U;




class LocateRequestPolicy : virtual public ::CORBA::Policy
{
    LocateRequestPolicy(const LocateRequestPolicy&);
    void operator=(const LocateRequestPolicy&);

protected:

    static const char* ids_[];

public:

    LocateRequestPolicy() { }
    virtual ~LocateRequestPolicy() { }

    typedef LocateRequestPolicy_ptr _ptr_type;
    typedef LocateRequestPolicy_var _var_type;

    static inline LocateRequestPolicy_ptr
    _duplicate(LocateRequestPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline LocateRequestPolicy_ptr
    _nil()
    {
        return 0;
    }

    static LocateRequestPolicy_ptr _narrow(CORBA::Object_ptr);

    static LocateRequestPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Boolean value() = 0;
};

}




namespace OBProxy_OB
{

}




namespace OBStubImpl_OB
{

}




namespace OBMarshalStubImpl_OB
{

}




namespace OBV_OB
{

}




namespace CORBA
{

inline void
release(::OB::ProtocolPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::ProtocolPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::ProtocolPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::ProtocolPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::ProtocolPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::ProtocolPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::ProtocolPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::ProtocolPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::ConnectionReusePolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::ConnectionReusePolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::ConnectionReusePolicy_ptr*);
void operator<<=(CORBA::Any&, OB::ConnectionReusePolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::ConnectionReusePolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::ConnectionReusePolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::ConnectionReusePolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::ConnectionReusePolicy_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, OB::RetryAttributes*);
void operator<<=(CORBA::Any&, const OB::RetryAttributes&);
CORBA::Boolean operator>>=(const CORBA::Any&, const OB::RetryAttributes*&);

inline void
operator<<=(CORBA::Any_var& any, OB::RetryAttributes* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const OB::RetryAttributes& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const OB::RetryAttributes*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::RetryPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::RetryPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::RetryPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::RetryPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::RetryPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::RetryPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::RetryPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::RetryPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::TimeoutPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::TimeoutPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::TimeoutPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::TimeoutPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::TimeoutPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::TimeoutPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::TimeoutPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::TimeoutPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::LocationTransparencyPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::LocationTransparencyPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::LocationTransparencyPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::LocationTransparencyPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::LocationTransparencyPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::LocationTransparencyPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::LocationTransparencyPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::LocationTransparencyPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::InterceptorPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::InterceptorPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::InterceptorPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::InterceptorPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::InterceptorPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::InterceptorPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::InterceptorPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::InterceptorPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::ConnectTimeoutPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::ConnectTimeoutPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::ConnectTimeoutPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::ConnectTimeoutPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::ConnectTimeoutPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::ConnectTimeoutPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::ConnectTimeoutPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::ConnectTimeoutPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::RequestTimeoutPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::RequestTimeoutPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::RequestTimeoutPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::RequestTimeoutPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::RequestTimeoutPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::RequestTimeoutPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::RequestTimeoutPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::RequestTimeoutPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OB::LocateRequestPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OB::LocateRequestPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OB::LocateRequestPolicy_ptr*);
void operator<<=(CORBA::Any&, OB::LocateRequestPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OB::LocateRequestPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OB::LocateRequestPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OB::LocateRequestPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OB::LocateRequestPolicy_ptr& val)
{
    return any.in() >>= val;
}
# 29 "../../include/OB/OBORB.h" 2
# 1 "../../include/OB/Messaging.h" 1
# 27 "../../include/OB/Messaging.h"
# 1 "../../include/OB/Policy.h" 1
# 28 "../../include/OB/Messaging.h" 2
# 1 "../../include/OB/IOP.h" 1
# 29 "../../include/OB/Messaging.h" 2
# 1 "../../include/OB/TimeBase.h" 1
# 27 "../../include/OB/TimeBase.h"
# 1 "../../include/OB/TimeBase_fwd.h" 1
# 18 "../../include/OB/TimeBase_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/TimeBase_fwd.h" 2
# 39 "../../include/OB/TimeBase_fwd.h"
namespace TimeBase
{

}

namespace TimeBase
{

}
# 28 "../../include/OB/TimeBase.h" 2
# 39 "../../include/OB/TimeBase.h"
namespace OBStubImpl_TimeBase
{

}

namespace OBStubImpl_TimeBase
{

}




namespace TimeBase
{




typedef CORBA::ULongLong TimeT;
typedef CORBA::ULongLong_out TimeT_out;
          extern OB::TypeCodeConst _tc_TimeT;




typedef CORBA::ULongLong InaccuracyT;
typedef CORBA::ULongLong_out InaccuracyT_out;
          extern OB::TypeCodeConst _tc_InaccuracyT;




typedef CORBA::Short TdfT;
typedef CORBA::Short_out TdfT_out;
          extern OB::TypeCodeConst _tc_TdfT;




struct UtcT;
typedef OB::FixVar< UtcT > UtcT_var;
typedef UtcT& UtcT_out;

struct UtcT
{
    typedef UtcT_var _var_type;

    TimeT time;
    CORBA::ULong inacclo;
    CORBA::UShort inacchi;
    TdfT tdf;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(UtcT&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_UtcT;




struct IntervalT;
typedef OB::FixVar< IntervalT > IntervalT_var;
typedef IntervalT& IntervalT_out;

struct IntervalT
{
    typedef IntervalT_var _var_type;

    TimeT lower_bound;
    TimeT upper_bound;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(IntervalT&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_IntervalT;

}




namespace OBProxy_TimeBase
{

}




namespace OBStubImpl_TimeBase
{

}




namespace OBMarshalStubImpl_TimeBase
{

}




namespace OBV_TimeBase
{

}




void operator<<=(CORBA::Any&, TimeBase::UtcT*);
void operator<<=(CORBA::Any&, const TimeBase::UtcT&);
CORBA::Boolean operator>>=(const CORBA::Any&, const TimeBase::UtcT*&);

inline void
operator<<=(CORBA::Any_var& any, TimeBase::UtcT* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const TimeBase::UtcT& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const TimeBase::UtcT*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, TimeBase::IntervalT*);
void operator<<=(CORBA::Any&, const TimeBase::IntervalT&);
CORBA::Boolean operator>>=(const CORBA::Any&, const TimeBase::IntervalT*&);

inline void
operator<<=(CORBA::Any_var& any, TimeBase::IntervalT* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const TimeBase::IntervalT& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const TimeBase::IntervalT*& val)
{
    return any.in() >>= val;
}
# 30 "../../include/OB/Messaging.h" 2
# 1 "../../include/OB/Messaging_fwd.h" 1
# 18 "../../include/OB/Messaging_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Messaging_fwd.h" 2
# 39 "../../include/OB/Messaging_fwd.h"
namespace Messaging
{

class RebindPolicy;
typedef RebindPolicy* RebindPolicy_ptr;
typedef RebindPolicy* RebindPolicyRef;

          extern OB::TypeCodeConst _tc_RebindPolicy;

class SyncScopePolicy;
typedef SyncScopePolicy* SyncScopePolicy_ptr;
typedef SyncScopePolicy* SyncScopePolicyRef;

          extern OB::TypeCodeConst _tc_SyncScopePolicy;

class RequestPriorityPolicy;
typedef RequestPriorityPolicy* RequestPriorityPolicy_ptr;
typedef RequestPriorityPolicy* RequestPriorityPolicyRef;

          extern OB::TypeCodeConst _tc_RequestPriorityPolicy;

class ReplyPriorityPolicy;
typedef ReplyPriorityPolicy* ReplyPriorityPolicy_ptr;
typedef ReplyPriorityPolicy* ReplyPriorityPolicyRef;

          extern OB::TypeCodeConst _tc_ReplyPriorityPolicy;

class RequestStartTimePolicy;
typedef RequestStartTimePolicy* RequestStartTimePolicy_ptr;
typedef RequestStartTimePolicy* RequestStartTimePolicyRef;

          extern OB::TypeCodeConst _tc_RequestStartTimePolicy;

class RequestEndTimePolicy;
typedef RequestEndTimePolicy* RequestEndTimePolicy_ptr;
typedef RequestEndTimePolicy* RequestEndTimePolicyRef;

          extern OB::TypeCodeConst _tc_RequestEndTimePolicy;

class ReplyStartTimePolicy;
typedef ReplyStartTimePolicy* ReplyStartTimePolicy_ptr;
typedef ReplyStartTimePolicy* ReplyStartTimePolicyRef;

          extern OB::TypeCodeConst _tc_ReplyStartTimePolicy;

class ReplyEndTimePolicy;
typedef ReplyEndTimePolicy* ReplyEndTimePolicy_ptr;
typedef ReplyEndTimePolicy* ReplyEndTimePolicyRef;

          extern OB::TypeCodeConst _tc_ReplyEndTimePolicy;

class RelativeRequestTimeoutPolicy;
typedef RelativeRequestTimeoutPolicy* RelativeRequestTimeoutPolicy_ptr;
typedef RelativeRequestTimeoutPolicy* RelativeRequestTimeoutPolicyRef;

          extern OB::TypeCodeConst _tc_RelativeRequestTimeoutPolicy;

class RelativeRoundTripTimeoutPolicy;
typedef RelativeRoundTripTimeoutPolicy* RelativeRoundTripTimeoutPolicy_ptr;
typedef RelativeRoundTripTimeoutPolicy* RelativeRoundTripTimeoutPolicyRef;

          extern OB::TypeCodeConst _tc_RelativeRoundTripTimeoutPolicy;

class RoutingPolicy;
typedef RoutingPolicy* RoutingPolicy_ptr;
typedef RoutingPolicy* RoutingPolicyRef;

          extern OB::TypeCodeConst _tc_RoutingPolicy;

class MaxHopsPolicy;
typedef MaxHopsPolicy* MaxHopsPolicy_ptr;
typedef MaxHopsPolicy* MaxHopsPolicyRef;

          extern OB::TypeCodeConst _tc_MaxHopsPolicy;

class QueueOrderPolicy;
typedef QueueOrderPolicy* QueueOrderPolicy_ptr;
typedef QueueOrderPolicy* QueueOrderPolicyRef;

          extern OB::TypeCodeConst _tc_QueueOrderPolicy;

}

void OBDuplicate(Messaging::RebindPolicy_ptr);
void OBRelease(Messaging::RebindPolicy_ptr);

void OBMarshal(Messaging::RebindPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::RebindPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::SyncScopePolicy_ptr);
void OBRelease(Messaging::SyncScopePolicy_ptr);

void OBMarshal(Messaging::SyncScopePolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::SyncScopePolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::RequestPriorityPolicy_ptr);
void OBRelease(Messaging::RequestPriorityPolicy_ptr);

void OBMarshal(Messaging::RequestPriorityPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::RequestPriorityPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::ReplyPriorityPolicy_ptr);
void OBRelease(Messaging::ReplyPriorityPolicy_ptr);

void OBMarshal(Messaging::ReplyPriorityPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::ReplyPriorityPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::RequestStartTimePolicy_ptr);
void OBRelease(Messaging::RequestStartTimePolicy_ptr);

void OBMarshal(Messaging::RequestStartTimePolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::RequestStartTimePolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::RequestEndTimePolicy_ptr);
void OBRelease(Messaging::RequestEndTimePolicy_ptr);

void OBMarshal(Messaging::RequestEndTimePolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::RequestEndTimePolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::ReplyStartTimePolicy_ptr);
void OBRelease(Messaging::ReplyStartTimePolicy_ptr);

void OBMarshal(Messaging::ReplyStartTimePolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::ReplyStartTimePolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::ReplyEndTimePolicy_ptr);
void OBRelease(Messaging::ReplyEndTimePolicy_ptr);

void OBMarshal(Messaging::ReplyEndTimePolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::ReplyEndTimePolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::RelativeRequestTimeoutPolicy_ptr);
void OBRelease(Messaging::RelativeRequestTimeoutPolicy_ptr);

void OBMarshal(Messaging::RelativeRequestTimeoutPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::RelativeRequestTimeoutPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::RelativeRoundTripTimeoutPolicy_ptr);
void OBRelease(Messaging::RelativeRoundTripTimeoutPolicy_ptr);

void OBMarshal(Messaging::RelativeRoundTripTimeoutPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::RelativeRoundTripTimeoutPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::RoutingPolicy_ptr);
void OBRelease(Messaging::RoutingPolicy_ptr);

void OBMarshal(Messaging::RoutingPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::RoutingPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::MaxHopsPolicy_ptr);
void OBRelease(Messaging::MaxHopsPolicy_ptr);

void OBMarshal(Messaging::MaxHopsPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::MaxHopsPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(Messaging::QueueOrderPolicy_ptr);
void OBRelease(Messaging::QueueOrderPolicy_ptr);

void OBMarshal(Messaging::QueueOrderPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(Messaging::QueueOrderPolicy_ptr&, OB::InputStreamImpl*);

namespace Messaging
{

typedef OB::ObjVar< RebindPolicy > RebindPolicy_var;
typedef OB::ObjOut< RebindPolicy > RebindPolicy_out;

typedef OB::ObjVar< SyncScopePolicy > SyncScopePolicy_var;
typedef OB::ObjOut< SyncScopePolicy > SyncScopePolicy_out;

typedef OB::ObjVar< RequestPriorityPolicy > RequestPriorityPolicy_var;
typedef OB::ObjOut< RequestPriorityPolicy > RequestPriorityPolicy_out;

typedef OB::ObjVar< ReplyPriorityPolicy > ReplyPriorityPolicy_var;
typedef OB::ObjOut< ReplyPriorityPolicy > ReplyPriorityPolicy_out;

typedef OB::ObjVar< RequestStartTimePolicy > RequestStartTimePolicy_var;
typedef OB::ObjOut< RequestStartTimePolicy > RequestStartTimePolicy_out;

typedef OB::ObjVar< RequestEndTimePolicy > RequestEndTimePolicy_var;
typedef OB::ObjOut< RequestEndTimePolicy > RequestEndTimePolicy_out;

typedef OB::ObjVar< ReplyStartTimePolicy > ReplyStartTimePolicy_var;
typedef OB::ObjOut< ReplyStartTimePolicy > ReplyStartTimePolicy_out;

typedef OB::ObjVar< ReplyEndTimePolicy > ReplyEndTimePolicy_var;
typedef OB::ObjOut< ReplyEndTimePolicy > ReplyEndTimePolicy_out;

typedef OB::ObjVar< RelativeRequestTimeoutPolicy > RelativeRequestTimeoutPolicy_var;
typedef OB::ObjOut< RelativeRequestTimeoutPolicy > RelativeRequestTimeoutPolicy_out;

typedef OB::ObjVar< RelativeRoundTripTimeoutPolicy > RelativeRoundTripTimeoutPolicy_var;
typedef OB::ObjOut< RelativeRoundTripTimeoutPolicy > RelativeRoundTripTimeoutPolicy_out;

typedef OB::ObjVar< RoutingPolicy > RoutingPolicy_var;
typedef OB::ObjOut< RoutingPolicy > RoutingPolicy_out;

typedef OB::ObjVar< MaxHopsPolicy > MaxHopsPolicy_var;
typedef OB::ObjOut< MaxHopsPolicy > MaxHopsPolicy_out;

typedef OB::ObjVar< QueueOrderPolicy > QueueOrderPolicy_var;
typedef OB::ObjOut< QueueOrderPolicy > QueueOrderPolicy_out;

}
# 31 "../../include/OB/Messaging.h" 2
# 42 "../../include/OB/Messaging.h"
namespace OBStubImpl_Messaging
{

}

namespace OBStubImpl_Messaging
{

}




namespace Messaging
{




typedef CORBA::Short RebindMode;
typedef CORBA::Short_out RebindMode_out;
          extern OB::TypeCodeConst _tc_RebindMode;




const RebindMode TRANSPARENT = 0;




const RebindMode NO_REBIND = 1;




const RebindMode NO_RECONNECT = 2;




typedef CORBA::Short SyncScope;
typedef CORBA::Short_out SyncScope_out;
          extern OB::TypeCodeConst _tc_SyncScope;




const SyncScope SYNC_NONE = 0;




const SyncScope SYNC_WITH_TRANSPORT = 1;




const SyncScope SYNC_WITH_SERVER = 2;




const SyncScope SYNC_WITH_TARGET = 3;




typedef CORBA::Short RoutingType;
typedef CORBA::Short_out RoutingType_out;
          extern OB::TypeCodeConst _tc_RoutingType;




const RoutingType ROUTE_NONE = 0;




const RoutingType ROUTE_FORWARD = 1;




const RoutingType ROUTE_STORE_AND_FORWARD = 2;




typedef CORBA::Short Priority;
typedef CORBA::Short_out Priority_out;
          extern OB::TypeCodeConst _tc_Priority;




typedef CORBA::UShort Ordering;
typedef CORBA::UShort_out Ordering_out;
          extern OB::TypeCodeConst _tc_Ordering;




const Ordering ORDER_ANY = 1;




const Ordering ORDER_TEMPORAL = 2;




const Ordering ORDER_PRIORITY = 4;




const Ordering ORDER_DEADLINE = 8;




const ::CORBA::PolicyType REBIND_POLICY_TYPE = 23U;




class RebindPolicy : virtual public ::CORBA::Policy
{
    RebindPolicy(const RebindPolicy&);
    void operator=(const RebindPolicy&);

protected:

    static const char* ids_[];

public:

    RebindPolicy() { }
    virtual ~RebindPolicy() { }

    typedef RebindPolicy_ptr _ptr_type;
    typedef RebindPolicy_var _var_type;

    static inline RebindPolicy_ptr
    _duplicate(RebindPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RebindPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RebindPolicy_ptr _narrow(CORBA::Object_ptr);

    static RebindPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual RebindMode rebind_mode() = 0;
};




const ::CORBA::PolicyType SYNC_SCOPE_POLICY_TYPE = 24U;




class SyncScopePolicy : virtual public ::CORBA::Policy
{
    SyncScopePolicy(const SyncScopePolicy&);
    void operator=(const SyncScopePolicy&);

protected:

    static const char* ids_[];

public:

    SyncScopePolicy() { }
    virtual ~SyncScopePolicy() { }

    typedef SyncScopePolicy_ptr _ptr_type;
    typedef SyncScopePolicy_var _var_type;

    static inline SyncScopePolicy_ptr
    _duplicate(SyncScopePolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline SyncScopePolicy_ptr
    _nil()
    {
        return 0;
    }

    static SyncScopePolicy_ptr _narrow(CORBA::Object_ptr);

    static SyncScopePolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual SyncScope synchronization() = 0;
};




const ::CORBA::PolicyType REQUEST_PRIORITY_POLICY_TYPE = 25U;




struct PriorityRange;
typedef OB::FixVar< PriorityRange > PriorityRange_var;
typedef PriorityRange& PriorityRange_out;

struct PriorityRange
{
    typedef PriorityRange_var _var_type;

    Priority min;
    Priority max;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(PriorityRange&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_PriorityRange;




class RequestPriorityPolicy : virtual public ::CORBA::Policy
{
    RequestPriorityPolicy(const RequestPriorityPolicy&);
    void operator=(const RequestPriorityPolicy&);

protected:

    static const char* ids_[];

public:

    RequestPriorityPolicy() { }
    virtual ~RequestPriorityPolicy() { }

    typedef RequestPriorityPolicy_ptr _ptr_type;
    typedef RequestPriorityPolicy_var _var_type;

    static inline RequestPriorityPolicy_ptr
    _duplicate(RequestPriorityPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RequestPriorityPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RequestPriorityPolicy_ptr _narrow(CORBA::Object_ptr);

    static RequestPriorityPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PriorityRange priority_range() = 0;
};




const ::CORBA::PolicyType REPLY_PRIORITY_POLICY_TYPE = 26U;




class ReplyPriorityPolicy : virtual public ::CORBA::Policy
{
    ReplyPriorityPolicy(const ReplyPriorityPolicy&);
    void operator=(const ReplyPriorityPolicy&);

protected:

    static const char* ids_[];

public:

    ReplyPriorityPolicy() { }
    virtual ~ReplyPriorityPolicy() { }

    typedef ReplyPriorityPolicy_ptr _ptr_type;
    typedef ReplyPriorityPolicy_var _var_type;

    static inline ReplyPriorityPolicy_ptr
    _duplicate(ReplyPriorityPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ReplyPriorityPolicy_ptr
    _nil()
    {
        return 0;
    }

    static ReplyPriorityPolicy_ptr _narrow(CORBA::Object_ptr);

    static ReplyPriorityPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PriorityRange priority_range() = 0;
};




const ::CORBA::PolicyType REQUEST_START_TIME_POLICY_TYPE = 27U;




class RequestStartTimePolicy : virtual public ::CORBA::Policy
{
    RequestStartTimePolicy(const RequestStartTimePolicy&);
    void operator=(const RequestStartTimePolicy&);

protected:

    static const char* ids_[];

public:

    RequestStartTimePolicy() { }
    virtual ~RequestStartTimePolicy() { }

    typedef RequestStartTimePolicy_ptr _ptr_type;
    typedef RequestStartTimePolicy_var _var_type;

    static inline RequestStartTimePolicy_ptr
    _duplicate(RequestStartTimePolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RequestStartTimePolicy_ptr
    _nil()
    {
        return 0;
    }

    static RequestStartTimePolicy_ptr _narrow(CORBA::Object_ptr);

    static RequestStartTimePolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::TimeBase::UtcT start_time() = 0;
};




const ::CORBA::PolicyType REQUEST_END_TIME_POLICY_TYPE = 28U;




class RequestEndTimePolicy : virtual public ::CORBA::Policy
{
    RequestEndTimePolicy(const RequestEndTimePolicy&);
    void operator=(const RequestEndTimePolicy&);

protected:

    static const char* ids_[];

public:

    RequestEndTimePolicy() { }
    virtual ~RequestEndTimePolicy() { }

    typedef RequestEndTimePolicy_ptr _ptr_type;
    typedef RequestEndTimePolicy_var _var_type;

    static inline RequestEndTimePolicy_ptr
    _duplicate(RequestEndTimePolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RequestEndTimePolicy_ptr
    _nil()
    {
        return 0;
    }

    static RequestEndTimePolicy_ptr _narrow(CORBA::Object_ptr);

    static RequestEndTimePolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::TimeBase::UtcT end_time() = 0;
};




const ::CORBA::PolicyType REPLY_START_TIME_POLICY_TYPE = 29U;




class ReplyStartTimePolicy : virtual public ::CORBA::Policy
{
    ReplyStartTimePolicy(const ReplyStartTimePolicy&);
    void operator=(const ReplyStartTimePolicy&);

protected:

    static const char* ids_[];

public:

    ReplyStartTimePolicy() { }
    virtual ~ReplyStartTimePolicy() { }

    typedef ReplyStartTimePolicy_ptr _ptr_type;
    typedef ReplyStartTimePolicy_var _var_type;

    static inline ReplyStartTimePolicy_ptr
    _duplicate(ReplyStartTimePolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ReplyStartTimePolicy_ptr
    _nil()
    {
        return 0;
    }

    static ReplyStartTimePolicy_ptr _narrow(CORBA::Object_ptr);

    static ReplyStartTimePolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::TimeBase::UtcT start_time() = 0;
};




const ::CORBA::PolicyType REPLY_END_TIME_POLICY_TYPE = 30U;




class ReplyEndTimePolicy : virtual public ::CORBA::Policy
{
    ReplyEndTimePolicy(const ReplyEndTimePolicy&);
    void operator=(const ReplyEndTimePolicy&);

protected:

    static const char* ids_[];

public:

    ReplyEndTimePolicy() { }
    virtual ~ReplyEndTimePolicy() { }

    typedef ReplyEndTimePolicy_ptr _ptr_type;
    typedef ReplyEndTimePolicy_var _var_type;

    static inline ReplyEndTimePolicy_ptr
    _duplicate(ReplyEndTimePolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ReplyEndTimePolicy_ptr
    _nil()
    {
        return 0;
    }

    static ReplyEndTimePolicy_ptr _narrow(CORBA::Object_ptr);

    static ReplyEndTimePolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::TimeBase::UtcT end_time() = 0;
};




const ::CORBA::PolicyType RELATIVE_REQ_TIMEOUT_POLICY_TYPE = 31U;




class RelativeRequestTimeoutPolicy : virtual public ::CORBA::Policy
{
    RelativeRequestTimeoutPolicy(const RelativeRequestTimeoutPolicy&);
    void operator=(const RelativeRequestTimeoutPolicy&);

protected:

    static const char* ids_[];

public:

    RelativeRequestTimeoutPolicy() { }
    virtual ~RelativeRequestTimeoutPolicy() { }

    typedef RelativeRequestTimeoutPolicy_ptr _ptr_type;
    typedef RelativeRequestTimeoutPolicy_var _var_type;

    static inline RelativeRequestTimeoutPolicy_ptr
    _duplicate(RelativeRequestTimeoutPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RelativeRequestTimeoutPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RelativeRequestTimeoutPolicy_ptr _narrow(CORBA::Object_ptr);

    static RelativeRequestTimeoutPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::TimeBase::TimeT relative_expiry() = 0;
};




const ::CORBA::PolicyType RELATIVE_RT_TIMEOUT_POLICY_TYPE = 32U;




class RelativeRoundTripTimeoutPolicy : virtual public ::CORBA::Policy
{
    RelativeRoundTripTimeoutPolicy(const RelativeRoundTripTimeoutPolicy&);
    void operator=(const RelativeRoundTripTimeoutPolicy&);

protected:

    static const char* ids_[];

public:

    RelativeRoundTripTimeoutPolicy() { }
    virtual ~RelativeRoundTripTimeoutPolicy() { }

    typedef RelativeRoundTripTimeoutPolicy_ptr _ptr_type;
    typedef RelativeRoundTripTimeoutPolicy_var _var_type;

    static inline RelativeRoundTripTimeoutPolicy_ptr
    _duplicate(RelativeRoundTripTimeoutPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RelativeRoundTripTimeoutPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RelativeRoundTripTimeoutPolicy_ptr _narrow(CORBA::Object_ptr);

    static RelativeRoundTripTimeoutPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::TimeBase::TimeT relative_expiry() = 0;
};




const ::CORBA::PolicyType ROUTING_POLICY_TYPE = 33U;




struct RoutingTypeRange;
typedef OB::FixVar< RoutingTypeRange > RoutingTypeRange_var;
typedef RoutingTypeRange& RoutingTypeRange_out;

struct RoutingTypeRange
{
    typedef RoutingTypeRange_var _var_type;

    RoutingType min;
    RoutingType max;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(RoutingTypeRange&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_RoutingTypeRange;




class RoutingPolicy : virtual public ::CORBA::Policy
{
    RoutingPolicy(const RoutingPolicy&);
    void operator=(const RoutingPolicy&);

protected:

    static const char* ids_[];

public:

    RoutingPolicy() { }
    virtual ~RoutingPolicy() { }

    typedef RoutingPolicy_ptr _ptr_type;
    typedef RoutingPolicy_var _var_type;

    static inline RoutingPolicy_ptr
    _duplicate(RoutingPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline RoutingPolicy_ptr
    _nil()
    {
        return 0;
    }

    static RoutingPolicy_ptr _narrow(CORBA::Object_ptr);

    static RoutingPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual RoutingTypeRange routing_range() = 0;
};




const ::CORBA::PolicyType MAX_HOPS_POLICY_TYPE = 34U;




class MaxHopsPolicy : virtual public ::CORBA::Policy
{
    MaxHopsPolicy(const MaxHopsPolicy&);
    void operator=(const MaxHopsPolicy&);

protected:

    static const char* ids_[];

public:

    MaxHopsPolicy() { }
    virtual ~MaxHopsPolicy() { }

    typedef MaxHopsPolicy_ptr _ptr_type;
    typedef MaxHopsPolicy_var _var_type;

    static inline MaxHopsPolicy_ptr
    _duplicate(MaxHopsPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline MaxHopsPolicy_ptr
    _nil()
    {
        return 0;
    }

    static MaxHopsPolicy_ptr _narrow(CORBA::Object_ptr);

    static MaxHopsPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::UShort max_hops() = 0;
};




const ::CORBA::PolicyType QUEUE_ORDER_POLICY_TYPE = 35U;




class QueueOrderPolicy : virtual public ::CORBA::Policy
{
    QueueOrderPolicy(const QueueOrderPolicy&);
    void operator=(const QueueOrderPolicy&);

protected:

    static const char* ids_[];

public:

    QueueOrderPolicy() { }
    virtual ~QueueOrderPolicy() { }

    typedef QueueOrderPolicy_ptr _ptr_type;
    typedef QueueOrderPolicy_var _var_type;

    static inline QueueOrderPolicy_ptr
    _duplicate(QueueOrderPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline QueueOrderPolicy_ptr
    _nil()
    {
        return 0;
    }

    static QueueOrderPolicy_ptr _narrow(CORBA::Object_ptr);

    static QueueOrderPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual Ordering allowed_orders() = 0;
};




struct PolicyValue;
typedef OB::VarVar< PolicyValue > PolicyValue_var;
typedef OB::VarOut< PolicyValue > PolicyValue_out;

struct PolicyValue
{



    PolicyValue() { }

    PolicyValue(const PolicyValue&);
    PolicyValue& operator=(const PolicyValue&);

    typedef PolicyValue_var _var_type;

    ::CORBA::PolicyType ptype;
    class OBUnique_pvalue { };
    typedef OB::FixSeq< CORBA::Octet, OBUnique_pvalue > _pvalue_seq;
    _pvalue_seq pvalue;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(PolicyValue&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_PolicyValue;




class OBUnique_PolicyValueSeq { };

typedef OB::VarSeq< PolicyValue, OBUnique_PolicyValueSeq > PolicyValueSeq;
typedef OB::SeqVar< OB::VarSeq< PolicyValue, OBUnique_PolicyValueSeq > > PolicyValueSeq_var;
typedef OB::SeqOut< OB::VarSeq< PolicyValue, OBUnique_PolicyValueSeq > > PolicyValueSeq_out;
          extern OB::TypeCodeConst _tc_PolicyValueSeq;

struct OBInfo_PolicyValueSeq : public OB::ConstructedInfo
{
    OBInfo_PolicyValueSeq() { }

    virtual void free(void* p) const
    {
        delete (PolicyValueSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new PolicyValueSeq(*(const PolicyValueSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




const ::IOP::ComponentId TAG_POLICIES = 2U;




const ::IOP::ServiceId INVOCATION_POLICIES = 7U;

}




namespace OBProxy_Messaging
{

}




namespace OBStubImpl_Messaging
{

}




namespace OBMarshalStubImpl_Messaging
{

}




namespace OBV_Messaging
{

}




namespace CORBA
{

inline void
release(::Messaging::RebindPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::RebindPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::RebindPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::RebindPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::RebindPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RebindPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::RebindPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::RebindPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::SyncScopePolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::SyncScopePolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::SyncScopePolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::SyncScopePolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::SyncScopePolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::SyncScopePolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::SyncScopePolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::SyncScopePolicy_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, Messaging::PriorityRange*);
void operator<<=(CORBA::Any&, const Messaging::PriorityRange&);
CORBA::Boolean operator>>=(const CORBA::Any&, const Messaging::PriorityRange*&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::PriorityRange* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const Messaging::PriorityRange& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const Messaging::PriorityRange*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::RequestPriorityPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::RequestPriorityPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::RequestPriorityPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::RequestPriorityPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::RequestPriorityPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RequestPriorityPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::RequestPriorityPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::RequestPriorityPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::ReplyPriorityPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::ReplyPriorityPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::ReplyPriorityPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::ReplyPriorityPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::ReplyPriorityPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::ReplyPriorityPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::ReplyPriorityPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::ReplyPriorityPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::RequestStartTimePolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::RequestStartTimePolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::RequestStartTimePolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::RequestStartTimePolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::RequestStartTimePolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RequestStartTimePolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::RequestStartTimePolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::RequestStartTimePolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::RequestEndTimePolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::RequestEndTimePolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::RequestEndTimePolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::RequestEndTimePolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::RequestEndTimePolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RequestEndTimePolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::RequestEndTimePolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::RequestEndTimePolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::ReplyStartTimePolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::ReplyStartTimePolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::ReplyStartTimePolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::ReplyStartTimePolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::ReplyStartTimePolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::ReplyStartTimePolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::ReplyStartTimePolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::ReplyStartTimePolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::ReplyEndTimePolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::ReplyEndTimePolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::ReplyEndTimePolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::ReplyEndTimePolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::ReplyEndTimePolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::ReplyEndTimePolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::ReplyEndTimePolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::ReplyEndTimePolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::RelativeRequestTimeoutPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::RelativeRequestTimeoutPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::RelativeRequestTimeoutPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::RelativeRequestTimeoutPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::RelativeRequestTimeoutPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RelativeRequestTimeoutPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::RelativeRequestTimeoutPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::RelativeRequestTimeoutPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::RelativeRoundTripTimeoutPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::RelativeRoundTripTimeoutPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::RelativeRoundTripTimeoutPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::RelativeRoundTripTimeoutPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::RelativeRoundTripTimeoutPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RelativeRoundTripTimeoutPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::RelativeRoundTripTimeoutPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::RelativeRoundTripTimeoutPolicy_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, Messaging::RoutingTypeRange*);
void operator<<=(CORBA::Any&, const Messaging::RoutingTypeRange&);
CORBA::Boolean operator>>=(const CORBA::Any&, const Messaging::RoutingTypeRange*&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RoutingTypeRange* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const Messaging::RoutingTypeRange& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const Messaging::RoutingTypeRange*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::RoutingPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::RoutingPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::RoutingPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::RoutingPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::RoutingPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::RoutingPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::RoutingPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::RoutingPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::MaxHopsPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::MaxHopsPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::MaxHopsPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::MaxHopsPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::MaxHopsPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::MaxHopsPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::MaxHopsPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::MaxHopsPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::Messaging::QueueOrderPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::Messaging::QueueOrderPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, Messaging::QueueOrderPolicy_ptr*);
void operator<<=(CORBA::Any&, Messaging::QueueOrderPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, Messaging::QueueOrderPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::QueueOrderPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, Messaging::QueueOrderPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, Messaging::QueueOrderPolicy_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, Messaging::PolicyValue*);
void operator<<=(CORBA::Any&, const Messaging::PolicyValue&);
CORBA::Boolean operator>>=(const CORBA::Any&, const Messaging::PolicyValue*&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::PolicyValue* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const Messaging::PolicyValue& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const Messaging::PolicyValue*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, Messaging::PolicyValueSeq*);
void operator<<=(CORBA::Any&, const Messaging::PolicyValueSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const Messaging::PolicyValueSeq*&);

inline void
operator<<=(CORBA::Any_var& any, Messaging::PolicyValueSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const Messaging::PolicyValueSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const Messaging::PolicyValueSeq*& val)
{
    return any.in() >>= val;
}
# 30 "../../include/OB/OBORB.h" 2
# 1 "../../include/OB/IFR1.h" 1
# 27 "../../include/OB/IFR1.h"
# 1 "../../include/OB/Types.h" 1
# 28 "../../include/OB/IFR1.h" 2
# 1 "../../include/OB/IFR1_fwd.h" 1
# 18 "../../include/OB/IFR1_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/IFR1_fwd.h" 2
# 39 "../../include/OB/IFR1_fwd.h"
namespace CORBA
{

class IRObject;
typedef IRObject* IRObject_ptr;
typedef IRObject* IRObjectRef;

          extern OB::TypeCodeConst _tc_IRObject;

class IDLType;
typedef IDLType* IDLType_ptr;
typedef IDLType* IDLTypeRef;

          extern OB::TypeCodeConst _tc_IDLType;

}

void OBDuplicate(CORBA::IRObject_ptr);
void OBRelease(CORBA::IRObject_ptr);

void OBMarshal(CORBA::IRObject_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::IRObject_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::IDLType_ptr);
void OBRelease(CORBA::IDLType_ptr);

void OBMarshal(CORBA::IDLType_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::IDLType_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< IRObject > IRObject_var;
typedef OB::ObjOut< IRObject > IRObject_out;

typedef OB::ObjVar< IDLType > IDLType_var;
typedef OB::ObjOut< IDLType > IDLType_out;

}
# 29 "../../include/OB/IFR1.h" 2
# 40 "../../include/OB/IFR1.h"
namespace OBStubImpl_CORBA
{

class IRObject;
typedef IRObject* IRObject_ptr;

class IDLType;
typedef IDLType* IDLType_ptr;

}

void OBDuplicate(OBStubImpl_CORBA::IRObject_ptr);
void OBRelease(OBStubImpl_CORBA::IRObject_ptr);

void OBDuplicate(OBStubImpl_CORBA::IDLType_ptr);
void OBRelease(OBStubImpl_CORBA::IDLType_ptr);

namespace OBStubImpl_CORBA
{

typedef OB::ObjVar< IRObject > IRObject_var;

typedef OB::ObjVar< IDLType > IDLType_var;

}




namespace CORBA
{




enum DefinitionKind
{
    dk_none,
    dk_all,
    dk_Attribute,
    dk_Constant,
    dk_Exception,
    dk_Interface,
    dk_Module,
    dk_Operation,
    dk_Typedef,
    dk_Alias,
    dk_Struct,
    dk_Union,
    dk_Enum,
    dk_Primitive,
    dk_String,
    dk_Sequence,
    dk_Array,
    dk_Repository,
    dk_Wstring,
    dk_Fixed,
    dk_Value,
    dk_ValueBox,
    dk_ValueMember,
    dk_Native,
    dk_AbstractInterface,
    dk_LocalInterface
};

typedef DefinitionKind& DefinitionKind_out;

          extern OB::TypeCodeConst _tc_DefinitionKind;




class IRObject : virtual public CORBA::Object
{
    IRObject(const IRObject&);
    void operator=(const IRObject&);

protected:

    static const char* ids_[];

public:

    IRObject() { }
    virtual ~IRObject() { }

    typedef IRObject_ptr _ptr_type;
    typedef IRObject_var _var_type;

    static inline IRObject_ptr
    _duplicate(IRObject_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline IRObject_ptr
    _nil()
    {
        return 0;
    }

    static IRObject_ptr _narrow(CORBA::Object_ptr);
    static IRObject_ptr _unchecked_narrow(CORBA::Object_ptr);

    static IRObject_ptr _narrow(CORBA::AbstractBase_ptr);
    static IRObject_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual DefinitionKind def_kind() = 0;




    virtual void destroy() = 0;
};




class IDLType : virtual public ::CORBA::IRObject
{
    IDLType(const IDLType&);
    void operator=(const IDLType&);

protected:

    static const char* ids_[];

public:

    IDLType() { }
    virtual ~IDLType() { }

    typedef IDLType_ptr _ptr_type;
    typedef IDLType_var _var_type;

    static inline IDLType_ptr
    _duplicate(IDLType_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline IDLType_ptr
    _nil()
    {
        return 0;
    }

    static IDLType_ptr _narrow(CORBA::Object_ptr);
    static IDLType_ptr _unchecked_narrow(CORBA::Object_ptr);

    static IDLType_ptr _narrow(CORBA::AbstractBase_ptr);
    static IDLType_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::TypeCode_ptr type() = 0;
};




struct StructMember;
typedef OB::VarVar< StructMember > StructMember_var;
typedef OB::VarOut< StructMember > StructMember_out;

struct StructMember
{
    StructMember() { }
    StructMember(const StructMember&);
    StructMember& operator=(const StructMember&);

    typedef StructMember_var _var_type;

    OB::StrForStruct name;
    CORBA::TypeCode_var type;
    IDLType_var type_def;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(StructMember&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_StructMember;




class OBUnique_StructMemberSeq { };

typedef OB::VarSeq< StructMember, OBUnique_StructMemberSeq > StructMemberSeq;
typedef OB::SeqVar< OB::VarSeq< StructMember, OBUnique_StructMemberSeq > > StructMemberSeq_var;
typedef OB::SeqOut< OB::VarSeq< StructMember, OBUnique_StructMemberSeq > > StructMemberSeq_out;
          extern OB::TypeCodeConst _tc_StructMemberSeq;

struct OBInfo_StructMemberSeq : public OB::ConstructedInfo
{
    OBInfo_StructMemberSeq() { }

    virtual void free(void* p) const
    {
        delete (StructMemberSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new StructMemberSeq(*(const StructMemberSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




struct Initializer;
typedef OB::VarVar< Initializer > Initializer_var;
typedef OB::VarOut< Initializer > Initializer_out;

struct Initializer
{
    Initializer() { }
    Initializer(const Initializer&);
    Initializer& operator=(const Initializer&);

    typedef Initializer_var _var_type;

    StructMemberSeq members;
    OB::StrForStruct name;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(Initializer&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_Initializer;




class OBUnique_InitializerSeq { };

typedef OB::VarSeq< Initializer, OBUnique_InitializerSeq > InitializerSeq;
typedef OB::SeqVar< OB::VarSeq< Initializer, OBUnique_InitializerSeq > > InitializerSeq_var;
typedef OB::SeqOut< OB::VarSeq< Initializer, OBUnique_InitializerSeq > > InitializerSeq_out;
          extern OB::TypeCodeConst _tc_InitializerSeq;

struct OBInfo_InitializerSeq : public OB::ConstructedInfo
{
    OBInfo_InitializerSeq() { }

    virtual void free(void* p) const
    {
        delete (InitializerSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new InitializerSeq(*(const InitializerSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




struct UnionMember;
typedef OB::VarVar< UnionMember > UnionMember_var;
typedef OB::VarOut< UnionMember > UnionMember_out;

struct UnionMember
{
    UnionMember() { }
    UnionMember(const UnionMember&);
    UnionMember& operator=(const UnionMember&);

    typedef UnionMember_var _var_type;

    OB::StrForStruct name;
    CORBA::Any label;
    CORBA::TypeCode_var type;
    IDLType_var type_def;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(UnionMember&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_UnionMember;




class OBUnique_UnionMemberSeq { };

typedef OB::VarSeq< UnionMember, OBUnique_UnionMemberSeq > UnionMemberSeq;
typedef OB::SeqVar< OB::VarSeq< UnionMember, OBUnique_UnionMemberSeq > > UnionMemberSeq_var;
typedef OB::SeqOut< OB::VarSeq< UnionMember, OBUnique_UnionMemberSeq > > UnionMemberSeq_out;
          extern OB::TypeCodeConst _tc_UnionMemberSeq;

struct OBInfo_UnionMemberSeq : public OB::ConstructedInfo
{
    OBInfo_UnionMemberSeq() { }

    virtual void free(void* p) const
    {
        delete (UnionMemberSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new UnionMemberSeq(*(const UnionMemberSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_EnumMemberSeq { };

typedef OB::StrSeq< OBUnique_EnumMemberSeq > EnumMemberSeq;
typedef OB::SeqVar< OB::StrSeq< OBUnique_EnumMemberSeq > > EnumMemberSeq_var;
typedef OB::SeqOut< OB::StrSeq< OBUnique_EnumMemberSeq > > EnumMemberSeq_out;
          extern OB::TypeCodeConst _tc_EnumMemberSeq;

struct OBInfo_EnumMemberSeq : public OB::ConstructedInfo
{
    OBInfo_EnumMemberSeq() { }

    virtual void free(void* p) const
    {
        delete (EnumMemberSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new EnumMemberSeq(*(const EnumMemberSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef CORBA::Short ValueModifier;
typedef CORBA::Short_out ValueModifier_out;
          extern OB::TypeCodeConst _tc_ValueModifier;




const ValueModifier VM_NONE = 0;




const ValueModifier VM_CUSTOM = 1;




const ValueModifier VM_ABSTRACT = 2;




const ValueModifier VM_TRUNCATABLE = 3;




typedef CORBA::Short Visibility;
typedef CORBA::Short_out Visibility_out;
          extern OB::TypeCodeConst _tc_Visibility;




const Visibility PRIVATE_MEMBER = 0;




const Visibility PUBLIC_MEMBER = 1;




struct ValueMember;
typedef OB::VarVar< ValueMember > ValueMember_var;
typedef OB::VarOut< ValueMember > ValueMember_out;

struct ValueMember
{



    ValueMember() { }

    ValueMember(const ValueMember&);
    ValueMember& operator=(const ValueMember&);

    typedef ValueMember_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    CORBA::TypeCode_var type;
    IDLType_var type_def;
    Visibility access;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ValueMember&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ValueMember;




class OBUnique_ValueMemberSeq { };

typedef OB::VarSeq< ValueMember, OBUnique_ValueMemberSeq > ValueMemberSeq;
typedef OB::SeqVar< OB::VarSeq< ValueMember, OBUnique_ValueMemberSeq > > ValueMemberSeq_var;
typedef OB::SeqOut< OB::VarSeq< ValueMember, OBUnique_ValueMemberSeq > > ValueMemberSeq_out;
          extern OB::TypeCodeConst _tc_ValueMemberSeq;

struct OBInfo_ValueMemberSeq : public OB::ConstructedInfo
{
    OBInfo_ValueMemberSeq() { }

    virtual void free(void* p) const
    {
        delete (ValueMemberSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ValueMemberSeq(*(const ValueMemberSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};

}




namespace OBProxy_CORBA
{




class IRObject : virtual public ::CORBA::IRObject,
                 virtual public OBCORBA::Object
{
    IRObject(const IRObject&);
    void operator=(const IRObject&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    IRObject() { }
    virtual ~IRObject() { }

    virtual const char** _OB_ids() const;




    ::CORBA::DefinitionKind def_kind();




    void destroy();
};




class IDLType : virtual public ::CORBA::IDLType,
                virtual public OBProxy_CORBA::IRObject
{
    IDLType(const IDLType&);
    void operator=(const IDLType&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    IDLType() { }
    virtual ~IDLType() { }

    virtual const char** _OB_ids() const;




    CORBA::TypeCode_ptr type();
};

}




namespace OBStubImpl_CORBA
{




class IRObject : virtual public OB::StubImplBase
{
    IRObject(const IRObject&);
    void operator=(const IRObject&);

protected:

    IRObject() { }

public:

    static inline IRObject_ptr
    _duplicate(IRObject_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline IRObject_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::DefinitionKind def_kind() = 0;




    virtual void destroy() = 0;
};




class IDLType : virtual public OBStubImpl_CORBA::IRObject
{
    IDLType(const IDLType&);
    void operator=(const IDLType&);

protected:

    IDLType() { }

public:

    static inline IDLType_ptr
    _duplicate(IDLType_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline IDLType_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::TypeCode_ptr type() = 0;
};

}




namespace OBMarshalStubImpl_CORBA
{




class IRObject : virtual public OBStubImpl_CORBA::IRObject,
                 virtual public OB::MarshalStubImpl
{
    IRObject(const IRObject&);
    void operator=(const IRObject&);

protected:

    IRObject() { }
    friend class OBProxy_CORBA::IRObject;

public:




    virtual ::CORBA::DefinitionKind def_kind();




    virtual void destroy();
};




class IDLType : virtual public OBStubImpl_CORBA::IDLType,
                virtual public OBMarshalStubImpl_CORBA::IRObject
{
    IDLType(const IDLType&);
    void operator=(const IDLType&);

protected:

    IDLType() { }
    friend class OBProxy_CORBA::IDLType;

public:




    virtual CORBA::TypeCode_ptr type();
};

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::DefinitionKind);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::DefinitionKind&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::DefinitionKind val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::DefinitionKind& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::IRObject_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::IRObject_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::IRObject_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::IRObject_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::IRObject_ptr*);
void operator<<=(CORBA::Any&, CORBA::IRObject_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::IRObject_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::IRObject_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::IRObject_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::IRObject_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::IDLType_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::IDLType_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::IDLType_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::IDLType_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::IDLType_ptr*);
void operator<<=(CORBA::Any&, CORBA::IDLType_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::IDLType_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::IDLType_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::IDLType_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::IDLType_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::StructMember*);
void operator<<=(CORBA::Any&, const CORBA::StructMember&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::StructMember*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::StructMember* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::StructMember& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::StructMember*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::StructMemberSeq*);
void operator<<=(CORBA::Any&, const CORBA::StructMemberSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::StructMemberSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::StructMemberSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::StructMemberSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::StructMemberSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::Initializer*);
void operator<<=(CORBA::Any&, const CORBA::Initializer&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::Initializer*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Initializer* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::Initializer& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::Initializer*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::InitializerSeq*);
void operator<<=(CORBA::Any&, const CORBA::InitializerSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::InitializerSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::InitializerSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::InitializerSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::InitializerSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::UnionMember*);
void operator<<=(CORBA::Any&, const CORBA::UnionMember&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::UnionMember*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::UnionMember* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::UnionMember& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::UnionMember*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::UnionMemberSeq*);
void operator<<=(CORBA::Any&, const CORBA::UnionMemberSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::UnionMemberSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::UnionMemberSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::UnionMemberSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::UnionMemberSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::EnumMemberSeq*);
void operator<<=(CORBA::Any&, const CORBA::EnumMemberSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::EnumMemberSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::EnumMemberSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::EnumMemberSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::EnumMemberSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ValueMember*);
void operator<<=(CORBA::Any&, const CORBA::ValueMember&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ValueMember*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueMember* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ValueMember& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ValueMember*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ValueMemberSeq*);
void operator<<=(CORBA::Any&, const CORBA::ValueMemberSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ValueMemberSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueMemberSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ValueMemberSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ValueMemberSeq*& val)
{
    return any.in() >>= val;
}
# 31 "../../include/OB/OBORB.h" 2
# 1 "../../include/OB/ServiceInfo.h" 1
# 27 "../../include/OB/ServiceInfo.h"
# 1 "../../include/OB/ServiceInfo_fwd.h" 1
# 18 "../../include/OB/ServiceInfo_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/ServiceInfo_fwd.h" 2
# 39 "../../include/OB/ServiceInfo_fwd.h"
namespace CORBA
{

}

namespace CORBA
{

}
# 28 "../../include/OB/ServiceInfo.h" 2
# 39 "../../include/OB/ServiceInfo.h"
namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




typedef CORBA::UShort ServiceType;
typedef CORBA::UShort_out ServiceType_out;
          extern OB::TypeCodeConst _tc_ServiceType;




typedef CORBA::ULong ServiceOption;
typedef CORBA::ULong_out ServiceOption_out;
          extern OB::TypeCodeConst _tc_ServiceOption;




typedef CORBA::ULong ServiceDetailType;
typedef CORBA::ULong_out ServiceDetailType_out;
          extern OB::TypeCodeConst _tc_ServiceDetailType;




const ServiceType Security = 1;




struct ServiceDetail;
typedef OB::VarVar< ServiceDetail > ServiceDetail_var;
typedef OB::VarOut< ServiceDetail > ServiceDetail_out;

struct ServiceDetail
{



    ServiceDetail() { }

    ServiceDetail(const ServiceDetail&);
    ServiceDetail& operator=(const ServiceDetail&);

    typedef ServiceDetail_var _var_type;

    ServiceDetailType service_detail_type;
    class OBUnique_service_detail { };
    typedef OB::FixSeq< CORBA::Octet, OBUnique_service_detail > _service_detail_seq;
    _service_detail_seq service_detail;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ServiceDetail&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ServiceDetail;




struct ServiceInformation;
typedef OB::VarVar< ServiceInformation > ServiceInformation_var;
typedef OB::VarOut< ServiceInformation > ServiceInformation_out;

struct ServiceInformation
{
    ServiceInformation() { }
    ServiceInformation(const ServiceInformation&);
    ServiceInformation& operator=(const ServiceInformation&);

    typedef ServiceInformation_var _var_type;

    class OBUnique_service_options { };
    typedef OB::FixSeq< ServiceOption, OBUnique_service_options > _service_options_seq;
    _service_options_seq service_options;
    class OBUnique_service_details { };
    typedef OB::VarSeq< ServiceDetail, OBUnique_service_details > _service_details_seq;
    _service_details_seq service_details;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ServiceInformation&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ServiceInformation;

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::ServiceDetail*);
void operator<<=(CORBA::Any&, const CORBA::ServiceDetail&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ServiceDetail*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ServiceDetail* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ServiceDetail& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ServiceDetail*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ServiceInformation*);
void operator<<=(CORBA::Any&, const CORBA::ServiceInformation&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ServiceInformation*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ServiceInformation* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ServiceInformation& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ServiceInformation*& val)
{
    return any.in() >>= val;
}
# 32 "../../include/OB/OBORB.h" 2
# 1 "../../include/OB/Native.h" 1
# 33 "../../include/OB/OBORB.h" 2
# 1 "../../include/OB/OBORB_fwd.h" 1
# 34 "../../include/OB/OBORB.h" 2
# 45 "../../include/OB/OBORB.h"
namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_OB
{

}

namespace OBStubImpl_OBCORBA
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_OB
{

}

namespace OBStubImpl_OBCORBA
{

}




namespace CORBA
{




class ORB : virtual public CORBA::Object
{
    ORB(const ORB&);
    void operator=(const ORB&);

protected:

    static const char* ids_[];

public:

    ORB() { }
    virtual ~ORB() { }

    typedef ORB_ptr _ptr_type;
    typedef ORB_var _var_type;

    static inline ORB_ptr
    _duplicate(ORB_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ORB_ptr
    _nil()
    {
        return 0;
    }

    static ORB_ptr _narrow(CORBA::Object_ptr);

    static ORB_ptr _narrow(CORBA::AbstractBase_ptr);





    typedef char* ObjectId;
    typedef CORBA::String_var ObjectId_var;
    typedef CORBA::String_out ObjectId_out;




    class OBUnique_ObjectIdList { };

    typedef OB::StrSeq< OBUnique_ObjectIdList > ObjectIdList;
    typedef OB::SeqVar< OB::StrSeq< OBUnique_ObjectIdList > > ObjectIdList_var;
    typedef OB::SeqOut< OB::StrSeq< OBUnique_ObjectIdList > > ObjectIdList_out;




    struct InvalidName : public CORBA::UserException
    {
        InvalidName() { }
        InvalidName(const InvalidName&);
        InvalidName& operator=(const InvalidName&);

        static InvalidName* _downcast(CORBA::Exception*);
        static const InvalidName* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(InvalidName&, OB::InputStreamImpl*);
    };




    virtual char* object_to_string(CORBA::Object_ptr obj) = 0;




    virtual CORBA::Object_ptr string_to_object(const char* str) = 0;




    virtual void create_list(CORBA::Long count,
                             NVList_out new_list) = 0;




    virtual void create_operation_list(OperationDef_ptr oper,
                                       NVList_out new_list) = 0;




    virtual void get_default_context(Context_out ctx) = 0;




    virtual void create_named_value(NamedValue_out nmval) = 0;




    virtual void create_exception_list(ExceptionList_out exclist) = 0;




    virtual void create_context_list(ContextList_out ctxtlist) = 0;




    virtual void create_environment(Environment_out new_env) = 0;




    class OBUnique_RequestSeq { };

    typedef OB::ObjSeq< Request, OBUnique_RequestSeq > RequestSeq;
    typedef OB::SeqVar< OB::ObjSeq< Request, OBUnique_RequestSeq > > RequestSeq_var;
    typedef OB::SeqOut< OB::ObjSeq< Request, OBUnique_RequestSeq > > RequestSeq_out;




    virtual void send_multiple_requests_oneway(const RequestSeq& req) = 0;




    virtual void send_multiple_requests_deferred(const RequestSeq& req) = 0;




    virtual CORBA::Boolean poll_next_response() = 0;




    virtual void get_next_response(Request_out req) = 0;




    virtual CORBA::Boolean get_service_information(ServiceType service_type,
                                                   ServiceInformation_out service_information) = 0;




    virtual ObjectIdList* list_initial_services() = 0;




    virtual CORBA::Object_ptr resolve_initial_references(const char* identifier) = 0;




    virtual void register_initial_reference(const char* id,
                                            CORBA::Object_ptr obj) = 0;




    virtual CORBA::TypeCode_ptr create_struct_tc(const char* id,
                                                 const char* name,
                                                 const StructMemberSeq& members) = 0;




    virtual CORBA::TypeCode_ptr create_union_tc(const char* id,
                                                const char* name,
                                                CORBA::TypeCode_ptr discriminator_type,
                                                const UnionMemberSeq& members) = 0;




    virtual CORBA::TypeCode_ptr create_enum_tc(const char* id,
                                               const char* name,
                                               const EnumMemberSeq& members) = 0;




    virtual CORBA::TypeCode_ptr create_alias_tc(const char* id,
                                                const char* name,
                                                CORBA::TypeCode_ptr original_type) = 0;




    virtual CORBA::TypeCode_ptr create_exception_tc(const char* id,
                                                    const char* name,
                                                    const StructMemberSeq& members) = 0;




    virtual CORBA::TypeCode_ptr create_interface_tc(const char* id,
                                                    const char* name) = 0;




    virtual CORBA::TypeCode_ptr create_string_tc(CORBA::ULong bound) = 0;




    virtual CORBA::TypeCode_ptr create_wstring_tc(CORBA::ULong bound) = 0;




    virtual CORBA::TypeCode_ptr create_fixed_tc(CORBA::UShort digits,
                                                CORBA::Short scale) = 0;




    virtual CORBA::TypeCode_ptr create_sequence_tc(CORBA::ULong bound,
                                                   CORBA::TypeCode_ptr element_type) = 0;




    virtual CORBA::TypeCode_ptr create_array_tc(CORBA::ULong length,
                                                CORBA::TypeCode_ptr element_type) = 0;




    virtual CORBA::TypeCode_ptr create_value_tc(const char* id,
                                                const char* name,
                                                ValueModifier type_modifier,
                                                CORBA::TypeCode_ptr concrete_base,
                                                const ValueMemberSeq& members) = 0;




    virtual CORBA::TypeCode_ptr create_value_box_tc(const char* id,
                                                    const char* name,
                                                    CORBA::TypeCode_ptr boxed_type) = 0;




    virtual CORBA::TypeCode_ptr create_native_tc(const char* id,
                                                 const char* name) = 0;




    virtual CORBA::TypeCode_ptr create_recursive_tc(const char* id) = 0;




    virtual CORBA::TypeCode_ptr create_abstract_interface_tc(const char* id,
                                                             const char* name) = 0;




    virtual CORBA::TypeCode_ptr create_local_interface_tc(const char* id,
                                                          const char* name) = 0;




    virtual CORBA::Boolean work_pending() = 0;




    virtual void perform_work() = 0;




    virtual void run() = 0;




    virtual void shutdown(CORBA::Boolean wait_for_completion) = 0;




    virtual void destroy() = 0;




    virtual Policy_ptr create_policy(PolicyType type,
                                     const CORBA::Any& val) = 0;




    virtual ValueFactory register_value_factory(const char* id,
                                                ValueFactory fact) = 0;




    virtual void unregister_value_factory(const char* id) = 0;




    virtual ValueFactory lookup_value_factory(const char* id) = 0;
};

}




namespace OB
{




typedef OBNative_OB::PropertySet PropertySet;

}




namespace OBCORBA
{




class ORB : virtual public ::CORBA::ORB
{
    ORB(const ORB&);
    void operator=(const ORB&);

protected:

    static const char* ids_[];

public:

    ORB() { }
    virtual ~ORB() { }

    typedef ORB_ptr _ptr_type;
    typedef ORB_var _var_type;

    static inline ORB_ptr
    _duplicate(ORB_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ORB_ptr
    _nil()
    {
        return 0;
    }

    static ORB_ptr _narrow(CORBA::Object_ptr);

    static ORB_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::OB::PropertySet properties() = 0;




    virtual ::OB::Logger_ptr logger() = 0;




    virtual ::OB::Reactor_ptr reactor() = 0;




    virtual ::OB::UnknownExceptionStrategy_ptr set_unknown_exception_strategy(::OB::UnknownExceptionStrategy_ptr strategy) = 0;




    virtual ::OB::ConnectionReusePolicy_ptr create_connection_reuse_policy(CORBA::Boolean value) = 0;




    virtual ::OB::ProtocolPolicy_ptr create_protocol_policy(const ::OCI::PluginIdSeq& value) = 0;




    virtual ::OB::RetryPolicy_ptr create_retry_policy(CORBA::Short mode,
                                                      CORBA::ULong interval,
                                                      CORBA::ULong max,
                                                      CORBA::Boolean remote) = 0;




    virtual ::OB::TimeoutPolicy_ptr create_timeout_policy(CORBA::ULong value) = 0;




    virtual ::OB::LocationTransparencyPolicy_ptr create_location_transparency_policy(CORBA::Short value) = 0;




    virtual ::Messaging::SyncScopePolicy_ptr create_sync_scope_policy(::Messaging::SyncScope value) = 0;




    virtual ::OB::InterceptorPolicy_ptr create_interceptor_policy(CORBA::Boolean value) = 0;




    virtual ::OB::ConnectTimeoutPolicy_ptr create_connection_timeout_policy(CORBA::ULong value) = 0;




    virtual ::OB::RequestTimeoutPolicy_ptr create_request_timeout_policy(CORBA::ULong value) = 0;
};

}




namespace OBProxy_CORBA
{

}




namespace OBProxy_OB
{

}




namespace OBProxy_OBCORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBStubImpl_OB
{

}




namespace OBStubImpl_OBCORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_OB
{

}




namespace OBMarshalStubImpl_OBCORBA
{

}




namespace OBV_CORBA
{

}




namespace OBV_OB
{

}




namespace OBV_OBCORBA
{

}




namespace CORBA
{

inline void
release(::CORBA::ORB_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ORB_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OBCORBA::ORB_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBCORBA::ORB_ptr p)
{
    return p == 0;
}

}
# 18 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/ORB_init.h" 1
# 14 "../../include/OB/ORB_init.h"
# 1 "../../include/OB/OBORB_fwd.h" 1
# 15 "../../include/OB/ORB_init.h" 2
# 1 "../../include/OB/Properties_fwd.h" 1
# 16 "../../include/OB/ORB_init.h" 2
# 1 "../../include/OB/Logger_fwd.h" 1
# 17 "../../include/OB/ORB_init.h" 2
# 1 "../../include/OB/Reactor_fwd.h" 1
# 18 "../../include/OB/ORB_init.h" 2

namespace CORBA
{




ORB_ptr ORB_init(int&, char**, const char* = "", const char* = "4.1.0b1");

typedef char* ORBid;

}

namespace OBCORBA
{




OBCORBA::ORB_ptr
ORB_init(int&, char**, OB::Properties_ptr, OB::Logger_ptr,
         OB::Reactor_ptr = 0, const char* = "", const char* = "4.1.0b1");

OBCORBA::ORB_ptr
ORB_init(int&, char**, OB::Properties_ptr, const char* = "",
         const char* = "4.1.0b1");

}

namespace OB
{




void
ParseArgs(int&, char**, Properties_ptr, Logger_ptr = 0);

}
# 19 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/Current.h" 1
# 27 "../../include/OB/Current.h"
# 1 "../../include/OB/Current_fwd.h" 1
# 18 "../../include/OB/Current_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/Current_fwd.h" 2
# 39 "../../include/OB/Current_fwd.h"
namespace CORBA
{

class Current;
typedef Current* Current_ptr;
typedef Current* CurrentRef;

}

void OBDuplicate(CORBA::Current_ptr);
void OBRelease(CORBA::Current_ptr);

void OBMarshal(CORBA::Current_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Current_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< Current > Current_var;
typedef OB::ObjOut< Current > Current_out;

}
# 28 "../../include/OB/Current.h" 2
# 39 "../../include/OB/Current.h"
namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




class Current : virtual public CORBA::Object
{
    Current(const Current&);
    void operator=(const Current&);

protected:

    static const char* ids_[];

public:

    Current() { }
    virtual ~Current() { }

    typedef Current_ptr _ptr_type;
    typedef Current_var _var_type;

    static inline Current_ptr
    _duplicate(Current_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Current_ptr
    _nil()
    {
        return 0;
    }

    static Current_ptr _narrow(CORBA::Object_ptr);

    static Current_ptr _narrow(CORBA::AbstractBase_ptr);

};

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




namespace CORBA
{

inline void
release(::CORBA::Current_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::Current_ptr p)
{
    return p == 0;
}

}
# 20 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/StringValue.h" 1
# 27 "../../include/OB/StringValue.h"
# 1 "../../include/OB/StringValue_fwd.h" 1
# 18 "../../include/OB/StringValue_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/StringValue_fwd.h" 2
# 39 "../../include/OB/StringValue_fwd.h"
namespace CORBA
{

class StringValue;

class WStringValue;

}

void OBDuplicate(CORBA::StringValue*);
void OBRelease(CORBA::StringValue*);

void OBMarshal(CORBA::StringValue*, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::StringValue*&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::WStringValue*);
void OBRelease(CORBA::WStringValue*);

void OBMarshal(CORBA::WStringValue*, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::WStringValue*&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< StringValue > StringValue_var;
typedef OB::ObjOut< StringValue > StringValue_out;

typedef OB::ObjVar< WStringValue > WStringValue_var;
typedef OB::ObjOut< WStringValue > WStringValue_out;

}
# 28 "../../include/OB/StringValue.h" 2
# 39 "../../include/OB/StringValue.h"
namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




class StringValue : virtual public CORBA::DefaultValueRefCountBase
{
    static const char* _ob_id_;
    CORBA::String_var _ob_v_;

    StringValue& operator=(const StringValue&);

protected:

    virtual ~StringValue() { }

public:

    StringValue()
        : _ob_v_((const char*)"") { }

    StringValue(const StringValue& _ob_a)
        : _ob_v_(_ob_a._ob_v_) { }

    StringValue(char* _ob_a)
        : _ob_v_(_ob_a) { }

    StringValue(const char* _ob_a)
        : _ob_v_(_ob_a) { }

    StringValue(const CORBA::String_var& _ob_a)
        : _ob_v_(_ob_a) { }

    StringValue& operator=(char* _ob_a)
    {
        _ob_v_ = _ob_a;
        return *this;
    }

    StringValue& operator=(const char* _ob_a)
    {
        _ob_v_ = _ob_a;
        return *this;
    }

    StringValue& operator=(const CORBA::String_var& _ob_a)
    {
        _ob_v_ = _ob_a;
        return *this;
    }

    const char* _value() const { return _ob_v_.in(); }

    void _value(char* _ob_a) { _ob_v_ = _ob_a; }
    void _value(const char* _ob_a) { _ob_v_ = _ob_a; }
    void _value(const CORBA::String_var& _ob_a) { _ob_v_ = _ob_a; }

    const char* _boxed_in() const { return _ob_v_.in(); }
    char*& _boxed_inout() { return _ob_v_.inout(); }
    char*& _boxed_out() { return _ob_v_.out(); }

    char& operator[](short idx) { return _ob_v_[idx]; }
    char operator[](short idx) const { return _ob_v_[idx]; }
    char& operator[](unsigned short idx) { return _ob_v_[idx]; }
    char operator[](unsigned short idx) const { return _ob_v_[idx]; }
    char& operator[](int idx) { return _ob_v_[idx]; }
    char operator[](int idx) const { return _ob_v_[idx]; }
    char& operator[](unsigned int idx) { return _ob_v_[idx]; }
    char operator[](unsigned int idx) const { return _ob_v_[idx]; }
    char& operator[](long idx) { return _ob_v_[idx]; }
    char operator[](long idx) const { return _ob_v_[idx]; }
    char& operator[](unsigned long idx) { return _ob_v_[idx]; }
    char operator[](unsigned long idx) const { return _ob_v_[idx]; }

    StringValue& operator+=(const char* _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(char _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(unsigned char _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(CORBA::LongLong _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(CORBA::ULongLong _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(long _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(unsigned long _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(short _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(unsigned short _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(int _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    StringValue& operator+=(unsigned int _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    typedef StringValue_var _var_type;

    virtual CORBA::ValueBase* _copy_value();
    static StringValue* _downcast(CORBA::ValueBase*);

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;

    virtual void _OB_marshal(OB::OutputStreamImpl*);
    virtual void _OB_unmarshal(OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_StringValue;

class StringValue_init : public CORBA::ValueFactoryBase
{
    virtual CORBA::ValueBase* create_for_unmarshal();

public:
    StringValue_init()
    {
    }

    virtual ~StringValue_init()
    {
    }

    static StringValue_init* _downcast(CORBA::ValueFactory);
};




class WStringValue : virtual public CORBA::DefaultValueRefCountBase
{
    static const char* _ob_id_;
    CORBA::WString_var _ob_v_;

    WStringValue& operator=(const WStringValue&);

protected:

    virtual ~WStringValue() { }

public:

    WStringValue()
        : _ob_v_((const wchar_t*)L"") { }

    WStringValue(const WStringValue& _ob_a)
        : _ob_v_(_ob_a._ob_v_) { }

    WStringValue(CORBA::WChar* _ob_a)
        : _ob_v_(_ob_a) { }

    WStringValue(const CORBA::WChar* _ob_a)
        : _ob_v_(_ob_a) { }

    WStringValue(const CORBA::WString_var& _ob_a)
        : _ob_v_(_ob_a) { }

    WStringValue& operator=(CORBA::WChar* _ob_a)
    {
        _ob_v_ = _ob_a;
        return *this;
    }

    WStringValue& operator=(const CORBA::WChar* _ob_a)
    {
        _ob_v_ = _ob_a;
        return *this;
    }

    WStringValue& operator=(const CORBA::WString_var& _ob_a)
    {
        _ob_v_ = _ob_a;
        return *this;
    }

    const CORBA::WChar* _value() const { return _ob_v_.in(); }

    void _value(CORBA::WChar* _ob_a) { _ob_v_ = _ob_a; }
    void _value(const CORBA::WChar* _ob_a) { _ob_v_ = _ob_a; }
    void _value(const CORBA::WString_var& _ob_a) { _ob_v_ = _ob_a; }

    const CORBA::WChar* _boxed_in() const { return _ob_v_.in(); }
    CORBA::WChar*& _boxed_inout() { return _ob_v_.inout(); }
    CORBA::WChar*& _boxed_out() { return _ob_v_.out(); }

    wchar_t& operator[](short idx) { return _ob_v_[idx]; }
    wchar_t operator[](short idx) const { return _ob_v_[idx]; }
    wchar_t& operator[](unsigned short idx) { return _ob_v_[idx]; }
    wchar_t operator[](unsigned short idx) const { return _ob_v_[idx]; }
    wchar_t& operator[](int idx) { return _ob_v_[idx]; }
    wchar_t operator[](int idx) const { return _ob_v_[idx]; }
    wchar_t& operator[](unsigned int idx) { return _ob_v_[idx]; }
    wchar_t operator[](unsigned int idx) const { return _ob_v_[idx]; }
    wchar_t& operator[](long idx) { return _ob_v_[idx]; }
    wchar_t operator[](long idx) const { return _ob_v_[idx]; }
    wchar_t& operator[](unsigned long idx) { return _ob_v_[idx]; }
    wchar_t operator[](unsigned long idx) const { return _ob_v_[idx]; }

    WStringValue& operator+=(const wchar_t* _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    WStringValue& operator+=(wchar_t _ob_a)
    {
        _ob_v_ += _ob_a;
        return *this;
    }

    typedef WStringValue_var _var_type;

    virtual CORBA::ValueBase* _copy_value();
    static WStringValue* _downcast(CORBA::ValueBase*);

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;

    virtual void _OB_marshal(OB::OutputStreamImpl*);
    virtual void _OB_unmarshal(OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_WStringValue;

class WStringValue_init : public CORBA::ValueFactoryBase
{
    virtual CORBA::ValueBase* create_for_unmarshal();

public:
    WStringValue_init()
    {
    }

    virtual ~WStringValue_init()
    {
    }

    static WStringValue_init* _downcast(CORBA::ValueFactory);
};

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::StringValue**);
void operator<<=(CORBA::Any&, CORBA::StringValue*);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::StringValue*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::StringValue** val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::StringValue* val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::StringValue*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::WStringValue**);
void operator<<=(CORBA::Any&, CORBA::WStringValue*);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::WStringValue*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::WStringValue** val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::WStringValue* val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::WStringValue*& val)
{
    return any.in() >>= val;
}
# 21 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/POACurrent.h" 1
# 27 "../../include/OB/POACurrent.h"
# 1 "../../include/OB/Current.h" 1
# 28 "../../include/OB/POACurrent.h" 2
# 1 "../../include/OB/POACommon.h" 1
# 29 "../../include/OB/POACurrent.h" 2
# 1 "../../include/OB/POACurrent_fwd.h" 1
# 18 "../../include/OB/POACurrent_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/POACurrent_fwd.h" 2
# 39 "../../include/OB/POACurrent_fwd.h"
namespace PortableServer
{

class POA;
typedef POA* POA_ptr;
typedef POA* POARef;

class Current;
typedef Current* Current_ptr;
typedef Current* CurrentRef;

}

void OBDuplicate(PortableServer::POA_ptr);
void OBRelease(PortableServer::POA_ptr);

void OBMarshal(PortableServer::POA_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::POA_ptr&, OB::InputStreamImpl*);

void OBDuplicate(PortableServer::Current_ptr);
void OBRelease(PortableServer::Current_ptr);

void OBMarshal(PortableServer::Current_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableServer::Current_ptr&, OB::InputStreamImpl*);

namespace PortableServer
{

typedef OB::ObjVar< POA > POA_var;
typedef OB::ObjOut< POA > POA_out;

typedef OB::ObjVar< Current > Current_var;
typedef OB::ObjOut< Current > Current_out;

}
# 30 "../../include/OB/POACurrent.h" 2
# 41 "../../include/OB/POACurrent.h"
namespace OBStubImpl_PortableServer
{

}

namespace OBStubImpl_PortableServer
{

}




namespace PortableServer
{




class Current : virtual public ::CORBA::Current
{
    Current(const Current&);
    void operator=(const Current&);

protected:

    static const char* ids_[];

public:

    Current() { }
    virtual ~Current() { }

    typedef Current_ptr _ptr_type;
    typedef Current_var _var_type;

    static inline Current_ptr
    _duplicate(Current_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Current_ptr
    _nil()
    {
        return 0;
    }

    static Current_ptr _narrow(CORBA::Object_ptr);

    static Current_ptr _narrow(CORBA::AbstractBase_ptr);





    struct NoContext : public CORBA::UserException
    {
        NoContext() { }
        NoContext(const NoContext&);
        NoContext& operator=(const NoContext&);

        static NoContext* _downcast(CORBA::Exception*);
        static const NoContext* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(NoContext&, OB::InputStreamImpl*);
    };




    virtual POA_ptr get_POA() = 0;




    virtual ObjectId* get_object_id() = 0;
};

}




namespace OBProxy_PortableServer
{

}




namespace OBStubImpl_PortableServer
{

}




namespace OBMarshalStubImpl_PortableServer
{

}




namespace OBV_PortableServer
{

}




namespace CORBA
{

inline void
release(::PortableServer::Current_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableServer::Current_ptr p)
{
    return p == 0;
}

}
# 22 "../../include/OB/CORBA.h" 2


# 1 "../../include/OB/POAServantLocator_skel.h" 1
# 14 "../../include/OB/POAServantLocator_skel.h"
# 1 "../../include/OB/POAServantLocator.h" 1
# 15 "../../include/OB/POAServantLocator_skel.h" 2

# 1 "../../include/OB/POAServantManager_skel.h" 1
# 14 "../../include/OB/POAServantManager_skel.h"
# 1 "../../include/OB/POAServantManager.h" 1
# 15 "../../include/OB/POAServantManager_skel.h" 2

namespace POA_PortableServer
{

class ServantManager : public PortableServer::ServantManager
{
    ServantManager(const ServantManager&);
    void operator=(const ServantManager&);

public:

    ServantManager() { }
};

}
# 17 "../../include/OB/POAServantLocator_skel.h" 2
# 1 "../../include/OB/POACommon_skel.h" 1
# 18 "../../include/OB/POACommon_skel.h"
# 1 "../../include/OB/POACommon.h" 1
# 19 "../../include/OB/POACommon_skel.h" 2
# 42 "../../include/OB/POACommon_skel.h"
namespace POA_PortableServer
{

}




namespace OBDirectStubImpl_PortableServer
{

}
# 18 "../../include/OB/POAServantLocator_skel.h" 2
# 1 "../../include/OB/LocalObject.h" 1
# 14 "../../include/OB/LocalObject.h"
# 1 "../../include/OB/LocalObject_fwd.h" 1
# 14 "../../include/OB/LocalObject_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/LocalObject_fwd.h" 2

namespace CORBA
{

class LocalObject;
typedef LocalObject* LocalObject_ptr;
typedef LocalObject_ptr LocalObjectRef;

}

void OBRelease(CORBA::LocalObject_ptr);
void OBDuplicate(CORBA::LocalObject_ptr);

namespace CORBA
{

typedef OB::ObjVar< LocalObject > LocalObject_var;

}
# 15 "../../include/OB/LocalObject.h" 2

# 1 "../../include/OB/Object.h" 1
# 17 "../../include/OB/LocalObject.h" 2

namespace OBCORBA
{

class LocalObjectBase : virtual public CORBA::Object
{
protected:

    LocalObjectBase();
    ~LocalObjectBase();

public:

    virtual CORBA::InterfaceDef_ptr _get_interface();
    virtual CORBA::Boolean _is_a(const char*);
    virtual CORBA::Boolean _non_existent();

    virtual CORBA::Boolean _is_equivalent(CORBA::Object_ptr);
    virtual CORBA::ULong _hash(CORBA::ULong);

    virtual void _create_request(CORBA::Context_ptr, const char*,
                                 CORBA::NVList_ptr,
                                 CORBA::NamedValue_ptr,
                                 CORBA::Request_out, CORBA::Flags);

    virtual void _create_request(CORBA::Context_ptr, const char*,
                                 CORBA::NVList_ptr,
                                 CORBA::NamedValue_ptr,
                                 CORBA::ExceptionList_ptr,
                                 CORBA::ContextList_ptr,
                                 CORBA::Request_out, CORBA::Flags);

    virtual CORBA::Request_ptr _request(const char*);

    virtual CORBA::Policy_ptr _get_policy(CORBA::PolicyType);
    virtual CORBA::Policy_ptr _get_client_policy(CORBA::PolicyType);
    virtual CORBA::Object_ptr _set_policy_overrides(
        const CORBA::PolicyList&, CORBA::SetOverrideType);
    virtual CORBA::PolicyList* _get_policy_overrides(
        const CORBA::PolicyTypeSeq&);
    virtual CORBA::Boolean _validate_connection(
        CORBA::PolicyList_out);




    virtual OCI::ConnectorInfo_ptr _get_oci_connector_info();
    virtual OCI::TransportInfo_ptr _get_oci_transport_info();

    virtual CORBA::AbstractBase_ptr _OB_toAbstractBase();
    virtual OB::RefCountIOR_ptr _OB_origIOR() const;
    virtual OB::RefCountIOR_ptr _OB_IOR() const;
    virtual void _OB_marshalOrigIOR(OB::OutputStreamImpl*) const;
    virtual const char** _OB_ids() const;
};

}

namespace CORBA
{

class LocalObject : public OBCORBA::LocalObjectBase
{
protected:

    LocalObject();
    ~LocalObject();

public:

    virtual void _add_ref();
    virtual void _remove_ref();
};

}

namespace OBCORBA
{

class RefCountLocalObject : virtual public CORBA::LocalObject,
                            virtual public OB::RefCount
{
protected:

    RefCountLocalObject() { }
    RefCountLocalObject(const RefCountLocalObject&) { }
    RefCountLocalObject&
    operator=(const RefCountLocalObject&) { return *this; }

public:

    virtual void _add_ref();
    virtual void _remove_ref();
};

}
# 19 "../../include/OB/POAServantLocator_skel.h" 2

namespace POA_PortableServer
{





class ServantLocatorDelegate;
typedef ServantLocatorDelegate* ServantLocatorDelegate_ptr;

}

void OBDuplicate(POA_PortableServer::ServantLocatorDelegate_ptr);
void OBRelease(POA_PortableServer::ServantLocatorDelegate_ptr);

namespace POA_PortableServer
{

typedef OB::ObjVar<ServantLocatorDelegate> ServantLocatorDelegate_var;

}

namespace POA_PortableServer
{

class ServantLocator : virtual public PortableServer::ServantLocator,
                       virtual public PortableServer::ServantBase,
                       virtual public OBCORBA::LocalObjectBase
{
    ServantLocator(const ServantLocator&);
    void operator=(const ServantLocator&);

    ServantLocatorDelegate_var delegate_;

public:

    ServantLocator();
    ~ServantLocator();

    PortableServer::ServantLocator_ptr _this();




    virtual CORBA::RepositoryId
    _primary_interface(const PortableServer::ObjectId&,
                       PortableServer::POA_ptr);

    virtual void
    _OB_dispatch(OB::Upcall_ptr);
};

}
# 25 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/POAServantActivator_skel.h" 1
# 14 "../../include/OB/POAServantActivator_skel.h"
# 1 "../../include/OB/POAServantActivator.h" 1
# 15 "../../include/OB/POAServantActivator_skel.h" 2

# 1 "../../include/OB/POAServantManager_skel.h" 1
# 17 "../../include/OB/POAServantActivator_skel.h" 2
# 1 "../../include/OB/POACommon_skel.h" 1
# 18 "../../include/OB/POAServantActivator_skel.h" 2
# 1 "../../include/OB/LocalObject.h" 1
# 19 "../../include/OB/POAServantActivator_skel.h" 2

namespace POA_PortableServer
{





class ServantActivatorDelegate;
typedef ServantActivatorDelegate* ServantActivatorDelegate_ptr;

}

void OBDuplicate(POA_PortableServer::ServantActivatorDelegate_ptr);
void OBRelease(POA_PortableServer::ServantActivatorDelegate_ptr);

namespace POA_PortableServer
{

typedef OB::ObjVar<ServantActivatorDelegate> ServantActivatorDelegate_var;

}

namespace POA_PortableServer
{

class ServantActivator : virtual public PortableServer::ServantActivator,
                         virtual public PortableServer::ServantBase,
                         virtual public OBCORBA::LocalObjectBase
{
    ServantActivator(const ServantActivator&);
    void operator=(const ServantActivator&);

    ServantActivatorDelegate_var delegate_;

public:

    ServantActivator();
    ~ServantActivator();

    PortableServer::ServantActivator_ptr _this();




    virtual CORBA::RepositoryId
    _primary_interface(const PortableServer::ObjectId&,
                       PortableServer::POA_ptr);

    virtual void
    _OB_dispatch(OB::Upcall_ptr);
};

}
# 26 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/POAAdapterActivator_skel.h" 1
# 14 "../../include/OB/POAAdapterActivator_skel.h"
# 1 "../../include/OB/POAAdapterActivator.h" 1
# 15 "../../include/OB/POAAdapterActivator_skel.h" 2
# 1 "../../include/OB/LocalObject.h" 1
# 16 "../../include/OB/POAAdapterActivator_skel.h" 2

namespace POA_PortableServer
{





class AdapterActivatorDelegate;
typedef AdapterActivatorDelegate* AdapterActivatorDelegate_ptr;

}

void OBDuplicate(POA_PortableServer::AdapterActivatorDelegate_ptr);
void OBRelease(POA_PortableServer::AdapterActivatorDelegate_ptr);

namespace POA_PortableServer
{

typedef OB::ObjVar<AdapterActivatorDelegate> AdapterActivatorDelegate_var;

}

namespace POA_PortableServer
{

class AdapterActivator : virtual public PortableServer::AdapterActivator,
                         virtual public PortableServer::ServantBase,
                         virtual public OBCORBA::LocalObjectBase
{
    AdapterActivator(const AdapterActivator&);
    void operator=(const AdapterActivator&);

    AdapterActivatorDelegate_var delegate_;

public:

    AdapterActivator();
    ~AdapterActivator();

    PortableServer::AdapterActivator_ptr _this();




    virtual CORBA::RepositoryId
    _primary_interface(const PortableServer::ObjectId&,
                       PortableServer::POA_ptr);

    virtual void
    _OB_dispatch(OB::Upcall_ptr);
};

}
# 27 "../../include/OB/CORBA.h" 2


# 1 "../../include/OB/OBPOAManager.h" 1
# 27 "../../include/OB/OBPOAManager.h"
# 1 "../../include/OB/POAManager.h" 1
# 28 "../../include/OB/OBPOAManager.h" 2
# 1 "../../include/OB/OCI.h" 1
# 27 "../../include/OB/OCI.h"
# 1 "../../include/OB/OCIClient.h" 1
# 27 "../../include/OB/OCIClient.h"
# 1 "../../include/OB/OCITypes.h" 1
# 28 "../../include/OB/OCIClient.h" 2
# 1 "../../include/OB/Policy.h" 1
# 29 "../../include/OB/OCIClient.h" 2
# 1 "../../include/OB/OCIClient_fwd.h" 1
# 30 "../../include/OB/OCIClient.h" 2
# 41 "../../include/OB/OCIClient.h"
namespace OBStubImpl_OCI
{

}

namespace OBStubImpl_OCI
{

}




namespace OCI
{




const char* const Version = "1.0";




class Plugin : virtual public CORBA::Object
{
    Plugin(const Plugin&);
    void operator=(const Plugin&);

protected:

    static const char* ids_[];

public:

    Plugin() { }
    virtual ~Plugin() { }

    typedef Plugin_ptr _ptr_type;
    typedef Plugin_var _var_type;

    static inline Plugin_ptr
    _duplicate(Plugin_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Plugin_ptr
    _nil()
    {
        return 0;
    }

    static Plugin_ptr _narrow(CORBA::Object_ptr);

    static Plugin_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual void init_client(const ParamSeq& params) = 0;




    virtual void init_server(const ParamSeq& params) = 0;
};




class Transport : virtual public CORBA::Object
{
    Transport(const Transport&);
    void operator=(const Transport&);

protected:

    static const char* ids_[];

public:

    Transport() { }
    virtual ~Transport() { }

    typedef Transport_ptr _ptr_type;
    typedef Transport_var _var_type;

    static inline Transport_ptr
    _duplicate(Transport_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Transport_ptr
    _nil()
    {
        return 0;
    }

    static Transport_ptr _narrow(CORBA::Object_ptr);

    static Transport_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual SendReceiveMode mode() = 0;




    virtual Handle handle() = 0;




    virtual void close() = 0;




    virtual void shutdown() = 0;




    virtual void receive(Buffer_ptr buf,
                         CORBA::Boolean block) = 0;




    virtual CORBA::Boolean receive_detect(Buffer_ptr buf,
                                          CORBA::Boolean block) = 0;




    virtual void receive_timeout(Buffer_ptr buf,
                                 CORBA::ULong timeout) = 0;




    virtual CORBA::Boolean receive_timeout_detect(Buffer_ptr buf,
                                                  CORBA::ULong timeout) = 0;




    virtual void send(Buffer_ptr buf,
                      CORBA::Boolean block) = 0;




    virtual CORBA::Boolean send_detect(Buffer_ptr buf,
                                       CORBA::Boolean block) = 0;




    virtual void send_timeout(Buffer_ptr buf,
                              CORBA::ULong timeout) = 0;




    virtual CORBA::Boolean send_timeout_detect(Buffer_ptr buf,
                                               CORBA::ULong timeout) = 0;




    virtual TransportInfo_ptr get_info() = 0;
};




class TransportInfo : virtual public CORBA::Object
{
    TransportInfo(const TransportInfo&);
    void operator=(const TransportInfo&);

protected:

    static const char* ids_[];

public:

    TransportInfo() { }
    virtual ~TransportInfo() { }

    typedef TransportInfo_ptr _ptr_type;
    typedef TransportInfo_var _var_type;

    static inline TransportInfo_ptr
    _duplicate(TransportInfo_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline TransportInfo_ptr
    _nil()
    {
        return 0;
    }

    static TransportInfo_ptr _narrow(CORBA::Object_ptr);

    static TransportInfo_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual ConnectorInfo_ptr connector_info() = 0;




    virtual AcceptorInfo_ptr acceptor_info() = 0;




    virtual char* describe() = 0;




    virtual void add_close_cb(CloseCB_ptr cb) = 0;




    virtual void remove_close_cb(CloseCB_ptr cb) = 0;
};




class CloseCB : virtual public CORBA::Object
{
    CloseCB(const CloseCB&);
    void operator=(const CloseCB&);

protected:

    static const char* ids_[];

public:

    CloseCB() { }
    virtual ~CloseCB() { }

    typedef CloseCB_ptr _ptr_type;
    typedef CloseCB_var _var_type;

    static inline CloseCB_ptr
    _duplicate(CloseCB_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline CloseCB_ptr
    _nil()
    {
        return 0;
    }

    static CloseCB_ptr _narrow(CORBA::Object_ptr);

    static CloseCB_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual void close_cb(TransportInfo_ptr transport_info) = 0;
};




class OBUnique_CloseCBSeq { };

typedef OB::ObjSeq< CloseCB, OBUnique_CloseCBSeq > CloseCBSeq;
typedef OB::SeqVar< OB::ObjSeq< CloseCB, OBUnique_CloseCBSeq > > CloseCBSeq_var;
typedef OB::SeqOut< OB::ObjSeq< CloseCB, OBUnique_CloseCBSeq > > CloseCBSeq_out;




class Connector : virtual public CORBA::Object
{
    Connector(const Connector&);
    void operator=(const Connector&);

protected:

    static const char* ids_[];

public:

    Connector() { }
    virtual ~Connector() { }

    typedef Connector_ptr _ptr_type;
    typedef Connector_var _var_type;

    static inline Connector_ptr
    _duplicate(Connector_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Connector_ptr
    _nil()
    {
        return 0;
    }

    static Connector_ptr _narrow(CORBA::Object_ptr);

    static Connector_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual Transport_ptr connect() = 0;




    virtual Transport_ptr connect_timeout(CORBA::ULong timeout) = 0;




    virtual ProfileInfoSeq* get_usable_profiles(const IOR& ref,
                                                const ::CORBA::PolicyList& policies) = 0;




    virtual CORBA::Boolean equal(Connector_ptr con) = 0;




    virtual ConnectorInfo_ptr get_info() = 0;
};




class OBUnique_ConnectorSeq { };

typedef OB::ObjSeq< Connector, OBUnique_ConnectorSeq > ConnectorSeq;
typedef OB::SeqVar< OB::ObjSeq< Connector, OBUnique_ConnectorSeq > > ConnectorSeq_var;
typedef OB::SeqOut< OB::ObjSeq< Connector, OBUnique_ConnectorSeq > > ConnectorSeq_out;




class ConnectorInfo : virtual public CORBA::Object
{
    ConnectorInfo(const ConnectorInfo&);
    void operator=(const ConnectorInfo&);

protected:

    static const char* ids_[];

public:

    ConnectorInfo() { }
    virtual ~ConnectorInfo() { }

    typedef ConnectorInfo_ptr _ptr_type;
    typedef ConnectorInfo_var _var_type;

    static inline ConnectorInfo_ptr
    _duplicate(ConnectorInfo_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConnectorInfo_ptr
    _nil()
    {
        return 0;
    }

    static ConnectorInfo_ptr _narrow(CORBA::Object_ptr);

    static ConnectorInfo_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual char* describe() = 0;




    virtual void add_connect_cb(ConnectCB_ptr cb) = 0;




    virtual void remove_connect_cb(ConnectCB_ptr cb) = 0;
};




class ConnectCB : virtual public CORBA::Object
{
    ConnectCB(const ConnectCB&);
    void operator=(const ConnectCB&);

protected:

    static const char* ids_[];

public:

    ConnectCB() { }
    virtual ~ConnectCB() { }

    typedef ConnectCB_ptr _ptr_type;
    typedef ConnectCB_var _var_type;

    static inline ConnectCB_ptr
    _duplicate(ConnectCB_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConnectCB_ptr
    _nil()
    {
        return 0;
    }

    static ConnectCB_ptr _narrow(CORBA::Object_ptr);

    static ConnectCB_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual void connect_cb(TransportInfo_ptr transport_info) = 0;
};




class OBUnique_ConnectCBSeq { };

typedef OB::ObjSeq< ConnectCB, OBUnique_ConnectCBSeq > ConnectCBSeq;
typedef OB::SeqVar< OB::ObjSeq< ConnectCB, OBUnique_ConnectCBSeq > > ConnectCBSeq_var;
typedef OB::SeqOut< OB::ObjSeq< ConnectCB, OBUnique_ConnectCBSeq > > ConnectCBSeq_out;




class ConFactory : virtual public CORBA::Object
{
    ConFactory(const ConFactory&);
    void operator=(const ConFactory&);

protected:

    static const char* ids_[];

public:

    ConFactory() { }
    virtual ~ConFactory() { }

    typedef ConFactory_ptr _ptr_type;
    typedef ConFactory_var _var_type;

    static inline ConFactory_ptr
    _duplicate(ConFactory_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConFactory_ptr
    _nil()
    {
        return 0;
    }

    static ConFactory_ptr _narrow(CORBA::Object_ptr);

    static ConFactory_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual char* describe_profile(const ::IOP::TaggedProfile& prof) = 0;




    virtual CORBA::Boolean supports_protocol(const char* protocol) = 0;




    virtual ::IOP::TaggedProfile* parse_address(const char* addr,
                                                const ObjectKey& key) = 0;




    virtual ConnectorSeq* create_connectors(const IOR& ref,
                                            const ::CORBA::PolicyList& policies) = 0;




    virtual CORBA::Boolean equivalent(const IOR& ior1,
                                      const IOR& ior2) = 0;




    virtual CORBA::ULong hash(const IOR& ref,
                              CORBA::ULong maximum) = 0;




    virtual ConFactoryInfo_ptr get_info() = 0;
};




class OBUnique_ConFactorySeq { };

typedef OB::ObjSeq< ConFactory, OBUnique_ConFactorySeq > ConFactorySeq;
typedef OB::SeqVar< OB::ObjSeq< ConFactory, OBUnique_ConFactorySeq > > ConFactorySeq_var;
typedef OB::SeqOut< OB::ObjSeq< ConFactory, OBUnique_ConFactorySeq > > ConFactorySeq_out;




class ConFactoryInfo : virtual public CORBA::Object
{
    ConFactoryInfo(const ConFactoryInfo&);
    void operator=(const ConFactoryInfo&);

protected:

    static const char* ids_[];

public:

    ConFactoryInfo() { }
    virtual ~ConFactoryInfo() { }

    typedef ConFactoryInfo_ptr _ptr_type;
    typedef ConFactoryInfo_var _var_type;

    static inline ConFactoryInfo_ptr
    _duplicate(ConFactoryInfo_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConFactoryInfo_ptr
    _nil()
    {
        return 0;
    }

    static ConFactoryInfo_ptr _narrow(CORBA::Object_ptr);

    static ConFactoryInfo_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual char* describe() = 0;




    virtual void add_connect_cb(ConnectCB_ptr cb) = 0;




    virtual void remove_connect_cb(ConnectCB_ptr cb) = 0;
};




struct FactoryAlreadyExists : public CORBA::UserException
{
    FactoryAlreadyExists() { }
    FactoryAlreadyExists(const FactoryAlreadyExists&);
    FactoryAlreadyExists& operator=(const FactoryAlreadyExists&);

    static FactoryAlreadyExists* _downcast(CORBA::Exception*);
    static const FactoryAlreadyExists* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    OB::StrForStruct id;

    FactoryAlreadyExists(const char*);

    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(FactoryAlreadyExists&, OB::InputStreamImpl*);
};




struct NoSuchFactory : public CORBA::UserException
{
    NoSuchFactory() { }
    NoSuchFactory(const NoSuchFactory&);
    NoSuchFactory& operator=(const NoSuchFactory&);

    static NoSuchFactory* _downcast(CORBA::Exception*);
    static const NoSuchFactory* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    OB::StrForStruct id;

    NoSuchFactory(const char*);

    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(NoSuchFactory&, OB::InputStreamImpl*);
};




class ConFactoryRegistry : virtual public CORBA::Object
{
    ConFactoryRegistry(const ConFactoryRegistry&);
    void operator=(const ConFactoryRegistry&);

protected:

    static const char* ids_[];

public:

    ConFactoryRegistry() { }
    virtual ~ConFactoryRegistry() { }

    typedef ConFactoryRegistry_ptr _ptr_type;
    typedef ConFactoryRegistry_var _var_type;

    static inline ConFactoryRegistry_ptr
    _duplicate(ConFactoryRegistry_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConFactoryRegistry_ptr
    _nil()
    {
        return 0;
    }

    static ConFactoryRegistry_ptr _narrow(CORBA::Object_ptr);

    static ConFactoryRegistry_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual void add_factory(ConFactory_ptr factory) = 0;




    virtual ConFactory_ptr get_factory(const char* id) = 0;




    virtual ConFactorySeq* get_factories() = 0;
};

}




namespace OBProxy_OCI
{

}




namespace OBStubImpl_OCI
{

}




namespace OBMarshalStubImpl_OCI
{

}




namespace OBV_OCI
{

}




namespace CORBA
{

inline void
release(::OCI::Plugin_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::Plugin_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::Transport_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::Transport_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::TransportInfo_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::TransportInfo_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::CloseCB_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::CloseCB_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::Connector_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::Connector_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::ConnectorInfo_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::ConnectorInfo_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::ConnectCB_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::ConnectCB_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::ConFactory_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::ConFactory_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::ConFactoryInfo_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::ConFactoryInfo_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::ConFactoryRegistry_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::ConFactoryRegistry_ptr p)
{
    return p == 0;
}

}
# 28 "../../include/OB/OCI.h" 2
# 1 "../../include/OB/Current.h" 1
# 29 "../../include/OB/OCI.h" 2
# 1 "../../include/OB/OCI_fwd.h" 1
# 30 "../../include/OB/OCI.h" 2
# 41 "../../include/OB/OCI.h"
namespace OBStubImpl_OCI
{

}

namespace OBStubImpl_OCI
{

}




namespace OCI
{




class Acceptor : virtual public CORBA::Object
{
    Acceptor(const Acceptor&);
    void operator=(const Acceptor&);

protected:

    static const char* ids_[];

public:

    Acceptor() { }
    virtual ~Acceptor() { }

    typedef Acceptor_ptr _ptr_type;
    typedef Acceptor_var _var_type;

    static inline Acceptor_ptr
    _duplicate(Acceptor_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Acceptor_ptr
    _nil()
    {
        return 0;
    }

    static Acceptor_ptr _narrow(CORBA::Object_ptr);

    static Acceptor_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual Handle handle() = 0;




    virtual void close() = 0;




    virtual void shutdown() = 0;




    virtual void listen() = 0;




    virtual Transport_ptr accept(CORBA::Boolean block) = 0;




    virtual Transport_ptr connect_self() = 0;




    virtual void add_profiles(const ProfileInfo& profile_info,
                              IOR& ref) = 0;




    virtual ProfileInfoSeq* get_local_profiles(const IOR& ref) = 0;




    virtual AcceptorInfo_ptr get_info() = 0;
};




class OBUnique_AcceptorSeq { };

typedef OB::ObjSeq< Acceptor, OBUnique_AcceptorSeq > AcceptorSeq;
typedef OB::SeqVar< OB::ObjSeq< Acceptor, OBUnique_AcceptorSeq > > AcceptorSeq_var;
typedef OB::SeqOut< OB::ObjSeq< Acceptor, OBUnique_AcceptorSeq > > AcceptorSeq_out;




class AcceptorInfo : virtual public CORBA::Object
{
    AcceptorInfo(const AcceptorInfo&);
    void operator=(const AcceptorInfo&);

protected:

    static const char* ids_[];

public:

    AcceptorInfo() { }
    virtual ~AcceptorInfo() { }

    typedef AcceptorInfo_ptr _ptr_type;
    typedef AcceptorInfo_var _var_type;

    static inline AcceptorInfo_ptr
    _duplicate(AcceptorInfo_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AcceptorInfo_ptr
    _nil()
    {
        return 0;
    }

    static AcceptorInfo_ptr _narrow(CORBA::Object_ptr);

    static AcceptorInfo_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual char* describe() = 0;




    virtual void add_accept_cb(AcceptCB_ptr cb) = 0;




    virtual void remove_accept_cb(AcceptCB_ptr cb) = 0;
};




class AcceptCB : virtual public CORBA::Object
{
    AcceptCB(const AcceptCB&);
    void operator=(const AcceptCB&);

protected:

    static const char* ids_[];

public:

    AcceptCB() { }
    virtual ~AcceptCB() { }

    typedef AcceptCB_ptr _ptr_type;
    typedef AcceptCB_var _var_type;

    static inline AcceptCB_ptr
    _duplicate(AcceptCB_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AcceptCB_ptr
    _nil()
    {
        return 0;
    }

    static AcceptCB_ptr _narrow(CORBA::Object_ptr);

    static AcceptCB_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual void accept_cb(TransportInfo_ptr transport_info) = 0;
};




class OBUnique_AcceptCBSeq { };

typedef OB::ObjSeq< AcceptCB, OBUnique_AcceptCBSeq > AcceptCBSeq;
typedef OB::SeqVar< OB::ObjSeq< AcceptCB, OBUnique_AcceptCBSeq > > AcceptCBSeq_var;
typedef OB::SeqOut< OB::ObjSeq< AcceptCB, OBUnique_AcceptCBSeq > > AcceptCBSeq_out;




struct InvalidParam : public CORBA::UserException
{
    InvalidParam() { }
    InvalidParam(const InvalidParam&);
    InvalidParam& operator=(const InvalidParam&);

    static InvalidParam* _downcast(CORBA::Exception*);
    static const InvalidParam* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    OB::StrForStruct reason;

    InvalidParam(const char*);

    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(InvalidParam&, OB::InputStreamImpl*);
};




class AccFactory : virtual public CORBA::Object
{
    AccFactory(const AccFactory&);
    void operator=(const AccFactory&);

protected:

    static const char* ids_[];

public:

    AccFactory() { }
    virtual ~AccFactory() { }

    typedef AccFactory_ptr _ptr_type;
    typedef AccFactory_var _var_type;

    static inline AccFactory_ptr
    _duplicate(AccFactory_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AccFactory_ptr
    _nil()
    {
        return 0;
    }

    static AccFactory_ptr _narrow(CORBA::Object_ptr);

    static AccFactory_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual Acceptor_ptr create_acceptor(const ParamSeq& params) = 0;




    virtual void change_key(::IOP::IOR& ior,
                            const ObjectKey& key) = 0;




    virtual AccFactoryInfo_ptr get_info() = 0;
};




class OBUnique_AccFactorySeq { };

typedef OB::ObjSeq< AccFactory, OBUnique_AccFactorySeq > AccFactorySeq;
typedef OB::SeqVar< OB::ObjSeq< AccFactory, OBUnique_AccFactorySeq > > AccFactorySeq_var;
typedef OB::SeqOut< OB::ObjSeq< AccFactory, OBUnique_AccFactorySeq > > AccFactorySeq_out;




class AccFactoryInfo : virtual public CORBA::Object
{
    AccFactoryInfo(const AccFactoryInfo&);
    void operator=(const AccFactoryInfo&);

protected:

    static const char* ids_[];

public:

    AccFactoryInfo() { }
    virtual ~AccFactoryInfo() { }

    typedef AccFactoryInfo_ptr _ptr_type;
    typedef AccFactoryInfo_var _var_type;

    static inline AccFactoryInfo_ptr
    _duplicate(AccFactoryInfo_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AccFactoryInfo_ptr
    _nil()
    {
        return 0;
    }

    static AccFactoryInfo_ptr _narrow(CORBA::Object_ptr);

    static AccFactoryInfo_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual PluginId id() = 0;




    virtual ProfileId tag() = 0;




    virtual char* describe() = 0;
};




class AccFactoryRegistry : virtual public CORBA::Object
{
    AccFactoryRegistry(const AccFactoryRegistry&);
    void operator=(const AccFactoryRegistry&);

protected:

    static const char* ids_[];

public:

    AccFactoryRegistry() { }
    virtual ~AccFactoryRegistry() { }

    typedef AccFactoryRegistry_ptr _ptr_type;
    typedef AccFactoryRegistry_var _var_type;

    static inline AccFactoryRegistry_ptr
    _duplicate(AccFactoryRegistry_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AccFactoryRegistry_ptr
    _nil()
    {
        return 0;
    }

    static AccFactoryRegistry_ptr _narrow(CORBA::Object_ptr);

    static AccFactoryRegistry_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual void add_factory(AccFactory_ptr factory) = 0;




    virtual AccFactory_ptr get_factory(const char* id) = 0;




    virtual AccFactorySeq* get_factories() = 0;
};




class Current : virtual public ::CORBA::Current
{
    Current(const Current&);
    void operator=(const Current&);

protected:

    static const char* ids_[];

public:

    Current() { }
    virtual ~Current() { }

    typedef Current_ptr _ptr_type;
    typedef Current_var _var_type;

    static inline Current_ptr
    _duplicate(Current_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Current_ptr
    _nil()
    {
        return 0;
    }

    static Current_ptr _narrow(CORBA::Object_ptr);

    static Current_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual TransportInfo_ptr get_oci_transport_info() = 0;




    virtual AcceptorInfo_ptr get_oci_acceptor_info() = 0;
};

}




namespace OBProxy_OCI
{

}




namespace OBStubImpl_OCI
{

}




namespace OBMarshalStubImpl_OCI
{

}




namespace OBV_OCI
{

}




namespace CORBA
{

inline void
release(::OCI::Acceptor_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::Acceptor_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::AcceptorInfo_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::AcceptorInfo_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::AcceptCB_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::AcceptCB_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::AccFactory_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::AccFactory_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::AccFactoryInfo_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::AccFactoryInfo_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::AccFactoryRegistry_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::AccFactoryRegistry_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OCI::Current_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OCI::Current_ptr p)
{
    return p == 0;
}

}
# 29 "../../include/OB/OBPOAManager.h" 2
# 1 "../../include/OB/OBPOAManager_fwd.h" 1
# 30 "../../include/OB/OBPOAManager.h" 2
# 41 "../../include/OB/OBPOAManager.h"
namespace OBStubImpl_OBPortableServer
{

}

namespace OBStubImpl_OBPortableServer
{

}




namespace OBPortableServer
{




class POAManager : virtual public ::PortableServer::POAManager
{
    POAManager(const POAManager&);
    void operator=(const POAManager&);

protected:

    static const char* ids_[];

public:

    POAManager() { }
    virtual ~POAManager() { }

    typedef POAManager_ptr _ptr_type;
    typedef POAManager_var _var_type;

    static inline POAManager_ptr
    _duplicate(POAManager_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline POAManager_ptr
    _nil()
    {
        return 0;
    }

    static POAManager_ptr _narrow(CORBA::Object_ptr);

    static POAManager_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual char* name() = 0;




    virtual ::OCI::AcceptorSeq* get_acceptors() = 0;
};




class OBUnique_POAManagerSeq { };

typedef OB::ObjSeq< POAManager, OBUnique_POAManagerSeq > POAManagerSeq;
typedef OB::SeqVar< OB::ObjSeq< POAManager, OBUnique_POAManagerSeq > > POAManagerSeq_var;
typedef OB::SeqOut< OB::ObjSeq< POAManager, OBUnique_POAManagerSeq > > POAManagerSeq_out;




class POAManagerFactory : virtual public CORBA::Object
{
    POAManagerFactory(const POAManagerFactory&);
    void operator=(const POAManagerFactory&);

protected:

    static const char* ids_[];

public:

    POAManagerFactory() { }
    virtual ~POAManagerFactory() { }

    typedef POAManagerFactory_ptr _ptr_type;
    typedef POAManagerFactory_var _var_type;

    static inline POAManagerFactory_ptr
    _duplicate(POAManagerFactory_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline POAManagerFactory_ptr
    _nil()
    {
        return 0;
    }

    static POAManagerFactory_ptr _narrow(CORBA::Object_ptr);

    static POAManagerFactory_ptr _narrow(CORBA::AbstractBase_ptr);





    struct AcceptorConfig;
    typedef OB::VarVar< AcceptorConfig > AcceptorConfig_var;
    typedef OB::VarOut< AcceptorConfig > AcceptorConfig_out;

    struct AcceptorConfig
    {
        AcceptorConfig() { }
        AcceptorConfig(const AcceptorConfig&);
        AcceptorConfig& operator=(const AcceptorConfig&);

        typedef AcceptorConfig_var _var_type;

        OB::StrForStruct id;
        ::OCI::ParamSeq params;

        void _OB_marshal(OB::OutputStreamImpl*) const;
        static void _OB_unmarshal(AcceptorConfig&, OB::InputStreamImpl*);
    };




    class OBUnique_AcceptorConfigSeq { };

    typedef OB::VarSeq< AcceptorConfig, OBUnique_AcceptorConfigSeq > AcceptorConfigSeq;
    typedef OB::SeqVar< OB::VarSeq< AcceptorConfig, OBUnique_AcceptorConfigSeq > > AcceptorConfigSeq_var;
    typedef OB::SeqOut< OB::VarSeq< AcceptorConfig, OBUnique_AcceptorConfigSeq > > AcceptorConfigSeq_out;




    struct POAManagerAlreadyExists : public CORBA::UserException
    {
        POAManagerAlreadyExists() { }
        POAManagerAlreadyExists(const POAManagerAlreadyExists&);
        POAManagerAlreadyExists& operator=(const POAManagerAlreadyExists&);

        static POAManagerAlreadyExists* _downcast(CORBA::Exception*);
        static const POAManagerAlreadyExists* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(POAManagerAlreadyExists&, OB::InputStreamImpl*);
    };




    virtual POAManager_ptr create_poa_manager(const char* name) = 0;




    virtual POAManager_ptr create_poa_manager_with_config(const char* name,
                                                          const AcceptorConfigSeq& config) = 0;




    virtual POAManagerSeq* get_poa_managers() = 0;




    virtual void destroy() = 0;
};

}




namespace OBProxy_OBPortableServer
{

}




namespace OBStubImpl_OBPortableServer
{

}




namespace OBMarshalStubImpl_OBPortableServer
{

}




namespace OBV_OBPortableServer
{

}




namespace CORBA
{

inline void
release(::OBPortableServer::POAManager_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBPortableServer::POAManager_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::OBPortableServer::POAManagerFactory_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBPortableServer::POAManagerFactory_ptr p)
{
    return p == 0;
}

}
# 30 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/OBPOAInterface.h" 1
# 27 "../../include/OB/OBPOAInterface.h"
# 1 "../../include/OB/OBPOAPolicies.h" 1
# 27 "../../include/OB/OBPOAPolicies.h"
# 1 "../../include/OB/Policy.h" 1
# 28 "../../include/OB/OBPOAPolicies.h" 2
# 1 "../../include/OB/Dispatch.h" 1
# 29 "../../include/OB/OBPOAPolicies.h" 2
# 1 "../../include/OB/OBPOAPolicies_fwd.h" 1
# 18 "../../include/OB/OBPOAPolicies_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/OBPOAPolicies_fwd.h" 2
# 39 "../../include/OB/OBPOAPolicies_fwd.h"
namespace OBPortableServer
{

class SynchronizationPolicy;
typedef SynchronizationPolicy* SynchronizationPolicy_ptr;
typedef SynchronizationPolicy* SynchronizationPolicyRef;

          extern OB::TypeCodeConst _tc_SynchronizationPolicy;

class DispatchStrategyPolicy;
typedef DispatchStrategyPolicy* DispatchStrategyPolicy_ptr;
typedef DispatchStrategyPolicy* DispatchStrategyPolicyRef;

          extern OB::TypeCodeConst _tc_DispatchStrategyPolicy;

class InterceptorCallPolicy;
typedef InterceptorCallPolicy* InterceptorCallPolicy_ptr;
typedef InterceptorCallPolicy* InterceptorCallPolicyRef;

          extern OB::TypeCodeConst _tc_InterceptorCallPolicy;

}

void OBDuplicate(OBPortableServer::SynchronizationPolicy_ptr);
void OBRelease(OBPortableServer::SynchronizationPolicy_ptr);

void OBMarshal(OBPortableServer::SynchronizationPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OBPortableServer::SynchronizationPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OBPortableServer::DispatchStrategyPolicy_ptr);
void OBRelease(OBPortableServer::DispatchStrategyPolicy_ptr);

void OBMarshal(OBPortableServer::DispatchStrategyPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OBPortableServer::DispatchStrategyPolicy_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OBPortableServer::InterceptorCallPolicy_ptr);
void OBRelease(OBPortableServer::InterceptorCallPolicy_ptr);

void OBMarshal(OBPortableServer::InterceptorCallPolicy_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OBPortableServer::InterceptorCallPolicy_ptr&, OB::InputStreamImpl*);

namespace OBPortableServer
{

typedef OB::ObjVar< SynchronizationPolicy > SynchronizationPolicy_var;
typedef OB::ObjOut< SynchronizationPolicy > SynchronizationPolicy_out;

typedef OB::ObjVar< DispatchStrategyPolicy > DispatchStrategyPolicy_var;
typedef OB::ObjOut< DispatchStrategyPolicy > DispatchStrategyPolicy_out;

typedef OB::ObjVar< InterceptorCallPolicy > InterceptorCallPolicy_var;
typedef OB::ObjOut< InterceptorCallPolicy > InterceptorCallPolicy_out;

}
# 30 "../../include/OB/OBPOAPolicies.h" 2
# 41 "../../include/OB/OBPOAPolicies.h"
namespace OBStubImpl_OBPortableServer
{

}

namespace OBStubImpl_OBPortableServer
{

}




namespace OBPortableServer
{




const ::CORBA::PolicyType SYNCHRONIZATION_POLICY_ID = 1330577665U;




enum SynchronizationPolicyValue
{
    NO_SYNCHRONIZATION,
    SYNCHRONIZE_ON_POA,
    SYNCHRONIZE_ON_ORB
};

typedef SynchronizationPolicyValue& SynchronizationPolicyValue_out;

          extern OB::TypeCodeConst _tc_SynchronizationPolicyValue;




class SynchronizationPolicy : virtual public ::CORBA::Policy
{
    SynchronizationPolicy(const SynchronizationPolicy&);
    void operator=(const SynchronizationPolicy&);

protected:

    static const char* ids_[];

public:

    SynchronizationPolicy() { }
    virtual ~SynchronizationPolicy() { }

    typedef SynchronizationPolicy_ptr _ptr_type;
    typedef SynchronizationPolicy_var _var_type;

    static inline SynchronizationPolicy_ptr
    _duplicate(SynchronizationPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline SynchronizationPolicy_ptr
    _nil()
    {
        return 0;
    }

    static SynchronizationPolicy_ptr _narrow(CORBA::Object_ptr);

    static SynchronizationPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual SynchronizationPolicyValue value() = 0;
};




const ::CORBA::PolicyType DISPATCH_STRATEGY_POLICY_ID = 1330577666U;




class DispatchStrategyPolicy : virtual public ::CORBA::Policy
{
    DispatchStrategyPolicy(const DispatchStrategyPolicy&);
    void operator=(const DispatchStrategyPolicy&);

protected:

    static const char* ids_[];

public:

    DispatchStrategyPolicy() { }
    virtual ~DispatchStrategyPolicy() { }

    typedef DispatchStrategyPolicy_ptr _ptr_type;
    typedef DispatchStrategyPolicy_var _var_type;

    static inline DispatchStrategyPolicy_ptr
    _duplicate(DispatchStrategyPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DispatchStrategyPolicy_ptr
    _nil()
    {
        return 0;
    }

    static DispatchStrategyPolicy_ptr _narrow(CORBA::Object_ptr);

    static DispatchStrategyPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::OB::DispatchStrategy_ptr value() = 0;
};




const ::CORBA::PolicyType INTERCEPTOR_CALL_POLICY_ID = 1330577667U;




class InterceptorCallPolicy : virtual public ::CORBA::Policy
{
    InterceptorCallPolicy(const InterceptorCallPolicy&);
    void operator=(const InterceptorCallPolicy&);

protected:

    static const char* ids_[];

public:

    InterceptorCallPolicy() { }
    virtual ~InterceptorCallPolicy() { }

    typedef InterceptorCallPolicy_ptr _ptr_type;
    typedef InterceptorCallPolicy_var _var_type;

    static inline InterceptorCallPolicy_ptr
    _duplicate(InterceptorCallPolicy_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline InterceptorCallPolicy_ptr
    _nil()
    {
        return 0;
    }

    static InterceptorCallPolicy_ptr _narrow(CORBA::Object_ptr);

    static InterceptorCallPolicy_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Boolean value() = 0;
};

}




namespace OBProxy_OBPortableServer
{

}




namespace OBStubImpl_OBPortableServer
{

}




namespace OBMarshalStubImpl_OBPortableServer
{

}




namespace OBV_OBPortableServer
{

}




void operator<<=(CORBA::Any&, OBPortableServer::SynchronizationPolicyValue);
CORBA::Boolean operator>>=(const CORBA::Any&, OBPortableServer::SynchronizationPolicyValue&);

inline void
operator<<=(CORBA::Any_var& any, OBPortableServer::SynchronizationPolicyValue val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OBPortableServer::SynchronizationPolicyValue& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OBPortableServer::SynchronizationPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBPortableServer::SynchronizationPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OBPortableServer::SynchronizationPolicy_ptr*);
void operator<<=(CORBA::Any&, OBPortableServer::SynchronizationPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OBPortableServer::SynchronizationPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OBPortableServer::SynchronizationPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OBPortableServer::SynchronizationPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OBPortableServer::SynchronizationPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OBPortableServer::DispatchStrategyPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBPortableServer::DispatchStrategyPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OBPortableServer::DispatchStrategyPolicy_ptr*);
void operator<<=(CORBA::Any&, OBPortableServer::DispatchStrategyPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OBPortableServer::DispatchStrategyPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OBPortableServer::DispatchStrategyPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OBPortableServer::DispatchStrategyPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OBPortableServer::DispatchStrategyPolicy_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::OBPortableServer::InterceptorCallPolicy_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBPortableServer::InterceptorCallPolicy_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, OBPortableServer::InterceptorCallPolicy_ptr*);
void operator<<=(CORBA::Any&, OBPortableServer::InterceptorCallPolicy_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, OBPortableServer::InterceptorCallPolicy_ptr&);

inline void
operator<<=(CORBA::Any_var& any, OBPortableServer::InterceptorCallPolicy_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, OBPortableServer::InterceptorCallPolicy_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, OBPortableServer::InterceptorCallPolicy_ptr& val)
{
    return any.in() >>= val;
}
# 28 "../../include/OB/OBPOAInterface.h" 2
# 1 "../../include/OB/POAInterface.h" 1
# 29 "../../include/OB/OBPOAInterface.h" 2
# 1 "../../include/OB/PIORT.h" 1
# 27 "../../include/OB/PIORT.h"
# 1 "../../include/OB/PICommon.h" 1
# 27 "../../include/OB/PICommon.h"
# 1 "../../include/OB/Types.h" 1
# 28 "../../include/OB/PICommon.h" 2
# 1 "../../include/OB/PICommon_fwd.h" 1
# 18 "../../include/OB/PICommon_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/PICommon_fwd.h" 2
# 39 "../../include/OB/PICommon_fwd.h"
namespace PortableInterceptor
{

class Interceptor;
typedef Interceptor* Interceptor_ptr;
typedef Interceptor* InterceptorRef;

          extern OB::TypeCodeConst _tc_Interceptor;

}

void OBDuplicate(PortableInterceptor::Interceptor_ptr);
void OBRelease(PortableInterceptor::Interceptor_ptr);

void OBMarshal(PortableInterceptor::Interceptor_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(PortableInterceptor::Interceptor_ptr&, OB::InputStreamImpl*);

namespace PortableInterceptor
{

typedef OB::ObjVar< Interceptor > Interceptor_var;
typedef OB::ObjOut< Interceptor > Interceptor_out;

}
# 29 "../../include/OB/PICommon.h" 2
# 40 "../../include/OB/PICommon.h"
namespace OBStubImpl_PortableInterceptor
{

}

namespace OBStubImpl_PortableInterceptor
{

}




namespace PortableInterceptor
{




class Interceptor : virtual public CORBA::Object
{
    Interceptor(const Interceptor&);
    void operator=(const Interceptor&);

protected:

    static const char* ids_[];

public:

    Interceptor() { }
    virtual ~Interceptor() { }

    typedef Interceptor_ptr _ptr_type;
    typedef Interceptor_var _var_type;

    static inline Interceptor_ptr
    _duplicate(Interceptor_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Interceptor_ptr
    _nil()
    {
        return 0;
    }

    static Interceptor_ptr _narrow(CORBA::Object_ptr);

    static Interceptor_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual char* name() = 0;




    virtual void destroy() = 0;
};




struct ForwardRequest : public CORBA::UserException
{



    ForwardRequest() { }

    ForwardRequest(const ForwardRequest&);
    ForwardRequest& operator=(const ForwardRequest&);

    static ForwardRequest* _downcast(CORBA::Exception*);
    static const ForwardRequest* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    CORBA::Object_var forward;
    CORBA::Boolean permanent;

    ForwardRequest(CORBA::Object_ptr,
                   CORBA::Boolean);

    virtual void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ForwardRequest&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ForwardRequest;




typedef CORBA::Short ReplyStatus;
typedef CORBA::Short_out ReplyStatus_out;
          extern OB::TypeCodeConst _tc_ReplyStatus;




const ReplyStatus SUCCESSFUL = 0;




const ReplyStatus SYSTEM_EXCEPTION = 1;




const ReplyStatus USER_EXCEPTION = 2;




const ReplyStatus LOCATION_FORWARD = 3;




const ReplyStatus LOCATION_FORWARD_PERMANENT = 4;




const ReplyStatus TRANSPORT_RETRY = 5;




typedef CORBA::ULong SlotId;
typedef CORBA::ULong_out SlotId_out;
          extern OB::TypeCodeConst _tc_SlotId;




struct InvalidSlot : public CORBA::UserException
{
    InvalidSlot() { }
    InvalidSlot(const InvalidSlot&);
    InvalidSlot& operator=(const InvalidSlot&);

    static InvalidSlot* _downcast(CORBA::Exception*);
    static const InvalidSlot* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    static void _OB_unmarshal(InvalidSlot&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_InvalidSlot;




typedef char* ServerId;
typedef CORBA::String_var ServerId_var;
typedef CORBA::String_out ServerId_out;
          extern OB::TypeCodeConst _tc_ServerId;




typedef char* ORBId;
typedef CORBA::String_var ORBId_var;
typedef CORBA::String_out ORBId_out;
          extern OB::TypeCodeConst _tc_ORBId;




typedef OB::StrSeq< CORBA::OBUnique_StringSeq > AdapterName;
typedef OB::SeqVar< OB::StrSeq< CORBA::OBUnique_StringSeq > > AdapterName_var;
typedef OB::SeqOut< OB::StrSeq< CORBA::OBUnique_StringSeq > > AdapterName_out;
          extern OB::TypeCodeConst _tc_AdapterName;

struct OBInfo_AdapterName : public OB::ConstructedInfo
{
    OBInfo_AdapterName() { }

    virtual void free(void* p) const
    {
        delete (AdapterName*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new AdapterName(*(const AdapterName*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef OB::FixSeq< CORBA::Octet, CORBA::OBUnique_OctetSeq > ObjectId;
typedef OB::SeqVar< OB::FixSeq< CORBA::Octet, CORBA::OBUnique_OctetSeq > > ObjectId_var;
typedef OB::SeqOut< OB::FixSeq< CORBA::Octet, CORBA::OBUnique_OctetSeq > > ObjectId_out;
          extern OB::TypeCodeConst _tc_ObjectId;

struct OBInfo_ObjectId : public OB::ConstructedInfo
{
    OBInfo_ObjectId() { }

    virtual void free(void* p) const
    {
        delete (ObjectId*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ObjectId(*(const ObjectId*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef CORBA::Long AdapterManagerId;
typedef CORBA::Long_out AdapterManagerId_out;
          extern OB::TypeCodeConst _tc_AdapterManagerId;




const CORBA::Short HOLDING = 0;




const CORBA::Short ACTIVE = 1;




const CORBA::Short DISCARDING = 2;




const CORBA::Short INACTIVE = 3;




const CORBA::Short NON_EXISTENT = 4;




typedef CORBA::Short AdapterState;
typedef CORBA::Short_out AdapterState_out;
          extern OB::TypeCodeConst _tc_AdapterState;

}




namespace OBProxy_PortableInterceptor
{

}




namespace OBStubImpl_PortableInterceptor
{

}




namespace OBMarshalStubImpl_PortableInterceptor
{

}




namespace OBV_PortableInterceptor
{

}




namespace CORBA
{

inline void
release(::PortableInterceptor::Interceptor_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::PortableInterceptor::Interceptor_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, PortableInterceptor::Interceptor_ptr*);
void operator<<=(CORBA::Any&, PortableInterceptor::Interceptor_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableInterceptor::Interceptor_ptr&);

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::Interceptor_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::Interceptor_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableInterceptor::Interceptor_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableInterceptor::ForwardRequest*);
void operator<<=(CORBA::Any&, const PortableInterceptor::ForwardRequest&);
CORBA::Boolean operator>>=(const CORBA::Any&, const PortableInterceptor::ForwardRequest*&);

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::ForwardRequest* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const PortableInterceptor::ForwardRequest& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const PortableInterceptor::ForwardRequest*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableInterceptor::InvalidSlot*);
void operator<<=(CORBA::Any&, const PortableInterceptor::InvalidSlot&);
CORBA::Boolean operator>>=(const CORBA::Any&, const PortableInterceptor::InvalidSlot*&);

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::InvalidSlot* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const PortableInterceptor::InvalidSlot& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const PortableInterceptor::InvalidSlot*& val)
{
    return any.in() >>= val;
}
# 28 "../../include/OB/PIORT.h" 2
# 1 "../../include/OB/PIORT_fwd.h" 1
# 18 "../../include/OB/PIORT_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/PIORT_fwd.h" 2
# 39 "../../include/OB/PIORT_fwd.h"
namespace PortableInterceptor
{

class ObjectReferenceFactory;

          extern OB::TypeCodeConst _tc_ObjectReferenceFactory;

class ObjectReferenceTemplate;

          extern OB::TypeCodeConst _tc_ObjectReferenceTemplate;

}

void OBDuplicate(PortableInterceptor::ObjectReferenceFactory*);
void OBRelease(PortableInterceptor::ObjectReferenceFactory*);

void OBMarshal(PortableInterceptor::ObjectReferenceFactory*, OB::OutputStreamImpl*);
void OBUnmarshal(PortableInterceptor::ObjectReferenceFactory*&, OB::InputStreamImpl*);

void OBDuplicate(PortableInterceptor::ObjectReferenceTemplate*);
void OBRelease(PortableInterceptor::ObjectReferenceTemplate*);

void OBMarshal(PortableInterceptor::ObjectReferenceTemplate*, OB::OutputStreamImpl*);
void OBUnmarshal(PortableInterceptor::ObjectReferenceTemplate*&, OB::InputStreamImpl*);

namespace PortableInterceptor
{

typedef OB::ObjVar< ObjectReferenceFactory > ObjectReferenceFactory_var;
typedef OB::ObjOut< ObjectReferenceFactory > ObjectReferenceFactory_out;

typedef OB::ObjVar< ObjectReferenceTemplate > ObjectReferenceTemplate_var;
typedef OB::ObjOut< ObjectReferenceTemplate > ObjectReferenceTemplate_out;

}
# 29 "../../include/OB/PIORT.h" 2
# 40 "../../include/OB/PIORT.h"
namespace OBStubImpl_PortableInterceptor
{

}

namespace OBStubImpl_PortableInterceptor
{

}




namespace PortableInterceptor
{




class ObjectReferenceFactory : virtual public CORBA::ValueBase
{
    void operator=(const ObjectReferenceFactory&);

    static const char* _ob_id_;

protected:

    ObjectReferenceFactory() { }
    virtual ~ObjectReferenceFactory() { }

public:

    typedef ObjectReferenceFactory_var _var_type;

    static ObjectReferenceFactory* _downcast(CORBA::ValueBase*);
    static ObjectReferenceFactory* _downcast(CORBA::AbstractBase_ptr);




    virtual CORBA::Object_ptr make_object(const char* repository_id,
                                          const ObjectId& id) = 0;

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;
};




class ObjectReferenceTemplate : virtual public ::PortableInterceptor::ObjectReferenceFactory
{
    void operator=(const ObjectReferenceTemplate&);

    static const char* _ob_id_;

protected:

    ObjectReferenceTemplate() { }
    virtual ~ObjectReferenceTemplate() { }

public:

    typedef ObjectReferenceTemplate_var _var_type;

    static ObjectReferenceTemplate* _downcast(CORBA::ValueBase*);
    static ObjectReferenceTemplate* _downcast(CORBA::AbstractBase_ptr);




    virtual ServerId server_id() = 0;




    virtual ORBId orb_id() = 0;




    virtual AdapterName* adapter_name() = 0;

    static const char* _OB_id();

    virtual const char* _OB_typeId() const;
};




class OBUnique_ObjectReferenceTemplateSeq { };

typedef OB::ObjSeq< ObjectReferenceTemplate, OBUnique_ObjectReferenceTemplateSeq > ObjectReferenceTemplateSeq;
typedef OB::SeqVar< OB::ObjSeq< ObjectReferenceTemplate, OBUnique_ObjectReferenceTemplateSeq > > ObjectReferenceTemplateSeq_var;
typedef OB::SeqOut< OB::ObjSeq< ObjectReferenceTemplate, OBUnique_ObjectReferenceTemplateSeq > > ObjectReferenceTemplateSeq_out;
          extern OB::TypeCodeConst _tc_ObjectReferenceTemplateSeq;

struct OBInfo_ObjectReferenceTemplateSeq : public OB::ConstructedInfo
{
    OBInfo_ObjectReferenceTemplateSeq() { }

    virtual void free(void* p) const
    {
        delete (ObjectReferenceTemplateSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ObjectReferenceTemplateSeq(*(const ObjectReferenceTemplateSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};

}




namespace OBProxy_PortableInterceptor
{

}




namespace OBStubImpl_PortableInterceptor
{

}




namespace OBMarshalStubImpl_PortableInterceptor
{

}




namespace OBV_PortableInterceptor
{

}




void operator<<=(CORBA::Any&, PortableInterceptor::ObjectReferenceFactory**);
void operator<<=(CORBA::Any&, PortableInterceptor::ObjectReferenceFactory*);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableInterceptor::ObjectReferenceFactory*&);

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::ObjectReferenceFactory** val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::ObjectReferenceFactory* val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableInterceptor::ObjectReferenceFactory*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableInterceptor::ObjectReferenceTemplate**);
void operator<<=(CORBA::Any&, PortableInterceptor::ObjectReferenceTemplate*);
CORBA::Boolean operator>>=(const CORBA::Any&, PortableInterceptor::ObjectReferenceTemplate*&);

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplate** val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplate* val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplate*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, PortableInterceptor::ObjectReferenceTemplateSeq*);
void operator<<=(CORBA::Any&, const PortableInterceptor::ObjectReferenceTemplateSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const PortableInterceptor::ObjectReferenceTemplateSeq*&);

inline void
operator<<=(CORBA::Any_var& any, PortableInterceptor::ObjectReferenceTemplateSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const PortableInterceptor::ObjectReferenceTemplateSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const PortableInterceptor::ObjectReferenceTemplateSeq*& val)
{
    return any.in() >>= val;
}
# 30 "../../include/OB/OBPOAInterface.h" 2
# 1 "../../include/OB/OBPOAInterface_fwd.h" 1
# 18 "../../include/OB/OBPOAInterface_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/OBPOAInterface_fwd.h" 2
# 39 "../../include/OB/OBPOAInterface_fwd.h"
namespace CORBA
{

class ORB;
typedef ORB* ORB_ptr;
typedef ORB* ORBRef;

}

namespace OBPortableServer
{

class POA;
typedef POA* POA_ptr;
typedef POA* POARef;

}

void OBDuplicate(CORBA::ORB_ptr);
void OBRelease(CORBA::ORB_ptr);

void OBMarshal(CORBA::ORB_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ORB_ptr&, OB::InputStreamImpl*);

void OBDuplicate(OBPortableServer::POA_ptr);
void OBRelease(OBPortableServer::POA_ptr);

void OBMarshal(OBPortableServer::POA_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(OBPortableServer::POA_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< ORB > ORB_var;
typedef OB::ObjOut< ORB > ORB_out;

}

namespace OBPortableServer
{

typedef OB::ObjVar< POA > POA_var;
typedef OB::ObjOut< POA > POA_out;

}
# 31 "../../include/OB/OBPOAInterface.h" 2
# 42 "../../include/OB/OBPOAInterface.h"
namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_OBPortableServer
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_OBPortableServer
{

}




namespace CORBA
{

}




namespace OBPortableServer
{




class POA : virtual public ::PortableServer::POA
{
    POA(const POA&);
    void operator=(const POA&);

protected:

    static const char* ids_[];

public:

    POA() { }
    virtual ~POA() { }

    typedef POA_ptr _ptr_type;
    typedef POA_var _var_type;

    static inline POA_ptr
    _duplicate(POA_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline POA_ptr
    _nil()
    {
        return 0;
    }

    static POA_ptr _narrow(CORBA::Object_ptr);

    static POA_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual ::CORBA::PolicyList* the_policies() = 0;




    virtual ::OB::DispatchStrategy_ptr the_dispatch_strategy() = 0;




    virtual ::PortableInterceptor::ObjectReferenceTemplate* adapter_template() = 0;




    virtual ::PortableInterceptor::ObjectReferenceFactory* current_factory() = 0;




    virtual ::CORBA::ORB_ptr the_ORB() = 0;




    virtual SynchronizationPolicy_ptr create_synchronization_policy(SynchronizationPolicyValue value) = 0;




    virtual DispatchStrategyPolicy_ptr create_dispatch_strategy_policy(::OB::DispatchStrategy_ptr value) = 0;
};

}




namespace OBProxy_CORBA
{

}




namespace OBProxy_OBPortableServer
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBStubImpl_OBPortableServer
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_OBPortableServer
{

}




namespace OBV_CORBA
{

}




namespace OBV_OBPortableServer
{

}




namespace CORBA
{

inline void
release(::OBPortableServer::POA_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::OBPortableServer::POA_ptr p)
{
    return p == 0;
}

}
# 31 "../../include/OB/CORBA.h" 2


# 1 "../../include/OB/Bounds.h" 1
# 37 "../../include/OB/Bounds.h"
namespace CORBA
{

}

namespace CORBA
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




struct Bounds : public CORBA::UserException
{
    Bounds() { }
    Bounds(const Bounds&);
    Bounds& operator=(const Bounds&);

    static Bounds* _downcast(CORBA::Exception*);
    static const Bounds* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    static void _OB_unmarshal(Bounds&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_Bounds;

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::Bounds*);
void operator<<=(CORBA::Any&, const CORBA::Bounds&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::Bounds*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Bounds* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::Bounds& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::Bounds*& val)
{
    return any.in() >>= val;
}
# 34 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/WrongTransaction.h" 1
# 37 "../../include/OB/WrongTransaction.h"
namespace CORBA
{

}

namespace CORBA
{

}

namespace OBStubImpl_CORBA
{

}

namespace OBStubImpl_CORBA
{

}




namespace CORBA
{




struct WrongTransaction : public CORBA::UserException
{
    WrongTransaction() { }
    WrongTransaction(const WrongTransaction&);
    WrongTransaction& operator=(const WrongTransaction&);

    static WrongTransaction* _downcast(CORBA::Exception*);
    static const WrongTransaction* _downcast(const CORBA::Exception*);
    virtual const char* _name() const;
    virtual void _raise() const { throw *this; }
    virtual const char* _rep_id() const;
    virtual char* _to_string() const;

    virtual CORBA::Exception* _OB_clone() const;
    virtual void _OB_insertInAny(CORBA::Any&);

    static void _OB_unmarshal(WrongTransaction&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_WrongTransaction;

}




namespace OBProxy_CORBA
{

}




namespace OBStubImpl_CORBA
{

}




namespace OBMarshalStubImpl_CORBA
{

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::WrongTransaction*);
void operator<<=(CORBA::Any&, const CORBA::WrongTransaction&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::WrongTransaction*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::WrongTransaction* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::WrongTransaction& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::WrongTransaction*& val)
{
    return any.in() >>= val;
}
# 35 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/NamedValue.h" 1
# 14 "../../include/OB/NamedValue.h"
# 1 "../../include/OB/NamedValue_fwd.h" 1
# 15 "../../include/OB/NamedValue.h" 2

# 1 "../../include/OB/AnyDeclaration.h" 1
# 17 "../../include/OB/NamedValue.h" 2

namespace OBCORBA
{

class ORB_impl;

}

namespace CORBA
{




class NamedValue : public OB::RefCount
{
    String_var name_;
    mutable Any_var value_;
    Flags flags_;




    NamedValue(const NamedValue&);
    void operator=(const NamedValue&);

protected:

    NamedValue();
    NamedValue(char*, Any*, Flags);

    friend class ::OBCORBA::ORB_impl;
    friend class NVList;
    friend class Request;

public:

    static inline NamedValue_ptr _duplicate(NamedValue_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline NamedValue_ptr _nil()
    { return 0; }

    const char* name() const;
    Any* value() const;
    Flags flags() const;
};

inline void
release(NamedValue_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(NamedValue_ptr p)
{
    return p == 0;
}




class NVList : public OB::RefCount
{
    OB::ObjSeq< NamedValue, int > namedValues_;




    NVList(const NVList&);
    void operator=(const NVList&);

protected:

    NVList() { };
    NVList(ULong);

    friend class Context;
    friend class Request;
    friend class ::OBCORBA::ORB_impl;

public:

    static inline NVList_ptr _duplicate(NVList_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline NVList_ptr _nil()
    { return 0; }

    ULong count() const;

    NamedValue_ptr add(Flags);
    NamedValue_ptr add_item(const char*, Flags);
    NamedValue_ptr add_value(const char*, const Any&, Flags);

    NamedValue_ptr add_item_consume(char*, Flags);
    NamedValue_ptr add_value_consume(char*, Any*, Flags);

    NamedValue_ptr item(ULong);

    void remove(ULong);
};

inline void
release(NVList_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(NVList_ptr p)
{
    return p == 0;
}

}
# 36 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/Environment.h" 1
# 14 "../../include/OB/Environment.h"
# 1 "../../include/OB/Environment_fwd.h" 1
# 14 "../../include/OB/Environment_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/Environment_fwd.h" 2

namespace CORBA
{

class Environment;
typedef Environment* Environment_ptr;
typedef Environment_ptr EnvironmentRef;

}

void OBDuplicate(CORBA::Environment_ptr);
void OBRelease(CORBA::Environment_ptr);

namespace CORBA
{

typedef OB::ObjVar< Environment > Environment_var;
typedef OB::ObjOut< Environment > Environment_out;

}
# 15 "../../include/OB/Environment.h" 2

# 1 "../../include/OB/Basic.h" 1
# 17 "../../include/OB/Environment.h" 2
# 1 "../../include/OB/Except.h" 1
# 18 "../../include/OB/Environment.h" 2

namespace OBCORBA
{

class ORB_impl;

}

namespace CORBA
{




class Environment : public OB::RefCount
{



    Exception* exception_;




    Environment(const Environment&);
    void operator=(const Environment&);

protected:

    Environment();
    virtual ~Environment();

    friend class ::OBCORBA::ORB_impl;
    friend class Request;

public:




    static inline Environment_ptr _duplicate(Environment_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline Environment_ptr _nil()
    { return 0; }

    void exception(Exception*);
    Exception* exception() const;
    void clear() { exception(0); }
};

inline void
release(Environment_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(Environment_ptr p)
{
    return p == 0;
}

}
# 37 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/DII.h" 1
# 14 "../../include/OB/DII.h"
# 1 "../../include/OB/DII_fwd.h" 1
# 15 "../../include/OB/DII.h" 2
# 1 "../../include/OB/Object_fwd.h" 1
# 16 "../../include/OB/DII.h" 2
# 1 "../../include/OB/OBObject_fwd.h" 1
# 17 "../../include/OB/DII.h" 2
# 1 "../../include/OB/NamedValue_fwd.h" 1
# 18 "../../include/OB/DII.h" 2
# 1 "../../include/OB/Environment_fwd.h" 1
# 19 "../../include/OB/DII.h" 2
# 1 "../../include/OB/Context_fwd.h" 1
# 20 "../../include/OB/DII.h" 2
# 1 "../../include/OB/MarshalStubImpl_fwd.h" 1
# 21 "../../include/OB/DII.h" 2
# 1 "../../include/OB/Downcall_fwd.h" 1
# 22 "../../include/OB/DII.h" 2
# 1 "../../include/OB/TypeCode_fwd.h" 1
# 23 "../../include/OB/DII.h" 2

# 1 "../../include/OB/AnyDeclaration.h" 1
# 25 "../../include/OB/DII.h" 2

# 1 "../../include/OB/list.h" 1
# 27 "../../include/OB/DII.h" 2

namespace OBCORBA
{

class ORB_impl;

}

namespace CORBA
{




class ExceptionList : public OB::RefCount
{



    ExceptionList(const ExceptionList&);
    void operator=(const ExceptionList&);

    OB::stl::list<TypeCode_var> typeCodes_;

protected:

    ExceptionList() { };

    friend class ::OBCORBA::ORB_impl;
    friend class Request;

public:




    static inline ExceptionList_ptr _duplicate(ExceptionList_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline ExceptionList_ptr _nil()
    { return 0; }

    ULong count() const;

    void add(TypeCode_ptr);
    void add_consume(TypeCode_ptr);

    TypeCode_ptr item(ULong);

    void remove(ULong);
};

inline void
release(ExceptionList_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(ExceptionList_ptr p)
{
    return p == 0;
}




class ContextList : public OB::RefCount
{



    ContextList(const ContextList&);
    void operator=(const ContextList&);

    OB::stl::list<String_var> strings_;

protected:

    ContextList() { };

    friend class ::OBCORBA::ORB_impl;
    friend class Request;

public:




    static inline ContextList_ptr _duplicate(ContextList_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline ContextList_ptr _nil()
    { return 0; }

    ULong count() const;

    void add(const char*);
    void add_consume(char*);

    const char* item(ULong);

    void remove(ULong);
};

inline void
release(ContextList_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(ContextList_ptr p)
{
    return p == 0;
}




class Request : public OB::RefCount
{



    Request(const Request&);
    void operator=(const Request&);

    OBCORBA::Object_var target_;
    String_var operation_;
    NVList_var arguments_;
    NamedValue_var result_;
    Environment_var environment_;
    ExceptionList_var exceptions_;
    ContextList_var contexts_;
    Context_var ctx_;
    OB::MarshalStubImpl_var marshalStub_;
    OB::Downcall_var downcall_;

    enum RequestState
    {
        RequestStateUnsent,
        RequestStatePending,
        RequestStateSent,
        RequestStateReceiving,
        RequestStateReceived,
        RequestStateDone
    };
    RequestState state_;
    bool pollable_;
    bool polling_;
    JTCMonitor stateMutex_;

    void marshal();
    void unmarshal();

protected:

    Request(OBCORBA::Object_ptr, const char*, NVList_ptr,
            NamedValue_ptr, ExceptionList_ptr,
            ContextList_ptr);

    Request(OBCORBA::Object_ptr, const char*, NVList_ptr,
            NamedValue_ptr);

    Request(OBCORBA::Object_ptr, const char*);

    virtual ~Request();

    friend class ::OBCORBA::Object;

public:




    static inline Request_ptr _duplicate(Request_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline Request_ptr _nil()
    { return 0; }

    CORBA::Object_ptr target() const;
    const char* operation() const;
    NVList_ptr arguments();
    NamedValue_ptr result();
    Environment_ptr env();
    ExceptionList_ptr exceptions();
    ContextList_ptr contexts();

    void ctx(Context_ptr);
    Context_ptr ctx() const;

    Any& add_in_arg();
    Any& add_in_arg(const char*);
    Any& add_inout_arg();
    Any& add_inout_arg(const char*);
    Any& add_out_arg();
    Any& add_out_arg(const char*);
    void set_return_type(TypeCode_ptr);
    Any& return_value();

    void invoke();
    void send_oneway();
    void send_deferred();
    void get_response();
    Boolean poll_response();





    bool _OB_completed() const;
};

inline void
release(Request_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(Request_ptr p)
{
    return p == 0;
}

}
# 38 "../../include/OB/CORBA.h" 2
# 1 "../../include/OB/DSI.h" 1
# 14 "../../include/OB/DSI.h"
# 1 "../../include/OB/DSI_fwd.h" 1
# 14 "../../include/OB/DSI_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 15 "../../include/OB/DSI_fwd.h" 2

namespace CORBA
{

class ServerRequest;
typedef ServerRequest* ServerRequest_ptr;
typedef ServerRequest_ptr ServerRequestRef;

}

void OBDuplicate(CORBA::ServerRequest_ptr);
void OBRelease(CORBA::ServerRequest_ptr);

namespace CORBA
{

typedef OB::ObjVar< ServerRequest > ServerRequest_var;

}
# 15 "../../include/OB/DSI.h" 2
# 1 "../../include/OB/Upcall_fwd.h" 1
# 16 "../../include/OB/DSI.h" 2
# 1 "../../include/OB/NamedValue_fwd.h" 1
# 17 "../../include/OB/DSI.h" 2
# 1 "../../include/OB/Context_fwd.h" 1
# 18 "../../include/OB/DSI.h" 2
# 1 "../../include/OB/Stream_fwd.h" 1
# 19 "../../include/OB/DSI.h" 2

# 1 "../../include/OB/Any.h" 1
# 21 "../../include/OB/DSI.h" 2
# 1 "../../include/OB/TypeCodeConst.h" 1
# 22 "../../include/OB/DSI.h" 2
# 1 "../../include/OB/Types.h" 1
# 23 "../../include/OB/DSI.h" 2
# 1 "../../include/OB/POAServantBase.h" 1
# 24 "../../include/OB/DSI.h" 2

namespace PortableServer
{

class DynamicImplementation;

}


namespace CORBA
{




class ServerRequest : public OB::RefCount
{
    PortableServer::DynamicImplementation* dynImpl_;
    OB::Upcall_var up_;
    OB::InputStreamImpl* in_;
    CORBA::NVList_ptr arguments_;
    CORBA::Context_var ctx_;
    CORBA::Any* result_;
    CORBA::Any* exception_;

    ServerRequest(PortableServer::DynamicImplementation*, OB::Upcall_ptr);





    friend class ::PortableServer::DynamicImplementation;

public:

    virtual ~ServerRequest();

    static inline ServerRequest_ptr _duplicate(ServerRequest_ptr p)
    { if(p) p -> _OB_incRef(); return p; }
    static inline ServerRequest_ptr _nil()
    { return 0; }




    virtual const char* operation() const;
    virtual void arguments(NVList_ptr&);
    virtual Context_ptr ctx();
    virtual void set_result(const Any&);
    virtual void set_exception(const Any&);





    virtual void _OB_finishUnmarshal();
    virtual void _OB_doMarshal();
};

inline void
release(ServerRequest_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(ServerRequest_ptr p)
{
    return p == 0;
}

}


namespace PortableServer
{




class DynamicImplementation : public virtual ServantBase
{



    DynamicImplementation(const DynamicImplementation&);
    void operator=(const DynamicImplementation&);

protected:

    DynamicImplementation() { }

public:




    CORBA::Object_ptr _this();

    virtual void invoke(CORBA::ServerRequest_ptr request) = 0;

    virtual CORBA::RepositoryId
    _primary_interface(const ObjectId&, POA_ptr) = 0;

    virtual CORBA::Boolean _is_a(const char* logical_type_id)
        throw(CORBA::SystemException);





    virtual void _OB_dispatch(OB::Upcall_ptr);
};

}
# 39 "../../include/OB/CORBA.h" 2


# 1 "../../include/OB/DynamicAny.h" 1
# 27 "../../include/OB/DynamicAny.h"
# 1 "../../include/OB/TCKind.h" 1
# 28 "../../include/OB/DynamicAny.h" 2
# 1 "../../include/OB/Native.h" 1
# 29 "../../include/OB/DynamicAny.h" 2
# 1 "../../include/OB/DynamicAny_fwd.h" 1
# 18 "../../include/OB/DynamicAny_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/DynamicAny_fwd.h" 2
# 39 "../../include/OB/DynamicAny_fwd.h"
namespace DynamicAny
{

class DynAny;
typedef DynAny* DynAny_ptr;
typedef DynAny* DynAnyRef;

class DynFixed;
typedef DynFixed* DynFixed_ptr;
typedef DynFixed* DynFixedRef;

class DynEnum;
typedef DynEnum* DynEnum_ptr;
typedef DynEnum* DynEnumRef;

class DynStruct;
typedef DynStruct* DynStruct_ptr;
typedef DynStruct* DynStructRef;

class DynUnion;
typedef DynUnion* DynUnion_ptr;
typedef DynUnion* DynUnionRef;

class DynSequence;
typedef DynSequence* DynSequence_ptr;
typedef DynSequence* DynSequenceRef;

class DynArray;
typedef DynArray* DynArray_ptr;
typedef DynArray* DynArrayRef;

class DynValueCommon;
typedef DynValueCommon* DynValueCommon_ptr;
typedef DynValueCommon* DynValueCommonRef;

class DynValue;
typedef DynValue* DynValue_ptr;
typedef DynValue* DynValueRef;

class DynValueBox;
typedef DynValueBox* DynValueBox_ptr;
typedef DynValueBox* DynValueBoxRef;

class DynAnyFactory;
typedef DynAnyFactory* DynAnyFactory_ptr;
typedef DynAnyFactory* DynAnyFactoryRef;

}

void OBDuplicate(DynamicAny::DynAny_ptr);
void OBRelease(DynamicAny::DynAny_ptr);

void OBMarshal(DynamicAny::DynAny_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynAny_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynFixed_ptr);
void OBRelease(DynamicAny::DynFixed_ptr);

void OBMarshal(DynamicAny::DynFixed_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynFixed_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynEnum_ptr);
void OBRelease(DynamicAny::DynEnum_ptr);

void OBMarshal(DynamicAny::DynEnum_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynEnum_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynStruct_ptr);
void OBRelease(DynamicAny::DynStruct_ptr);

void OBMarshal(DynamicAny::DynStruct_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynStruct_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynUnion_ptr);
void OBRelease(DynamicAny::DynUnion_ptr);

void OBMarshal(DynamicAny::DynUnion_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynUnion_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynSequence_ptr);
void OBRelease(DynamicAny::DynSequence_ptr);

void OBMarshal(DynamicAny::DynSequence_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynSequence_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynArray_ptr);
void OBRelease(DynamicAny::DynArray_ptr);

void OBMarshal(DynamicAny::DynArray_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynArray_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynValueCommon_ptr);
void OBRelease(DynamicAny::DynValueCommon_ptr);

void OBMarshal(DynamicAny::DynValueCommon_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynValueCommon_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynValue_ptr);
void OBRelease(DynamicAny::DynValue_ptr);

void OBMarshal(DynamicAny::DynValue_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynValue_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynValueBox_ptr);
void OBRelease(DynamicAny::DynValueBox_ptr);

void OBMarshal(DynamicAny::DynValueBox_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynValueBox_ptr&, OB::InputStreamImpl*);

void OBDuplicate(DynamicAny::DynAnyFactory_ptr);
void OBRelease(DynamicAny::DynAnyFactory_ptr);

void OBMarshal(DynamicAny::DynAnyFactory_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(DynamicAny::DynAnyFactory_ptr&, OB::InputStreamImpl*);

namespace DynamicAny
{

typedef OB::ObjVar< DynAny > DynAny_var;
typedef OB::ObjOut< DynAny > DynAny_out;

typedef OB::ObjVar< DynFixed > DynFixed_var;
typedef OB::ObjOut< DynFixed > DynFixed_out;

typedef OB::ObjVar< DynEnum > DynEnum_var;
typedef OB::ObjOut< DynEnum > DynEnum_out;

typedef OB::ObjVar< DynStruct > DynStruct_var;
typedef OB::ObjOut< DynStruct > DynStruct_out;

typedef OB::ObjVar< DynUnion > DynUnion_var;
typedef OB::ObjOut< DynUnion > DynUnion_out;

typedef OB::ObjVar< DynSequence > DynSequence_var;
typedef OB::ObjOut< DynSequence > DynSequence_out;

typedef OB::ObjVar< DynArray > DynArray_var;
typedef OB::ObjOut< DynArray > DynArray_out;

typedef OB::ObjVar< DynValueCommon > DynValueCommon_var;
typedef OB::ObjOut< DynValueCommon > DynValueCommon_out;

typedef OB::ObjVar< DynValue > DynValue_var;
typedef OB::ObjOut< DynValue > DynValue_out;

typedef OB::ObjVar< DynValueBox > DynValueBox_var;
typedef OB::ObjOut< DynValueBox > DynValueBox_out;

typedef OB::ObjVar< DynAnyFactory > DynAnyFactory_var;
typedef OB::ObjOut< DynAnyFactory > DynAnyFactory_out;

}
# 30 "../../include/OB/DynamicAny.h" 2
# 41 "../../include/OB/DynamicAny.h"
namespace OBStubImpl_DynamicAny
{

}

namespace OBStubImpl_DynamicAny
{

}




namespace DynamicAny
{




class DynAny : virtual public CORBA::Object
{
    DynAny(const DynAny&);
    void operator=(const DynAny&);

protected:

    static const char* ids_[];

public:

    DynAny() { }
    virtual ~DynAny() { }

    typedef DynAny_ptr _ptr_type;
    typedef DynAny_var _var_type;

    static inline DynAny_ptr
    _duplicate(DynAny_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynAny_ptr
    _nil()
    {
        return 0;
    }

    static DynAny_ptr _narrow(CORBA::Object_ptr);

    static DynAny_ptr _narrow(CORBA::AbstractBase_ptr);





    struct InvalidValue : public CORBA::UserException
    {
        InvalidValue() { }
        InvalidValue(const InvalidValue&);
        InvalidValue& operator=(const InvalidValue&);

        static InvalidValue* _downcast(CORBA::Exception*);
        static const InvalidValue* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(InvalidValue&, OB::InputStreamImpl*);
    };




    struct TypeMismatch : public CORBA::UserException
    {
        TypeMismatch() { }
        TypeMismatch(const TypeMismatch&);
        TypeMismatch& operator=(const TypeMismatch&);

        static TypeMismatch* _downcast(CORBA::Exception*);
        static const TypeMismatch* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(TypeMismatch&, OB::InputStreamImpl*);
    };




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual void assign(DynAny_ptr dyn_any) = 0;




    virtual void from_any(const CORBA::Any& value) = 0;




    virtual CORBA::Any* to_any() = 0;




    virtual CORBA::Boolean equal(DynAny_ptr dyn_any) = 0;




    virtual void destroy() = 0;




    virtual DynAny_ptr copy() = 0;




    virtual void insert_boolean(CORBA::Boolean value) = 0;




    virtual void insert_octet(CORBA::Octet value) = 0;




    virtual void insert_char(CORBA::Char value) = 0;




    virtual void insert_short(CORBA::Short value) = 0;




    virtual void insert_ushort(CORBA::UShort value) = 0;




    virtual void insert_long(CORBA::Long value) = 0;




    virtual void insert_ulong(CORBA::ULong value) = 0;




    virtual void insert_float(CORBA::Float value) = 0;




    virtual void insert_double(CORBA::Double value) = 0;




    virtual void insert_string(const char* value) = 0;




    virtual void insert_reference(CORBA::Object_ptr value) = 0;




    virtual void insert_typecode(CORBA::TypeCode_ptr value) = 0;




    virtual void insert_longlong(CORBA::LongLong value) = 0;




    virtual void insert_ulonglong(CORBA::ULongLong value) = 0;




    virtual void insert_longdouble(CORBA::LongDouble value) = 0;




    virtual void insert_wchar(CORBA::WChar value) = 0;




    virtual void insert_wstring(const CORBA::WChar* value) = 0;




    virtual void insert_any(const CORBA::Any& value) = 0;




    virtual void insert_dyn_any(DynAny_ptr value) = 0;




    virtual void insert_val(CORBA::ValueBase* value) = 0;




    virtual void insert_abstract(::CORBA::AbstractBase_ptr value) = 0;




    virtual CORBA::Boolean get_boolean() = 0;




    virtual CORBA::Octet get_octet() = 0;




    virtual CORBA::Char get_char() = 0;




    virtual CORBA::Short get_short() = 0;




    virtual CORBA::UShort get_ushort() = 0;




    virtual CORBA::Long get_long() = 0;




    virtual CORBA::ULong get_ulong() = 0;




    virtual CORBA::Float get_float() = 0;




    virtual CORBA::Double get_double() = 0;




    virtual char* get_string() = 0;




    virtual CORBA::Object_ptr get_reference() = 0;




    virtual CORBA::TypeCode_ptr get_typecode() = 0;




    virtual CORBA::LongLong get_longlong() = 0;




    virtual CORBA::ULongLong get_ulonglong() = 0;




    virtual CORBA::LongDouble get_longdouble() = 0;




    virtual CORBA::WChar get_wchar() = 0;




    virtual CORBA::WChar* get_wstring() = 0;




    virtual CORBA::Any* get_any() = 0;




    virtual DynAny_ptr get_dyn_any() = 0;




    virtual CORBA::ValueBase* get_val() = 0;




    virtual ::CORBA::AbstractBase_ptr get_abstract() = 0;




    virtual CORBA::Boolean seek(CORBA::Long index) = 0;




    virtual void rewind() = 0;




    virtual CORBA::Boolean next() = 0;




    virtual CORBA::ULong component_count() = 0;




    virtual DynAny_ptr current_component() = 0;
};




class DynFixed : virtual public ::DynamicAny::DynAny
{
    DynFixed(const DynFixed&);
    void operator=(const DynFixed&);

protected:

    static const char* ids_[];

public:

    DynFixed() { }
    virtual ~DynFixed() { }

    typedef DynFixed_ptr _ptr_type;
    typedef DynFixed_var _var_type;

    static inline DynFixed_ptr
    _duplicate(DynFixed_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynFixed_ptr
    _nil()
    {
        return 0;
    }

    static DynFixed_ptr _narrow(CORBA::Object_ptr);

    static DynFixed_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual char* get_value() = 0;




    virtual CORBA::Boolean set_value(const char* val) = 0;
};




class DynEnum : virtual public ::DynamicAny::DynAny
{
    DynEnum(const DynEnum&);
    void operator=(const DynEnum&);

protected:

    static const char* ids_[];

public:

    DynEnum() { }
    virtual ~DynEnum() { }

    typedef DynEnum_ptr _ptr_type;
    typedef DynEnum_var _var_type;

    static inline DynEnum_ptr
    _duplicate(DynEnum_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynEnum_ptr
    _nil()
    {
        return 0;
    }

    static DynEnum_ptr _narrow(CORBA::Object_ptr);

    static DynEnum_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual char* get_as_string() = 0;




    virtual void set_as_string(const char* value) = 0;




    virtual CORBA::ULong get_as_ulong() = 0;




    virtual void set_as_ulong(CORBA::ULong value) = 0;
};




typedef char* FieldName;
typedef CORBA::String_var FieldName_var;
typedef CORBA::String_out FieldName_out;




struct NameValuePair;
typedef OB::VarVar< NameValuePair > NameValuePair_var;
typedef OB::VarOut< NameValuePair > NameValuePair_out;

struct NameValuePair
{
    NameValuePair() { }
    NameValuePair(const NameValuePair&);
    NameValuePair& operator=(const NameValuePair&);

    typedef NameValuePair_var _var_type;

    OB::StrForStruct id;
    CORBA::Any value;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(NameValuePair&, OB::InputStreamImpl*);
};




class OBUnique_NameValuePairSeq { };

typedef OB::VarSeq< NameValuePair, OBUnique_NameValuePairSeq > NameValuePairSeq;
typedef OB::SeqVar< OB::VarSeq< NameValuePair, OBUnique_NameValuePairSeq > > NameValuePairSeq_var;
typedef OB::SeqOut< OB::VarSeq< NameValuePair, OBUnique_NameValuePairSeq > > NameValuePairSeq_out;




struct NameDynAnyPair;
typedef OB::VarVar< NameDynAnyPair > NameDynAnyPair_var;
typedef OB::VarOut< NameDynAnyPair > NameDynAnyPair_out;

struct NameDynAnyPair
{
    NameDynAnyPair() { }
    NameDynAnyPair(const NameDynAnyPair&);
    NameDynAnyPair& operator=(const NameDynAnyPair&);

    typedef NameDynAnyPair_var _var_type;

    OB::StrForStruct id;
    DynAny_var value;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(NameDynAnyPair&, OB::InputStreamImpl*);
};




class OBUnique_NameDynAnyPairSeq { };

typedef OB::VarSeq< NameDynAnyPair, OBUnique_NameDynAnyPairSeq > NameDynAnyPairSeq;
typedef OB::SeqVar< OB::VarSeq< NameDynAnyPair, OBUnique_NameDynAnyPairSeq > > NameDynAnyPairSeq_var;
typedef OB::SeqOut< OB::VarSeq< NameDynAnyPair, OBUnique_NameDynAnyPairSeq > > NameDynAnyPairSeq_out;




class DynStruct : virtual public ::DynamicAny::DynAny
{
    DynStruct(const DynStruct&);
    void operator=(const DynStruct&);

protected:

    static const char* ids_[];

public:

    DynStruct() { }
    virtual ~DynStruct() { }

    typedef DynStruct_ptr _ptr_type;
    typedef DynStruct_var _var_type;

    static inline DynStruct_ptr
    _duplicate(DynStruct_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynStruct_ptr
    _nil()
    {
        return 0;
    }

    static DynStruct_ptr _narrow(CORBA::Object_ptr);

    static DynStruct_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual FieldName current_member_name() = 0;




    virtual ::CORBA::TCKind current_member_kind() = 0;




    virtual NameValuePairSeq* get_members() = 0;




    virtual void set_members(const NameValuePairSeq& value) = 0;




    virtual NameDynAnyPairSeq* get_members_as_dyn_any() = 0;




    virtual void set_members_as_dyn_any(const NameDynAnyPairSeq& value) = 0;
};




class DynUnion : virtual public ::DynamicAny::DynAny
{
    DynUnion(const DynUnion&);
    void operator=(const DynUnion&);

protected:

    static const char* ids_[];

public:

    DynUnion() { }
    virtual ~DynUnion() { }

    typedef DynUnion_ptr _ptr_type;
    typedef DynUnion_var _var_type;

    static inline DynUnion_ptr
    _duplicate(DynUnion_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynUnion_ptr
    _nil()
    {
        return 0;
    }

    static DynUnion_ptr _narrow(CORBA::Object_ptr);

    static DynUnion_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual DynAny_ptr get_discriminator() = 0;




    virtual void set_discriminator(DynAny_ptr d) = 0;




    virtual void set_to_default_member() = 0;




    virtual void set_to_no_active_member() = 0;




    virtual CORBA::Boolean has_no_active_member() = 0;




    virtual ::CORBA::TCKind discriminator_kind() = 0;




    virtual DynAny_ptr member() = 0;




    virtual FieldName member_name() = 0;




    virtual ::CORBA::TCKind member_kind() = 0;




    virtual CORBA::Boolean is_set_to_default_member() = 0;
};




class OBUnique_AnySeq { };

typedef OB::VarSeq< CORBA::Any, OBUnique_AnySeq > AnySeq;
typedef OB::SeqVar< OB::VarSeq< CORBA::Any, OBUnique_AnySeq > > AnySeq_var;
typedef OB::SeqOut< OB::VarSeq< CORBA::Any, OBUnique_AnySeq > > AnySeq_out;




class OBUnique_DynAnySeq { };

typedef OB::ObjSeq< DynAny, OBUnique_DynAnySeq > DynAnySeq;
typedef OB::SeqVar< OB::ObjSeq< DynAny, OBUnique_DynAnySeq > > DynAnySeq_var;
typedef OB::SeqOut< OB::ObjSeq< DynAny, OBUnique_DynAnySeq > > DynAnySeq_out;




class DynSequence : virtual public ::DynamicAny::DynAny
{
    DynSequence(const DynSequence&);
    void operator=(const DynSequence&);

protected:

    static const char* ids_[];

public:

    DynSequence() { }
    virtual ~DynSequence() { }

    typedef DynSequence_ptr _ptr_type;
    typedef DynSequence_var _var_type;

    static inline DynSequence_ptr
    _duplicate(DynSequence_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynSequence_ptr
    _nil()
    {
        return 0;
    }

    static DynSequence_ptr _narrow(CORBA::Object_ptr);

    static DynSequence_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::ULong get_length() = 0;




    virtual void set_length(CORBA::ULong len) = 0;




    virtual AnySeq* get_elements() = 0;




    virtual void set_elements(const AnySeq& value) = 0;




    virtual DynAnySeq* get_elements_as_dyn_any() = 0;




    virtual void set_elements_as_dyn_any(const DynAnySeq& value) = 0;
};




class DynArray : virtual public ::DynamicAny::DynAny
{
    DynArray(const DynArray&);
    void operator=(const DynArray&);

protected:

    static const char* ids_[];

public:

    DynArray() { }
    virtual ~DynArray() { }

    typedef DynArray_ptr _ptr_type;
    typedef DynArray_var _var_type;

    static inline DynArray_ptr
    _duplicate(DynArray_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynArray_ptr
    _nil()
    {
        return 0;
    }

    static DynArray_ptr _narrow(CORBA::Object_ptr);

    static DynArray_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual AnySeq* get_elements() = 0;




    virtual void set_elements(const AnySeq& value) = 0;




    virtual DynAnySeq* get_elements_as_dyn_any() = 0;




    virtual void set_elements_as_dyn_any(const DynAnySeq& value) = 0;
};




class DynValueCommon : virtual public ::DynamicAny::DynAny
{
    DynValueCommon(const DynValueCommon&);
    void operator=(const DynValueCommon&);

protected:

    static const char* ids_[];

public:

    DynValueCommon() { }
    virtual ~DynValueCommon() { }

    typedef DynValueCommon_ptr _ptr_type;
    typedef DynValueCommon_var _var_type;

    static inline DynValueCommon_ptr
    _duplicate(DynValueCommon_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynValueCommon_ptr
    _nil()
    {
        return 0;
    }

    static DynValueCommon_ptr _narrow(CORBA::Object_ptr);

    static DynValueCommon_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Boolean is_null() = 0;




    virtual void set_to_null() = 0;




    virtual void set_to_value() = 0;
};




class DynValue : virtual public ::DynamicAny::DynValueCommon
{
    DynValue(const DynValue&);
    void operator=(const DynValue&);

protected:

    static const char* ids_[];

public:

    DynValue() { }
    virtual ~DynValue() { }

    typedef DynValue_ptr _ptr_type;
    typedef DynValue_var _var_type;

    static inline DynValue_ptr
    _duplicate(DynValue_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynValue_ptr
    _nil()
    {
        return 0;
    }

    static DynValue_ptr _narrow(CORBA::Object_ptr);

    static DynValue_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual FieldName current_member_name() = 0;




    virtual ::CORBA::TCKind current_member_kind() = 0;




    virtual NameValuePairSeq* get_members() = 0;




    virtual void set_members(const NameValuePairSeq& value) = 0;




    virtual NameDynAnyPairSeq* get_members_as_dyn_any() = 0;




    virtual void set_members_as_dyn_any(const NameDynAnyPairSeq& value) = 0;
};




class DynValueBox : virtual public ::DynamicAny::DynValueCommon
{
    DynValueBox(const DynValueBox&);
    void operator=(const DynValueBox&);

protected:

    static const char* ids_[];

public:

    DynValueBox() { }
    virtual ~DynValueBox() { }

    typedef DynValueBox_ptr _ptr_type;
    typedef DynValueBox_var _var_type;

    static inline DynValueBox_ptr
    _duplicate(DynValueBox_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynValueBox_ptr
    _nil()
    {
        return 0;
    }

    static DynValueBox_ptr _narrow(CORBA::Object_ptr);

    static DynValueBox_ptr _narrow(CORBA::AbstractBase_ptr);





    virtual CORBA::Any* get_boxed_value() = 0;




    virtual void set_boxed_value(const CORBA::Any& boxed) = 0;




    virtual DynAny_ptr get_boxed_value_as_dyn_any() = 0;




    virtual void set_boxed_value_as_dyn_any(DynAny_ptr boxed) = 0;
};




class DynAnyFactory : virtual public CORBA::Object
{
    DynAnyFactory(const DynAnyFactory&);
    void operator=(const DynAnyFactory&);

protected:

    static const char* ids_[];

public:

    DynAnyFactory() { }
    virtual ~DynAnyFactory() { }

    typedef DynAnyFactory_ptr _ptr_type;
    typedef DynAnyFactory_var _var_type;

    static inline DynAnyFactory_ptr
    _duplicate(DynAnyFactory_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline DynAnyFactory_ptr
    _nil()
    {
        return 0;
    }

    static DynAnyFactory_ptr _narrow(CORBA::Object_ptr);

    static DynAnyFactory_ptr _narrow(CORBA::AbstractBase_ptr);





    struct InconsistentTypeCode : public CORBA::UserException
    {
        InconsistentTypeCode() { }
        InconsistentTypeCode(const InconsistentTypeCode&);
        InconsistentTypeCode& operator=(const InconsistentTypeCode&);

        static InconsistentTypeCode* _downcast(CORBA::Exception*);
        static const InconsistentTypeCode* _downcast(const CORBA::Exception*);
        virtual const char* _name() const;
        virtual void _raise() const { throw *this; }
        virtual const char* _rep_id() const;
        virtual char* _to_string() const;

        virtual CORBA::Exception* _OB_clone() const;
        virtual void _OB_insertInAny(CORBA::Any&);

        static void _OB_unmarshal(InconsistentTypeCode&, OB::InputStreamImpl*);
    };




    virtual DynAny_ptr create_dyn_any(const CORBA::Any& value) = 0;




    virtual DynAny_ptr create_dyn_any_from_type_code(CORBA::TypeCode_ptr type) = 0;
};

}




namespace OBProxy_DynamicAny
{

}




namespace OBStubImpl_DynamicAny
{

}




namespace OBMarshalStubImpl_DynamicAny
{

}




namespace OBV_DynamicAny
{

}




namespace CORBA
{

inline void
release(::DynamicAny::DynAny_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynAny_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynFixed_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynFixed_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynEnum_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynEnum_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynStruct_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynStruct_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynUnion_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynUnion_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynSequence_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynSequence_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynArray_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynArray_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynValueCommon_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynValueCommon_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynValue_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynValue_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynValueBox_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynValueBox_ptr p)
{
    return p == 0;
}

}




namespace CORBA
{

inline void
release(::DynamicAny::DynAnyFactory_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::DynamicAny::DynAnyFactory_ptr p)
{
    return p == 0;
}

}
# 42 "../../include/OB/CORBA.h" 2
# 51 "../../include/OB/CORBA.h"
# 1 "../../include/OB/LocalObject.h" 1
# 52 "../../include/OB/CORBA.h" 2
# 12 "GenCPPSkelH.cpp" 2
# 1 "../../include/OB/IFR.h" 1
# 27 "../../include/OB/IFR.h"
# 1 "../../include/OB/IFR1.h" 1
# 28 "../../include/OB/IFR.h" 2
# 1 "../../include/OB/IFR2.h" 1
# 27 "../../include/OB/IFR2.h"
# 1 "../../include/OB/IFR1.h" 1
# 28 "../../include/OB/IFR2.h" 2
# 1 "../../include/OB/IFR2_fwd.h" 1
# 29 "../../include/OB/IFR2.h" 2
# 40 "../../include/OB/IFR2.h"
namespace OBStubImpl_CORBA
{

class Repository;
typedef Repository* Repository_ptr;

class Contained;
typedef Contained* Contained_ptr;

class ModuleDef;
typedef ModuleDef* ModuleDef_ptr;

class ConstantDef;
typedef ConstantDef* ConstantDef_ptr;

class StructDef;
typedef StructDef* StructDef_ptr;

class UnionDef;
typedef UnionDef* UnionDef_ptr;

class EnumDef;
typedef EnumDef* EnumDef_ptr;

class AliasDef;
typedef AliasDef* AliasDef_ptr;

class AbstractInterfaceDef;
typedef AbstractInterfaceDef* AbstractInterfaceDef_ptr;

class LocalInterfaceDef;
typedef LocalInterfaceDef* LocalInterfaceDef_ptr;

class NativeDef;
typedef NativeDef* NativeDef_ptr;

class ValueDef;
typedef ValueDef* ValueDef_ptr;

class ValueBoxDef;
typedef ValueBoxDef* ValueBoxDef_ptr;

class Container;
typedef Container* Container_ptr;

class AttributeDef;
typedef AttributeDef* AttributeDef_ptr;

class ExceptionDef;
typedef ExceptionDef* ExceptionDef_ptr;

class OperationDef;
typedef OperationDef* OperationDef_ptr;

class InterfaceDef;
typedef InterfaceDef* InterfaceDef_ptr;

}

void OBDuplicate(OBStubImpl_CORBA::Repository_ptr);
void OBRelease(OBStubImpl_CORBA::Repository_ptr);

void OBDuplicate(OBStubImpl_CORBA::Contained_ptr);
void OBRelease(OBStubImpl_CORBA::Contained_ptr);

void OBDuplicate(OBStubImpl_CORBA::ModuleDef_ptr);
void OBRelease(OBStubImpl_CORBA::ModuleDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ConstantDef_ptr);
void OBRelease(OBStubImpl_CORBA::ConstantDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::StructDef_ptr);
void OBRelease(OBStubImpl_CORBA::StructDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::UnionDef_ptr);
void OBRelease(OBStubImpl_CORBA::UnionDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::EnumDef_ptr);
void OBRelease(OBStubImpl_CORBA::EnumDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::AliasDef_ptr);
void OBRelease(OBStubImpl_CORBA::AliasDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::AbstractInterfaceDef_ptr);
void OBRelease(OBStubImpl_CORBA::AbstractInterfaceDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::LocalInterfaceDef_ptr);
void OBRelease(OBStubImpl_CORBA::LocalInterfaceDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::NativeDef_ptr);
void OBRelease(OBStubImpl_CORBA::NativeDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ValueDef_ptr);
void OBRelease(OBStubImpl_CORBA::ValueDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ValueBoxDef_ptr);
void OBRelease(OBStubImpl_CORBA::ValueBoxDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::Container_ptr);
void OBRelease(OBStubImpl_CORBA::Container_ptr);

void OBDuplicate(OBStubImpl_CORBA::AttributeDef_ptr);
void OBRelease(OBStubImpl_CORBA::AttributeDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ExceptionDef_ptr);
void OBRelease(OBStubImpl_CORBA::ExceptionDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::OperationDef_ptr);
void OBRelease(OBStubImpl_CORBA::OperationDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::InterfaceDef_ptr);
void OBRelease(OBStubImpl_CORBA::InterfaceDef_ptr);

namespace OBStubImpl_CORBA
{

typedef OB::ObjVar< Repository > Repository_var;

typedef OB::ObjVar< Contained > Contained_var;

typedef OB::ObjVar< ModuleDef > ModuleDef_var;

typedef OB::ObjVar< ConstantDef > ConstantDef_var;

typedef OB::ObjVar< StructDef > StructDef_var;

typedef OB::ObjVar< UnionDef > UnionDef_var;

typedef OB::ObjVar< EnumDef > EnumDef_var;

typedef OB::ObjVar< AliasDef > AliasDef_var;

typedef OB::ObjVar< AbstractInterfaceDef > AbstractInterfaceDef_var;

typedef OB::ObjVar< LocalInterfaceDef > LocalInterfaceDef_var;

typedef OB::ObjVar< NativeDef > NativeDef_var;

typedef OB::ObjVar< ValueDef > ValueDef_var;

typedef OB::ObjVar< ValueBoxDef > ValueBoxDef_var;

typedef OB::ObjVar< Container > Container_var;

typedef OB::ObjVar< AttributeDef > AttributeDef_var;

typedef OB::ObjVar< ExceptionDef > ExceptionDef_var;

typedef OB::ObjVar< OperationDef > OperationDef_var;

typedef OB::ObjVar< InterfaceDef > InterfaceDef_var;

}




namespace CORBA
{




class Contained : virtual public ::CORBA::IRObject
{
    Contained(const Contained&);
    void operator=(const Contained&);

protected:

    static const char* ids_[];

public:

    Contained() { }
    virtual ~Contained() { }

    typedef Contained_ptr _ptr_type;
    typedef Contained_var _var_type;

    static inline Contained_ptr
    _duplicate(Contained_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Contained_ptr
    _nil()
    {
        return 0;
    }

    static Contained_ptr _narrow(CORBA::Object_ptr);
    static Contained_ptr _unchecked_narrow(CORBA::Object_ptr);

    static Contained_ptr _narrow(CORBA::AbstractBase_ptr);
    static Contained_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual RepositoryId id() = 0;
    virtual void id(const char*) = 0;




    virtual Identifier name() = 0;
    virtual void name(const char*) = 0;




    virtual VersionSpec version() = 0;
    virtual void version(const char*) = 0;




    virtual Container_ptr defined_in() = 0;




    virtual ScopedName absolute_name() = 0;




    virtual Repository_ptr containing_repository() = 0;




    struct Description;
    typedef OB::VarVar< Description > Description_var;
    typedef OB::VarOut< Description > Description_out;

    struct Description
    {



        Description() { }

        Description(const Description&);
        Description& operator=(const Description&);

        typedef Description_var _var_type;

        DefinitionKind kind;
        CORBA::Any value;

        void _OB_marshal(OB::OutputStreamImpl*) const;
        static void _OB_unmarshal(Description&, OB::InputStreamImpl*);
    };

              static OB::TypeCodeConst _tc_Description;




    virtual Description* describe() = 0;




    virtual void move(Container_ptr new_container,
                      const char* new_name,
                      const char* new_version) = 0;
};




class OBUnique_InterfaceDefSeq { };

typedef OB::ObjSeq< InterfaceDef, OBUnique_InterfaceDefSeq > InterfaceDefSeq;
typedef OB::SeqVar< OB::ObjSeq< InterfaceDef, OBUnique_InterfaceDefSeq > > InterfaceDefSeq_var;
typedef OB::SeqOut< OB::ObjSeq< InterfaceDef, OBUnique_InterfaceDefSeq > > InterfaceDefSeq_out;
          extern OB::TypeCodeConst _tc_InterfaceDefSeq;

struct OBInfo_InterfaceDefSeq : public OB::ConstructedInfo
{
    OBInfo_InterfaceDefSeq() { }

    virtual void free(void* p) const
    {
        delete (InterfaceDefSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new InterfaceDefSeq(*(const InterfaceDefSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_AbstractInterfaceDefSeq { };

typedef OB::ObjSeq< AbstractInterfaceDef, OBUnique_AbstractInterfaceDefSeq > AbstractInterfaceDefSeq;
typedef OB::SeqVar< OB::ObjSeq< AbstractInterfaceDef, OBUnique_AbstractInterfaceDefSeq > > AbstractInterfaceDefSeq_var;
typedef OB::SeqOut< OB::ObjSeq< AbstractInterfaceDef, OBUnique_AbstractInterfaceDefSeq > > AbstractInterfaceDefSeq_out;
          extern OB::TypeCodeConst _tc_AbstractInterfaceDefSeq;

struct OBInfo_AbstractInterfaceDefSeq : public OB::ConstructedInfo
{
    OBInfo_AbstractInterfaceDefSeq() { }

    virtual void free(void* p) const
    {
        delete (AbstractInterfaceDefSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new AbstractInterfaceDefSeq(*(const AbstractInterfaceDefSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_LocalInterfaceDefSeq { };

typedef OB::ObjSeq< LocalInterfaceDef, OBUnique_LocalInterfaceDefSeq > LocalInterfaceDefSeq;
typedef OB::SeqVar< OB::ObjSeq< LocalInterfaceDef, OBUnique_LocalInterfaceDefSeq > > LocalInterfaceDefSeq_var;
typedef OB::SeqOut< OB::ObjSeq< LocalInterfaceDef, OBUnique_LocalInterfaceDefSeq > > LocalInterfaceDefSeq_out;
          extern OB::TypeCodeConst _tc_LocalInterfaceDefSeq;

struct OBInfo_LocalInterfaceDefSeq : public OB::ConstructedInfo
{
    OBInfo_LocalInterfaceDefSeq() { }

    virtual void free(void* p) const
    {
        delete (LocalInterfaceDefSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new LocalInterfaceDefSeq(*(const LocalInterfaceDefSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_ValueDefSeq { };

typedef OB::ObjSeq< ValueDef, OBUnique_ValueDefSeq > ValueDefSeq;
typedef OB::SeqVar< OB::ObjSeq< ValueDef, OBUnique_ValueDefSeq > > ValueDefSeq_var;
typedef OB::SeqOut< OB::ObjSeq< ValueDef, OBUnique_ValueDefSeq > > ValueDefSeq_out;
          extern OB::TypeCodeConst _tc_ValueDefSeq;

struct OBInfo_ValueDefSeq : public OB::ConstructedInfo
{
    OBInfo_ValueDefSeq() { }

    virtual void free(void* p) const
    {
        delete (ValueDefSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ValueDefSeq(*(const ValueDefSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_ContainedSeq { };

typedef OB::ObjSeq< Contained, OBUnique_ContainedSeq > ContainedSeq;
typedef OB::SeqVar< OB::ObjSeq< Contained, OBUnique_ContainedSeq > > ContainedSeq_var;
typedef OB::SeqOut< OB::ObjSeq< Contained, OBUnique_ContainedSeq > > ContainedSeq_out;
          extern OB::TypeCodeConst _tc_ContainedSeq;

struct OBInfo_ContainedSeq : public OB::ConstructedInfo
{
    OBInfo_ContainedSeq() { }

    virtual void free(void* p) const
    {
        delete (ContainedSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ContainedSeq(*(const ContainedSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class Container : virtual public ::CORBA::IRObject
{
    Container(const Container&);
    void operator=(const Container&);

protected:

    static const char* ids_[];

public:

    Container() { }
    virtual ~Container() { }

    typedef Container_ptr _ptr_type;
    typedef Container_var _var_type;

    static inline Container_ptr
    _duplicate(Container_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Container_ptr
    _nil()
    {
        return 0;
    }

    static Container_ptr _narrow(CORBA::Object_ptr);
    static Container_ptr _unchecked_narrow(CORBA::Object_ptr);

    static Container_ptr _narrow(CORBA::AbstractBase_ptr);
    static Container_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual Contained_ptr lookup(const char* search_name) = 0;




    virtual ContainedSeq* contents(DefinitionKind limit_type,
                                   CORBA::Boolean exclude_inherited) = 0;




    virtual ContainedSeq* lookup_name(const char* search_name,
                                      CORBA::Long levels_to_search,
                                      DefinitionKind limit_type,
                                      CORBA::Boolean exclude_inherited) = 0;




    struct Description;
    typedef OB::VarVar< Description > Description_var;
    typedef OB::VarOut< Description > Description_out;

    struct Description
    {



        Description() { }

        Description(const Description&);
        Description& operator=(const Description&);

        typedef Description_var _var_type;

        Contained_var contained_object;
        DefinitionKind kind;
        CORBA::Any value;

        void _OB_marshal(OB::OutputStreamImpl*) const;
        static void _OB_unmarshal(Description&, OB::InputStreamImpl*);
    };

              static OB::TypeCodeConst _tc_Description;




    class OBUnique_DescriptionSeq { };

    typedef OB::VarSeq< Description, OBUnique_DescriptionSeq > DescriptionSeq;
    typedef OB::SeqVar< OB::VarSeq< Description, OBUnique_DescriptionSeq > > DescriptionSeq_var;
    typedef OB::SeqOut< OB::VarSeq< Description, OBUnique_DescriptionSeq > > DescriptionSeq_out;
              static OB::TypeCodeConst _tc_DescriptionSeq;

    struct OBInfo_DescriptionSeq : public OB::ConstructedInfo
    {
        OBInfo_DescriptionSeq() { }

        virtual void free(void* p) const
        {
            delete (DescriptionSeq*)p;
        }

        virtual void* dup(const void* p) const
        {
            return new DescriptionSeq(*(const DescriptionSeq*)p);
        }

        virtual void marshal(const void*, OB::OutputStreamImpl*) const;
        virtual void unmarshal(void*, OB::InputStreamImpl*) const;
    };




    virtual DescriptionSeq* describe_contents(DefinitionKind limit_type,
                                              CORBA::Boolean exclude_inherited,
                                              CORBA::Long max_returned_objs) = 0;




    virtual ModuleDef_ptr create_module(const char* id,
                                        const char* name,
                                        const char* version) = 0;




    virtual ConstantDef_ptr create_constant(const char* id,
                                            const char* name,
                                            const char* version,
                                            IDLType_ptr type,
                                            const CORBA::Any& value) = 0;




    virtual StructDef_ptr create_struct(const char* id,
                                        const char* name,
                                        const char* version,
                                        const StructMemberSeq& members) = 0;




    virtual UnionDef_ptr create_union(const char* id,
                                      const char* name,
                                      const char* version,
                                      IDLType_ptr discriminator_type,
                                      const UnionMemberSeq& members) = 0;




    virtual EnumDef_ptr create_enum(const char* id,
                                    const char* name,
                                    const char* version,
                                    const EnumMemberSeq& members) = 0;




    virtual AliasDef_ptr create_alias(const char* id,
                                      const char* name,
                                      const char* version,
                                      IDLType_ptr original_type) = 0;




    virtual InterfaceDef_ptr create_interface(const char* id,
                                              const char* name,
                                              const char* version,
                                              const InterfaceDefSeq& base_interfaces) = 0;




    virtual AbstractInterfaceDef_ptr create_abstract_interface(const char* id,
                                                               const char* name,
                                                               const char* version,
                                                               const AbstractInterfaceDefSeq& base_interfaces) = 0;




    virtual LocalInterfaceDef_ptr create_local_interface(const char* id,
                                                         const char* name,
                                                         const char* version,
                                                         const InterfaceDefSeq& base_interfaces) = 0;




    virtual ExceptionDef_ptr create_exception(const char* id,
                                              const char* name,
                                              const char* version,
                                              const StructMemberSeq& members) = 0;




    virtual ValueDef_ptr create_value(const char* id,
                                      const char* name,
                                      const char* version,
                                      CORBA::Boolean is_custom,
                                      CORBA::Boolean is_abstract,
                                      ValueDef_ptr base_value,
                                      CORBA::Boolean is_truncatable,
                                      const ValueDefSeq& abstract_base_values,
                                      const InterfaceDefSeq& supported_interfaces,
                                      const InitializerSeq& initializers) = 0;




    virtual ValueBoxDef_ptr create_value_box(const char* id,
                                             const char* name,
                                             const char* version,
                                             IDLType_ptr original_type_def) = 0;




    virtual NativeDef_ptr create_native(const char* id,
                                        const char* name,
                                        const char* version) = 0;
};




enum AttributeMode
{
    ATTR_NORMAL,
    ATTR_READONLY
};

typedef AttributeMode& AttributeMode_out;

          extern OB::TypeCodeConst _tc_AttributeMode;




class AttributeDef : virtual public ::CORBA::Contained
{
    AttributeDef(const AttributeDef&);
    void operator=(const AttributeDef&);

protected:

    static const char* ids_[];

public:

    AttributeDef() { }
    virtual ~AttributeDef() { }

    typedef AttributeDef_ptr _ptr_type;
    typedef AttributeDef_var _var_type;

    static inline AttributeDef_ptr
    _duplicate(AttributeDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AttributeDef_ptr
    _nil()
    {
        return 0;
    }

    static AttributeDef_ptr _narrow(CORBA::Object_ptr);
    static AttributeDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static AttributeDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static AttributeDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual IDLType_ptr type_def() = 0;
    virtual void type_def(IDLType_ptr) = 0;




    virtual AttributeMode mode() = 0;
    virtual void mode(AttributeMode) = 0;
};




struct AttributeDescription;
typedef OB::VarVar< AttributeDescription > AttributeDescription_var;
typedef OB::VarOut< AttributeDescription > AttributeDescription_out;

struct AttributeDescription
{



    AttributeDescription() { }

    AttributeDescription(const AttributeDescription&);
    AttributeDescription& operator=(const AttributeDescription&);

    typedef AttributeDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    CORBA::TypeCode_var type;
    AttributeMode mode;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(AttributeDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_AttributeDescription;




enum OperationMode
{
    OP_NORMAL,
    OP_ONEWAY
};

typedef OperationMode& OperationMode_out;

          extern OB::TypeCodeConst _tc_OperationMode;




struct ParameterDescription;
typedef OB::VarVar< ParameterDescription > ParameterDescription_var;
typedef OB::VarOut< ParameterDescription > ParameterDescription_out;

struct ParameterDescription
{



    ParameterDescription() { }

    ParameterDescription(const ParameterDescription&);
    ParameterDescription& operator=(const ParameterDescription&);

    typedef ParameterDescription_var _var_type;

    OB::StrForStruct name;
    CORBA::TypeCode_var type;
    IDLType_var type_def;
    ParameterMode mode;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ParameterDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ParameterDescription;




class OBUnique_ParDescriptionSeq { };

typedef OB::VarSeq< ParameterDescription, OBUnique_ParDescriptionSeq > ParDescriptionSeq;
typedef OB::SeqVar< OB::VarSeq< ParameterDescription, OBUnique_ParDescriptionSeq > > ParDescriptionSeq_var;
typedef OB::SeqOut< OB::VarSeq< ParameterDescription, OBUnique_ParDescriptionSeq > > ParDescriptionSeq_out;
          extern OB::TypeCodeConst _tc_ParDescriptionSeq;

struct OBInfo_ParDescriptionSeq : public OB::ConstructedInfo
{
    OBInfo_ParDescriptionSeq() { }

    virtual void free(void* p) const
    {
        delete (ParDescriptionSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ParDescriptionSeq(*(const ParDescriptionSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




typedef char* ContextIdentifier;
typedef CORBA::String_var ContextIdentifier_var;
typedef CORBA::String_out ContextIdentifier_out;
          extern OB::TypeCodeConst _tc_ContextIdentifier;




class OBUnique_ContextIdSeq { };

typedef OB::StrSeq< OBUnique_ContextIdSeq > ContextIdSeq;
typedef OB::SeqVar< OB::StrSeq< OBUnique_ContextIdSeq > > ContextIdSeq_var;
typedef OB::SeqOut< OB::StrSeq< OBUnique_ContextIdSeq > > ContextIdSeq_out;
          extern OB::TypeCodeConst _tc_ContextIdSeq;

struct OBInfo_ContextIdSeq : public OB::ConstructedInfo
{
    OBInfo_ContextIdSeq() { }

    virtual void free(void* p) const
    {
        delete (ContextIdSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ContextIdSeq(*(const ContextIdSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class ExceptionDef : virtual public ::CORBA::Contained,
                     virtual public ::CORBA::Container
{
    ExceptionDef(const ExceptionDef&);
    void operator=(const ExceptionDef&);

protected:

    static const char* ids_[];

public:

    ExceptionDef() { }
    virtual ~ExceptionDef() { }

    typedef ExceptionDef_ptr _ptr_type;
    typedef ExceptionDef_var _var_type;

    static inline ExceptionDef_ptr
    _duplicate(ExceptionDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ExceptionDef_ptr
    _nil()
    {
        return 0;
    }

    static ExceptionDef_ptr _narrow(CORBA::Object_ptr);
    static ExceptionDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static ExceptionDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static ExceptionDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual StructMemberSeq* members() = 0;
    virtual void members(const StructMemberSeq&) = 0;
};




struct ExceptionDescription;
typedef OB::VarVar< ExceptionDescription > ExceptionDescription_var;
typedef OB::VarOut< ExceptionDescription > ExceptionDescription_out;

struct ExceptionDescription
{
    ExceptionDescription() { }
    ExceptionDescription(const ExceptionDescription&);
    ExceptionDescription& operator=(const ExceptionDescription&);

    typedef ExceptionDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    CORBA::TypeCode_var type;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ExceptionDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ExceptionDescription;




class OBUnique_ExceptionDefSeq { };

typedef OB::ObjSeq< ExceptionDef, OBUnique_ExceptionDefSeq > ExceptionDefSeq;
typedef OB::SeqVar< OB::ObjSeq< ExceptionDef, OBUnique_ExceptionDefSeq > > ExceptionDefSeq_var;
typedef OB::SeqOut< OB::ObjSeq< ExceptionDef, OBUnique_ExceptionDefSeq > > ExceptionDefSeq_out;
          extern OB::TypeCodeConst _tc_ExceptionDefSeq;

struct OBInfo_ExceptionDefSeq : public OB::ConstructedInfo
{
    OBInfo_ExceptionDefSeq() { }

    virtual void free(void* p) const
    {
        delete (ExceptionDefSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ExceptionDefSeq(*(const ExceptionDefSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_ExcDescriptionSeq { };

typedef OB::VarSeq< ExceptionDescription, OBUnique_ExcDescriptionSeq > ExcDescriptionSeq;
typedef OB::SeqVar< OB::VarSeq< ExceptionDescription, OBUnique_ExcDescriptionSeq > > ExcDescriptionSeq_var;
typedef OB::SeqOut< OB::VarSeq< ExceptionDescription, OBUnique_ExcDescriptionSeq > > ExcDescriptionSeq_out;
          extern OB::TypeCodeConst _tc_ExcDescriptionSeq;

struct OBInfo_ExcDescriptionSeq : public OB::ConstructedInfo
{
    OBInfo_ExcDescriptionSeq() { }

    virtual void free(void* p) const
    {
        delete (ExcDescriptionSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new ExcDescriptionSeq(*(const ExcDescriptionSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OperationDef : virtual public ::CORBA::Contained
{
    OperationDef(const OperationDef&);
    void operator=(const OperationDef&);

protected:

    static const char* ids_[];

public:

    OperationDef() { }
    virtual ~OperationDef() { }

    typedef OperationDef_ptr _ptr_type;
    typedef OperationDef_var _var_type;

    static inline OperationDef_ptr
    _duplicate(OperationDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline OperationDef_ptr
    _nil()
    {
        return 0;
    }

    static OperationDef_ptr _narrow(CORBA::Object_ptr);
    static OperationDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static OperationDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static OperationDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::TypeCode_ptr result() = 0;




    virtual IDLType_ptr result_def() = 0;
    virtual void result_def(IDLType_ptr) = 0;




    virtual ParDescriptionSeq* params() = 0;
    virtual void params(const ParDescriptionSeq&) = 0;




    virtual OperationMode mode() = 0;
    virtual void mode(OperationMode) = 0;




    virtual ContextIdSeq* contexts() = 0;
    virtual void contexts(const ContextIdSeq&) = 0;




    virtual ExceptionDefSeq* exceptions() = 0;
    virtual void exceptions(const ExceptionDefSeq&) = 0;
};




struct OperationDescription;
typedef OB::VarVar< OperationDescription > OperationDescription_var;
typedef OB::VarOut< OperationDescription > OperationDescription_out;

struct OperationDescription
{



    OperationDescription() { }

    OperationDescription(const OperationDescription&);
    OperationDescription& operator=(const OperationDescription&);

    typedef OperationDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    CORBA::TypeCode_var result;
    OperationMode mode;
    ContextIdSeq contexts;
    ParDescriptionSeq parameters;
    ExcDescriptionSeq exceptions;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(OperationDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_OperationDescription;




class OBUnique_RepositoryIdSeq { };

typedef OB::StrSeq< OBUnique_RepositoryIdSeq > RepositoryIdSeq;
typedef OB::SeqVar< OB::StrSeq< OBUnique_RepositoryIdSeq > > RepositoryIdSeq_var;
typedef OB::SeqOut< OB::StrSeq< OBUnique_RepositoryIdSeq > > RepositoryIdSeq_out;
          extern OB::TypeCodeConst _tc_RepositoryIdSeq;

struct OBInfo_RepositoryIdSeq : public OB::ConstructedInfo
{
    OBInfo_RepositoryIdSeq() { }

    virtual void free(void* p) const
    {
        delete (RepositoryIdSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new RepositoryIdSeq(*(const RepositoryIdSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_OpDescriptionSeq { };

typedef OB::VarSeq< OperationDescription, OBUnique_OpDescriptionSeq > OpDescriptionSeq;
typedef OB::SeqVar< OB::VarSeq< OperationDescription, OBUnique_OpDescriptionSeq > > OpDescriptionSeq_var;
typedef OB::SeqOut< OB::VarSeq< OperationDescription, OBUnique_OpDescriptionSeq > > OpDescriptionSeq_out;
          extern OB::TypeCodeConst _tc_OpDescriptionSeq;

struct OBInfo_OpDescriptionSeq : public OB::ConstructedInfo
{
    OBInfo_OpDescriptionSeq() { }

    virtual void free(void* p) const
    {
        delete (OpDescriptionSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new OpDescriptionSeq(*(const OpDescriptionSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class OBUnique_AttrDescriptionSeq { };

typedef OB::VarSeq< AttributeDescription, OBUnique_AttrDescriptionSeq > AttrDescriptionSeq;
typedef OB::SeqVar< OB::VarSeq< AttributeDescription, OBUnique_AttrDescriptionSeq > > AttrDescriptionSeq_var;
typedef OB::SeqOut< OB::VarSeq< AttributeDescription, OBUnique_AttrDescriptionSeq > > AttrDescriptionSeq_out;
          extern OB::TypeCodeConst _tc_AttrDescriptionSeq;

struct OBInfo_AttrDescriptionSeq : public OB::ConstructedInfo
{
    OBInfo_AttrDescriptionSeq() { }

    virtual void free(void* p) const
    {
        delete (AttrDescriptionSeq*)p;
    }

    virtual void* dup(const void* p) const
    {
        return new AttrDescriptionSeq(*(const AttrDescriptionSeq*)p);
    }

    virtual void marshal(const void*, OB::OutputStreamImpl*) const;
    virtual void unmarshal(void*, OB::InputStreamImpl*) const;
};




class InterfaceDef : virtual public ::CORBA::Container,
                     virtual public ::CORBA::Contained,
                     virtual public ::CORBA::IDLType
{
    InterfaceDef(const InterfaceDef&);
    void operator=(const InterfaceDef&);

protected:

    static const char* ids_[];

public:

    InterfaceDef() { }
    virtual ~InterfaceDef() { }

    typedef InterfaceDef_ptr _ptr_type;
    typedef InterfaceDef_var _var_type;

    static inline InterfaceDef_ptr
    _duplicate(InterfaceDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline InterfaceDef_ptr
    _nil()
    {
        return 0;
    }

    static InterfaceDef_ptr _narrow(CORBA::Object_ptr);
    static InterfaceDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static InterfaceDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static InterfaceDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual InterfaceDefSeq* base_interfaces() = 0;
    virtual void base_interfaces(const InterfaceDefSeq&) = 0;




    virtual CORBA::Boolean is_a(const char* interface_id) = 0;




    struct FullInterfaceDescription;
    typedef OB::VarVar< FullInterfaceDescription > FullInterfaceDescription_var;
    typedef OB::VarOut< FullInterfaceDescription > FullInterfaceDescription_out;

    struct FullInterfaceDescription
    {
        FullInterfaceDescription() { }
        FullInterfaceDescription(const FullInterfaceDescription&);
        FullInterfaceDescription& operator=(const FullInterfaceDescription&);

        typedef FullInterfaceDescription_var _var_type;

        OB::StrForStruct name;
        OB::StrForStruct id;
        OB::StrForStruct defined_in;
        OB::StrForStruct version;
        OpDescriptionSeq operations;
        AttrDescriptionSeq attributes;
        RepositoryIdSeq base_interfaces;
        CORBA::TypeCode_var type;

        void _OB_marshal(OB::OutputStreamImpl*) const;
        static void _OB_unmarshal(FullInterfaceDescription&, OB::InputStreamImpl*);
    };

              static OB::TypeCodeConst _tc_FullInterfaceDescription;




    virtual FullInterfaceDescription* describe_interface() = 0;




    virtual AttributeDef_ptr create_attribute(const char* id,
                                              const char* name,
                                              const char* version,
                                              IDLType_ptr type,
                                              AttributeMode mode) = 0;




    virtual OperationDef_ptr create_operation(const char* id,
                                              const char* name,
                                              const char* version,
                                              IDLType_ptr result,
                                              OperationMode mode,
                                              const ParDescriptionSeq& params,
                                              const ExceptionDefSeq& exceptions,
                                              const ContextIdSeq& contexts) = 0;
};




struct InterfaceDescription;
typedef OB::VarVar< InterfaceDescription > InterfaceDescription_var;
typedef OB::VarOut< InterfaceDescription > InterfaceDescription_out;

struct InterfaceDescription
{
    InterfaceDescription() { }
    InterfaceDescription(const InterfaceDescription&);
    InterfaceDescription& operator=(const InterfaceDescription&);

    typedef InterfaceDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    RepositoryIdSeq base_interfaces;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(InterfaceDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_InterfaceDescription;

}




namespace OBProxy_CORBA
{




class Contained : virtual public ::CORBA::Contained,
                  virtual public OBProxy_CORBA::IRObject
{
    Contained(const Contained&);
    void operator=(const Contained&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    Contained() { }
    virtual ~Contained() { }

    virtual const char** _OB_ids() const;




    ::CORBA::RepositoryId id();
    void id(const char*);




    ::CORBA::Identifier name();
    void name(const char*);




    ::CORBA::VersionSpec version();
    void version(const char*);




    ::CORBA::Container_ptr defined_in();




    ::CORBA::ScopedName absolute_name();




    ::CORBA::Repository_ptr containing_repository();




    ::CORBA::Contained::Description* describe();




    void move(::CORBA::Container_ptr new_container,
              const char* new_name,
              const char* new_version);
};




class Container : virtual public ::CORBA::Container,
                  virtual public OBProxy_CORBA::IRObject
{
    Container(const Container&);
    void operator=(const Container&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    Container() { }
    virtual ~Container() { }

    virtual const char** _OB_ids() const;




    ::CORBA::Contained_ptr lookup(const char* search_name);




    ::CORBA::ContainedSeq* contents(::CORBA::DefinitionKind limit_type,
                                    CORBA::Boolean exclude_inherited);




    ::CORBA::ContainedSeq* lookup_name(const char* search_name,
                                       CORBA::Long levels_to_search,
                                       ::CORBA::DefinitionKind limit_type,
                                       CORBA::Boolean exclude_inherited);




    ::CORBA::Container::DescriptionSeq* describe_contents(::CORBA::DefinitionKind limit_type,
                                                          CORBA::Boolean exclude_inherited,
                                                          CORBA::Long max_returned_objs);




    ::CORBA::ModuleDef_ptr create_module(const char* id,
                                         const char* name,
                                         const char* version);




    ::CORBA::ConstantDef_ptr create_constant(const char* id,
                                             const char* name,
                                             const char* version,
                                             ::CORBA::IDLType_ptr type,
                                             const CORBA::Any& value);




    ::CORBA::StructDef_ptr create_struct(const char* id,
                                         const char* name,
                                         const char* version,
                                         const ::CORBA::StructMemberSeq& members);




    ::CORBA::UnionDef_ptr create_union(const char* id,
                                       const char* name,
                                       const char* version,
                                       ::CORBA::IDLType_ptr discriminator_type,
                                       const ::CORBA::UnionMemberSeq& members);




    ::CORBA::EnumDef_ptr create_enum(const char* id,
                                     const char* name,
                                     const char* version,
                                     const ::CORBA::EnumMemberSeq& members);




    ::CORBA::AliasDef_ptr create_alias(const char* id,
                                       const char* name,
                                       const char* version,
                                       ::CORBA::IDLType_ptr original_type);




    ::CORBA::InterfaceDef_ptr create_interface(const char* id,
                                               const char* name,
                                               const char* version,
                                               const ::CORBA::InterfaceDefSeq& base_interfaces);




    ::CORBA::AbstractInterfaceDef_ptr create_abstract_interface(const char* id,
                                                                const char* name,
                                                                const char* version,
                                                                const ::CORBA::AbstractInterfaceDefSeq& base_interfaces);




    ::CORBA::LocalInterfaceDef_ptr create_local_interface(const char* id,
                                                          const char* name,
                                                          const char* version,
                                                          const ::CORBA::InterfaceDefSeq& base_interfaces);




    ::CORBA::ExceptionDef_ptr create_exception(const char* id,
                                               const char* name,
                                               const char* version,
                                               const ::CORBA::StructMemberSeq& members);




    ::CORBA::ValueDef_ptr create_value(const char* id,
                                       const char* name,
                                       const char* version,
                                       CORBA::Boolean is_custom,
                                       CORBA::Boolean is_abstract,
                                       ::CORBA::ValueDef_ptr base_value,
                                       CORBA::Boolean is_truncatable,
                                       const ::CORBA::ValueDefSeq& abstract_base_values,
                                       const ::CORBA::InterfaceDefSeq& supported_interfaces,
                                       const ::CORBA::InitializerSeq& initializers);




    ::CORBA::ValueBoxDef_ptr create_value_box(const char* id,
                                              const char* name,
                                              const char* version,
                                              ::CORBA::IDLType_ptr original_type_def);




    ::CORBA::NativeDef_ptr create_native(const char* id,
                                         const char* name,
                                         const char* version);
};




class AttributeDef : virtual public ::CORBA::AttributeDef,
                     virtual public OBProxy_CORBA::Contained
{
    AttributeDef(const AttributeDef&);
    void operator=(const AttributeDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    AttributeDef() { }
    virtual ~AttributeDef() { }

    virtual const char** _OB_ids() const;




    CORBA::TypeCode_ptr type();




    ::CORBA::IDLType_ptr type_def();
    void type_def(::CORBA::IDLType_ptr);




    ::CORBA::AttributeMode mode();
    void mode(::CORBA::AttributeMode);
};




class ExceptionDef : virtual public ::CORBA::ExceptionDef,
                     virtual public OBProxy_CORBA::Contained,
                     virtual public OBProxy_CORBA::Container
{
    ExceptionDef(const ExceptionDef&);
    void operator=(const ExceptionDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    ExceptionDef() { }
    virtual ~ExceptionDef() { }

    virtual const char** _OB_ids() const;




    CORBA::TypeCode_ptr type();




    ::CORBA::StructMemberSeq* members();
    void members(const ::CORBA::StructMemberSeq&);
};




class OperationDef : virtual public ::CORBA::OperationDef,
                     virtual public OBProxy_CORBA::Contained
{
    OperationDef(const OperationDef&);
    void operator=(const OperationDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    OperationDef() { }
    virtual ~OperationDef() { }

    virtual const char** _OB_ids() const;




    CORBA::TypeCode_ptr result();




    ::CORBA::IDLType_ptr result_def();
    void result_def(::CORBA::IDLType_ptr);




    ::CORBA::ParDescriptionSeq* params();
    void params(const ::CORBA::ParDescriptionSeq&);




    ::CORBA::OperationMode mode();
    void mode(::CORBA::OperationMode);




    ::CORBA::ContextIdSeq* contexts();
    void contexts(const ::CORBA::ContextIdSeq&);




    ::CORBA::ExceptionDefSeq* exceptions();
    void exceptions(const ::CORBA::ExceptionDefSeq&);
};




class InterfaceDef : virtual public ::CORBA::InterfaceDef,
                     virtual public OBProxy_CORBA::Container,
                     virtual public OBProxy_CORBA::Contained,
                     virtual public OBProxy_CORBA::IDLType
{
    InterfaceDef(const InterfaceDef&);
    void operator=(const InterfaceDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    InterfaceDef() { }
    virtual ~InterfaceDef() { }

    virtual const char** _OB_ids() const;




    ::CORBA::InterfaceDefSeq* base_interfaces();
    void base_interfaces(const ::CORBA::InterfaceDefSeq&);




    CORBA::Boolean is_a(const char* interface_id);




    ::CORBA::InterfaceDef::FullInterfaceDescription* describe_interface();




    ::CORBA::AttributeDef_ptr create_attribute(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr type,
                                               ::CORBA::AttributeMode mode);




    ::CORBA::OperationDef_ptr create_operation(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr result,
                                               ::CORBA::OperationMode mode,
                                               const ::CORBA::ParDescriptionSeq& params,
                                               const ::CORBA::ExceptionDefSeq& exceptions,
                                               const ::CORBA::ContextIdSeq& contexts);
};

}




namespace OBStubImpl_CORBA
{




class Contained : virtual public OBStubImpl_CORBA::IRObject
{
    Contained(const Contained&);
    void operator=(const Contained&);

protected:

    Contained() { }

public:

    static inline Contained_ptr
    _duplicate(Contained_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline Contained_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::RepositoryId id() = 0;
    virtual void id(const char*) = 0;




    virtual ::CORBA::Identifier name() = 0;
    virtual void name(const char*) = 0;




    virtual ::CORBA::VersionSpec version() = 0;
    virtual void version(const char*) = 0;




    virtual ::CORBA::Container_ptr defined_in() = 0;




    virtual ::CORBA::ScopedName absolute_name() = 0;




    virtual ::CORBA::Repository_ptr containing_repository() = 0;




    virtual ::CORBA::Contained::Description* describe() = 0;




    virtual void move(::CORBA::Container_ptr new_container,
                      const char* new_name,
                      const char* new_version) = 0;
};




class Container : virtual public OBStubImpl_CORBA::IRObject
{
    Container(const Container&);
    void operator=(const Container&);

protected:

    Container() { }

public:

    static inline Container_ptr
    _duplicate(Container_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline Container_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::Contained_ptr lookup(const char* search_name) = 0;




    virtual ::CORBA::ContainedSeq* contents(::CORBA::DefinitionKind limit_type,
                                            CORBA::Boolean exclude_inherited) = 0;




    virtual ::CORBA::ContainedSeq* lookup_name(const char* search_name,
                                               CORBA::Long levels_to_search,
                                               ::CORBA::DefinitionKind limit_type,
                                               CORBA::Boolean exclude_inherited) = 0;




    virtual ::CORBA::Container::DescriptionSeq* describe_contents(::CORBA::DefinitionKind limit_type,
                                                                  CORBA::Boolean exclude_inherited,
                                                                  CORBA::Long max_returned_objs) = 0;




    virtual ::CORBA::ModuleDef_ptr create_module(const char* id,
                                                 const char* name,
                                                 const char* version) = 0;




    virtual ::CORBA::ConstantDef_ptr create_constant(const char* id,
                                                     const char* name,
                                                     const char* version,
                                                     ::CORBA::IDLType_ptr type,
                                                     const CORBA::Any& value) = 0;




    virtual ::CORBA::StructDef_ptr create_struct(const char* id,
                                                 const char* name,
                                                 const char* version,
                                                 const ::CORBA::StructMemberSeq& members) = 0;




    virtual ::CORBA::UnionDef_ptr create_union(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr discriminator_type,
                                               const ::CORBA::UnionMemberSeq& members) = 0;




    virtual ::CORBA::EnumDef_ptr create_enum(const char* id,
                                             const char* name,
                                             const char* version,
                                             const ::CORBA::EnumMemberSeq& members) = 0;




    virtual ::CORBA::AliasDef_ptr create_alias(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr original_type) = 0;




    virtual ::CORBA::InterfaceDef_ptr create_interface(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       const ::CORBA::InterfaceDefSeq& base_interfaces) = 0;




    virtual ::CORBA::AbstractInterfaceDef_ptr create_abstract_interface(const char* id,
                                                                        const char* name,
                                                                        const char* version,
                                                                        const ::CORBA::AbstractInterfaceDefSeq& base_interfaces) = 0;




    virtual ::CORBA::LocalInterfaceDef_ptr create_local_interface(const char* id,
                                                                  const char* name,
                                                                  const char* version,
                                                                  const ::CORBA::InterfaceDefSeq& base_interfaces) = 0;




    virtual ::CORBA::ExceptionDef_ptr create_exception(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       const ::CORBA::StructMemberSeq& members) = 0;




    virtual ::CORBA::ValueDef_ptr create_value(const char* id,
                                               const char* name,
                                               const char* version,
                                               CORBA::Boolean is_custom,
                                               CORBA::Boolean is_abstract,
                                               ::CORBA::ValueDef_ptr base_value,
                                               CORBA::Boolean is_truncatable,
                                               const ::CORBA::ValueDefSeq& abstract_base_values,
                                               const ::CORBA::InterfaceDefSeq& supported_interfaces,
                                               const ::CORBA::InitializerSeq& initializers) = 0;




    virtual ::CORBA::ValueBoxDef_ptr create_value_box(const char* id,
                                                      const char* name,
                                                      const char* version,
                                                      ::CORBA::IDLType_ptr original_type_def) = 0;




    virtual ::CORBA::NativeDef_ptr create_native(const char* id,
                                                 const char* name,
                                                 const char* version) = 0;
};




class AttributeDef : virtual public OBStubImpl_CORBA::Contained
{
    AttributeDef(const AttributeDef&);
    void operator=(const AttributeDef&);

protected:

    AttributeDef() { }

public:

    static inline AttributeDef_ptr
    _duplicate(AttributeDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline AttributeDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual ::CORBA::IDLType_ptr type_def() = 0;
    virtual void type_def(::CORBA::IDLType_ptr) = 0;




    virtual ::CORBA::AttributeMode mode() = 0;
    virtual void mode(::CORBA::AttributeMode) = 0;
};




class ExceptionDef : virtual public OBStubImpl_CORBA::Contained,
                     virtual public OBStubImpl_CORBA::Container
{
    ExceptionDef(const ExceptionDef&);
    void operator=(const ExceptionDef&);

protected:

    ExceptionDef() { }

public:

    static inline ExceptionDef_ptr
    _duplicate(ExceptionDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ExceptionDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual ::CORBA::StructMemberSeq* members() = 0;
    virtual void members(const ::CORBA::StructMemberSeq&) = 0;
};




class OperationDef : virtual public OBStubImpl_CORBA::Contained
{
    OperationDef(const OperationDef&);
    void operator=(const OperationDef&);

protected:

    OperationDef() { }

public:

    static inline OperationDef_ptr
    _duplicate(OperationDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline OperationDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::TypeCode_ptr result() = 0;




    virtual ::CORBA::IDLType_ptr result_def() = 0;
    virtual void result_def(::CORBA::IDLType_ptr) = 0;




    virtual ::CORBA::ParDescriptionSeq* params() = 0;
    virtual void params(const ::CORBA::ParDescriptionSeq&) = 0;




    virtual ::CORBA::OperationMode mode() = 0;
    virtual void mode(::CORBA::OperationMode) = 0;




    virtual ::CORBA::ContextIdSeq* contexts() = 0;
    virtual void contexts(const ::CORBA::ContextIdSeq&) = 0;




    virtual ::CORBA::ExceptionDefSeq* exceptions() = 0;
    virtual void exceptions(const ::CORBA::ExceptionDefSeq&) = 0;
};




class InterfaceDef : virtual public OBStubImpl_CORBA::Container,
                     virtual public OBStubImpl_CORBA::Contained,
                     virtual public OBStubImpl_CORBA::IDLType
{
    InterfaceDef(const InterfaceDef&);
    void operator=(const InterfaceDef&);

protected:

    InterfaceDef() { }

public:

    static inline InterfaceDef_ptr
    _duplicate(InterfaceDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline InterfaceDef_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::InterfaceDefSeq* base_interfaces() = 0;
    virtual void base_interfaces(const ::CORBA::InterfaceDefSeq&) = 0;




    virtual CORBA::Boolean is_a(const char* interface_id) = 0;




    virtual ::CORBA::InterfaceDef::FullInterfaceDescription* describe_interface() = 0;




    virtual ::CORBA::AttributeDef_ptr create_attribute(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr type,
                                                       ::CORBA::AttributeMode mode) = 0;




    virtual ::CORBA::OperationDef_ptr create_operation(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr result,
                                                       ::CORBA::OperationMode mode,
                                                       const ::CORBA::ParDescriptionSeq& params,
                                                       const ::CORBA::ExceptionDefSeq& exceptions,
                                                       const ::CORBA::ContextIdSeq& contexts) = 0;
};

}




namespace OBMarshalStubImpl_CORBA
{




class Contained : virtual public OBStubImpl_CORBA::Contained,
                  virtual public OBMarshalStubImpl_CORBA::IRObject
{
    Contained(const Contained&);
    void operator=(const Contained&);

protected:

    Contained() { }
    friend class OBProxy_CORBA::Contained;

public:




    virtual ::CORBA::RepositoryId id();
    virtual void id(const char*);




    virtual ::CORBA::Identifier name();
    virtual void name(const char*);




    virtual ::CORBA::VersionSpec version();
    virtual void version(const char*);




    virtual ::CORBA::Container_ptr defined_in();




    virtual ::CORBA::ScopedName absolute_name();




    virtual ::CORBA::Repository_ptr containing_repository();




    virtual ::CORBA::Contained::Description* describe();




    virtual void move(::CORBA::Container_ptr new_container,
                      const char* new_name,
                      const char* new_version);
};




class Container : virtual public OBStubImpl_CORBA::Container,
                  virtual public OBMarshalStubImpl_CORBA::IRObject
{
    Container(const Container&);
    void operator=(const Container&);

protected:

    Container() { }
    friend class OBProxy_CORBA::Container;

public:




    virtual ::CORBA::Contained_ptr lookup(const char* search_name);




    virtual ::CORBA::ContainedSeq* contents(::CORBA::DefinitionKind limit_type,
                                            CORBA::Boolean exclude_inherited);




    virtual ::CORBA::ContainedSeq* lookup_name(const char* search_name,
                                               CORBA::Long levels_to_search,
                                               ::CORBA::DefinitionKind limit_type,
                                               CORBA::Boolean exclude_inherited);




    virtual ::CORBA::Container::DescriptionSeq* describe_contents(::CORBA::DefinitionKind limit_type,
                                                                  CORBA::Boolean exclude_inherited,
                                                                  CORBA::Long max_returned_objs);




    virtual ::CORBA::ModuleDef_ptr create_module(const char* id,
                                                 const char* name,
                                                 const char* version);




    virtual ::CORBA::ConstantDef_ptr create_constant(const char* id,
                                                     const char* name,
                                                     const char* version,
                                                     ::CORBA::IDLType_ptr type,
                                                     const CORBA::Any& value);




    virtual ::CORBA::StructDef_ptr create_struct(const char* id,
                                                 const char* name,
                                                 const char* version,
                                                 const ::CORBA::StructMemberSeq& members);




    virtual ::CORBA::UnionDef_ptr create_union(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr discriminator_type,
                                               const ::CORBA::UnionMemberSeq& members);




    virtual ::CORBA::EnumDef_ptr create_enum(const char* id,
                                             const char* name,
                                             const char* version,
                                             const ::CORBA::EnumMemberSeq& members);




    virtual ::CORBA::AliasDef_ptr create_alias(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr original_type);




    virtual ::CORBA::InterfaceDef_ptr create_interface(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       const ::CORBA::InterfaceDefSeq& base_interfaces);




    virtual ::CORBA::AbstractInterfaceDef_ptr create_abstract_interface(const char* id,
                                                                        const char* name,
                                                                        const char* version,
                                                                        const ::CORBA::AbstractInterfaceDefSeq& base_interfaces);




    virtual ::CORBA::LocalInterfaceDef_ptr create_local_interface(const char* id,
                                                                  const char* name,
                                                                  const char* version,
                                                                  const ::CORBA::InterfaceDefSeq& base_interfaces);




    virtual ::CORBA::ExceptionDef_ptr create_exception(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       const ::CORBA::StructMemberSeq& members);




    virtual ::CORBA::ValueDef_ptr create_value(const char* id,
                                               const char* name,
                                               const char* version,
                                               CORBA::Boolean is_custom,
                                               CORBA::Boolean is_abstract,
                                               ::CORBA::ValueDef_ptr base_value,
                                               CORBA::Boolean is_truncatable,
                                               const ::CORBA::ValueDefSeq& abstract_base_values,
                                               const ::CORBA::InterfaceDefSeq& supported_interfaces,
                                               const ::CORBA::InitializerSeq& initializers);




    virtual ::CORBA::ValueBoxDef_ptr create_value_box(const char* id,
                                                      const char* name,
                                                      const char* version,
                                                      ::CORBA::IDLType_ptr original_type_def);




    virtual ::CORBA::NativeDef_ptr create_native(const char* id,
                                                 const char* name,
                                                 const char* version);
};




class AttributeDef : virtual public OBStubImpl_CORBA::AttributeDef,
                     virtual public OBMarshalStubImpl_CORBA::Contained
{
    AttributeDef(const AttributeDef&);
    void operator=(const AttributeDef&);

protected:

    AttributeDef() { }
    friend class OBProxy_CORBA::AttributeDef;

public:




    virtual CORBA::TypeCode_ptr type();




    virtual ::CORBA::IDLType_ptr type_def();
    virtual void type_def(::CORBA::IDLType_ptr);




    virtual ::CORBA::AttributeMode mode();
    virtual void mode(::CORBA::AttributeMode);
};




class ExceptionDef : virtual public OBStubImpl_CORBA::ExceptionDef,
                     virtual public OBMarshalStubImpl_CORBA::Contained,
                     virtual public OBMarshalStubImpl_CORBA::Container
{
    ExceptionDef(const ExceptionDef&);
    void operator=(const ExceptionDef&);

protected:

    ExceptionDef() { }
    friend class OBProxy_CORBA::ExceptionDef;

public:




    virtual CORBA::TypeCode_ptr type();




    virtual ::CORBA::StructMemberSeq* members();
    virtual void members(const ::CORBA::StructMemberSeq&);
};




class OperationDef : virtual public OBStubImpl_CORBA::OperationDef,
                     virtual public OBMarshalStubImpl_CORBA::Contained
{
    OperationDef(const OperationDef&);
    void operator=(const OperationDef&);

protected:

    OperationDef() { }
    friend class OBProxy_CORBA::OperationDef;

public:




    virtual CORBA::TypeCode_ptr result();




    virtual ::CORBA::IDLType_ptr result_def();
    virtual void result_def(::CORBA::IDLType_ptr);




    virtual ::CORBA::ParDescriptionSeq* params();
    virtual void params(const ::CORBA::ParDescriptionSeq&);




    virtual ::CORBA::OperationMode mode();
    virtual void mode(::CORBA::OperationMode);




    virtual ::CORBA::ContextIdSeq* contexts();
    virtual void contexts(const ::CORBA::ContextIdSeq&);




    virtual ::CORBA::ExceptionDefSeq* exceptions();
    virtual void exceptions(const ::CORBA::ExceptionDefSeq&);
};




class InterfaceDef : virtual public OBStubImpl_CORBA::InterfaceDef,
                     virtual public OBMarshalStubImpl_CORBA::Container,
                     virtual public OBMarshalStubImpl_CORBA::Contained,
                     virtual public OBMarshalStubImpl_CORBA::IDLType
{
    InterfaceDef(const InterfaceDef&);
    void operator=(const InterfaceDef&);

protected:

    InterfaceDef() { }
    friend class OBProxy_CORBA::InterfaceDef;

public:




    virtual ::CORBA::InterfaceDefSeq* base_interfaces();
    virtual void base_interfaces(const ::CORBA::InterfaceDefSeq&);




    virtual CORBA::Boolean is_a(const char* interface_id);




    virtual ::CORBA::InterfaceDef::FullInterfaceDescription* describe_interface();




    virtual ::CORBA::AttributeDef_ptr create_attribute(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr type,
                                                       ::CORBA::AttributeMode mode);




    virtual ::CORBA::OperationDef_ptr create_operation(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr result,
                                                       ::CORBA::OperationMode mode,
                                                       const ::CORBA::ParDescriptionSeq& params,
                                                       const ::CORBA::ExceptionDefSeq& exceptions,
                                                       const ::CORBA::ContextIdSeq& contexts);
};

}




namespace OBV_CORBA
{

}




namespace CORBA
{

inline void
release(::CORBA::Contained_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::Contained_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::Contained_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::Contained_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::Contained_ptr*);
void operator<<=(CORBA::Any&, CORBA::Contained_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::Contained_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Contained_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::Contained_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::Contained_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::Contained::Description*);
void operator<<=(CORBA::Any&, const CORBA::Contained::Description&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::Contained::Description*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Contained::Description* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::Contained::Description& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::Contained::Description*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::InterfaceDefSeq*);
void operator<<=(CORBA::Any&, const CORBA::InterfaceDefSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::InterfaceDefSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::InterfaceDefSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::InterfaceDefSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::InterfaceDefSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::AbstractInterfaceDefSeq*);
void operator<<=(CORBA::Any&, const CORBA::AbstractInterfaceDefSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::AbstractInterfaceDefSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AbstractInterfaceDefSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::AbstractInterfaceDefSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::AbstractInterfaceDefSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::LocalInterfaceDefSeq*);
void operator<<=(CORBA::Any&, const CORBA::LocalInterfaceDefSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::LocalInterfaceDefSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::LocalInterfaceDefSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::LocalInterfaceDefSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::LocalInterfaceDefSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ValueDefSeq*);
void operator<<=(CORBA::Any&, const CORBA::ValueDefSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ValueDefSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueDefSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ValueDefSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ValueDefSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ContainedSeq*);
void operator<<=(CORBA::Any&, const CORBA::ContainedSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ContainedSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ContainedSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ContainedSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ContainedSeq*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::Container_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::Container_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::Container_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::Container_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::Container_ptr*);
void operator<<=(CORBA::Any&, CORBA::Container_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::Container_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Container_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::Container_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::Container_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::Container::Description*);
void operator<<=(CORBA::Any&, const CORBA::Container::Description&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::Container::Description*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Container::Description* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::Container::Description& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::Container::Description*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::Container::DescriptionSeq*);
void operator<<=(CORBA::Any&, const CORBA::Container::DescriptionSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::Container::DescriptionSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Container::DescriptionSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::Container::DescriptionSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::Container::DescriptionSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::AttributeMode);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::AttributeMode&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AttributeMode val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::AttributeMode& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::AttributeDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::AttributeDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::AttributeDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::AttributeDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::AttributeDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::AttributeDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::AttributeDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AttributeDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::AttributeDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::AttributeDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::AttributeDescription*);
void operator<<=(CORBA::Any&, const CORBA::AttributeDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::AttributeDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AttributeDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::AttributeDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::AttributeDescription*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::OperationMode);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::OperationMode&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::OperationMode val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::OperationMode& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ParameterDescription*);
void operator<<=(CORBA::Any&, const CORBA::ParameterDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ParameterDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ParameterDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ParameterDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ParameterDescription*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ParDescriptionSeq*);
void operator<<=(CORBA::Any&, const CORBA::ParDescriptionSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ParDescriptionSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ParDescriptionSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ParDescriptionSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ParDescriptionSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ContextIdSeq*);
void operator<<=(CORBA::Any&, const CORBA::ContextIdSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ContextIdSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ContextIdSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ContextIdSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ContextIdSeq*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::ExceptionDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ExceptionDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::ExceptionDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::ExceptionDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::ExceptionDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::ExceptionDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ExceptionDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ExceptionDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::ExceptionDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ExceptionDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ExceptionDescription*);
void operator<<=(CORBA::Any&, const CORBA::ExceptionDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ExceptionDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ExceptionDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ExceptionDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ExceptionDescription*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ExceptionDefSeq*);
void operator<<=(CORBA::Any&, const CORBA::ExceptionDefSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ExceptionDefSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ExceptionDefSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ExceptionDefSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ExceptionDefSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ExcDescriptionSeq*);
void operator<<=(CORBA::Any&, const CORBA::ExcDescriptionSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ExcDescriptionSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ExcDescriptionSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ExcDescriptionSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ExcDescriptionSeq*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::OperationDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::OperationDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::OperationDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::OperationDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::OperationDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::OperationDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::OperationDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::OperationDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::OperationDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::OperationDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::OperationDescription*);
void operator<<=(CORBA::Any&, const CORBA::OperationDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::OperationDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::OperationDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::OperationDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::OperationDescription*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::RepositoryIdSeq*);
void operator<<=(CORBA::Any&, const CORBA::RepositoryIdSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::RepositoryIdSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::RepositoryIdSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::RepositoryIdSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::RepositoryIdSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::OpDescriptionSeq*);
void operator<<=(CORBA::Any&, const CORBA::OpDescriptionSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::OpDescriptionSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::OpDescriptionSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::OpDescriptionSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::OpDescriptionSeq*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::AttrDescriptionSeq*);
void operator<<=(CORBA::Any&, const CORBA::AttrDescriptionSeq&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::AttrDescriptionSeq*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AttrDescriptionSeq* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::AttrDescriptionSeq& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::AttrDescriptionSeq*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::InterfaceDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::InterfaceDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::InterfaceDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::InterfaceDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::InterfaceDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::InterfaceDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::InterfaceDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::InterfaceDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::InterfaceDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::InterfaceDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::InterfaceDef::FullInterfaceDescription*);
void operator<<=(CORBA::Any&, const CORBA::InterfaceDef::FullInterfaceDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::InterfaceDef::FullInterfaceDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::InterfaceDef::FullInterfaceDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::InterfaceDef::FullInterfaceDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::InterfaceDef::FullInterfaceDescription*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::InterfaceDescription*);
void operator<<=(CORBA::Any&, const CORBA::InterfaceDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::InterfaceDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::InterfaceDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::InterfaceDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::InterfaceDescription*& val)
{
    return any.in() >>= val;
}
# 29 "../../include/OB/IFR.h" 2
# 1 "../../include/OB/IFR3.h" 1
# 27 "../../include/OB/IFR3.h"
# 1 "../../include/OB/IFR2.h" 1
# 28 "../../include/OB/IFR3.h" 2
# 1 "../../include/OB/IFR3_fwd.h" 1
# 18 "../../include/OB/IFR3_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/IFR3_fwd.h" 2
# 39 "../../include/OB/IFR3_fwd.h"
namespace CORBA
{

class Repository;
typedef Repository* Repository_ptr;
typedef Repository* RepositoryRef;

          extern OB::TypeCodeConst _tc_Repository;

class ModuleDef;
typedef ModuleDef* ModuleDef_ptr;
typedef ModuleDef* ModuleDefRef;

          extern OB::TypeCodeConst _tc_ModuleDef;

class ConstantDef;
typedef ConstantDef* ConstantDef_ptr;
typedef ConstantDef* ConstantDefRef;

          extern OB::TypeCodeConst _tc_ConstantDef;

class TypedefDef;
typedef TypedefDef* TypedefDef_ptr;
typedef TypedefDef* TypedefDefRef;

          extern OB::TypeCodeConst _tc_TypedefDef;

class StructDef;
typedef StructDef* StructDef_ptr;
typedef StructDef* StructDefRef;

          extern OB::TypeCodeConst _tc_StructDef;

class UnionDef;
typedef UnionDef* UnionDef_ptr;
typedef UnionDef* UnionDefRef;

          extern OB::TypeCodeConst _tc_UnionDef;

class EnumDef;
typedef EnumDef* EnumDef_ptr;
typedef EnumDef* EnumDefRef;

          extern OB::TypeCodeConst _tc_EnumDef;

class AliasDef;
typedef AliasDef* AliasDef_ptr;
typedef AliasDef* AliasDefRef;

          extern OB::TypeCodeConst _tc_AliasDef;

class NativeDef;
typedef NativeDef* NativeDef_ptr;
typedef NativeDef* NativeDefRef;

          extern OB::TypeCodeConst _tc_NativeDef;

class PrimitiveDef;
typedef PrimitiveDef* PrimitiveDef_ptr;
typedef PrimitiveDef* PrimitiveDefRef;

          extern OB::TypeCodeConst _tc_PrimitiveDef;

class StringDef;
typedef StringDef* StringDef_ptr;
typedef StringDef* StringDefRef;

          extern OB::TypeCodeConst _tc_StringDef;

class WstringDef;
typedef WstringDef* WstringDef_ptr;
typedef WstringDef* WstringDefRef;

          extern OB::TypeCodeConst _tc_WstringDef;

class FixedDef;
typedef FixedDef* FixedDef_ptr;
typedef FixedDef* FixedDefRef;

          extern OB::TypeCodeConst _tc_FixedDef;

class SequenceDef;
typedef SequenceDef* SequenceDef_ptr;
typedef SequenceDef* SequenceDefRef;

          extern OB::TypeCodeConst _tc_SequenceDef;

class ArrayDef;
typedef ArrayDef* ArrayDef_ptr;
typedef ArrayDef* ArrayDefRef;

          extern OB::TypeCodeConst _tc_ArrayDef;

}

void OBDuplicate(CORBA::Repository_ptr);
void OBRelease(CORBA::Repository_ptr);

void OBMarshal(CORBA::Repository_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::Repository_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ModuleDef_ptr);
void OBRelease(CORBA::ModuleDef_ptr);

void OBMarshal(CORBA::ModuleDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ModuleDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ConstantDef_ptr);
void OBRelease(CORBA::ConstantDef_ptr);

void OBMarshal(CORBA::ConstantDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ConstantDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::TypedefDef_ptr);
void OBRelease(CORBA::TypedefDef_ptr);

void OBMarshal(CORBA::TypedefDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::TypedefDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::StructDef_ptr);
void OBRelease(CORBA::StructDef_ptr);

void OBMarshal(CORBA::StructDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::StructDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::UnionDef_ptr);
void OBRelease(CORBA::UnionDef_ptr);

void OBMarshal(CORBA::UnionDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::UnionDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::EnumDef_ptr);
void OBRelease(CORBA::EnumDef_ptr);

void OBMarshal(CORBA::EnumDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::EnumDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::AliasDef_ptr);
void OBRelease(CORBA::AliasDef_ptr);

void OBMarshal(CORBA::AliasDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::AliasDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::NativeDef_ptr);
void OBRelease(CORBA::NativeDef_ptr);

void OBMarshal(CORBA::NativeDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::NativeDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::PrimitiveDef_ptr);
void OBRelease(CORBA::PrimitiveDef_ptr);

void OBMarshal(CORBA::PrimitiveDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::PrimitiveDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::StringDef_ptr);
void OBRelease(CORBA::StringDef_ptr);

void OBMarshal(CORBA::StringDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::StringDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::WstringDef_ptr);
void OBRelease(CORBA::WstringDef_ptr);

void OBMarshal(CORBA::WstringDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::WstringDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::FixedDef_ptr);
void OBRelease(CORBA::FixedDef_ptr);

void OBMarshal(CORBA::FixedDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::FixedDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::SequenceDef_ptr);
void OBRelease(CORBA::SequenceDef_ptr);

void OBMarshal(CORBA::SequenceDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::SequenceDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ArrayDef_ptr);
void OBRelease(CORBA::ArrayDef_ptr);

void OBMarshal(CORBA::ArrayDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ArrayDef_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< Repository > Repository_var;
typedef OB::ObjOut< Repository > Repository_out;

typedef OB::ObjVar< ModuleDef > ModuleDef_var;
typedef OB::ObjOut< ModuleDef > ModuleDef_out;

typedef OB::ObjVar< ConstantDef > ConstantDef_var;
typedef OB::ObjOut< ConstantDef > ConstantDef_out;

typedef OB::ObjVar< TypedefDef > TypedefDef_var;
typedef OB::ObjOut< TypedefDef > TypedefDef_out;

typedef OB::ObjVar< StructDef > StructDef_var;
typedef OB::ObjOut< StructDef > StructDef_out;

typedef OB::ObjVar< UnionDef > UnionDef_var;
typedef OB::ObjOut< UnionDef > UnionDef_out;

typedef OB::ObjVar< EnumDef > EnumDef_var;
typedef OB::ObjOut< EnumDef > EnumDef_out;

typedef OB::ObjVar< AliasDef > AliasDef_var;
typedef OB::ObjOut< AliasDef > AliasDef_out;

typedef OB::ObjVar< NativeDef > NativeDef_var;
typedef OB::ObjOut< NativeDef > NativeDef_out;

typedef OB::ObjVar< PrimitiveDef > PrimitiveDef_var;
typedef OB::ObjOut< PrimitiveDef > PrimitiveDef_out;

typedef OB::ObjVar< StringDef > StringDef_var;
typedef OB::ObjOut< StringDef > StringDef_out;

typedef OB::ObjVar< WstringDef > WstringDef_var;
typedef OB::ObjOut< WstringDef > WstringDef_out;

typedef OB::ObjVar< FixedDef > FixedDef_var;
typedef OB::ObjOut< FixedDef > FixedDef_out;

typedef OB::ObjVar< SequenceDef > SequenceDef_var;
typedef OB::ObjOut< SequenceDef > SequenceDef_out;

typedef OB::ObjVar< ArrayDef > ArrayDef_var;
typedef OB::ObjOut< ArrayDef > ArrayDef_out;

}
# 29 "../../include/OB/IFR3.h" 2
# 40 "../../include/OB/IFR3.h"
namespace OBStubImpl_CORBA
{

class Repository;
typedef Repository* Repository_ptr;

class ModuleDef;
typedef ModuleDef* ModuleDef_ptr;

class ConstantDef;
typedef ConstantDef* ConstantDef_ptr;

class TypedefDef;
typedef TypedefDef* TypedefDef_ptr;

class StructDef;
typedef StructDef* StructDef_ptr;

class UnionDef;
typedef UnionDef* UnionDef_ptr;

class EnumDef;
typedef EnumDef* EnumDef_ptr;

class AliasDef;
typedef AliasDef* AliasDef_ptr;

class NativeDef;
typedef NativeDef* NativeDef_ptr;

class PrimitiveDef;
typedef PrimitiveDef* PrimitiveDef_ptr;

class StringDef;
typedef StringDef* StringDef_ptr;

class WstringDef;
typedef WstringDef* WstringDef_ptr;

class FixedDef;
typedef FixedDef* FixedDef_ptr;

class SequenceDef;
typedef SequenceDef* SequenceDef_ptr;

class ArrayDef;
typedef ArrayDef* ArrayDef_ptr;

}

void OBDuplicate(OBStubImpl_CORBA::Repository_ptr);
void OBRelease(OBStubImpl_CORBA::Repository_ptr);

void OBDuplicate(OBStubImpl_CORBA::ModuleDef_ptr);
void OBRelease(OBStubImpl_CORBA::ModuleDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ConstantDef_ptr);
void OBRelease(OBStubImpl_CORBA::ConstantDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::TypedefDef_ptr);
void OBRelease(OBStubImpl_CORBA::TypedefDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::StructDef_ptr);
void OBRelease(OBStubImpl_CORBA::StructDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::UnionDef_ptr);
void OBRelease(OBStubImpl_CORBA::UnionDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::EnumDef_ptr);
void OBRelease(OBStubImpl_CORBA::EnumDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::AliasDef_ptr);
void OBRelease(OBStubImpl_CORBA::AliasDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::NativeDef_ptr);
void OBRelease(OBStubImpl_CORBA::NativeDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::PrimitiveDef_ptr);
void OBRelease(OBStubImpl_CORBA::PrimitiveDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::StringDef_ptr);
void OBRelease(OBStubImpl_CORBA::StringDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::WstringDef_ptr);
void OBRelease(OBStubImpl_CORBA::WstringDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::FixedDef_ptr);
void OBRelease(OBStubImpl_CORBA::FixedDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::SequenceDef_ptr);
void OBRelease(OBStubImpl_CORBA::SequenceDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ArrayDef_ptr);
void OBRelease(OBStubImpl_CORBA::ArrayDef_ptr);

namespace OBStubImpl_CORBA
{

typedef OB::ObjVar< Repository > Repository_var;

typedef OB::ObjVar< ModuleDef > ModuleDef_var;

typedef OB::ObjVar< ConstantDef > ConstantDef_var;

typedef OB::ObjVar< TypedefDef > TypedefDef_var;

typedef OB::ObjVar< StructDef > StructDef_var;

typedef OB::ObjVar< UnionDef > UnionDef_var;

typedef OB::ObjVar< EnumDef > EnumDef_var;

typedef OB::ObjVar< AliasDef > AliasDef_var;

typedef OB::ObjVar< NativeDef > NativeDef_var;

typedef OB::ObjVar< PrimitiveDef > PrimitiveDef_var;

typedef OB::ObjVar< StringDef > StringDef_var;

typedef OB::ObjVar< WstringDef > WstringDef_var;

typedef OB::ObjVar< FixedDef > FixedDef_var;

typedef OB::ObjVar< SequenceDef > SequenceDef_var;

typedef OB::ObjVar< ArrayDef > ArrayDef_var;

}




namespace CORBA
{




enum PrimitiveKind
{
    pk_null,
    pk_void,
    pk_short,
    pk_long,
    pk_ushort,
    pk_ulong,
    pk_float,
    pk_double,
    pk_boolean,
    pk_char,
    pk_octet,
    pk_any,
    pk_TypeCode,
    pk_Principal,
    pk_string,
    pk_objref,
    pk_longlong,
    pk_ulonglong,
    pk_longdouble,
    pk_wchar,
    pk_wstring,
    pk_value_base
};

typedef PrimitiveKind& PrimitiveKind_out;

          extern OB::TypeCodeConst _tc_PrimitiveKind;




class Repository : virtual public ::CORBA::Container
{
    Repository(const Repository&);
    void operator=(const Repository&);

protected:

    static const char* ids_[];

public:

    Repository() { }
    virtual ~Repository() { }

    typedef Repository_ptr _ptr_type;
    typedef Repository_var _var_type;

    static inline Repository_ptr
    _duplicate(Repository_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline Repository_ptr
    _nil()
    {
        return 0;
    }

    static Repository_ptr _narrow(CORBA::Object_ptr);
    static Repository_ptr _unchecked_narrow(CORBA::Object_ptr);

    static Repository_ptr _narrow(CORBA::AbstractBase_ptr);
    static Repository_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual Contained_ptr lookup_id(const char* search_id) = 0;




    virtual CORBA::TypeCode_ptr get_canonical_typecode(CORBA::TypeCode_ptr tc) = 0;




    virtual PrimitiveDef_ptr get_primitive(PrimitiveKind kind) = 0;




    virtual StringDef_ptr create_string(CORBA::ULong bound) = 0;




    virtual WstringDef_ptr create_wstring(CORBA::ULong bound) = 0;




    virtual SequenceDef_ptr create_sequence(CORBA::ULong bound,
                                            IDLType_ptr element_type) = 0;




    virtual ArrayDef_ptr create_array(CORBA::ULong length,
                                      IDLType_ptr element_type) = 0;




    virtual FixedDef_ptr create_fixed(CORBA::UShort digits,
                                      CORBA::Short scale) = 0;
};




class ModuleDef : virtual public ::CORBA::Container,
                  virtual public ::CORBA::Contained
{
    ModuleDef(const ModuleDef&);
    void operator=(const ModuleDef&);

protected:

    static const char* ids_[];

public:

    ModuleDef() { }
    virtual ~ModuleDef() { }

    typedef ModuleDef_ptr _ptr_type;
    typedef ModuleDef_var _var_type;

    static inline ModuleDef_ptr
    _duplicate(ModuleDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ModuleDef_ptr
    _nil()
    {
        return 0;
    }

    static ModuleDef_ptr _narrow(CORBA::Object_ptr);
    static ModuleDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static ModuleDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static ModuleDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();
};




struct ModuleDescription;
typedef OB::VarVar< ModuleDescription > ModuleDescription_var;
typedef OB::VarOut< ModuleDescription > ModuleDescription_out;

struct ModuleDescription
{
    ModuleDescription() { }
    ModuleDescription(const ModuleDescription&);
    ModuleDescription& operator=(const ModuleDescription&);

    typedef ModuleDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ModuleDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ModuleDescription;




class ConstantDef : virtual public ::CORBA::Contained
{
    ConstantDef(const ConstantDef&);
    void operator=(const ConstantDef&);

protected:

    static const char* ids_[];

public:

    ConstantDef() { }
    virtual ~ConstantDef() { }

    typedef ConstantDef_ptr _ptr_type;
    typedef ConstantDef_var _var_type;

    static inline ConstantDef_ptr
    _duplicate(ConstantDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ConstantDef_ptr
    _nil()
    {
        return 0;
    }

    static ConstantDef_ptr _narrow(CORBA::Object_ptr);
    static ConstantDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static ConstantDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static ConstantDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual IDLType_ptr type_def() = 0;
    virtual void type_def(IDLType_ptr) = 0;




    virtual CORBA::Any* value() = 0;
    virtual void value(const CORBA::Any&) = 0;
};




struct ConstantDescription;
typedef OB::VarVar< ConstantDescription > ConstantDescription_var;
typedef OB::VarOut< ConstantDescription > ConstantDescription_out;

struct ConstantDescription
{
    ConstantDescription() { }
    ConstantDescription(const ConstantDescription&);
    ConstantDescription& operator=(const ConstantDescription&);

    typedef ConstantDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    CORBA::TypeCode_var type;
    CORBA::Any value;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ConstantDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ConstantDescription;




class TypedefDef : virtual public ::CORBA::Contained,
                   virtual public ::CORBA::IDLType
{
    TypedefDef(const TypedefDef&);
    void operator=(const TypedefDef&);

protected:

    static const char* ids_[];

public:

    TypedefDef() { }
    virtual ~TypedefDef() { }

    typedef TypedefDef_ptr _ptr_type;
    typedef TypedefDef_var _var_type;

    static inline TypedefDef_ptr
    _duplicate(TypedefDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline TypedefDef_ptr
    _nil()
    {
        return 0;
    }

    static TypedefDef_ptr _narrow(CORBA::Object_ptr);
    static TypedefDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static TypedefDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static TypedefDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();
};




struct TypeDescription;
typedef OB::VarVar< TypeDescription > TypeDescription_var;
typedef OB::VarOut< TypeDescription > TypeDescription_out;

struct TypeDescription
{
    TypeDescription() { }
    TypeDescription(const TypeDescription&);
    TypeDescription& operator=(const TypeDescription&);

    typedef TypeDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    CORBA::TypeCode_var type;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(TypeDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_TypeDescription;




class StructDef : virtual public ::CORBA::TypedefDef,
                  virtual public ::CORBA::Container
{
    StructDef(const StructDef&);
    void operator=(const StructDef&);

protected:

    static const char* ids_[];

public:

    StructDef() { }
    virtual ~StructDef() { }

    typedef StructDef_ptr _ptr_type;
    typedef StructDef_var _var_type;

    static inline StructDef_ptr
    _duplicate(StructDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline StructDef_ptr
    _nil()
    {
        return 0;
    }

    static StructDef_ptr _narrow(CORBA::Object_ptr);
    static StructDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static StructDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static StructDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual StructMemberSeq* members() = 0;
    virtual void members(const StructMemberSeq&) = 0;
};




class UnionDef : virtual public ::CORBA::TypedefDef,
                 virtual public ::CORBA::Container
{
    UnionDef(const UnionDef&);
    void operator=(const UnionDef&);

protected:

    static const char* ids_[];

public:

    UnionDef() { }
    virtual ~UnionDef() { }

    typedef UnionDef_ptr _ptr_type;
    typedef UnionDef_var _var_type;

    static inline UnionDef_ptr
    _duplicate(UnionDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline UnionDef_ptr
    _nil()
    {
        return 0;
    }

    static UnionDef_ptr _narrow(CORBA::Object_ptr);
    static UnionDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static UnionDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static UnionDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::TypeCode_ptr discriminator_type() = 0;




    virtual IDLType_ptr discriminator_type_def() = 0;
    virtual void discriminator_type_def(IDLType_ptr) = 0;




    virtual UnionMemberSeq* members() = 0;
    virtual void members(const UnionMemberSeq&) = 0;
};




class EnumDef : virtual public ::CORBA::TypedefDef
{
    EnumDef(const EnumDef&);
    void operator=(const EnumDef&);

protected:

    static const char* ids_[];

public:

    EnumDef() { }
    virtual ~EnumDef() { }

    typedef EnumDef_ptr _ptr_type;
    typedef EnumDef_var _var_type;

    static inline EnumDef_ptr
    _duplicate(EnumDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline EnumDef_ptr
    _nil()
    {
        return 0;
    }

    static EnumDef_ptr _narrow(CORBA::Object_ptr);
    static EnumDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static EnumDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static EnumDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual EnumMemberSeq* members() = 0;
    virtual void members(const EnumMemberSeq&) = 0;
};




class AliasDef : virtual public ::CORBA::TypedefDef
{
    AliasDef(const AliasDef&);
    void operator=(const AliasDef&);

protected:

    static const char* ids_[];

public:

    AliasDef() { }
    virtual ~AliasDef() { }

    typedef AliasDef_ptr _ptr_type;
    typedef AliasDef_var _var_type;

    static inline AliasDef_ptr
    _duplicate(AliasDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AliasDef_ptr
    _nil()
    {
        return 0;
    }

    static AliasDef_ptr _narrow(CORBA::Object_ptr);
    static AliasDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static AliasDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static AliasDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual IDLType_ptr original_type_def() = 0;
    virtual void original_type_def(IDLType_ptr) = 0;
};




class NativeDef : virtual public ::CORBA::TypedefDef
{
    NativeDef(const NativeDef&);
    void operator=(const NativeDef&);

protected:

    static const char* ids_[];

public:

    NativeDef() { }
    virtual ~NativeDef() { }

    typedef NativeDef_ptr _ptr_type;
    typedef NativeDef_var _var_type;

    static inline NativeDef_ptr
    _duplicate(NativeDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline NativeDef_ptr
    _nil()
    {
        return 0;
    }

    static NativeDef_ptr _narrow(CORBA::Object_ptr);
    static NativeDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static NativeDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static NativeDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();
};




class PrimitiveDef : virtual public ::CORBA::IDLType
{
    PrimitiveDef(const PrimitiveDef&);
    void operator=(const PrimitiveDef&);

protected:

    static const char* ids_[];

public:

    PrimitiveDef() { }
    virtual ~PrimitiveDef() { }

    typedef PrimitiveDef_ptr _ptr_type;
    typedef PrimitiveDef_var _var_type;

    static inline PrimitiveDef_ptr
    _duplicate(PrimitiveDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline PrimitiveDef_ptr
    _nil()
    {
        return 0;
    }

    static PrimitiveDef_ptr _narrow(CORBA::Object_ptr);
    static PrimitiveDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static PrimitiveDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static PrimitiveDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual PrimitiveKind kind() = 0;
};




class StringDef : virtual public ::CORBA::IDLType
{
    StringDef(const StringDef&);
    void operator=(const StringDef&);

protected:

    static const char* ids_[];

public:

    StringDef() { }
    virtual ~StringDef() { }

    typedef StringDef_ptr _ptr_type;
    typedef StringDef_var _var_type;

    static inline StringDef_ptr
    _duplicate(StringDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline StringDef_ptr
    _nil()
    {
        return 0;
    }

    static StringDef_ptr _narrow(CORBA::Object_ptr);
    static StringDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static StringDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static StringDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::ULong bound() = 0;
    virtual void bound(CORBA::ULong) = 0;
};




class WstringDef : virtual public ::CORBA::IDLType
{
    WstringDef(const WstringDef&);
    void operator=(const WstringDef&);

protected:

    static const char* ids_[];

public:

    WstringDef() { }
    virtual ~WstringDef() { }

    typedef WstringDef_ptr _ptr_type;
    typedef WstringDef_var _var_type;

    static inline WstringDef_ptr
    _duplicate(WstringDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline WstringDef_ptr
    _nil()
    {
        return 0;
    }

    static WstringDef_ptr _narrow(CORBA::Object_ptr);
    static WstringDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static WstringDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static WstringDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::ULong bound() = 0;
    virtual void bound(CORBA::ULong) = 0;
};




class FixedDef : virtual public ::CORBA::IDLType
{
    FixedDef(const FixedDef&);
    void operator=(const FixedDef&);

protected:

    static const char* ids_[];

public:

    FixedDef() { }
    virtual ~FixedDef() { }

    typedef FixedDef_ptr _ptr_type;
    typedef FixedDef_var _var_type;

    static inline FixedDef_ptr
    _duplicate(FixedDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline FixedDef_ptr
    _nil()
    {
        return 0;
    }

    static FixedDef_ptr _narrow(CORBA::Object_ptr);
    static FixedDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static FixedDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static FixedDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::UShort digits() = 0;
    virtual void digits(CORBA::UShort) = 0;




    virtual CORBA::Short scale() = 0;
    virtual void scale(CORBA::Short) = 0;
};




class SequenceDef : virtual public ::CORBA::IDLType
{
    SequenceDef(const SequenceDef&);
    void operator=(const SequenceDef&);

protected:

    static const char* ids_[];

public:

    SequenceDef() { }
    virtual ~SequenceDef() { }

    typedef SequenceDef_ptr _ptr_type;
    typedef SequenceDef_var _var_type;

    static inline SequenceDef_ptr
    _duplicate(SequenceDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline SequenceDef_ptr
    _nil()
    {
        return 0;
    }

    static SequenceDef_ptr _narrow(CORBA::Object_ptr);
    static SequenceDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static SequenceDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static SequenceDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::ULong bound() = 0;
    virtual void bound(CORBA::ULong) = 0;




    virtual CORBA::TypeCode_ptr element_type() = 0;




    virtual IDLType_ptr element_type_def() = 0;
    virtual void element_type_def(IDLType_ptr) = 0;
};




class ArrayDef : virtual public ::CORBA::IDLType
{
    ArrayDef(const ArrayDef&);
    void operator=(const ArrayDef&);

protected:

    static const char* ids_[];

public:

    ArrayDef() { }
    virtual ~ArrayDef() { }

    typedef ArrayDef_ptr _ptr_type;
    typedef ArrayDef_var _var_type;

    static inline ArrayDef_ptr
    _duplicate(ArrayDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ArrayDef_ptr
    _nil()
    {
        return 0;
    }

    static ArrayDef_ptr _narrow(CORBA::Object_ptr);
    static ArrayDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static ArrayDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static ArrayDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::ULong length() = 0;
    virtual void length(CORBA::ULong) = 0;




    virtual CORBA::TypeCode_ptr element_type() = 0;




    virtual IDLType_ptr element_type_def() = 0;
    virtual void element_type_def(IDLType_ptr) = 0;
};

}




namespace OBProxy_CORBA
{




class Repository : virtual public ::CORBA::Repository,
                   virtual public OBProxy_CORBA::Container
{
    Repository(const Repository&);
    void operator=(const Repository&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    Repository() { }
    virtual ~Repository() { }

    virtual const char** _OB_ids() const;




    ::CORBA::Contained_ptr lookup_id(const char* search_id);




    CORBA::TypeCode_ptr get_canonical_typecode(CORBA::TypeCode_ptr tc);




    ::CORBA::PrimitiveDef_ptr get_primitive(::CORBA::PrimitiveKind kind);




    ::CORBA::StringDef_ptr create_string(CORBA::ULong bound);




    ::CORBA::WstringDef_ptr create_wstring(CORBA::ULong bound);




    ::CORBA::SequenceDef_ptr create_sequence(CORBA::ULong bound,
                                             ::CORBA::IDLType_ptr element_type);




    ::CORBA::ArrayDef_ptr create_array(CORBA::ULong length,
                                       ::CORBA::IDLType_ptr element_type);




    ::CORBA::FixedDef_ptr create_fixed(CORBA::UShort digits,
                                       CORBA::Short scale);
};




class ModuleDef : virtual public ::CORBA::ModuleDef,
                  virtual public OBProxy_CORBA::Container,
                  virtual public OBProxy_CORBA::Contained
{
    ModuleDef(const ModuleDef&);
    void operator=(const ModuleDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    ModuleDef() { }
    virtual ~ModuleDef() { }

    virtual const char** _OB_ids() const;
};




class ConstantDef : virtual public ::CORBA::ConstantDef,
                    virtual public OBProxy_CORBA::Contained
{
    ConstantDef(const ConstantDef&);
    void operator=(const ConstantDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    ConstantDef() { }
    virtual ~ConstantDef() { }

    virtual const char** _OB_ids() const;




    CORBA::TypeCode_ptr type();




    ::CORBA::IDLType_ptr type_def();
    void type_def(::CORBA::IDLType_ptr);




    CORBA::Any* value();
    void value(const CORBA::Any&);
};




class TypedefDef : virtual public ::CORBA::TypedefDef,
                   virtual public OBProxy_CORBA::Contained,
                   virtual public OBProxy_CORBA::IDLType
{
    TypedefDef(const TypedefDef&);
    void operator=(const TypedefDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    TypedefDef() { }
    virtual ~TypedefDef() { }

    virtual const char** _OB_ids() const;
};




class StructDef : virtual public ::CORBA::StructDef,
                  virtual public OBProxy_CORBA::TypedefDef,
                  virtual public OBProxy_CORBA::Container
{
    StructDef(const StructDef&);
    void operator=(const StructDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    StructDef() { }
    virtual ~StructDef() { }

    virtual const char** _OB_ids() const;




    ::CORBA::StructMemberSeq* members();
    void members(const ::CORBA::StructMemberSeq&);
};




class UnionDef : virtual public ::CORBA::UnionDef,
                 virtual public OBProxy_CORBA::TypedefDef,
                 virtual public OBProxy_CORBA::Container
{
    UnionDef(const UnionDef&);
    void operator=(const UnionDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    UnionDef() { }
    virtual ~UnionDef() { }

    virtual const char** _OB_ids() const;




    CORBA::TypeCode_ptr discriminator_type();




    ::CORBA::IDLType_ptr discriminator_type_def();
    void discriminator_type_def(::CORBA::IDLType_ptr);




    ::CORBA::UnionMemberSeq* members();
    void members(const ::CORBA::UnionMemberSeq&);
};




class EnumDef : virtual public ::CORBA::EnumDef,
                virtual public OBProxy_CORBA::TypedefDef
{
    EnumDef(const EnumDef&);
    void operator=(const EnumDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    EnumDef() { }
    virtual ~EnumDef() { }

    virtual const char** _OB_ids() const;




    ::CORBA::EnumMemberSeq* members();
    void members(const ::CORBA::EnumMemberSeq&);
};




class AliasDef : virtual public ::CORBA::AliasDef,
                 virtual public OBProxy_CORBA::TypedefDef
{
    AliasDef(const AliasDef&);
    void operator=(const AliasDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    AliasDef() { }
    virtual ~AliasDef() { }

    virtual const char** _OB_ids() const;




    ::CORBA::IDLType_ptr original_type_def();
    void original_type_def(::CORBA::IDLType_ptr);
};




class NativeDef : virtual public ::CORBA::NativeDef,
                  virtual public OBProxy_CORBA::TypedefDef
{
    NativeDef(const NativeDef&);
    void operator=(const NativeDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    NativeDef() { }
    virtual ~NativeDef() { }

    virtual const char** _OB_ids() const;
};




class PrimitiveDef : virtual public ::CORBA::PrimitiveDef,
                     virtual public OBProxy_CORBA::IDLType
{
    PrimitiveDef(const PrimitiveDef&);
    void operator=(const PrimitiveDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    PrimitiveDef() { }
    virtual ~PrimitiveDef() { }

    virtual const char** _OB_ids() const;




    ::CORBA::PrimitiveKind kind();
};




class StringDef : virtual public ::CORBA::StringDef,
                  virtual public OBProxy_CORBA::IDLType
{
    StringDef(const StringDef&);
    void operator=(const StringDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    StringDef() { }
    virtual ~StringDef() { }

    virtual const char** _OB_ids() const;




    CORBA::ULong bound();
    void bound(CORBA::ULong);
};




class WstringDef : virtual public ::CORBA::WstringDef,
                   virtual public OBProxy_CORBA::IDLType
{
    WstringDef(const WstringDef&);
    void operator=(const WstringDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    WstringDef() { }
    virtual ~WstringDef() { }

    virtual const char** _OB_ids() const;




    CORBA::ULong bound();
    void bound(CORBA::ULong);
};




class FixedDef : virtual public ::CORBA::FixedDef,
                 virtual public OBProxy_CORBA::IDLType
{
    FixedDef(const FixedDef&);
    void operator=(const FixedDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    FixedDef() { }
    virtual ~FixedDef() { }

    virtual const char** _OB_ids() const;




    CORBA::UShort digits();
    void digits(CORBA::UShort);




    CORBA::Short scale();
    void scale(CORBA::Short);
};




class SequenceDef : virtual public ::CORBA::SequenceDef,
                    virtual public OBProxy_CORBA::IDLType
{
    SequenceDef(const SequenceDef&);
    void operator=(const SequenceDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    SequenceDef() { }
    virtual ~SequenceDef() { }

    virtual const char** _OB_ids() const;




    CORBA::ULong bound();
    void bound(CORBA::ULong);




    CORBA::TypeCode_ptr element_type();




    ::CORBA::IDLType_ptr element_type_def();
    void element_type_def(::CORBA::IDLType_ptr);
};




class ArrayDef : virtual public ::CORBA::ArrayDef,
                 virtual public OBProxy_CORBA::IDLType
{
    ArrayDef(const ArrayDef&);
    void operator=(const ArrayDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    ArrayDef() { }
    virtual ~ArrayDef() { }

    virtual const char** _OB_ids() const;




    CORBA::ULong length();
    void length(CORBA::ULong);




    CORBA::TypeCode_ptr element_type();




    ::CORBA::IDLType_ptr element_type_def();
    void element_type_def(::CORBA::IDLType_ptr);
};

}




namespace OBStubImpl_CORBA
{




class Repository : virtual public OBStubImpl_CORBA::Container
{
    Repository(const Repository&);
    void operator=(const Repository&);

protected:

    Repository() { }

public:

    static inline Repository_ptr
    _duplicate(Repository_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline Repository_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::Contained_ptr lookup_id(const char* search_id) = 0;




    virtual CORBA::TypeCode_ptr get_canonical_typecode(CORBA::TypeCode_ptr tc) = 0;




    virtual ::CORBA::PrimitiveDef_ptr get_primitive(::CORBA::PrimitiveKind kind) = 0;




    virtual ::CORBA::StringDef_ptr create_string(CORBA::ULong bound) = 0;




    virtual ::CORBA::WstringDef_ptr create_wstring(CORBA::ULong bound) = 0;




    virtual ::CORBA::SequenceDef_ptr create_sequence(CORBA::ULong bound,
                                                     ::CORBA::IDLType_ptr element_type) = 0;




    virtual ::CORBA::ArrayDef_ptr create_array(CORBA::ULong length,
                                               ::CORBA::IDLType_ptr element_type) = 0;




    virtual ::CORBA::FixedDef_ptr create_fixed(CORBA::UShort digits,
                                               CORBA::Short scale) = 0;
};




class ModuleDef : virtual public OBStubImpl_CORBA::Container,
                  virtual public OBStubImpl_CORBA::Contained
{
    ModuleDef(const ModuleDef&);
    void operator=(const ModuleDef&);

protected:

    ModuleDef() { }

public:

    static inline ModuleDef_ptr
    _duplicate(ModuleDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ModuleDef_ptr
    _nil()
    {
        return 0;
    }
};




class ConstantDef : virtual public OBStubImpl_CORBA::Contained
{
    ConstantDef(const ConstantDef&);
    void operator=(const ConstantDef&);

protected:

    ConstantDef() { }

public:

    static inline ConstantDef_ptr
    _duplicate(ConstantDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ConstantDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual ::CORBA::IDLType_ptr type_def() = 0;
    virtual void type_def(::CORBA::IDLType_ptr) = 0;




    virtual CORBA::Any* value() = 0;
    virtual void value(const CORBA::Any&) = 0;
};




class TypedefDef : virtual public OBStubImpl_CORBA::Contained,
                   virtual public OBStubImpl_CORBA::IDLType
{
    TypedefDef(const TypedefDef&);
    void operator=(const TypedefDef&);

protected:

    TypedefDef() { }

public:

    static inline TypedefDef_ptr
    _duplicate(TypedefDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline TypedefDef_ptr
    _nil()
    {
        return 0;
    }
};




class StructDef : virtual public OBStubImpl_CORBA::TypedefDef,
                  virtual public OBStubImpl_CORBA::Container
{
    StructDef(const StructDef&);
    void operator=(const StructDef&);

protected:

    StructDef() { }

public:

    static inline StructDef_ptr
    _duplicate(StructDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline StructDef_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::StructMemberSeq* members() = 0;
    virtual void members(const ::CORBA::StructMemberSeq&) = 0;
};




class UnionDef : virtual public OBStubImpl_CORBA::TypedefDef,
                 virtual public OBStubImpl_CORBA::Container
{
    UnionDef(const UnionDef&);
    void operator=(const UnionDef&);

protected:

    UnionDef() { }

public:

    static inline UnionDef_ptr
    _duplicate(UnionDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline UnionDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::TypeCode_ptr discriminator_type() = 0;




    virtual ::CORBA::IDLType_ptr discriminator_type_def() = 0;
    virtual void discriminator_type_def(::CORBA::IDLType_ptr) = 0;




    virtual ::CORBA::UnionMemberSeq* members() = 0;
    virtual void members(const ::CORBA::UnionMemberSeq&) = 0;
};




class EnumDef : virtual public OBStubImpl_CORBA::TypedefDef
{
    EnumDef(const EnumDef&);
    void operator=(const EnumDef&);

protected:

    EnumDef() { }

public:

    static inline EnumDef_ptr
    _duplicate(EnumDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline EnumDef_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::EnumMemberSeq* members() = 0;
    virtual void members(const ::CORBA::EnumMemberSeq&) = 0;
};




class AliasDef : virtual public OBStubImpl_CORBA::TypedefDef
{
    AliasDef(const AliasDef&);
    void operator=(const AliasDef&);

protected:

    AliasDef() { }

public:

    static inline AliasDef_ptr
    _duplicate(AliasDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline AliasDef_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::IDLType_ptr original_type_def() = 0;
    virtual void original_type_def(::CORBA::IDLType_ptr) = 0;
};




class NativeDef : virtual public OBStubImpl_CORBA::TypedefDef
{
    NativeDef(const NativeDef&);
    void operator=(const NativeDef&);

protected:

    NativeDef() { }

public:

    static inline NativeDef_ptr
    _duplicate(NativeDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline NativeDef_ptr
    _nil()
    {
        return 0;
    }
};




class PrimitiveDef : virtual public OBStubImpl_CORBA::IDLType
{
    PrimitiveDef(const PrimitiveDef&);
    void operator=(const PrimitiveDef&);

protected:

    PrimitiveDef() { }

public:

    static inline PrimitiveDef_ptr
    _duplicate(PrimitiveDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline PrimitiveDef_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::PrimitiveKind kind() = 0;
};




class StringDef : virtual public OBStubImpl_CORBA::IDLType
{
    StringDef(const StringDef&);
    void operator=(const StringDef&);

protected:

    StringDef() { }

public:

    static inline StringDef_ptr
    _duplicate(StringDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline StringDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::ULong bound() = 0;
    virtual void bound(CORBA::ULong) = 0;
};




class WstringDef : virtual public OBStubImpl_CORBA::IDLType
{
    WstringDef(const WstringDef&);
    void operator=(const WstringDef&);

protected:

    WstringDef() { }

public:

    static inline WstringDef_ptr
    _duplicate(WstringDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline WstringDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::ULong bound() = 0;
    virtual void bound(CORBA::ULong) = 0;
};




class FixedDef : virtual public OBStubImpl_CORBA::IDLType
{
    FixedDef(const FixedDef&);
    void operator=(const FixedDef&);

protected:

    FixedDef() { }

public:

    static inline FixedDef_ptr
    _duplicate(FixedDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline FixedDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::UShort digits() = 0;
    virtual void digits(CORBA::UShort) = 0;




    virtual CORBA::Short scale() = 0;
    virtual void scale(CORBA::Short) = 0;
};




class SequenceDef : virtual public OBStubImpl_CORBA::IDLType
{
    SequenceDef(const SequenceDef&);
    void operator=(const SequenceDef&);

protected:

    SequenceDef() { }

public:

    static inline SequenceDef_ptr
    _duplicate(SequenceDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline SequenceDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::ULong bound() = 0;
    virtual void bound(CORBA::ULong) = 0;




    virtual CORBA::TypeCode_ptr element_type() = 0;




    virtual ::CORBA::IDLType_ptr element_type_def() = 0;
    virtual void element_type_def(::CORBA::IDLType_ptr) = 0;
};




class ArrayDef : virtual public OBStubImpl_CORBA::IDLType
{
    ArrayDef(const ArrayDef&);
    void operator=(const ArrayDef&);

protected:

    ArrayDef() { }

public:

    static inline ArrayDef_ptr
    _duplicate(ArrayDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ArrayDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::ULong length() = 0;
    virtual void length(CORBA::ULong) = 0;




    virtual CORBA::TypeCode_ptr element_type() = 0;




    virtual ::CORBA::IDLType_ptr element_type_def() = 0;
    virtual void element_type_def(::CORBA::IDLType_ptr) = 0;
};

}




namespace OBMarshalStubImpl_CORBA
{




class Repository : virtual public OBStubImpl_CORBA::Repository,
                   virtual public OBMarshalStubImpl_CORBA::Container
{
    Repository(const Repository&);
    void operator=(const Repository&);

protected:

    Repository() { }
    friend class OBProxy_CORBA::Repository;

public:




    virtual ::CORBA::Contained_ptr lookup_id(const char* search_id);




    virtual CORBA::TypeCode_ptr get_canonical_typecode(CORBA::TypeCode_ptr tc);




    virtual ::CORBA::PrimitiveDef_ptr get_primitive(::CORBA::PrimitiveKind kind);




    virtual ::CORBA::StringDef_ptr create_string(CORBA::ULong bound);




    virtual ::CORBA::WstringDef_ptr create_wstring(CORBA::ULong bound);




    virtual ::CORBA::SequenceDef_ptr create_sequence(CORBA::ULong bound,
                                                     ::CORBA::IDLType_ptr element_type);




    virtual ::CORBA::ArrayDef_ptr create_array(CORBA::ULong length,
                                               ::CORBA::IDLType_ptr element_type);




    virtual ::CORBA::FixedDef_ptr create_fixed(CORBA::UShort digits,
                                               CORBA::Short scale);
};




class ModuleDef : virtual public OBStubImpl_CORBA::ModuleDef,
                  virtual public OBMarshalStubImpl_CORBA::Container,
                  virtual public OBMarshalStubImpl_CORBA::Contained
{
    ModuleDef(const ModuleDef&);
    void operator=(const ModuleDef&);

protected:

    ModuleDef() { }
    friend class OBProxy_CORBA::ModuleDef;

public:
};




class ConstantDef : virtual public OBStubImpl_CORBA::ConstantDef,
                    virtual public OBMarshalStubImpl_CORBA::Contained
{
    ConstantDef(const ConstantDef&);
    void operator=(const ConstantDef&);

protected:

    ConstantDef() { }
    friend class OBProxy_CORBA::ConstantDef;

public:




    virtual CORBA::TypeCode_ptr type();




    virtual ::CORBA::IDLType_ptr type_def();
    virtual void type_def(::CORBA::IDLType_ptr);




    virtual CORBA::Any* value();
    virtual void value(const CORBA::Any&);
};




class TypedefDef : virtual public OBStubImpl_CORBA::TypedefDef,
                   virtual public OBMarshalStubImpl_CORBA::Contained,
                   virtual public OBMarshalStubImpl_CORBA::IDLType
{
    TypedefDef(const TypedefDef&);
    void operator=(const TypedefDef&);

protected:

    TypedefDef() { }
    friend class OBProxy_CORBA::TypedefDef;

public:
};




class StructDef : virtual public OBStubImpl_CORBA::StructDef,
                  virtual public OBMarshalStubImpl_CORBA::TypedefDef,
                  virtual public OBMarshalStubImpl_CORBA::Container
{
    StructDef(const StructDef&);
    void operator=(const StructDef&);

protected:

    StructDef() { }
    friend class OBProxy_CORBA::StructDef;

public:




    virtual ::CORBA::StructMemberSeq* members();
    virtual void members(const ::CORBA::StructMemberSeq&);
};




class UnionDef : virtual public OBStubImpl_CORBA::UnionDef,
                 virtual public OBMarshalStubImpl_CORBA::TypedefDef,
                 virtual public OBMarshalStubImpl_CORBA::Container
{
    UnionDef(const UnionDef&);
    void operator=(const UnionDef&);

protected:

    UnionDef() { }
    friend class OBProxy_CORBA::UnionDef;

public:




    virtual CORBA::TypeCode_ptr discriminator_type();




    virtual ::CORBA::IDLType_ptr discriminator_type_def();
    virtual void discriminator_type_def(::CORBA::IDLType_ptr);




    virtual ::CORBA::UnionMemberSeq* members();
    virtual void members(const ::CORBA::UnionMemberSeq&);
};




class EnumDef : virtual public OBStubImpl_CORBA::EnumDef,
                virtual public OBMarshalStubImpl_CORBA::TypedefDef
{
    EnumDef(const EnumDef&);
    void operator=(const EnumDef&);

protected:

    EnumDef() { }
    friend class OBProxy_CORBA::EnumDef;

public:




    virtual ::CORBA::EnumMemberSeq* members();
    virtual void members(const ::CORBA::EnumMemberSeq&);
};




class AliasDef : virtual public OBStubImpl_CORBA::AliasDef,
                 virtual public OBMarshalStubImpl_CORBA::TypedefDef
{
    AliasDef(const AliasDef&);
    void operator=(const AliasDef&);

protected:

    AliasDef() { }
    friend class OBProxy_CORBA::AliasDef;

public:




    virtual ::CORBA::IDLType_ptr original_type_def();
    virtual void original_type_def(::CORBA::IDLType_ptr);
};




class NativeDef : virtual public OBStubImpl_CORBA::NativeDef,
                  virtual public OBMarshalStubImpl_CORBA::TypedefDef
{
    NativeDef(const NativeDef&);
    void operator=(const NativeDef&);

protected:

    NativeDef() { }
    friend class OBProxy_CORBA::NativeDef;

public:
};




class PrimitiveDef : virtual public OBStubImpl_CORBA::PrimitiveDef,
                     virtual public OBMarshalStubImpl_CORBA::IDLType
{
    PrimitiveDef(const PrimitiveDef&);
    void operator=(const PrimitiveDef&);

protected:

    PrimitiveDef() { }
    friend class OBProxy_CORBA::PrimitiveDef;

public:




    virtual ::CORBA::PrimitiveKind kind();
};




class StringDef : virtual public OBStubImpl_CORBA::StringDef,
                  virtual public OBMarshalStubImpl_CORBA::IDLType
{
    StringDef(const StringDef&);
    void operator=(const StringDef&);

protected:

    StringDef() { }
    friend class OBProxy_CORBA::StringDef;

public:




    virtual CORBA::ULong bound();
    virtual void bound(CORBA::ULong);
};




class WstringDef : virtual public OBStubImpl_CORBA::WstringDef,
                   virtual public OBMarshalStubImpl_CORBA::IDLType
{
    WstringDef(const WstringDef&);
    void operator=(const WstringDef&);

protected:

    WstringDef() { }
    friend class OBProxy_CORBA::WstringDef;

public:




    virtual CORBA::ULong bound();
    virtual void bound(CORBA::ULong);
};




class FixedDef : virtual public OBStubImpl_CORBA::FixedDef,
                 virtual public OBMarshalStubImpl_CORBA::IDLType
{
    FixedDef(const FixedDef&);
    void operator=(const FixedDef&);

protected:

    FixedDef() { }
    friend class OBProxy_CORBA::FixedDef;

public:




    virtual CORBA::UShort digits();
    virtual void digits(CORBA::UShort);




    virtual CORBA::Short scale();
    virtual void scale(CORBA::Short);
};




class SequenceDef : virtual public OBStubImpl_CORBA::SequenceDef,
                    virtual public OBMarshalStubImpl_CORBA::IDLType
{
    SequenceDef(const SequenceDef&);
    void operator=(const SequenceDef&);

protected:

    SequenceDef() { }
    friend class OBProxy_CORBA::SequenceDef;

public:




    virtual CORBA::ULong bound();
    virtual void bound(CORBA::ULong);




    virtual CORBA::TypeCode_ptr element_type();




    virtual ::CORBA::IDLType_ptr element_type_def();
    virtual void element_type_def(::CORBA::IDLType_ptr);
};




class ArrayDef : virtual public OBStubImpl_CORBA::ArrayDef,
                 virtual public OBMarshalStubImpl_CORBA::IDLType
{
    ArrayDef(const ArrayDef&);
    void operator=(const ArrayDef&);

protected:

    ArrayDef() { }
    friend class OBProxy_CORBA::ArrayDef;

public:




    virtual CORBA::ULong length();
    virtual void length(CORBA::ULong);




    virtual CORBA::TypeCode_ptr element_type();




    virtual ::CORBA::IDLType_ptr element_type_def();
    virtual void element_type_def(::CORBA::IDLType_ptr);
};

}




namespace OBV_CORBA
{

}




void operator<<=(CORBA::Any&, CORBA::PrimitiveKind);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::PrimitiveKind&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::PrimitiveKind val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::PrimitiveKind& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::Repository_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::Repository_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::Repository_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::Repository_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::Repository_ptr*);
void operator<<=(CORBA::Any&, CORBA::Repository_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::Repository_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::Repository_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::Repository_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::Repository_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::ModuleDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ModuleDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::ModuleDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::ModuleDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::ModuleDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::ModuleDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ModuleDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ModuleDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::ModuleDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ModuleDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ModuleDescription*);
void operator<<=(CORBA::Any&, const CORBA::ModuleDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ModuleDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ModuleDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ModuleDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ModuleDescription*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::ConstantDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ConstantDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::ConstantDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::ConstantDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::ConstantDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::ConstantDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ConstantDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ConstantDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::ConstantDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ConstantDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ConstantDescription*);
void operator<<=(CORBA::Any&, const CORBA::ConstantDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ConstantDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ConstantDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ConstantDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ConstantDescription*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::TypedefDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::TypedefDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::TypedefDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::TypedefDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::TypedefDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::TypedefDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::TypedefDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::TypedefDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::TypedefDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::TypedefDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::TypeDescription*);
void operator<<=(CORBA::Any&, const CORBA::TypeDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::TypeDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::TypeDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::TypeDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::TypeDescription*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::StructDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::StructDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::StructDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::StructDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::StructDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::StructDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::StructDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::StructDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::StructDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::StructDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::UnionDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::UnionDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::UnionDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::UnionDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::UnionDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::UnionDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::UnionDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::UnionDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::UnionDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::UnionDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::EnumDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::EnumDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::EnumDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::EnumDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::EnumDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::EnumDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::EnumDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::EnumDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::EnumDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::EnumDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::AliasDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::AliasDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::AliasDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::AliasDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::AliasDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::AliasDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::AliasDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AliasDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::AliasDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::AliasDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::NativeDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::NativeDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::NativeDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::NativeDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::NativeDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::NativeDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::NativeDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::NativeDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::NativeDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::NativeDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::PrimitiveDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::PrimitiveDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::PrimitiveDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::PrimitiveDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::PrimitiveDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::PrimitiveDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::PrimitiveDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::PrimitiveDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::PrimitiveDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::PrimitiveDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::StringDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::StringDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::StringDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::StringDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::StringDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::StringDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::StringDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::StringDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::StringDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::StringDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::WstringDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::WstringDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::WstringDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::WstringDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::WstringDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::WstringDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::WstringDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::WstringDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::WstringDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::WstringDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::FixedDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::FixedDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::FixedDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::FixedDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::FixedDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::FixedDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::FixedDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::FixedDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::FixedDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::FixedDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::SequenceDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::SequenceDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::SequenceDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::SequenceDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::SequenceDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::SequenceDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::SequenceDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::SequenceDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::SequenceDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::SequenceDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::ArrayDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ArrayDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::ArrayDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::ArrayDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::ArrayDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::ArrayDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ArrayDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ArrayDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::ArrayDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ArrayDef_ptr& val)
{
    return any.in() >>= val;
}
# 30 "../../include/OB/IFR.h" 2
# 1 "../../include/OB/IFR4.h" 1
# 27 "../../include/OB/IFR4.h"
# 1 "../../include/OB/IFR2.h" 1
# 28 "../../include/OB/IFR4.h" 2
# 1 "../../include/OB/IFR3.h" 1
# 29 "../../include/OB/IFR4.h" 2
# 1 "../../include/OB/IFR4_fwd.h" 1
# 18 "../../include/OB/IFR4_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/IFR4_fwd.h" 2
# 39 "../../include/OB/IFR4_fwd.h"
namespace CORBA
{

class AbstractInterfaceDef;
typedef AbstractInterfaceDef* AbstractInterfaceDef_ptr;
typedef AbstractInterfaceDef* AbstractInterfaceDefRef;

          extern OB::TypeCodeConst _tc_AbstractInterfaceDef;

class LocalInterfaceDef;
typedef LocalInterfaceDef* LocalInterfaceDef_ptr;
typedef LocalInterfaceDef* LocalInterfaceDefRef;

          extern OB::TypeCodeConst _tc_LocalInterfaceDef;

class ValueMemberDef;
typedef ValueMemberDef* ValueMemberDef_ptr;
typedef ValueMemberDef* ValueMemberDefRef;

          extern OB::TypeCodeConst _tc_ValueMemberDef;

class ValueDef;
typedef ValueDef* ValueDef_ptr;
typedef ValueDef* ValueDefRef;

          extern OB::TypeCodeConst _tc_ValueDef;

class ValueBoxDef;
typedef ValueBoxDef* ValueBoxDef_ptr;
typedef ValueBoxDef* ValueBoxDefRef;

          extern OB::TypeCodeConst _tc_ValueBoxDef;

}

void OBDuplicate(CORBA::AbstractInterfaceDef_ptr);
void OBRelease(CORBA::AbstractInterfaceDef_ptr);

void OBMarshal(CORBA::AbstractInterfaceDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::AbstractInterfaceDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::LocalInterfaceDef_ptr);
void OBRelease(CORBA::LocalInterfaceDef_ptr);

void OBMarshal(CORBA::LocalInterfaceDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::LocalInterfaceDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ValueMemberDef_ptr);
void OBRelease(CORBA::ValueMemberDef_ptr);

void OBMarshal(CORBA::ValueMemberDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ValueMemberDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ValueDef_ptr);
void OBRelease(CORBA::ValueDef_ptr);

void OBMarshal(CORBA::ValueDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ValueDef_ptr&, OB::InputStreamImpl*);

void OBDuplicate(CORBA::ValueBoxDef_ptr);
void OBRelease(CORBA::ValueBoxDef_ptr);

void OBMarshal(CORBA::ValueBoxDef_ptr, OB::OutputStreamImpl*);
void OBUnmarshal(CORBA::ValueBoxDef_ptr&, OB::InputStreamImpl*);

namespace CORBA
{

typedef OB::ObjVar< AbstractInterfaceDef > AbstractInterfaceDef_var;
typedef OB::ObjOut< AbstractInterfaceDef > AbstractInterfaceDef_out;

typedef OB::ObjVar< LocalInterfaceDef > LocalInterfaceDef_var;
typedef OB::ObjOut< LocalInterfaceDef > LocalInterfaceDef_out;

typedef OB::ObjVar< ValueMemberDef > ValueMemberDef_var;
typedef OB::ObjOut< ValueMemberDef > ValueMemberDef_out;

typedef OB::ObjVar< ValueDef > ValueDef_var;
typedef OB::ObjOut< ValueDef > ValueDef_out;

typedef OB::ObjVar< ValueBoxDef > ValueBoxDef_var;
typedef OB::ObjOut< ValueBoxDef > ValueBoxDef_out;

}
# 30 "../../include/OB/IFR4.h" 2
# 41 "../../include/OB/IFR4.h"
namespace OBStubImpl_CORBA
{

class AbstractInterfaceDef;
typedef AbstractInterfaceDef* AbstractInterfaceDef_ptr;

class LocalInterfaceDef;
typedef LocalInterfaceDef* LocalInterfaceDef_ptr;

class ValueMemberDef;
typedef ValueMemberDef* ValueMemberDef_ptr;

class ValueDef;
typedef ValueDef* ValueDef_ptr;

class ValueBoxDef;
typedef ValueBoxDef* ValueBoxDef_ptr;

}

void OBDuplicate(OBStubImpl_CORBA::AbstractInterfaceDef_ptr);
void OBRelease(OBStubImpl_CORBA::AbstractInterfaceDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::LocalInterfaceDef_ptr);
void OBRelease(OBStubImpl_CORBA::LocalInterfaceDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ValueMemberDef_ptr);
void OBRelease(OBStubImpl_CORBA::ValueMemberDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ValueDef_ptr);
void OBRelease(OBStubImpl_CORBA::ValueDef_ptr);

void OBDuplicate(OBStubImpl_CORBA::ValueBoxDef_ptr);
void OBRelease(OBStubImpl_CORBA::ValueBoxDef_ptr);

namespace OBStubImpl_CORBA
{

typedef OB::ObjVar< AbstractInterfaceDef > AbstractInterfaceDef_var;

typedef OB::ObjVar< LocalInterfaceDef > LocalInterfaceDef_var;

typedef OB::ObjVar< ValueMemberDef > ValueMemberDef_var;

typedef OB::ObjVar< ValueDef > ValueDef_var;

typedef OB::ObjVar< ValueBoxDef > ValueBoxDef_var;

}




namespace CORBA
{




class AbstractInterfaceDef : virtual public ::CORBA::InterfaceDef
{
    AbstractInterfaceDef(const AbstractInterfaceDef&);
    void operator=(const AbstractInterfaceDef&);

protected:

    static const char* ids_[];

public:

    AbstractInterfaceDef() { }
    virtual ~AbstractInterfaceDef() { }

    typedef AbstractInterfaceDef_ptr _ptr_type;
    typedef AbstractInterfaceDef_var _var_type;

    static inline AbstractInterfaceDef_ptr
    _duplicate(AbstractInterfaceDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline AbstractInterfaceDef_ptr
    _nil()
    {
        return 0;
    }

    static AbstractInterfaceDef_ptr _narrow(CORBA::Object_ptr);
    static AbstractInterfaceDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static AbstractInterfaceDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static AbstractInterfaceDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();
};




class LocalInterfaceDef : virtual public ::CORBA::InterfaceDef
{
    LocalInterfaceDef(const LocalInterfaceDef&);
    void operator=(const LocalInterfaceDef&);

protected:

    static const char* ids_[];

public:

    LocalInterfaceDef() { }
    virtual ~LocalInterfaceDef() { }

    typedef LocalInterfaceDef_ptr _ptr_type;
    typedef LocalInterfaceDef_var _var_type;

    static inline LocalInterfaceDef_ptr
    _duplicate(LocalInterfaceDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline LocalInterfaceDef_ptr
    _nil()
    {
        return 0;
    }

    static LocalInterfaceDef_ptr _narrow(CORBA::Object_ptr);
    static LocalInterfaceDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static LocalInterfaceDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static LocalInterfaceDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();
};




class ValueMemberDef : virtual public ::CORBA::Contained
{
    ValueMemberDef(const ValueMemberDef&);
    void operator=(const ValueMemberDef&);

protected:

    static const char* ids_[];

public:

    ValueMemberDef() { }
    virtual ~ValueMemberDef() { }

    typedef ValueMemberDef_ptr _ptr_type;
    typedef ValueMemberDef_var _var_type;

    static inline ValueMemberDef_ptr
    _duplicate(ValueMemberDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ValueMemberDef_ptr
    _nil()
    {
        return 0;
    }

    static ValueMemberDef_ptr _narrow(CORBA::Object_ptr);
    static ValueMemberDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static ValueMemberDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static ValueMemberDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual IDLType_ptr type_def() = 0;
    virtual void type_def(IDLType_ptr) = 0;




    virtual Visibility access() = 0;
    virtual void access(Visibility) = 0;
};




class ValueDef : virtual public ::CORBA::Container,
                 virtual public ::CORBA::Contained,
                 virtual public ::CORBA::IDLType
{
    ValueDef(const ValueDef&);
    void operator=(const ValueDef&);

protected:

    static const char* ids_[];

public:

    ValueDef() { }
    virtual ~ValueDef() { }

    typedef ValueDef_ptr _ptr_type;
    typedef ValueDef_var _var_type;

    static inline ValueDef_ptr
    _duplicate(ValueDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ValueDef_ptr
    _nil()
    {
        return 0;
    }

    static ValueDef_ptr _narrow(CORBA::Object_ptr);
    static ValueDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static ValueDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static ValueDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual InterfaceDefSeq* supported_interfaces() = 0;
    virtual void supported_interfaces(const InterfaceDefSeq&) = 0;




    virtual InitializerSeq* initializers() = 0;
    virtual void initializers(const InitializerSeq&) = 0;




    virtual ValueDef_ptr base_value() = 0;
    virtual void base_value(ValueDef_ptr) = 0;




    virtual ValueDefSeq* abstract_base_values() = 0;
    virtual void abstract_base_values(const ValueDefSeq&) = 0;




    virtual CORBA::Boolean is_abstract() = 0;
    virtual void is_abstract(CORBA::Boolean) = 0;




    virtual CORBA::Boolean is_custom() = 0;
    virtual void is_custom(CORBA::Boolean) = 0;




    virtual CORBA::Boolean is_truncatable() = 0;
    virtual void is_truncatable(CORBA::Boolean) = 0;




    virtual CORBA::Boolean is_a(const char* value_id) = 0;




    struct FullValueDescription;
    typedef OB::VarVar< FullValueDescription > FullValueDescription_var;
    typedef OB::VarOut< FullValueDescription > FullValueDescription_out;

    struct FullValueDescription
    {



        FullValueDescription() { }

        FullValueDescription(const FullValueDescription&);
        FullValueDescription& operator=(const FullValueDescription&);

        typedef FullValueDescription_var _var_type;

        OB::StrForStruct name;
        OB::StrForStruct id;
        CORBA::Boolean is_abstract;
        CORBA::Boolean is_custom;
        OB::StrForStruct defined_in;
        OB::StrForStruct version;
        OpDescriptionSeq operations;
        AttrDescriptionSeq attributes;
        ValueMemberSeq members;
        InitializerSeq initializers;
        RepositoryIdSeq supported_interfaces;
        RepositoryIdSeq abstract_base_values;
        CORBA::Boolean is_truncatable;
        OB::StrForStruct base_value;
        CORBA::TypeCode_var type;

        void _OB_marshal(OB::OutputStreamImpl*) const;
        static void _OB_unmarshal(FullValueDescription&, OB::InputStreamImpl*);
    };

              static OB::TypeCodeConst _tc_FullValueDescription;




    virtual FullValueDescription* describe_value() = 0;




    virtual ValueMemberDef_ptr create_value_member(const char* id,
                                                   const char* name,
                                                   const char* version,
                                                   IDLType_ptr type,
                                                   Visibility access) = 0;




    virtual AttributeDef_ptr create_attribute(const char* id,
                                              const char* name,
                                              const char* version,
                                              IDLType_ptr type,
                                              AttributeMode mode) = 0;




    virtual OperationDef_ptr create_operation(const char* id,
                                              const char* name,
                                              const char* version,
                                              IDLType_ptr result,
                                              OperationMode mode,
                                              const ParDescriptionSeq& params,
                                              const ExceptionDefSeq& exceptions,
                                              const ContextIdSeq& contexts) = 0;
};




struct ValueDescription;
typedef OB::VarVar< ValueDescription > ValueDescription_var;
typedef OB::VarOut< ValueDescription > ValueDescription_out;

struct ValueDescription
{



    ValueDescription() { }

    ValueDescription(const ValueDescription&);
    ValueDescription& operator=(const ValueDescription&);

    typedef ValueDescription_var _var_type;

    OB::StrForStruct name;
    OB::StrForStruct id;
    CORBA::Boolean is_abstract;
    CORBA::Boolean is_custom;
    OB::StrForStruct defined_in;
    OB::StrForStruct version;
    RepositoryIdSeq supported_interfaces;
    RepositoryIdSeq abstract_base_values;
    CORBA::Boolean is_truncatable;
    OB::StrForStruct base_value;

    void _OB_marshal(OB::OutputStreamImpl*) const;
    static void _OB_unmarshal(ValueDescription&, OB::InputStreamImpl*);
};

          extern OB::TypeCodeConst _tc_ValueDescription;




class ValueBoxDef : virtual public ::CORBA::TypedefDef
{
    ValueBoxDef(const ValueBoxDef&);
    void operator=(const ValueBoxDef&);

protected:

    static const char* ids_[];

public:

    ValueBoxDef() { }
    virtual ~ValueBoxDef() { }

    typedef ValueBoxDef_ptr _ptr_type;
    typedef ValueBoxDef_var _var_type;

    static inline ValueBoxDef_ptr
    _duplicate(ValueBoxDef_ptr p)
    {
        if(p)
            p -> _add_ref();
        return p;
    }

    static inline ValueBoxDef_ptr
    _nil()
    {
        return 0;
    }

    static ValueBoxDef_ptr _narrow(CORBA::Object_ptr);
    static ValueBoxDef_ptr _unchecked_narrow(CORBA::Object_ptr);

    static ValueBoxDef_ptr _narrow(CORBA::AbstractBase_ptr);
    static ValueBoxDef_ptr _unchecked_narrow(CORBA::AbstractBase_ptr);

    static const char** _OB_staticIds();




    virtual IDLType_ptr original_type_def() = 0;
    virtual void original_type_def(IDLType_ptr) = 0;
};

}




namespace OBProxy_CORBA
{




class AbstractInterfaceDef : virtual public ::CORBA::AbstractInterfaceDef,
                             virtual public OBProxy_CORBA::InterfaceDef
{
    AbstractInterfaceDef(const AbstractInterfaceDef&);
    void operator=(const AbstractInterfaceDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    AbstractInterfaceDef() { }
    virtual ~AbstractInterfaceDef() { }

    virtual const char** _OB_ids() const;
};




class LocalInterfaceDef : virtual public ::CORBA::LocalInterfaceDef,
                          virtual public OBProxy_CORBA::InterfaceDef
{
    LocalInterfaceDef(const LocalInterfaceDef&);
    void operator=(const LocalInterfaceDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    LocalInterfaceDef() { }
    virtual ~LocalInterfaceDef() { }

    virtual const char** _OB_ids() const;
};




class ValueMemberDef : virtual public ::CORBA::ValueMemberDef,
                       virtual public OBProxy_CORBA::Contained
{
    ValueMemberDef(const ValueMemberDef&);
    void operator=(const ValueMemberDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    ValueMemberDef() { }
    virtual ~ValueMemberDef() { }

    virtual const char** _OB_ids() const;




    CORBA::TypeCode_ptr type();




    ::CORBA::IDLType_ptr type_def();
    void type_def(::CORBA::IDLType_ptr);




    ::CORBA::Visibility access();
    void access(::CORBA::Visibility);
};




class ValueDef : virtual public ::CORBA::ValueDef,
                 virtual public OBProxy_CORBA::Container,
                 virtual public OBProxy_CORBA::Contained,
                 virtual public OBProxy_CORBA::IDLType
{
    ValueDef(const ValueDef&);
    void operator=(const ValueDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    ValueDef() { }
    virtual ~ValueDef() { }

    virtual const char** _OB_ids() const;




    ::CORBA::InterfaceDefSeq* supported_interfaces();
    void supported_interfaces(const ::CORBA::InterfaceDefSeq&);




    ::CORBA::InitializerSeq* initializers();
    void initializers(const ::CORBA::InitializerSeq&);




    ::CORBA::ValueDef_ptr base_value();
    void base_value(::CORBA::ValueDef_ptr);




    ::CORBA::ValueDefSeq* abstract_base_values();
    void abstract_base_values(const ::CORBA::ValueDefSeq&);




    CORBA::Boolean is_abstract();
    void is_abstract(CORBA::Boolean);




    CORBA::Boolean is_custom();
    void is_custom(CORBA::Boolean);




    CORBA::Boolean is_truncatable();
    void is_truncatable(CORBA::Boolean);




    CORBA::Boolean is_a(const char* value_id);




    ::CORBA::ValueDef::FullValueDescription* describe_value();




    ::CORBA::ValueMemberDef_ptr create_value_member(const char* id,
                                                    const char* name,
                                                    const char* version,
                                                    ::CORBA::IDLType_ptr type,
                                                    ::CORBA::Visibility access);




    ::CORBA::AttributeDef_ptr create_attribute(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr type,
                                               ::CORBA::AttributeMode mode);




    ::CORBA::OperationDef_ptr create_operation(const char* id,
                                               const char* name,
                                               const char* version,
                                               ::CORBA::IDLType_ptr result,
                                               ::CORBA::OperationMode mode,
                                               const ::CORBA::ParDescriptionSeq& params,
                                               const ::CORBA::ExceptionDefSeq& exceptions,
                                               const ::CORBA::ContextIdSeq& contexts);
};




class ValueBoxDef : virtual public ::CORBA::ValueBoxDef,
                    virtual public OBProxy_CORBA::TypedefDef
{
    ValueBoxDef(const ValueBoxDef&);
    void operator=(const ValueBoxDef&);

protected:

    virtual OB::MarshalStubImpl_ptr _OB_createMarshalStubImpl();

public:

    ValueBoxDef() { }
    virtual ~ValueBoxDef() { }

    virtual const char** _OB_ids() const;




    ::CORBA::IDLType_ptr original_type_def();
    void original_type_def(::CORBA::IDLType_ptr);
};

}




namespace OBStubImpl_CORBA
{




class AbstractInterfaceDef : virtual public OBStubImpl_CORBA::InterfaceDef
{
    AbstractInterfaceDef(const AbstractInterfaceDef&);
    void operator=(const AbstractInterfaceDef&);

protected:

    AbstractInterfaceDef() { }

public:

    static inline AbstractInterfaceDef_ptr
    _duplicate(AbstractInterfaceDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline AbstractInterfaceDef_ptr
    _nil()
    {
        return 0;
    }
};




class LocalInterfaceDef : virtual public OBStubImpl_CORBA::InterfaceDef
{
    LocalInterfaceDef(const LocalInterfaceDef&);
    void operator=(const LocalInterfaceDef&);

protected:

    LocalInterfaceDef() { }

public:

    static inline LocalInterfaceDef_ptr
    _duplicate(LocalInterfaceDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline LocalInterfaceDef_ptr
    _nil()
    {
        return 0;
    }
};




class ValueMemberDef : virtual public OBStubImpl_CORBA::Contained
{
    ValueMemberDef(const ValueMemberDef&);
    void operator=(const ValueMemberDef&);

protected:

    ValueMemberDef() { }

public:

    static inline ValueMemberDef_ptr
    _duplicate(ValueMemberDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ValueMemberDef_ptr
    _nil()
    {
        return 0;
    }




    virtual CORBA::TypeCode_ptr type() = 0;




    virtual ::CORBA::IDLType_ptr type_def() = 0;
    virtual void type_def(::CORBA::IDLType_ptr) = 0;




    virtual ::CORBA::Visibility access() = 0;
    virtual void access(::CORBA::Visibility) = 0;
};




class ValueDef : virtual public OBStubImpl_CORBA::Container,
                 virtual public OBStubImpl_CORBA::Contained,
                 virtual public OBStubImpl_CORBA::IDLType
{
    ValueDef(const ValueDef&);
    void operator=(const ValueDef&);

protected:

    ValueDef() { }

public:

    static inline ValueDef_ptr
    _duplicate(ValueDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ValueDef_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::InterfaceDefSeq* supported_interfaces() = 0;
    virtual void supported_interfaces(const ::CORBA::InterfaceDefSeq&) = 0;




    virtual ::CORBA::InitializerSeq* initializers() = 0;
    virtual void initializers(const ::CORBA::InitializerSeq&) = 0;




    virtual ::CORBA::ValueDef_ptr base_value() = 0;
    virtual void base_value(::CORBA::ValueDef_ptr) = 0;




    virtual ::CORBA::ValueDefSeq* abstract_base_values() = 0;
    virtual void abstract_base_values(const ::CORBA::ValueDefSeq&) = 0;




    virtual CORBA::Boolean is_abstract() = 0;
    virtual void is_abstract(CORBA::Boolean) = 0;




    virtual CORBA::Boolean is_custom() = 0;
    virtual void is_custom(CORBA::Boolean) = 0;




    virtual CORBA::Boolean is_truncatable() = 0;
    virtual void is_truncatable(CORBA::Boolean) = 0;




    virtual CORBA::Boolean is_a(const char* value_id) = 0;




    virtual ::CORBA::ValueDef::FullValueDescription* describe_value() = 0;




    virtual ::CORBA::ValueMemberDef_ptr create_value_member(const char* id,
                                                            const char* name,
                                                            const char* version,
                                                            ::CORBA::IDLType_ptr type,
                                                            ::CORBA::Visibility access) = 0;




    virtual ::CORBA::AttributeDef_ptr create_attribute(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr type,
                                                       ::CORBA::AttributeMode mode) = 0;




    virtual ::CORBA::OperationDef_ptr create_operation(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr result,
                                                       ::CORBA::OperationMode mode,
                                                       const ::CORBA::ParDescriptionSeq& params,
                                                       const ::CORBA::ExceptionDefSeq& exceptions,
                                                       const ::CORBA::ContextIdSeq& contexts) = 0;
};




class ValueBoxDef : virtual public OBStubImpl_CORBA::TypedefDef
{
    ValueBoxDef(const ValueBoxDef&);
    void operator=(const ValueBoxDef&);

protected:

    ValueBoxDef() { }

public:

    static inline ValueBoxDef_ptr
    _duplicate(ValueBoxDef_ptr p)
    {
        if(p)
            p -> _OB_incRef();
        return p;
    }

    static inline ValueBoxDef_ptr
    _nil()
    {
        return 0;
    }




    virtual ::CORBA::IDLType_ptr original_type_def() = 0;
    virtual void original_type_def(::CORBA::IDLType_ptr) = 0;
};

}




namespace OBMarshalStubImpl_CORBA
{




class AbstractInterfaceDef : virtual public OBStubImpl_CORBA::AbstractInterfaceDef,
                             virtual public OBMarshalStubImpl_CORBA::InterfaceDef
{
    AbstractInterfaceDef(const AbstractInterfaceDef&);
    void operator=(const AbstractInterfaceDef&);

protected:

    AbstractInterfaceDef() { }
    friend class OBProxy_CORBA::AbstractInterfaceDef;

public:
};




class LocalInterfaceDef : virtual public OBStubImpl_CORBA::LocalInterfaceDef,
                          virtual public OBMarshalStubImpl_CORBA::InterfaceDef
{
    LocalInterfaceDef(const LocalInterfaceDef&);
    void operator=(const LocalInterfaceDef&);

protected:

    LocalInterfaceDef() { }
    friend class OBProxy_CORBA::LocalInterfaceDef;

public:
};




class ValueMemberDef : virtual public OBStubImpl_CORBA::ValueMemberDef,
                       virtual public OBMarshalStubImpl_CORBA::Contained
{
    ValueMemberDef(const ValueMemberDef&);
    void operator=(const ValueMemberDef&);

protected:

    ValueMemberDef() { }
    friend class OBProxy_CORBA::ValueMemberDef;

public:




    virtual CORBA::TypeCode_ptr type();




    virtual ::CORBA::IDLType_ptr type_def();
    virtual void type_def(::CORBA::IDLType_ptr);




    virtual ::CORBA::Visibility access();
    virtual void access(::CORBA::Visibility);
};




class ValueDef : virtual public OBStubImpl_CORBA::ValueDef,
                 virtual public OBMarshalStubImpl_CORBA::Container,
                 virtual public OBMarshalStubImpl_CORBA::Contained,
                 virtual public OBMarshalStubImpl_CORBA::IDLType
{
    ValueDef(const ValueDef&);
    void operator=(const ValueDef&);

protected:

    ValueDef() { }
    friend class OBProxy_CORBA::ValueDef;

public:




    virtual ::CORBA::InterfaceDefSeq* supported_interfaces();
    virtual void supported_interfaces(const ::CORBA::InterfaceDefSeq&);




    virtual ::CORBA::InitializerSeq* initializers();
    virtual void initializers(const ::CORBA::InitializerSeq&);




    virtual ::CORBA::ValueDef_ptr base_value();
    virtual void base_value(::CORBA::ValueDef_ptr);




    virtual ::CORBA::ValueDefSeq* abstract_base_values();
    virtual void abstract_base_values(const ::CORBA::ValueDefSeq&);




    virtual CORBA::Boolean is_abstract();
    virtual void is_abstract(CORBA::Boolean);




    virtual CORBA::Boolean is_custom();
    virtual void is_custom(CORBA::Boolean);




    virtual CORBA::Boolean is_truncatable();
    virtual void is_truncatable(CORBA::Boolean);




    virtual CORBA::Boolean is_a(const char* value_id);




    virtual ::CORBA::ValueDef::FullValueDescription* describe_value();




    virtual ::CORBA::ValueMemberDef_ptr create_value_member(const char* id,
                                                            const char* name,
                                                            const char* version,
                                                            ::CORBA::IDLType_ptr type,
                                                            ::CORBA::Visibility access);




    virtual ::CORBA::AttributeDef_ptr create_attribute(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr type,
                                                       ::CORBA::AttributeMode mode);




    virtual ::CORBA::OperationDef_ptr create_operation(const char* id,
                                                       const char* name,
                                                       const char* version,
                                                       ::CORBA::IDLType_ptr result,
                                                       ::CORBA::OperationMode mode,
                                                       const ::CORBA::ParDescriptionSeq& params,
                                                       const ::CORBA::ExceptionDefSeq& exceptions,
                                                       const ::CORBA::ContextIdSeq& contexts);
};




class ValueBoxDef : virtual public OBStubImpl_CORBA::ValueBoxDef,
                    virtual public OBMarshalStubImpl_CORBA::TypedefDef
{
    ValueBoxDef(const ValueBoxDef&);
    void operator=(const ValueBoxDef&);

protected:

    ValueBoxDef() { }
    friend class OBProxy_CORBA::ValueBoxDef;

public:




    virtual ::CORBA::IDLType_ptr original_type_def();
    virtual void original_type_def(::CORBA::IDLType_ptr);
};

}




namespace OBV_CORBA
{

}




namespace CORBA
{

inline void
release(::CORBA::AbstractInterfaceDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::AbstractInterfaceDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::AbstractInterfaceDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::AbstractInterfaceDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::AbstractInterfaceDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::AbstractInterfaceDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::AbstractInterfaceDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::AbstractInterfaceDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::AbstractInterfaceDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::AbstractInterfaceDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::LocalInterfaceDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::LocalInterfaceDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::LocalInterfaceDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::LocalInterfaceDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::LocalInterfaceDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::LocalInterfaceDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::LocalInterfaceDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::LocalInterfaceDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::LocalInterfaceDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::LocalInterfaceDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::ValueMemberDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ValueMemberDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::ValueMemberDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::ValueMemberDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::ValueMemberDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::ValueMemberDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ValueMemberDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueMemberDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueMemberDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ValueMemberDef_ptr& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::ValueDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ValueDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::ValueDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::ValueDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::ValueDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::ValueDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ValueDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ValueDef_ptr& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ValueDef::FullValueDescription*);
void operator<<=(CORBA::Any&, const CORBA::ValueDef::FullValueDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ValueDef::FullValueDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueDef::FullValueDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ValueDef::FullValueDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ValueDef::FullValueDescription*& val)
{
    return any.in() >>= val;
}




void operator<<=(CORBA::Any&, CORBA::ValueDescription*);
void operator<<=(CORBA::Any&, const CORBA::ValueDescription&);
CORBA::Boolean operator>>=(const CORBA::Any&, const CORBA::ValueDescription*&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueDescription* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, const CORBA::ValueDescription& val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, const CORBA::ValueDescription*& val)
{
    return any.in() >>= val;
}




namespace CORBA
{

inline void
release(::CORBA::ValueBoxDef_ptr p)
{
    if(p)
        p -> _remove_ref();
}

inline Boolean
is_nil(::CORBA::ValueBoxDef_ptr p)
{
    return p == 0;
}

inline void
release(OBStubImpl_CORBA::ValueBoxDef_ptr p)
{
    if(p)
        p -> _OB_decRef();
}

inline Boolean
is_nil(OBStubImpl_CORBA::ValueBoxDef_ptr p)
{
    return p == 0;
}

}

void operator<<=(CORBA::Any&, CORBA::ValueBoxDef_ptr*);
void operator<<=(CORBA::Any&, CORBA::ValueBoxDef_ptr);
CORBA::Boolean operator>>=(const CORBA::Any&, CORBA::ValueBoxDef_ptr&);

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueBoxDef_ptr* val)
{
    any.inout() <<= val;
}

inline void
operator<<=(CORBA::Any_var& any, CORBA::ValueBoxDef_ptr val)
{
    any.inout() <<= val;
}

inline CORBA::Boolean
operator>>=(const CORBA::Any_var& any, CORBA::ValueBoxDef_ptr& val)
{
    return any.in() >>= val;
}
# 31 "../../include/OB/IFR.h" 2
# 1 "../../include/OB/IFR_fwd.h" 1
# 18 "../../include/OB/IFR_fwd.h"
# 1 "../../include/OB/Template.h" 1
# 19 "../../include/OB/IFR_fwd.h" 2
# 32 "../../include/OB/IFR.h" 2
# 13 "GenCPPSkelH.cpp" 2
# 1 "../../include/OB/Hashtable.h" 1
# 14 "GenCPPSkelH.cpp" 2

# 1 "Util.h" 1
# 17 "Util.h"
typedef OB::Hashtable< CORBA::RepositoryId_var, CORBA::String_var,
    OB::StringHasher> IdlStringHash;




void IdlAddEscapes(char*&, bool);
char* IdlAddEscapes(const wchar_t*, bool);
bool IdlRemoveEscapes(char*&, bool);
bool IdlRemoveEscapes(const char*, wchar_t*&, bool);






extern bool IdlCaseSensitive;
int IdlStringCompare(const char*, const char*);






bool IdlIsMarshallable(CORBA::TypeCode_ptr);
# 16 "GenCPPSkelH.cpp" 2
# 1 "GenUtil.h" 1
# 26 "GenUtil.h"
namespace OB
{
    template<class T> class list;
}




class IdlPrettyPrint
{
    std::ostream& out_;

    unsigned int _ob_num_;

protected:

    unsigned int indent_;
    unsigned int pos_;

    bool ignoreNextSep_;
    bool emitIndent_;




    virtual void nl();
    virtual void indent();

public:

    IdlPrettyPrint(std::ostream& out, unsigned int num = 4)
        : out_(out), _ob_num_(num), indent_(0), pos_(0),
          ignoreNextSep_(false), emitIndent_(true) { }
    virtual ~IdlPrettyPrint() { }




    void setIndent(unsigned int in) { indent_ = in; }
    unsigned int getIndent() const { return indent_; }




    unsigned int getPos() const { return pos_; }
    void setPos(unsigned int pos) { pos_ = pos; }




    void inc() { indent_ += _ob_num_; }
    void dec() { (static_cast<void> ((indent_ >= _ob_num_) ? 0 : (__assert_fail ("indent_ >= _ob_num_", "GenUtil.h", 77, __PRETTY_FUNCTION__), 0))); indent_ -= _ob_num_; }




    void direct(char c) { out_ << c; }
    void direct(const char* s) { out_ << s; }




    virtual void lineBreak();
    virtual void lineStart();




    virtual void start();
    virtual void end();




    virtual void sep();
    virtual void ignoreNextSep();




    virtual void printChar(char);
    virtual void printWChar(wchar_t);
    virtual void printString(const char*);
    virtual void printWString(const wchar_t*);
};




IdlPrettyPrint& operator<<(IdlPrettyPrint&, char);

IdlPrettyPrint& operator<<(IdlPrettyPrint&, wchar_t);

IdlPrettyPrint& operator<<(IdlPrettyPrint&, const char*);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, const wchar_t*);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, short);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, int);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, long);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, CORBA::LongLong);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, unsigned short);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, unsigned int);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, unsigned long);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, CORBA::ULongLong);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, float);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, double);
IdlPrettyPrint& operator<<(IdlPrettyPrint&, CORBA::LongDouble);




void IdlRemoveScope(const char*, char*&, bool = false);




CORBA::IDLType_ptr IdlGetOrigIDLType(CORBA::IDLType_ptr);




bool IdlIsVariable(CORBA::TypeCode_ptr);




bool IdlHasNative(CORBA::TypeCode_ptr);




bool IdlHasNative(const CORBA::InterfaceDef::FullInterfaceDescription&);




bool IdlHasValuetype(CORBA::TypeCode_ptr);





char* IdlGetAsciiTypeCode(CORBA::TypeCode_ptr);
void IdlOutputAsciiTypeCode(CORBA::TypeCode_ptr, IdlPrettyPrint&);




char* IdlPathToIdent(const char*);




bool IdlImplicitUnionDefault(CORBA::TypeCode_ptr);




struct IdlUnionMemberInfo
{
    CORBA::String_var name;
    CORBA::TypeCode_var type;
    CORBA::ULongLongSeq pLabels;
    CORBA::ULongLongSeq nLabels;
    CORBA::AnySeq labels;
    bool isDefault;
};
typedef OB::VarSeq< IdlUnionMemberInfo, int > IdlUnionMemberInfoSeq;
typedef OB::SeqVar< OB::VarSeq< IdlUnionMemberInfo, int > >
     IdlUnionMemberInfoSeq_var;
typedef OB::VarVar<OB::stl::list<IdlUnionMemberInfo> >
     IdlUnionMemberInfoList_var;

OB::stl::list<IdlUnionMemberInfo>* IdlGetUnionInfo(CORBA::TypeCode_ptr);




void IdlGetAllBaseInterfaces(CORBA::InterfaceDef_ptr, CORBA::InterfaceDefSeq&);




struct IdlInterfaceInfo
{
    CORBA::InterfaceDef_var intf;
    CORBA::RepositoryId_var id;
    bool is_abstract;
    bool is_local;
};
typedef OB::VarSeq< IdlInterfaceInfo, int > IdlInterfaceInfoSeq;

void IdlGetBaseInterfaces(CORBA::InterfaceDef_ptr, IdlInterfaceInfoSeq&, bool);




void IdlGetAllBaseValues(CORBA::ValueDef_ptr, CORBA::ValueDefSeq&);




void IdlGetAllTruncatableBaseValues(CORBA::ValueDef_ptr, CORBA::ValueDefSeq&);





void IdlGetAllValueMembers(CORBA::ValueDef_ptr, CORBA::ValueMemberSeq&);




struct IdlSupportedInterfaceInfo
{
    IdlInterfaceInfo interface_info;
    bool abstract_value;
    CORBA::RepositoryId_var value_id;
    CORBA::ULong inheritance_level;
};
typedef OB::VarSeq< IdlSupportedInterfaceInfo, int >
    IdlSupportedInterfaceInfoSeq;





void IdlGetAllSupportedInterfaces(CORBA::ValueDef_ptr,
                                  IdlSupportedInterfaceInfoSeq&,
                                  CORBA::ULong&);




char* IdlGetPrimarySupportedInterface(const IdlSupportedInterfaceInfoSeq&);





bool IdlCheckValueSupportsAbstractInterface(CORBA::ValueDef_ptr);




CORBA::StringSeq* IdlGetMethodNames(const CORBA::ContainedSeq&,
                                    const CORBA::ContainedSeq&);




struct IdlNameValuePair
{
    CORBA::String_var name;
    CORBA::Any value;
};
typedef OB::VarSeq< IdlNameValuePair, int > IdlNameValuePairSeq;
typedef OB::SeqVar< OB::VarSeq< IdlNameValuePair, int > >
    IdlNameValuePairSeq_var;

IdlNameValuePairSeq*
IdlGetMethodNamesAndDescriptions(const CORBA::ContainedSeq&,
                                 const CORBA::ContainedSeq&);





IdlNameValuePairSeq*
IdlGetAbstractMethods(CORBA::InterfaceDef_ptr);
# 17 "GenCPPSkelH.cpp" 2
# 1 "GenCPP.h" 1
# 17 "GenCPP.h"
class IdlPrettyPrint;

namespace OB
{
  template<class T> class list;
}




class IdlCPPGenerator
{



    static const char* header_;
    static const char* embeddedHeader_;




    const char* prog_;




    CORBA::ORB_var orb_;




    CORBA::Repository_var repository_;




    bool all_;
    const IdlStringHash& idHash_;




    const IdlStringHash& fwdHash_;




    const CORBA::StringSeq& includeSeq_;




    OB::stl::list<CORBA::String_var>& fileNameList_;




    bool noTC_;




    bool noVirtual_;




    bool noSkel_;





    bool withInterceptorArgs_;




    bool noLocalCopy_;




    bool embedded_;




    bool noDirectStubs_;





    CORBA::String_var thisHeaderDir_;





    CORBA::String_var otherHeaderDir_;





    CORBA::String_var dllImport_;




    CORBA::String_var hSuff_;
    CORBA::String_var cSuff_;




    CORBA::String_var stubSuff_;
    CORBA::String_var skelSuff_;




    typedef OB::Hashtable<CORBA::String_var,
                          CORBA::Container::DescriptionSeq*,
                          OB::StringHasher> DescriptionMap;
    DescriptionMap descriptionMap_;




    typedef OB::Hashtable<CORBA::String_var, CORBA::String_var,
        OB::StringHasher> StringMap;
    StringMap absMap_;
    StringMap uniMap_;




    void checkVersion(std::ostream&);




    void comment(const char*, IdlPrettyPrint&);




    char* fixKwd(const char*);




    enum GetType
    {
        GetTypeNormal,
        GetTypePtr,
        GetTypeRef,
        GetTypeVar,
        GetTypeStruct,
        GetTypeArray,
        GetTypeSlice,
        GetTypeForAny,
        GetTypeIn,
        GetTypeOut,
        GetTypeInOut,
        GetTypeReturn,
        GetTypeConst,
        GetTypeInNoCopy
    };

    char* getTypeStringHelper(const char*, CORBA::TypeCode_ptr,
                              GetType = GetTypeNormal, bool = false,
                              const char* = 0, const char* = 0, bool = false);






    char* getTypeString(const char*, CORBA::TypeCode_ptr,
                        GetType = GetTypeNormal, bool = false,
                        const char* = 0, const char* = 0);






    char* getScopedTypeString(const char*, CORBA::TypeCode_ptr,
                              GetType = GetTypeNormal, bool = false,
                              const char* = 0, const char* = 0);




    void getArrayType(CORBA::TypeCode_ptr, CORBA::TypeCode_ptr&,
                      CORBA::ULong&);




    bool isTypeCodeExtern(CORBA::Container_ptr);





    bool needUniqueType(CORBA::TypeCode_ptr);




    enum RW
    {
        RWReadReturn,
        RWReadOut,
        RWReadInOut,
        RWReadStructElem,
        RWReadUnionElem,
        RWWriteIn,
        RWWriteInOut,
        RWReadInNoCopy
    };

    void writeReadWrite(const char*, CORBA::TypeCode_ptr, const char*,
                        CORBA::ULong&, RW, const char*, IdlPrettyPrint&);




    void writeArrayCopy(const char*, CORBA::TypeCode_ptr, const char*,
                        const char*, const char*, const char*,
                        IdlPrettyPrint&);




    void writeArrayAlloc(const char*, CORBA::TypeCode_ptr, const char*,
                         const char*, IdlPrettyPrint&);




    void writeArrayDup(const char*, CORBA::TypeCode_ptr, const char*,
                       const char*, const char*, const char*, IdlPrettyPrint&);




    void writeArrayFree(const char*, CORBA::TypeCode_ptr, const char*,
                        const char*, IdlPrettyPrint&);




    void writeValueMemberUnmarshal(const char*, const char*, const char*,
                                   const char*, CORBA::TypeCode_ptr,
                                   CORBA::ULong&, IdlPrettyPrint&);




    void writeConstantValue(const char*, const CORBA::Any&, IdlPrettyPrint&);




    bool check(const char*);





    bool checkFwd(const char*);
# 301 "GenCPP.h"
    char* getAbsolute(CORBA::Contained_ptr, const char* = 0, bool = false);
    char* getAbsolute(const char*, const char* = 0, bool = false);




    char* getUnique(CORBA::Contained_ptr);
    char* getUnique(const char*);




    char* overwriteUnique(const char*, CORBA::TypeCode_ptr, const char*);





    enum OBParameterMode
    {
        PARAM_MARSHAL = -1
    };
    void getAddrMode(CORBA::TypeCode_ptr, CORBA::ParameterMode,
                     char*&, char*&, bool, bool);




    char* getTypeCodeConstName(CORBA::TypeCode_ptr);




    void writeTypeCodeConst(const char*, const char*, CORBA::TypeCode_ptr,
                            IdlPrettyPrint&);




    void writeParameterDesc(CORBA::TypeCode_ptr, IdlPrettyPrint&);
    void writeParameterDesc(CORBA::TypeCode_ptr, CORBA::ParameterMode,
                            CORBA::ULong, IdlPrettyPrint&,
                            bool = false, bool = false, bool = false);




    void writeConstructedInfo(CORBA::TypeCode_ptr, IdlPrettyPrint&);
    void writeConstructedInfo(CORBA::TypeCode_ptr, CORBA::ULong,
                              IdlPrettyPrint&, bool = false);




    bool isTopLevel(CORBA::Contained_ptr);




    char* getScope(CORBA::Container_ptr);
# 369 "GenCPP.h"
    CORBA::Container::DescriptionSeq* describe(CORBA::Container_ptr, char*&);
# 378 "GenCPP.h"
    char* getPrefixedName(const char*, CORBA::Contained_ptr, const char* = 0);
# 387 "GenCPP.h"
    char* getPrefixedAbsolute(const char*, const char*, const char*,
                              const char* = 0);
    char* getPrefixedAbsolute(const char*, CORBA::Contained_ptr, const char*,
                              const char* = 0);





    char* getFlattenedName(const char*);




    void printUnionLabels(const char*, const char*, CORBA::TCKind,
                          const IdlUnionMemberInfo&, bool, IdlPrettyPrint&);





    void genCPlusPlusFwdH(CORBA::Container_ptr, IdlPrettyPrint&);





    void genCPlusPlusFwdHGlobalNamespace(CORBA::Container_ptr,
                                         IdlPrettyPrint&);





    void genCPlusPlusFwdHVar(CORBA::Container_ptr, IdlPrettyPrint&);





    void genCPlusPlusFwdHStubImpl(CORBA::Container_ptr, IdlPrettyPrint&);





    void genCPlusPlusFwdHStubImplGlobalNamespace(CORBA::Container_ptr,
                                                 IdlPrettyPrint&);





    void genCPlusPlusFwdHStubImplVar(CORBA::Container_ptr, IdlPrettyPrint&);





    void genCPlusPlusFwdHMarshalStubImpl(CORBA::Container_ptr,
                                         IdlPrettyPrint&);




    void genCPlusPlusH(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusHProxy(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusHStubImpl(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusHMarshalStubImpl(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusHGlobalNamespace(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusHOBV(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusHValueMember(CORBA::Container_ptr,
                                  const CORBA::ValueMember*,
                                  const char*, bool, IdlPrettyPrint&);




    void genCPlusPlusHValueFactory(CORBA::ValueDef_ptr, IdlPrettyPrint&);




    void genCPlusPlusHValueBoxFactory(const CORBA::TypeDescription*,
                                      IdlPrettyPrint&);





    enum Virtuality
    {
        NotVirtual,
        Virtual,
        PureVirtual
    };
    void genCPlusPlusHAttribute(CORBA::Container::Description&, const char*,
                                bool, Virtuality, IdlPrettyPrint&);
    void genCPlusPlusHOperation(CORBA::Container::Description&, const char*,
                                bool, Virtuality, IdlPrettyPrint&);




    void genCPlusPlusHValueMembers(CORBA::Container_ptr,
                                   CORBA::Visibility,
                                   IdlPrettyPrint&);




    void genCPlusPlusHBasicBox(CORBA::ValueBoxDef_ptr, const char*,
                               const char*, const CORBA::TypeDescription*,
                               CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusHStructBox(CORBA::ValueBoxDef_ptr, const char*,
                                const char*, const CORBA::TypeDescription*,
                                CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusHStructBoxMember(const char*, const CORBA::StructMember&,
                                      const char*, IdlPrettyPrint&);




    void genCPlusPlusHStringBox(CORBA::ValueBoxDef_ptr, const char*,
                                const char*, const CORBA::TypeDescription*,
                                CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusHUnionBox(CORBA::ValueBoxDef_ptr, const char*,
                               const char*, const CORBA::TypeDescription*,
                               CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusHUnionBoxMember(const char*, const IdlUnionMemberInfo&,
                                     const char*, IdlPrettyPrint&);




    void genCPlusPlusHSequenceBox(CORBA::ValueBoxDef_ptr, const char*,
                                  const char*, const CORBA::TypeDescription*,
                                  CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusHAnyBox(CORBA::ValueBoxDef_ptr, const char*,
                             const char*, const CORBA::TypeDescription*,
                             CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusHFixedBox(CORBA::ValueBoxDef_ptr, const char*,
                               const char*, const CORBA::TypeDescription*,
                               CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusHArrayBox(CORBA::ValueBoxDef_ptr, const char*,
                               const char*, const CORBA::TypeDescription*,
                               CORBA::TypeCode_ptr, IdlPrettyPrint&);




    void genCPlusPlusCConstants(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusC(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusCProxy(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusCStubImpl(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusCMarshalStubImpl(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusCOBV(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusCValueMember(CORBA::Container_ptr,
                                  const CORBA::ValueMember*,
                                  const char*, IdlPrettyPrint&);




    void genCPlusPlusCValueFactory(CORBA::ValueDef_ptr, IdlPrettyPrint&);




    void genCPlusPlusCValueBoxFactory(const CORBA::TypeDescription*,
                                      IdlPrettyPrint&);




    void genCPlusPlusSkelH(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusSkelHOperation(const CORBA::OperationDescription*, bool,
                                    IdlPrettyPrint&);




    void genCPlusPlusSkelHAttribute(const CORBA::AttributeDescription*, bool,
                                    IdlPrettyPrint&);




    void genCPlusPlusSkelHDirectStubImpl(CORBA::Container_ptr,
                                         IdlPrettyPrint&);





    void genCPlusPlusSkelHDirectStubImplOperation(
        const CORBA::OperationDescription*, IdlPrettyPrint&);





    void genCPlusPlusSkelHDirectStubImplAttribute(
        const CORBA::AttributeDescription*, IdlPrettyPrint&);




    void genCPlusPlusSkelHProtected(CORBA::InterfaceDef_ptr, IdlPrettyPrint&);




    void genCPlusPlusSkelHProtectedOperation(
        const CORBA::OperationDescription*, IdlPrettyPrint&);




    void genCPlusPlusSkelHProtectedAttribute(
        const CORBA::AttributeDescription*, IdlPrettyPrint&);




    void genCPlusPlusSkelC(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusSkelCProtected(CORBA::InterfaceDef_ptr, IdlPrettyPrint&);




    void genCPlusPlusSkelCProtectedOperation(
        const char*, const CORBA::OperationDescription*, IdlPrettyPrint&);




    void genCPlusPlusSkelCProtectedAttribute(
        const char*, const CORBA::AttributeDescription*, IdlPrettyPrint&);




    void genCPlusPlusSkelCDirectStubImpl(CORBA::Container_ptr,
                                         IdlPrettyPrint&);





    void genCPlusPlusSkelCDirectStubImplOperation(
        const char*, const CORBA::OperationDescription*, IdlPrettyPrint&);





    void genCPlusPlusSkelCDirectStubImplAttribute(
        const char*, const CORBA::AttributeDescription*, IdlPrettyPrint&);




    void genCPlusPlusTieH(CORBA::Container_ptr, IdlPrettyPrint&);




    void genCPlusPlusImplH(CORBA::Container_ptr, bool, IdlPrettyPrint&);




    void genCPlusPlusImplHValueOpAtt(CORBA::ValueDef_ptr, const char*, bool,
                                     CORBA::StringSeq&, IdlPrettyPrint&);




    void genCPlusPlusImplHValueSupport(const char*, CORBA::InterfaceDef_ptr,
                                       CORBA::StringSeq&, bool,
                                       IdlPrettyPrint&);




    void genCPlusPlusImplHAttribute(const char*,
                                    const CORBA::AttributeDescription*,
                                    bool, IdlPrettyPrint&);




    void genCPlusPlusImplHOperation(const char*,
                                    const CORBA::OperationDescription*,
                                    bool, IdlPrettyPrint&);




    void genCPlusPlusImplC(CORBA::Container_ptr, bool, IdlPrettyPrint&);




    void genCPlusPlusImplCValueSupport(const char*, CORBA::InterfaceDef_ptr,
                                       CORBA::StringSeq&, bool,
                                       IdlPrettyPrint&);




    void genCPlusPlusImplCValueOpAtt(CORBA::ValueDef_ptr, const char*, bool,
                                     CORBA::StringSeq&, IdlPrettyPrint&);




    void genCPlusPlusImplCAttribute(const char*,
                                    const CORBA::AttributeDescription*,
                                    bool, IdlPrettyPrint&);




    void genCPlusPlusImplCOperation(const char*,
                                    const CORBA::OperationDescription*,
                                    bool, IdlPrettyPrint&);




    void genCPlusPlusImplCReturn(CORBA::TypeCode_ptr, const char*,
                                 IdlPrettyPrint&);

public:

    IdlCPPGenerator(const char*,
                    CORBA::ORB_ptr,
                    CORBA::Repository_ptr,
                    bool,
                    const IdlStringHash&,
                    const IdlStringHash&,
                    const CORBA::StringSeq&,
                    OB::stl::list<CORBA::String_var>&,
                    bool,
                    bool,
                    bool,
                    bool,
                    bool,
                    bool,
                    bool,
                    const char*,
                    const char*,
                    const char*,
                    const char*,
                    const char*,
                    const char*,
                    const char*);

    ~IdlCPPGenerator();




    int gen(const char*, const char*, bool);
    int genSkel(const char*, const char*);
    int genTie(const char*, const char*);
    int genImpl(const char*, const char*, bool);
};
# 18 "GenCPPSkelH.cpp" 2

using namespace CORBA;
using namespace OB;





void
IdlCPPGenerator::genCPlusPlusSkelH(Container_ptr container,
                                   IdlPrettyPrint& out)
{



    ScopedName_var scope;

    Container::DescriptionSeq* seq = describe(container, scope.out());

    ULong i, j;

    for(i = 0 ; i < seq -> length() ; i++)
    {



        Container::Description& seqElem = (*seq)[i];




        Container_var cont = Container::_narrow(seqElem.contained_object);

        switch(seqElem.kind)
        {
        case dk_Module:
        {



            const ModuleDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 60, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;

            String_var name =
                getPrefixedName("POA", seqElem.contained_object);

            comment(desc -> id, out);
            out << "\nnamespace " << name;
            out << "\n{";

            (static_cast<void> ((!is_nil(cont)) ? 0 : (__assert_fail ("!is_nil(cont)", "GenCPPSkelH.cpp", 72, __PRETTY_FUNCTION__), 0)));
            genCPlusPlusSkelH(cont, out);

            out.sep();
            out << "\n} // End of namespace " << name;

            break;
        }

        case dk_LocalInterface:
        case dk_AbstractInterface:



            break;

        case dk_Interface:
        {



            const InterfaceDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 95, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;

            InterfaceDef_var interf =
                InterfaceDef::_narrow(seqElem.contained_object);
            (static_cast<void> ((!is_nil(interf)) ? 0 : (__assert_fail ("!is_nil(interf)", "GenCPPSkelH.cpp", 102, __PRETTY_FUNCTION__), 0)));

            String_var name = getPrefixedName("POA", seqElem.contained_object);
            ScopedName_var absolute = getAbsolute(desc -> id);

            comment(desc -> id, out);

            out.sep();
            out << "\nclass " << name << " : ";

            unsigned int indent = out.getIndent();
            out.setIndent(out.getPos());

            IdlInterfaceInfoSeq baseInfo;
            IdlGetBaseInterfaces(interf, baseInfo, false);
            ULong numAbstractBases = 0;
            for(j = 0 ; j < baseInfo.length() ; j++)
                if(baseInfo[j].is_abstract)
                    numAbstractBases++;

            if(baseInfo.length() > 0)
            {
                if(numAbstractBases == baseInfo.length())
                    out << "virtual public PortableServer::ServantBase,\n";

                for(j = 0 ; j < baseInfo.length() ; j++)
                {



                    ScopedName_var baseAbsolute;
                    if(baseInfo[j].is_abstract)
                        baseAbsolute = getAbsolute(baseInfo[j].id);
                    else
                        baseAbsolute =
                            getPrefixedAbsolute("POA", baseInfo[j].id, "");

                    if(j > 0)
                        out << ",\n";





                    if(baseInfo[j].is_abstract)
                        out << "virtual protected ";
                    else
                        out << "virtual public ";

                    out << baseAbsolute;
                }
            }
            else
            {



                out << "virtual public PortableServer::ServantBase";
            }

            out.setIndent(indent);

            out.start();

            out << '\n' << name << "(const " << name << "&);";
            out << "\nvoid operator=(const " << name << "&);";

            (static_cast<void> ((!is_nil(cont)) ? 0 : (__assert_fail ("!is_nil(cont)", "GenCPPSkelH.cpp", 169, __PRETTY_FUNCTION__), 0)));
            genCPlusPlusSkelHProtected(interf, out);

            out.sep();
            out.dec();
            out << "\npublic:";
            out.inc();
            out.sep();
            out << '\n' << name << "() { }";

            out.sep();
            out << "\nvirtual CORBA::Boolean _is_a(const char*)";
            out.inc();
            out << "\nthrow(CORBA::SystemException);";
            out.dec();

            out.sep();
            out << "\nvirtual CORBA::RepositoryId _primary_interface(";
            indent = out.getIndent();
            out.setIndent(out.getPos());
            out << "const PortableServer::ObjectId&,";
            out << "\nPortableServer::POA_ptr);";
            out.setIndent(indent);

            out.sep();
            out << '\n' << absolute << "_ptr _this();";

            out.sep();
            if(!noDirectStubs_)
            {
                out << "\nvirtual OB::DirectStubImpl_ptr "
                    << "_OB_createDirectStubImpl(";
                indent = out.getIndent();
                out.setIndent(out.getPos());
                out << "PortableServer::POA_ptr,";
                out << "\nconst PortableServer::ObjectId&);";
                out.setIndent(indent);
            }
            if(embedded_)
                out << "\nvirtual void _OB_dispatch(OB::UpcallImpl*);";
            else
                out << "\nvirtual void _OB_dispatch(OB::Upcall_ptr);";

            InterfaceDef::FullInterfaceDescription_var fid =
                interf -> describe_interface();







            IdlNameValuePairSeq_var abstractMethods =
                IdlGetAbstractMethods(interf);
            for(j = 0 ; j < abstractMethods -> length() ; j++)
            {
                const AttributeDescription* atDesc;
                const OperationDescription* opDesc;
                if(abstractMethods[j].value >>= atDesc)
                    genCPlusPlusSkelHAttribute(atDesc, true, out);
                else if(abstractMethods[j].value >>= opDesc)
                    genCPlusPlusSkelHOperation(opDesc, true, out);
                else
                    (static_cast<void> ((false) ? 0 : (__assert_fail ("false", "GenCPPSkelH.cpp", 232, __PRETTY_FUNCTION__), 0)));
            }

            (static_cast<void> ((!is_nil(cont)) ? 0 : (__assert_fail ("!is_nil(cont)", "GenCPPSkelH.cpp", 235, __PRETTY_FUNCTION__), 0)));
            genCPlusPlusSkelH(cont, out);

            out.end();
            out << ';';

            break;
        }

        case dk_Value:
        {



            const ValueDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 251, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;




            if(desc -> is_abstract)
                continue;

            ValueDef_var value = ValueDef::_narrow(cont);
            (static_cast<void> ((!is_nil(value)) ? 0 : (__assert_fail ("!is_nil(value)", "GenCPPSkelH.cpp", 263, __PRETTY_FUNCTION__), 0)));




            IdlSupportedInterfaceInfoSeq info;
            ULong numRegular = 0;
            IdlGetAllSupportedInterfaces(value, info, numRegular);
            if(numRegular == 0)
                continue;

            String_var name = getPrefixedName("POA", seqElem.contained_object);
            ScopedName_var absolute = getAbsolute(value);

            comment(desc -> id, out);

            out.sep();
            out << "\nclass " << name << " : ";

            unsigned int indent = out.getIndent();
            out.setIndent(out.getPos());
# 293 "GenCPPSkelH.cpp"
            bool baseValueSupportsInterface = false;
            ULong skelCount = 0;
            for(j = 0 ; j < info.length() ; j++)
            {
                if(!info[j].interface_info.is_abstract &&
                   info[j].inheritance_level == 0)
                {
                    ScopedName_var skel =
                        getPrefixedAbsolute("POA", info[j].interface_info.id,
                                            "");
                    out << "virtual public " << skel << ",\n";
                    skelCount++;
                }
                else if(info[j].inheritance_level == 1 &&
                        !info[j].interface_info.is_abstract)
                {
                    baseValueSupportsInterface = true;
                }
            }

            if(baseValueSupportsInterface)
            {
                ScopedName_var skel =
                    getPrefixedAbsolute("POA", desc -> base_value, "");
                out << "virtual public " << skel << ",\n";
                skelCount++;
            }




            out << "virtual public " << absolute;

            out.setIndent(indent);

            out.start();

            out << '\n' << name << "(const " << name << "&);";
            out << "\nvoid operator=(const " << name << "&);";

            out.sep();
            out.dec();
            out << "\npublic:";
            out.inc();
            out.sep();
            out << '\n' << name << "() { }";






            if(skelCount > 1)
            {
                out.sep();
                out << "\nvirtual CORBA::Boolean _is_a(const char*)";
                out.inc();
                out << "\nthrow(CORBA::SystemException);";
                out.dec();

                out.sep();
                out << "\nvirtual CORBA::RepositoryId _primary_interface(";
                indent = out.getIndent();
                out.setIndent(out.getPos());
                out << "const PortableServer::ObjectId&,";
                out << "\nPortableServer::POA_ptr);";
                out.setIndent(indent);





                RepositoryId_var intfId =
                    IdlGetPrimarySupportedInterface(info);

                ScopedName_var intfAbs = getAbsolute(intfId);
                out.sep();
                out << '\n' << intfAbs << "_ptr _this();";

                out.sep();
                if(!noDirectStubs_)
                {
                    out << "\nvirtual OB::DirectStubImpl_ptr "
                        << "_OB_createDirectStubImpl(";
                    indent = out.getIndent();
                    out.setIndent(out.getPos());
                    out << "PortableServer::POA_ptr,";
                    out << "\nconst PortableServer::ObjectId&);";
                    out.setIndent(indent);
                }
                if(embedded_)
                    out << "\nvirtual void _OB_dispatch(OB::UpcallImpl*);";
                else
                    out << "\nvirtual void _OB_dispatch(OB::Upcall_ptr);";
            }





            if(numRegular != info.length())
            {
                out.sep();
                out << "\nvirtual CORBA::AbstractBase_ptr "
                    << "_OB_toAbstractBase();";
            }







            out.end();
            out << ';';

            break;
        }

        case dk_Attribute:
        {



            const AttributeDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 419, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                return;

            genCPlusPlusSkelHAttribute(desc, false, out);
            break;
        }

        case dk_Operation:
        {



            const OperationDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 435, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                return;

            genCPlusPlusSkelHOperation(desc, false, out);
            break;
        }

        default:
            break;
        }
    }
}





void
IdlCPPGenerator::genCPlusPlusSkelHOperation(const OperationDescription* desc,
                                            bool isAbstract,
                                            IdlPrettyPrint& out)
{
    ULong j;

    Identifier_var name = fixKwd(desc -> name);

    comment(desc -> id, out);

    String_var ret = getTypeString("", desc -> result, GetTypeReturn);

    out.sep();
    out << "\nvirtual " << ret << ' ' << name << "(";

    unsigned int indent = out.getIndent();
    out.setIndent(out.getPos());

    for(j = 0 ; j < desc -> parameters.length() ; j++)
    {
        GetType tt;
        switch(desc -> parameters[j].mode)
        {
        case PARAM_IN:
            tt = GetTypeIn;
            break;

        case PARAM_INOUT:
            tt = GetTypeInOut;
            break;

        case PARAM_OUT:
            tt = GetTypeOut;
            break;
        }

        String_var argName = fixKwd(desc -> parameters[j].name);

        String_var s = getTypeString("", desc -> parameters[j].type,
                                     tt, false, argName);

        if(j > 0)
            out << ",\n";

        out << s;
    }

    if(desc -> contexts.length() > 0)
    {
        if(desc -> parameters.length() > 0)
            out << ",\n";

        out << "CORBA::Context_ptr";
    }

    out << ")";

    out.setIndent(indent);

    if(isAbstract)
        out << " = 0;";
    else
    {




        out.inc();
        out << "\nthrow(";

        indent = out.getIndent();
        out.setIndent(out.getPos());

        for(j = 0 ; j < desc -> exceptions.length() ; j++)
        {
            Identifier_var exName = getAbsolute(desc -> exceptions[j].id);
            out << exName << ",\n";
        }

        out << "CORBA::SystemException) = 0;";
        out.setIndent(indent);
        out.dec();
    }
}





void
IdlCPPGenerator::genCPlusPlusSkelHAttribute(const AttributeDescription* desc,
                                            bool isAbstract,
                                            IdlPrettyPrint& out)
{
    Identifier_var name = fixKwd(desc -> name);

    comment(desc -> id, out);

    String_var ret = getTypeString("", desc -> type, GetTypeReturn);
    String_var sysEx = string_dup("CORBA::SystemException");

    out.sep();
    out << "\nvirtual " << ret << ' ' << name << "()";
    if(isAbstract)
        out << " = 0;";
    else
    {
        out.inc();
        out << "\nthrow(" << sysEx << ") = 0;";
        out.dec();
    }

    if(desc -> mode == ATTR_NORMAL)
    {
        String_var in = getTypeString("", desc -> type, GetTypeIn);
        out << "\nvirtual void " << name << '(' << in << ')';
        if(isAbstract)
            out << " = 0;";
        else
        {
            out.inc();
            out << "\nthrow(" << sysEx << ") = 0;";
            out.dec();
        }
    }
}





void
IdlCPPGenerator::genCPlusPlusSkelHDirectStubImpl(Container_ptr container,
                                                 IdlPrettyPrint& out)
{



    ScopedName_var scope;

    Container::DescriptionSeq* seq = describe(container, scope.out());

    ULong i, j;

    for(i = 0 ; i < seq -> length() ; i++)
    {



        Container::Description& seqElem = (*seq)[i];




        Container_var cont = Container::_narrow(seqElem.contained_object);

        switch(seqElem.kind)
        {
        case dk_Module:
        {



            const ModuleDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 620, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;

            String_var name =
                getPrefixedName("OBDirectStubImpl", seqElem.contained_object);

            comment(desc -> id, out);
            out << "\nnamespace " << name;
            out << "\n{";

            (static_cast<void> ((!is_nil(cont)) ? 0 : (__assert_fail ("!is_nil(cont)", "GenCPPSkelH.cpp", 632, __PRETTY_FUNCTION__), 0)));
            genCPlusPlusSkelHDirectStubImpl(cont, out);

            out.sep();
            out << "\n} // End of namespace " << name;

            break;
        }

        case dk_LocalInterface:
        case dk_AbstractInterface:



            break;

        case dk_Interface:
        {



            const InterfaceDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 655, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;

            InterfaceDef_var interf =
                InterfaceDef::_narrow(seqElem.contained_object);
            (static_cast<void> ((!is_nil(interf)) ? 0 : (__assert_fail ("!is_nil(interf)", "GenCPPSkelH.cpp", 662, __PRETTY_FUNCTION__), 0)));

            String_var name =
                getPrefixedName("OBDirectStubImpl", seqElem.contained_object);

            ScopedName_var absolute = getAbsolute(desc -> id);

            ScopedName_var poaAbsolute =
                getPrefixedAbsolute("POA", desc -> id, "");

            comment(desc -> id, out);

            out.sep();
            out << "\nclass " << name << " : ";
            unsigned int indent = out.getIndent();
            out.setIndent(out.getPos());
            out << "virtual public OBStubImpl_" << absolute;

            IdlInterfaceInfoSeq baseInfo;
            IdlGetBaseInterfaces(interf, baseInfo, false);
            ULong numAbstractBases = 0;
            for(j = 0 ; j < baseInfo.length() ; j++)
                if(baseInfo[j].is_abstract)
                    numAbstractBases++;

            if(baseInfo.length() > 0)
            {
                if(numAbstractBases == baseInfo.length())
                    out << ",\nvirtual public OB::DirectStubImpl";

                for(j = 0 ; j < baseInfo.length() ; j++)
                {
                    if(!baseInfo[j].is_abstract)
                    {



                        ScopedName_var baseAbs =
                            getPrefixedAbsolute("OBDirectStubImpl",
                                                baseInfo[j].id, "");

                        out << ",\n";
                        out << "virtual public " << baseAbs;
                    }
                }
            }
            else
            {
                out << ",\n";
                out << "virtual public OB::DirectStubImpl";
            }

            out.setIndent(indent);

            out.start();

            out << '\n' << name << "(const " << name << "&);";
            out << "\nvoid operator=(const " << name << "&);";

            out.sep();
            out.dec();
            out << "\nprotected:";
            out.inc();

            out.sep();
            out.direct("\n#ifdef HAVE_VCPLUSPLUS_BUGS");
            out.sep();
            out << '\n' << name << "() { }";
            out.sep();
            out.direct("\n#endif");

            out.sep();
            out << '\n' << name << "(";
            indent = out.getIndent();
            out.setIndent(out.getPos());
            out << "PortableServer::POA_ptr,";
            out << "\nconst PortableServer::ObjectId&,";
            out << "\nPortableServer::ServantBase*);";
            out.setIndent(indent);

            out.sep();
            out << "\nfriend class " << poaAbsolute << ';';

            out.sep();
            out.dec();
            out << "\npublic:";
            out.inc();





            IdlNameValuePairSeq_var abstractMethods =
                IdlGetAbstractMethods(interf);
            for(j = 0 ; j < abstractMethods -> length() ; j++)
            {
                const AttributeDescription* atDesc;
                const OperationDescription* opDesc;
                if(abstractMethods[j].value >>= atDesc)
                    genCPlusPlusSkelHDirectStubImplAttribute(atDesc, out);
                else if(abstractMethods[j].value >>= opDesc)
                    genCPlusPlusSkelHDirectStubImplOperation(opDesc, out);
                else
                    (static_cast<void> ((false) ? 0 : (__assert_fail ("false", "GenCPPSkelH.cpp", 765, __PRETTY_FUNCTION__), 0)));
            }

            (static_cast<void> ((!is_nil(cont)) ? 0 : (__assert_fail ("!is_nil(cont)", "GenCPPSkelH.cpp", 768, __PRETTY_FUNCTION__), 0)));
            genCPlusPlusSkelHDirectStubImpl(cont, out);

            out.end();
            out << ';';

            break;
        }

        case dk_Value:
        {



            const ValueDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 784, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;

            if(desc -> is_abstract)
                continue;

            ValueDef_var value =
                ValueDef::_narrow(seqElem.contained_object);
            (static_cast<void> ((!is_nil(value)) ? 0 : (__assert_fail ("!is_nil(value)", "GenCPPSkelH.cpp", 794, __PRETTY_FUNCTION__), 0)));




            IdlSupportedInterfaceInfoSeq info;
            ULong numRegular = 0;
            IdlGetAllSupportedInterfaces(value, info, numRegular);
            if(numRegular == 0)
                continue;




            bool baseValueSupportsInterface = false;
            ULong skelCount = 0;
            for(j = 0 ; j < info.length() ; j++)
            {
                if(!info[j].interface_info.is_abstract &&
                   info[j].inheritance_level == 0)
                {
                    skelCount++;
                }
                else if(info[j].inheritance_level == 1 &&
                        !info[j].interface_info.is_abstract)
                {
                    baseValueSupportsInterface = true;
                }
            }
            if(baseValueSupportsInterface)
                skelCount++;




            if(skelCount == 1)
                continue;

            comment(desc -> id, out);





            RepositoryId_var primaryId = IdlGetPrimarySupportedInterface(info);
            ScopedName_var primaryAbs = getAbsolute(primaryId);
            ScopedName_var directPrimary = string_dup("OBDirectStubImpl_");
            directPrimary += primaryAbs;

            String_var name =
                getPrefixedName("OBDirectStubImpl", seqElem.contained_object);

            ScopedName_var absolute = getAbsolute(desc -> id);

            ScopedName_var poaAbsolute =
                getPrefixedAbsolute("POA", desc -> id, "");

            out.sep();
            out << "\nclass " << name << " : "
                << "virtual public OBDirectStubImpl_" << primaryAbs;

            out.start();

            out << '\n' << name << "(const " << name << "&);";
            out << "\nvoid operator=(const " << name << "&);";

            out.sep();
            out.dec();
            out << "\nprotected:";
            out.inc();

            out.sep();
            out.direct("\n#ifdef HAVE_VCPLUSPLUS_BUGS");
            out.sep();
            out << '\n' << name << "() { }";
            out.sep();
            out.direct("\n#endif");

            out.sep();
            out << '\n' << name << "(";
            unsigned indent = out.getIndent();
            out.setIndent(out.getPos());
            out << "PortableServer::POA_ptr,";
            out << "\nconst PortableServer::ObjectId&,";
            out << "\nPortableServer::ServantBase*);";
            out.setIndent(indent);

            out.sep();
            out << "\nfriend class " << poaAbsolute << ';';

            out.end();
            out << ';';

            break;
        }

        case dk_Attribute:
        {



            const AttributeDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 897, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;

            genCPlusPlusSkelHDirectStubImplAttribute(desc, out);
            break;
        }

        case dk_Operation:
        {



            const OperationDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 913, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                continue;

            genCPlusPlusSkelHDirectStubImplOperation(desc, out);
            break;
        }

        default:
            break;
        }
    }
}





void
IdlCPPGenerator::genCPlusPlusSkelHDirectStubImplOperation(
    const OperationDescription* desc,
    IdlPrettyPrint& out)
{
    Identifier_var name = fixKwd(desc -> name);

    comment(desc -> id, out);

    String_var ret = getTypeString("", desc -> result, GetTypeReturn);

    out.sep();
    out << "\nvirtual " << ret << ' ' << name << "(";

    unsigned int indent = out.getIndent();
    out.setIndent(out.getPos());

    for(ULong j = 0 ; j < desc -> parameters.length() ; j++)
    {
        GetType tt;
        switch(desc -> parameters[j].mode)
        {
        case PARAM_IN:
            tt = GetTypeIn;
            break;

        case PARAM_INOUT:
            tt = GetTypeInOut;
            break;

        case PARAM_OUT:
            tt = GetTypeOut;
            break;
        }

        String_var argName = fixKwd(desc -> parameters[j].name);

        String_var s = getTypeString("", desc -> parameters[j].type,
                                     tt, false, argName);

        if(j > 0)
            out << ",\n";

        out << s;
    }

    if(desc -> contexts.length() > 0)
    {
        if(desc -> parameters.length() > 0)
            out << ",\n";

        out << "CORBA::Context_ptr";
    }

    out << ");";

    out.setIndent(indent);
}





void
IdlCPPGenerator::genCPlusPlusSkelHDirectStubImplAttribute(
    const AttributeDescription* desc,
    IdlPrettyPrint& out)
{
    Identifier_var name = fixKwd(desc -> name);

    comment(desc -> id, out);

    String_var ret = getTypeString("", desc -> type, GetTypeReturn);

    out.sep();
    out << "\nvirtual " << ret << ' ' << name << "();";

    if(desc -> mode == ATTR_NORMAL)
    {
        String_var in = getTypeString("", desc -> type, GetTypeIn);
        out << "\nvirtual void " << name << '(' << in << ");";
    }
}





void
IdlCPPGenerator::genCPlusPlusSkelHProtected(InterfaceDef_ptr intf,
                                            IdlPrettyPrint& out)
{




    IdlNameValuePairSeq_var abstractMethods = IdlGetAbstractMethods(intf);

    bool first = true;
    ULong i;




    for(i = 0 ; i < abstractMethods -> length() ; i++)
    {
        if(first)
        {
            out.sep();
            out.dec();
            out << "\nprotected:";
            out.inc();
            first = false;
        }

        const AttributeDescription* atDesc;
        const OperationDescription* opDesc;
        if(abstractMethods[i].value >>= atDesc)
            genCPlusPlusSkelHProtectedAttribute(atDesc, out);
        else if(abstractMethods[i].value >>= opDesc)
            genCPlusPlusSkelHProtectedOperation(opDesc, out);
        else
            (static_cast<void> ((false) ? 0 : (__assert_fail ("false", "GenCPPSkelH.cpp", 1054, __PRETTY_FUNCTION__), 0)));
    }




    ScopedName_var scope;

    Container::DescriptionSeq* seq = describe(intf, scope.out());

    for(i = 0 ; i < seq -> length() ; i++)
    {



        Container::Description& seqElem = (*seq)[i];

        switch(seqElem.kind)
        {
        case dk_Attribute:
        {
            if(first)
            {
                out.sep();
                out.dec();
                out << "\nprotected:";
                out.inc();
                first = false;
            }




            const AttributeDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 1089, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                return;

            genCPlusPlusSkelHProtectedAttribute(desc, out);
            break;
        }

        case dk_Operation:
        {
            if(first)
            {
                out.sep();
                out.dec();
                out << "\nprotected:";
                out.inc();
                first = false;
            }




            const OperationDescription* desc;
            Boolean b = seqElem.value >>= desc;
            (static_cast<void> ((b) ? 0 : (__assert_fail ("b", "GenCPPSkelH.cpp", 1114, __PRETTY_FUNCTION__), 0)));

            if(!check(desc -> id))
                return;

            genCPlusPlusSkelHProtectedOperation(desc, out);
            break;
        }

        default:
            break;
        }
    }
}





void
IdlCPPGenerator::genCPlusPlusSkelHProtectedOperation(
    const OperationDescription* desc,
    IdlPrettyPrint& out)
{
    Identifier_var name = fixKwd(desc -> name);

    comment(desc -> id, out);





    out.sep();
    if(embedded_)
        out << "\nvoid _OB_op_" << desc -> name << "(OB::UpcallImpl*);";
    else
        out << "\nvoid _OB_op_" << desc -> name << "(OB::Upcall_ptr);";
}





void
IdlCPPGenerator::genCPlusPlusSkelHProtectedAttribute(
    const AttributeDescription* desc,
    IdlPrettyPrint& out)
{
    Identifier_var name = fixKwd(desc -> name);

    comment(desc -> id, out);





    out.sep();
    if(embedded_)
    {
        out << "\nvoid _OB_get_" << desc -> name << "(OB::UpcallImpl*);";
        if(desc -> mode == ATTR_NORMAL)
            out << "\nvoid _OB_set_" << desc -> name << "(OB::UpcallImpl*);";
    }
    else
    {
        out << "\nvoid _OB_get_" << desc -> name << "(OB::Upcall_ptr);";
        if(desc -> mode == ATTR_NORMAL)
            out << "\nvoid _OB_set_" << desc -> name << "(OB::Upcall_ptr);";
    }
}
>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2001-07-13  5:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-07-13  5:56 c++/3676: GCC 3.1 experimental, Internal compiler error us

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).