/* msi.c generated by valac 0.44.9, the Vala compiler
 * generated from msi.vala, do not modify */

#include "wixl.h"
#include <libmsi.h>
#include <glib.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <libcommon.h>
#include <gio/gio.h>
#include <gobject/gvaluecollector.h>
#include <config.h>

enum  {
	WIXL_MSI_TABLE_0_PROPERTY,
	WIXL_MSI_TABLE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_properties[WIXL_MSI_TABLE_NUM_PROPERTIES];
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))

#define WIXL_TYPE_MSI_TABLE_FILE_HASH (wixl_msi_table_file_hash_get_type ())
#define WIXL_MSI_TABLE_FILE_HASH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_FILE_HASH, WixlMsiTableFileHash))
#define WIXL_MSI_TABLE_FILE_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_FILE_HASH, WixlMsiTableFileHashClass))
#define WIXL_IS_MSI_TABLE_FILE_HASH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_FILE_HASH))
#define WIXL_IS_MSI_TABLE_FILE_HASH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_FILE_HASH))
#define WIXL_MSI_TABLE_FILE_HASH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_FILE_HASH, WixlMsiTableFileHashClass))

typedef struct _WixlMsiTableFileHash WixlMsiTableFileHash;
typedef struct _WixlMsiTableFileHashClass WixlMsiTableFileHashClass;
typedef struct _WixlMsiTableFileHashPrivate WixlMsiTableFileHashPrivate;
enum  {
	WIXL_MSI_TABLE_FILE_HASH_0_PROPERTY,
	WIXL_MSI_TABLE_FILE_HASH_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_file_hash_properties[WIXL_MSI_TABLE_FILE_HASH_NUM_PROPERTIES];
#define _g_free0(var) (var = (g_free (var), NULL))

#define WIXL_TYPE_MSI_TABLE_ICON (wixl_msi_table_icon_get_type ())
#define WIXL_MSI_TABLE_ICON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_ICON, WixlMsiTableIcon))
#define WIXL_MSI_TABLE_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_ICON, WixlMsiTableIconClass))
#define WIXL_IS_MSI_TABLE_ICON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_ICON))
#define WIXL_IS_MSI_TABLE_ICON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_ICON))
#define WIXL_MSI_TABLE_ICON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_ICON, WixlMsiTableIconClass))

typedef struct _WixlMsiTableIcon WixlMsiTableIcon;
typedef struct _WixlMsiTableIconClass WixlMsiTableIconClass;
typedef struct _WixlMsiTableIconPrivate WixlMsiTableIconPrivate;
enum  {
	WIXL_MSI_TABLE_ICON_0_PROPERTY,
	WIXL_MSI_TABLE_ICON_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_icon_properties[WIXL_MSI_TABLE_ICON_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_BINARY (wixl_msi_table_binary_get_type ())
#define WIXL_MSI_TABLE_BINARY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_BINARY, WixlMsiTableBinary))
#define WIXL_MSI_TABLE_BINARY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_BINARY, WixlMsiTableBinaryClass))
#define WIXL_IS_MSI_TABLE_BINARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_BINARY))
#define WIXL_IS_MSI_TABLE_BINARY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_BINARY))
#define WIXL_MSI_TABLE_BINARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_BINARY, WixlMsiTableBinaryClass))

typedef struct _WixlMsiTableBinary WixlMsiTableBinary;
typedef struct _WixlMsiTableBinaryClass WixlMsiTableBinaryClass;
typedef struct _WixlMsiTableBinaryPrivate WixlMsiTableBinaryPrivate;
enum  {
	WIXL_MSI_TABLE_BINARY_0_PROPERTY,
	WIXL_MSI_TABLE_BINARY_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_binary_properties[WIXL_MSI_TABLE_BINARY_NUM_PROPERTIES];
enum  {
	WIXL_MSI_TABLE_SEQUENCE_0_PROPERTY,
	WIXL_MSI_TABLE_SEQUENCE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_sequence_properties[WIXL_MSI_TABLE_SEQUENCE_NUM_PROPERTIES];
#define _g_hash_table_unref0(var) ((var == NULL) ? NULL : (var = (g_hash_table_unref (var), NULL)))
#define _wixl_msi_table_sequence_action_unref0(var) ((var == NULL) ? NULL : (var = (wixl_msi_table_sequence_action_unref (var), NULL)))
#define _wixl_msi_default_action_info_free0(var) ((var == NULL) ? NULL : (var = (wixl_msi_default_action_info_free (var), NULL)))
typedef struct _WixlMsiTableSequenceParamSpecAction WixlMsiTableSequenceParamSpecAction;

#define WIXL_TYPE_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE (wixl_msi_table_admin_execute_sequence_get_type ())
#define WIXL_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE, WixlMsiTableAdminExecuteSequence))
#define WIXL_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE, WixlMsiTableAdminExecuteSequenceClass))
#define WIXL_IS_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE))
#define WIXL_IS_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE))
#define WIXL_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE, WixlMsiTableAdminExecuteSequenceClass))

typedef struct _WixlMsiTableAdminExecuteSequence WixlMsiTableAdminExecuteSequence;
typedef struct _WixlMsiTableAdminExecuteSequenceClass WixlMsiTableAdminExecuteSequenceClass;
typedef struct _WixlMsiTableAdminExecuteSequencePrivate WixlMsiTableAdminExecuteSequencePrivate;
enum  {
	WIXL_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE_0_PROPERTY,
	WIXL_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_admin_execute_sequence_properties[WIXL_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_ADMIN_UI_SEQUENCE (wixl_msi_table_admin_ui_sequence_get_type ())
#define WIXL_MSI_TABLE_ADMIN_UI_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_ADMIN_UI_SEQUENCE, WixlMsiTableAdminUISequence))
#define WIXL_MSI_TABLE_ADMIN_UI_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_ADMIN_UI_SEQUENCE, WixlMsiTableAdminUISequenceClass))
#define WIXL_IS_MSI_TABLE_ADMIN_UI_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_ADMIN_UI_SEQUENCE))
#define WIXL_IS_MSI_TABLE_ADMIN_UI_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_ADMIN_UI_SEQUENCE))
#define WIXL_MSI_TABLE_ADMIN_UI_SEQUENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_ADMIN_UI_SEQUENCE, WixlMsiTableAdminUISequenceClass))

typedef struct _WixlMsiTableAdminUISequence WixlMsiTableAdminUISequence;
typedef struct _WixlMsiTableAdminUISequenceClass WixlMsiTableAdminUISequenceClass;
typedef struct _WixlMsiTableAdminUISequencePrivate WixlMsiTableAdminUISequencePrivate;
enum  {
	WIXL_MSI_TABLE_ADMIN_UI_SEQUENCE_0_PROPERTY,
	WIXL_MSI_TABLE_ADMIN_UI_SEQUENCE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_admin_ui_sequence_properties[WIXL_MSI_TABLE_ADMIN_UI_SEQUENCE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_ADVT_EXECUTE_SEQUENCE (wixl_msi_table_advt_execute_sequence_get_type ())
#define WIXL_MSI_TABLE_ADVT_EXECUTE_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_ADVT_EXECUTE_SEQUENCE, WixlMsiTableAdvtExecuteSequence))
#define WIXL_MSI_TABLE_ADVT_EXECUTE_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_ADVT_EXECUTE_SEQUENCE, WixlMsiTableAdvtExecuteSequenceClass))
#define WIXL_IS_MSI_TABLE_ADVT_EXECUTE_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_ADVT_EXECUTE_SEQUENCE))
#define WIXL_IS_MSI_TABLE_ADVT_EXECUTE_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_ADVT_EXECUTE_SEQUENCE))
#define WIXL_MSI_TABLE_ADVT_EXECUTE_SEQUENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_ADVT_EXECUTE_SEQUENCE, WixlMsiTableAdvtExecuteSequenceClass))

typedef struct _WixlMsiTableAdvtExecuteSequence WixlMsiTableAdvtExecuteSequence;
typedef struct _WixlMsiTableAdvtExecuteSequenceClass WixlMsiTableAdvtExecuteSequenceClass;
typedef struct _WixlMsiTableAdvtExecuteSequencePrivate WixlMsiTableAdvtExecuteSequencePrivate;
enum  {
	WIXL_MSI_TABLE_ADVT_EXECUTE_SEQUENCE_0_PROPERTY,
	WIXL_MSI_TABLE_ADVT_EXECUTE_SEQUENCE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_advt_execute_sequence_properties[WIXL_MSI_TABLE_ADVT_EXECUTE_SEQUENCE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE (wixl_msi_table_install_execute_sequence_get_type ())
#define WIXL_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE, WixlMsiTableInstallExecuteSequence))
#define WIXL_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE, WixlMsiTableInstallExecuteSequenceClass))
#define WIXL_IS_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE))
#define WIXL_IS_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE))
#define WIXL_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE, WixlMsiTableInstallExecuteSequenceClass))

typedef struct _WixlMsiTableInstallExecuteSequence WixlMsiTableInstallExecuteSequence;
typedef struct _WixlMsiTableInstallExecuteSequenceClass WixlMsiTableInstallExecuteSequenceClass;
typedef struct _WixlMsiTableInstallExecuteSequencePrivate WixlMsiTableInstallExecuteSequencePrivate;
enum  {
	WIXL_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE_0_PROPERTY,
	WIXL_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_install_execute_sequence_properties[WIXL_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_INSTALL_UI_SEQUENCE (wixl_msi_table_install_ui_sequence_get_type ())
#define WIXL_MSI_TABLE_INSTALL_UI_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_INSTALL_UI_SEQUENCE, WixlMsiTableInstallUISequence))
#define WIXL_MSI_TABLE_INSTALL_UI_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_INSTALL_UI_SEQUENCE, WixlMsiTableInstallUISequenceClass))
#define WIXL_IS_MSI_TABLE_INSTALL_UI_SEQUENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_INSTALL_UI_SEQUENCE))
#define WIXL_IS_MSI_TABLE_INSTALL_UI_SEQUENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_INSTALL_UI_SEQUENCE))
#define WIXL_MSI_TABLE_INSTALL_UI_SEQUENCE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_INSTALL_UI_SEQUENCE, WixlMsiTableInstallUISequenceClass))

typedef struct _WixlMsiTableInstallUISequence WixlMsiTableInstallUISequence;
typedef struct _WixlMsiTableInstallUISequenceClass WixlMsiTableInstallUISequenceClass;
typedef struct _WixlMsiTableInstallUISequencePrivate WixlMsiTableInstallUISequencePrivate;
enum  {
	WIXL_MSI_TABLE_INSTALL_UI_SEQUENCE_0_PROPERTY,
	WIXL_MSI_TABLE_INSTALL_UI_SEQUENCE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_install_ui_sequence_properties[WIXL_MSI_TABLE_INSTALL_UI_SEQUENCE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_ERROR (wixl_msi_table_error_get_type ())
#define WIXL_MSI_TABLE_ERROR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_ERROR, WixlMsiTableError))
#define WIXL_MSI_TABLE_ERROR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_ERROR, WixlMsiTableErrorClass))
#define WIXL_IS_MSI_TABLE_ERROR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_ERROR))
#define WIXL_IS_MSI_TABLE_ERROR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_ERROR))
#define WIXL_MSI_TABLE_ERROR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_ERROR, WixlMsiTableErrorClass))

typedef struct _WixlMsiTableError WixlMsiTableError;
typedef struct _WixlMsiTableErrorClass WixlMsiTableErrorClass;
typedef struct _WixlMsiTableErrorPrivate WixlMsiTableErrorPrivate;
enum  {
	WIXL_MSI_TABLE_ERROR_0_PROPERTY,
	WIXL_MSI_TABLE_ERROR_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_error_properties[WIXL_MSI_TABLE_ERROR_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_FILE (wixl_msi_table_file_get_type ())
#define WIXL_MSI_TABLE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_FILE, WixlMsiTableFile))
#define WIXL_MSI_TABLE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_FILE, WixlMsiTableFileClass))
#define WIXL_IS_MSI_TABLE_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_FILE))
#define WIXL_IS_MSI_TABLE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_FILE))
#define WIXL_MSI_TABLE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_FILE, WixlMsiTableFileClass))

typedef struct _WixlMsiTableFile WixlMsiTableFile;
typedef struct _WixlMsiTableFileClass WixlMsiTableFileClass;
typedef struct _WixlMsiTableFilePrivate WixlMsiTableFilePrivate;
enum  {
	WIXL_MSI_TABLE_FILE_0_PROPERTY,
	WIXL_MSI_TABLE_FILE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_file_properties[WIXL_MSI_TABLE_FILE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_MEDIA (wixl_msi_table_media_get_type ())
#define WIXL_MSI_TABLE_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_MEDIA, WixlMsiTableMedia))
#define WIXL_MSI_TABLE_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_MEDIA, WixlMsiTableMediaClass))
#define WIXL_IS_MSI_TABLE_MEDIA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_MEDIA))
#define WIXL_IS_MSI_TABLE_MEDIA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_MEDIA))
#define WIXL_MSI_TABLE_MEDIA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_MEDIA, WixlMsiTableMediaClass))

typedef struct _WixlMsiTableMedia WixlMsiTableMedia;
typedef struct _WixlMsiTableMediaClass WixlMsiTableMediaClass;
typedef struct _WixlMsiTableMediaPrivate WixlMsiTableMediaPrivate;
enum  {
	WIXL_MSI_TABLE_MEDIA_0_PROPERTY,
	WIXL_MSI_TABLE_MEDIA_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_media_properties[WIXL_MSI_TABLE_MEDIA_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_UPGRADE (wixl_msi_table_upgrade_get_type ())
#define WIXL_MSI_TABLE_UPGRADE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_UPGRADE, WixlMsiTableUpgrade))
#define WIXL_MSI_TABLE_UPGRADE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_UPGRADE, WixlMsiTableUpgradeClass))
#define WIXL_IS_MSI_TABLE_UPGRADE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_UPGRADE))
#define WIXL_IS_MSI_TABLE_UPGRADE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_UPGRADE))
#define WIXL_MSI_TABLE_UPGRADE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_UPGRADE, WixlMsiTableUpgradeClass))

typedef struct _WixlMsiTableUpgrade WixlMsiTableUpgrade;
typedef struct _WixlMsiTableUpgradeClass WixlMsiTableUpgradeClass;
typedef struct _WixlMsiTableUpgradePrivate WixlMsiTableUpgradePrivate;
enum  {
	WIXL_MSI_TABLE_UPGRADE_0_PROPERTY,
	WIXL_MSI_TABLE_UPGRADE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_upgrade_properties[WIXL_MSI_TABLE_UPGRADE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_LAUNCH_CONDITION (wixl_msi_table_launch_condition_get_type ())
#define WIXL_MSI_TABLE_LAUNCH_CONDITION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_LAUNCH_CONDITION, WixlMsiTableLaunchCondition))
#define WIXL_MSI_TABLE_LAUNCH_CONDITION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_LAUNCH_CONDITION, WixlMsiTableLaunchConditionClass))
#define WIXL_IS_MSI_TABLE_LAUNCH_CONDITION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_LAUNCH_CONDITION))
#define WIXL_IS_MSI_TABLE_LAUNCH_CONDITION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_LAUNCH_CONDITION))
#define WIXL_MSI_TABLE_LAUNCH_CONDITION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_LAUNCH_CONDITION, WixlMsiTableLaunchConditionClass))

typedef struct _WixlMsiTableLaunchCondition WixlMsiTableLaunchCondition;
typedef struct _WixlMsiTableLaunchConditionClass WixlMsiTableLaunchConditionClass;
typedef struct _WixlMsiTableLaunchConditionPrivate WixlMsiTableLaunchConditionPrivate;
enum  {
	WIXL_MSI_TABLE_LAUNCH_CONDITION_0_PROPERTY,
	WIXL_MSI_TABLE_LAUNCH_CONDITION_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_launch_condition_properties[WIXL_MSI_TABLE_LAUNCH_CONDITION_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_PROPERTY (wixl_msi_table_property_get_type ())
#define WIXL_MSI_TABLE_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_PROPERTY, WixlMsiTableProperty))
#define WIXL_MSI_TABLE_PROPERTY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_PROPERTY, WixlMsiTablePropertyClass))
#define WIXL_IS_MSI_TABLE_PROPERTY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_PROPERTY))
#define WIXL_IS_MSI_TABLE_PROPERTY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_PROPERTY))
#define WIXL_MSI_TABLE_PROPERTY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_PROPERTY, WixlMsiTablePropertyClass))

typedef struct _WixlMsiTableProperty WixlMsiTableProperty;
typedef struct _WixlMsiTablePropertyClass WixlMsiTablePropertyClass;
typedef struct _WixlMsiTablePropertyPrivate WixlMsiTablePropertyPrivate;
enum  {
	WIXL_MSI_TABLE_PROPERTY_0_PROPERTY,
	WIXL_MSI_TABLE_PROPERTY_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_property_properties[WIXL_MSI_TABLE_PROPERTY_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_DIRECTORY (wixl_msi_table_directory_get_type ())
#define WIXL_MSI_TABLE_DIRECTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_DIRECTORY, WixlMsiTableDirectory))
#define WIXL_MSI_TABLE_DIRECTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_DIRECTORY, WixlMsiTableDirectoryClass))
#define WIXL_IS_MSI_TABLE_DIRECTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_DIRECTORY))
#define WIXL_IS_MSI_TABLE_DIRECTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_DIRECTORY))
#define WIXL_MSI_TABLE_DIRECTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_DIRECTORY, WixlMsiTableDirectoryClass))

typedef struct _WixlMsiTableDirectory WixlMsiTableDirectory;
typedef struct _WixlMsiTableDirectoryClass WixlMsiTableDirectoryClass;
typedef struct _WixlMsiTableDirectoryPrivate WixlMsiTableDirectoryPrivate;
enum  {
	WIXL_MSI_TABLE_DIRECTORY_0_PROPERTY,
	WIXL_MSI_TABLE_DIRECTORY_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_directory_properties[WIXL_MSI_TABLE_DIRECTORY_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_COMPONENT (wixl_msi_table_component_get_type ())
#define WIXL_MSI_TABLE_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_COMPONENT, WixlMsiTableComponent))
#define WIXL_MSI_TABLE_COMPONENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_COMPONENT, WixlMsiTableComponentClass))
#define WIXL_IS_MSI_TABLE_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_COMPONENT))
#define WIXL_IS_MSI_TABLE_COMPONENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_COMPONENT))
#define WIXL_MSI_TABLE_COMPONENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_COMPONENT, WixlMsiTableComponentClass))

typedef struct _WixlMsiTableComponent WixlMsiTableComponent;
typedef struct _WixlMsiTableComponentClass WixlMsiTableComponentClass;
typedef struct _WixlMsiTableComponentPrivate WixlMsiTableComponentPrivate;
enum  {
	WIXL_MSI_TABLE_COMPONENT_0_PROPERTY,
	WIXL_MSI_TABLE_COMPONENT_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_component_properties[WIXL_MSI_TABLE_COMPONENT_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_FEATURE_COMPONENTS (wixl_msi_table_feature_components_get_type ())
#define WIXL_MSI_TABLE_FEATURE_COMPONENTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_FEATURE_COMPONENTS, WixlMsiTableFeatureComponents))
#define WIXL_MSI_TABLE_FEATURE_COMPONENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_FEATURE_COMPONENTS, WixlMsiTableFeatureComponentsClass))
#define WIXL_IS_MSI_TABLE_FEATURE_COMPONENTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_FEATURE_COMPONENTS))
#define WIXL_IS_MSI_TABLE_FEATURE_COMPONENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_FEATURE_COMPONENTS))
#define WIXL_MSI_TABLE_FEATURE_COMPONENTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_FEATURE_COMPONENTS, WixlMsiTableFeatureComponentsClass))

typedef struct _WixlMsiTableFeatureComponents WixlMsiTableFeatureComponents;
typedef struct _WixlMsiTableFeatureComponentsClass WixlMsiTableFeatureComponentsClass;
typedef struct _WixlMsiTableFeatureComponentsPrivate WixlMsiTableFeatureComponentsPrivate;
enum  {
	WIXL_MSI_TABLE_FEATURE_COMPONENTS_0_PROPERTY,
	WIXL_MSI_TABLE_FEATURE_COMPONENTS_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_feature_components_properties[WIXL_MSI_TABLE_FEATURE_COMPONENTS_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_REGISTRY (wixl_msi_table_registry_get_type ())
#define WIXL_MSI_TABLE_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_REGISTRY, WixlMsiTableRegistry))
#define WIXL_MSI_TABLE_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_REGISTRY, WixlMsiTableRegistryClass))
#define WIXL_IS_MSI_TABLE_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_REGISTRY))
#define WIXL_IS_MSI_TABLE_REGISTRY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_REGISTRY))
#define WIXL_MSI_TABLE_REGISTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_REGISTRY, WixlMsiTableRegistryClass))

typedef struct _WixlMsiTableRegistry WixlMsiTableRegistry;
typedef struct _WixlMsiTableRegistryClass WixlMsiTableRegistryClass;
typedef struct _WixlMsiTableRegistryPrivate WixlMsiTableRegistryPrivate;
enum  {
	WIXL_MSI_TABLE_REGISTRY_0_PROPERTY,
	WIXL_MSI_TABLE_REGISTRY_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_registry_properties[WIXL_MSI_TABLE_REGISTRY_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_SHORTCUT (wixl_msi_table_shortcut_get_type ())
#define WIXL_MSI_TABLE_SHORTCUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_SHORTCUT, WixlMsiTableShortcut))
#define WIXL_MSI_TABLE_SHORTCUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_SHORTCUT, WixlMsiTableShortcutClass))
#define WIXL_IS_MSI_TABLE_SHORTCUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_SHORTCUT))
#define WIXL_IS_MSI_TABLE_SHORTCUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_SHORTCUT))
#define WIXL_MSI_TABLE_SHORTCUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_SHORTCUT, WixlMsiTableShortcutClass))

typedef struct _WixlMsiTableShortcut WixlMsiTableShortcut;
typedef struct _WixlMsiTableShortcutClass WixlMsiTableShortcutClass;
typedef struct _WixlMsiTableShortcutPrivate WixlMsiTableShortcutPrivate;
enum  {
	WIXL_MSI_TABLE_SHORTCUT_0_PROPERTY,
	WIXL_MSI_TABLE_SHORTCUT_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_shortcut_properties[WIXL_MSI_TABLE_SHORTCUT_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_CREATE_FOLDER (wixl_msi_table_create_folder_get_type ())
#define WIXL_MSI_TABLE_CREATE_FOLDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_CREATE_FOLDER, WixlMsiTableCreateFolder))
#define WIXL_MSI_TABLE_CREATE_FOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_CREATE_FOLDER, WixlMsiTableCreateFolderClass))
#define WIXL_IS_MSI_TABLE_CREATE_FOLDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_CREATE_FOLDER))
#define WIXL_IS_MSI_TABLE_CREATE_FOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_CREATE_FOLDER))
#define WIXL_MSI_TABLE_CREATE_FOLDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_CREATE_FOLDER, WixlMsiTableCreateFolderClass))

typedef struct _WixlMsiTableCreateFolder WixlMsiTableCreateFolder;
typedef struct _WixlMsiTableCreateFolderClass WixlMsiTableCreateFolderClass;
typedef struct _WixlMsiTableCreateFolderPrivate WixlMsiTableCreateFolderPrivate;
enum  {
	WIXL_MSI_TABLE_CREATE_FOLDER_0_PROPERTY,
	WIXL_MSI_TABLE_CREATE_FOLDER_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_create_folder_properties[WIXL_MSI_TABLE_CREATE_FOLDER_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_REMOVE_FILE (wixl_msi_table_remove_file_get_type ())
#define WIXL_MSI_TABLE_REMOVE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_REMOVE_FILE, WixlMsiTableRemoveFile))
#define WIXL_MSI_TABLE_REMOVE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_REMOVE_FILE, WixlMsiTableRemoveFileClass))
#define WIXL_IS_MSI_TABLE_REMOVE_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_REMOVE_FILE))
#define WIXL_IS_MSI_TABLE_REMOVE_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_REMOVE_FILE))
#define WIXL_MSI_TABLE_REMOVE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_REMOVE_FILE, WixlMsiTableRemoveFileClass))

typedef struct _WixlMsiTableRemoveFile WixlMsiTableRemoveFile;
typedef struct _WixlMsiTableRemoveFileClass WixlMsiTableRemoveFileClass;
typedef struct _WixlMsiTableRemoveFilePrivate WixlMsiTableRemoveFilePrivate;
enum  {
	WIXL_MSI_TABLE_REMOVE_FILE_0_PROPERTY,
	WIXL_MSI_TABLE_REMOVE_FILE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_remove_file_properties[WIXL_MSI_TABLE_REMOVE_FILE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_FEATURE (wixl_msi_table_feature_get_type ())
#define WIXL_MSI_TABLE_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_FEATURE, WixlMsiTableFeature))
#define WIXL_MSI_TABLE_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_FEATURE, WixlMsiTableFeatureClass))
#define WIXL_IS_MSI_TABLE_FEATURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_FEATURE))
#define WIXL_IS_MSI_TABLE_FEATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_FEATURE))
#define WIXL_MSI_TABLE_FEATURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_FEATURE, WixlMsiTableFeatureClass))

typedef struct _WixlMsiTableFeature WixlMsiTableFeature;
typedef struct _WixlMsiTableFeatureClass WixlMsiTableFeatureClass;
typedef struct _WixlMsiTableFeaturePrivate WixlMsiTableFeaturePrivate;
enum  {
	WIXL_MSI_TABLE_FEATURE_0_PROPERTY,
	WIXL_MSI_TABLE_FEATURE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_feature_properties[WIXL_MSI_TABLE_FEATURE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_SERVICE_CONTROL (wixl_msi_table_service_control_get_type ())
#define WIXL_MSI_TABLE_SERVICE_CONTROL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_SERVICE_CONTROL, WixlMsiTableServiceControl))
#define WIXL_MSI_TABLE_SERVICE_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_SERVICE_CONTROL, WixlMsiTableServiceControlClass))
#define WIXL_IS_MSI_TABLE_SERVICE_CONTROL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_SERVICE_CONTROL))
#define WIXL_IS_MSI_TABLE_SERVICE_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_SERVICE_CONTROL))
#define WIXL_MSI_TABLE_SERVICE_CONTROL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_SERVICE_CONTROL, WixlMsiTableServiceControlClass))

typedef struct _WixlMsiTableServiceControl WixlMsiTableServiceControl;
typedef struct _WixlMsiTableServiceControlClass WixlMsiTableServiceControlClass;
typedef struct _WixlMsiTableServiceControlPrivate WixlMsiTableServiceControlPrivate;
enum  {
	WIXL_MSI_TABLE_SERVICE_CONTROL_0_PROPERTY,
	WIXL_MSI_TABLE_SERVICE_CONTROL_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_service_control_properties[WIXL_MSI_TABLE_SERVICE_CONTROL_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_SERVICE_INSTALL (wixl_msi_table_service_install_get_type ())
#define WIXL_MSI_TABLE_SERVICE_INSTALL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_SERVICE_INSTALL, WixlMsiTableServiceInstall))
#define WIXL_MSI_TABLE_SERVICE_INSTALL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_SERVICE_INSTALL, WixlMsiTableServiceInstallClass))
#define WIXL_IS_MSI_TABLE_SERVICE_INSTALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_SERVICE_INSTALL))
#define WIXL_IS_MSI_TABLE_SERVICE_INSTALL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_SERVICE_INSTALL))
#define WIXL_MSI_TABLE_SERVICE_INSTALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_SERVICE_INSTALL, WixlMsiTableServiceInstallClass))

typedef struct _WixlMsiTableServiceInstall WixlMsiTableServiceInstall;
typedef struct _WixlMsiTableServiceInstallClass WixlMsiTableServiceInstallClass;
typedef struct _WixlMsiTableServiceInstallPrivate WixlMsiTableServiceInstallPrivate;
enum  {
	WIXL_MSI_TABLE_SERVICE_INSTALL_0_PROPERTY,
	WIXL_MSI_TABLE_SERVICE_INSTALL_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_service_install_properties[WIXL_MSI_TABLE_SERVICE_INSTALL_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_SIGNATURE (wixl_msi_table_signature_get_type ())
#define WIXL_MSI_TABLE_SIGNATURE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_SIGNATURE, WixlMsiTableSignature))
#define WIXL_MSI_TABLE_SIGNATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_SIGNATURE, WixlMsiTableSignatureClass))
#define WIXL_IS_MSI_TABLE_SIGNATURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_SIGNATURE))
#define WIXL_IS_MSI_TABLE_SIGNATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_SIGNATURE))
#define WIXL_MSI_TABLE_SIGNATURE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_SIGNATURE, WixlMsiTableSignatureClass))

typedef struct _WixlMsiTableSignature WixlMsiTableSignature;
typedef struct _WixlMsiTableSignatureClass WixlMsiTableSignatureClass;
typedef struct _WixlMsiTableSignaturePrivate WixlMsiTableSignaturePrivate;
enum  {
	WIXL_MSI_TABLE_SIGNATURE_0_PROPERTY,
	WIXL_MSI_TABLE_SIGNATURE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_signature_properties[WIXL_MSI_TABLE_SIGNATURE_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_APP_SEARCH (wixl_msi_table_app_search_get_type ())
#define WIXL_MSI_TABLE_APP_SEARCH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_APP_SEARCH, WixlMsiTableAppSearch))
#define WIXL_MSI_TABLE_APP_SEARCH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_APP_SEARCH, WixlMsiTableAppSearchClass))
#define WIXL_IS_MSI_TABLE_APP_SEARCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_APP_SEARCH))
#define WIXL_IS_MSI_TABLE_APP_SEARCH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_APP_SEARCH))
#define WIXL_MSI_TABLE_APP_SEARCH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_APP_SEARCH, WixlMsiTableAppSearchClass))

typedef struct _WixlMsiTableAppSearch WixlMsiTableAppSearch;
typedef struct _WixlMsiTableAppSearchClass WixlMsiTableAppSearchClass;
typedef struct _WixlMsiTableAppSearchPrivate WixlMsiTableAppSearchPrivate;
enum  {
	WIXL_MSI_TABLE_APP_SEARCH_0_PROPERTY,
	WIXL_MSI_TABLE_APP_SEARCH_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_app_search_properties[WIXL_MSI_TABLE_APP_SEARCH_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_CUSTOM_ACTION (wixl_msi_table_custom_action_get_type ())
#define WIXL_MSI_TABLE_CUSTOM_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_CUSTOM_ACTION, WixlMsiTableCustomAction))
#define WIXL_MSI_TABLE_CUSTOM_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_CUSTOM_ACTION, WixlMsiTableCustomActionClass))
#define WIXL_IS_MSI_TABLE_CUSTOM_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_CUSTOM_ACTION))
#define WIXL_IS_MSI_TABLE_CUSTOM_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_CUSTOM_ACTION))
#define WIXL_MSI_TABLE_CUSTOM_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_CUSTOM_ACTION, WixlMsiTableCustomActionClass))

typedef struct _WixlMsiTableCustomAction WixlMsiTableCustomAction;
typedef struct _WixlMsiTableCustomActionClass WixlMsiTableCustomActionClass;
typedef struct _WixlMsiTableCustomActionPrivate WixlMsiTableCustomActionPrivate;
enum  {
	WIXL_MSI_TABLE_CUSTOM_ACTION_0_PROPERTY,
	WIXL_MSI_TABLE_CUSTOM_ACTION_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_custom_action_properties[WIXL_MSI_TABLE_CUSTOM_ACTION_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_REG_LOCATOR (wixl_msi_table_reg_locator_get_type ())
#define WIXL_MSI_TABLE_REG_LOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_REG_LOCATOR, WixlMsiTableRegLocator))
#define WIXL_MSI_TABLE_REG_LOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_REG_LOCATOR, WixlMsiTableRegLocatorClass))
#define WIXL_IS_MSI_TABLE_REG_LOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_REG_LOCATOR))
#define WIXL_IS_MSI_TABLE_REG_LOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_REG_LOCATOR))
#define WIXL_MSI_TABLE_REG_LOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_REG_LOCATOR, WixlMsiTableRegLocatorClass))

typedef struct _WixlMsiTableRegLocator WixlMsiTableRegLocator;
typedef struct _WixlMsiTableRegLocatorClass WixlMsiTableRegLocatorClass;
typedef struct _WixlMsiTableRegLocatorPrivate WixlMsiTableRegLocatorPrivate;
enum  {
	WIXL_MSI_TABLE_REG_LOCATOR_0_PROPERTY,
	WIXL_MSI_TABLE_REG_LOCATOR_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_reg_locator_properties[WIXL_MSI_TABLE_REG_LOCATOR_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_VALIDATION (wixl_msi_table_validation_get_type ())
#define WIXL_MSI_TABLE_VALIDATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_VALIDATION, WixlMsiTableValidation))
#define WIXL_MSI_TABLE_VALIDATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_VALIDATION, WixlMsiTableValidationClass))
#define WIXL_IS_MSI_TABLE_VALIDATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_VALIDATION))
#define WIXL_IS_MSI_TABLE_VALIDATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_VALIDATION))
#define WIXL_MSI_TABLE_VALIDATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_VALIDATION, WixlMsiTableValidationClass))

typedef struct _WixlMsiTableValidation WixlMsiTableValidation;
typedef struct _WixlMsiTableValidationClass WixlMsiTableValidationClass;
typedef struct _WixlMsiTableValidationPrivate WixlMsiTableValidationPrivate;
enum  {
	WIXL_MSI_TABLE_VALIDATION_0_PROPERTY,
	WIXL_MSI_TABLE_VALIDATION_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_validation_properties[WIXL_MSI_TABLE_VALIDATION_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_TABLE_STREAMS (wixl_msi_table_streams_get_type ())
#define WIXL_MSI_TABLE_STREAMS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_TABLE_STREAMS, WixlMsiTableStreams))
#define WIXL_MSI_TABLE_STREAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_TABLE_STREAMS, WixlMsiTableStreamsClass))
#define WIXL_IS_MSI_TABLE_STREAMS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_TABLE_STREAMS))
#define WIXL_IS_MSI_TABLE_STREAMS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_TABLE_STREAMS))
#define WIXL_MSI_TABLE_STREAMS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_TABLE_STREAMS, WixlMsiTableStreamsClass))

typedef struct _WixlMsiTableStreams WixlMsiTableStreams;
typedef struct _WixlMsiTableStreamsClass WixlMsiTableStreamsClass;
typedef struct _WixlMsiTableStreamsPrivate WixlMsiTableStreamsPrivate;
enum  {
	WIXL_MSI_TABLE_STREAMS_0_PROPERTY,
	WIXL_MSI_TABLE_STREAMS_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_table_streams_properties[WIXL_MSI_TABLE_STREAMS_NUM_PROPERTIES];

#define WIXL_TYPE_MSI_SUMMARY_INFO (wixl_msi_summary_info_get_type ())
#define WIXL_MSI_SUMMARY_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_SUMMARY_INFO, WixlMsiSummaryInfo))
#define WIXL_MSI_SUMMARY_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_SUMMARY_INFO, WixlMsiSummaryInfoClass))
#define WIXL_IS_MSI_SUMMARY_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_SUMMARY_INFO))
#define WIXL_IS_MSI_SUMMARY_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_SUMMARY_INFO))
#define WIXL_MSI_SUMMARY_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_SUMMARY_INFO, WixlMsiSummaryInfoClass))

typedef struct _WixlMsiSummaryInfo WixlMsiSummaryInfo;
typedef struct _WixlMsiSummaryInfoClass WixlMsiSummaryInfoClass;
typedef struct _WixlMsiSummaryInfoPrivate WixlMsiSummaryInfoPrivate;
enum  {
	WIXL_MSI_SUMMARY_INFO_0_PROPERTY,
	WIXL_MSI_SUMMARY_INFO_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_summary_info_properties[WIXL_MSI_SUMMARY_INFO_NUM_PROPERTIES];
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))

#define WIXL_TYPE_MSI_DATABASE (wixl_msi_database_get_type ())
#define WIXL_MSI_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), WIXL_TYPE_MSI_DATABASE, WixlMsiDatabase))
#define WIXL_MSI_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), WIXL_TYPE_MSI_DATABASE, WixlMsiDatabaseClass))
#define WIXL_IS_MSI_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WIXL_TYPE_MSI_DATABASE))
#define WIXL_IS_MSI_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WIXL_TYPE_MSI_DATABASE))
#define WIXL_MSI_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), WIXL_TYPE_MSI_DATABASE, WixlMsiDatabaseClass))

typedef struct _WixlMsiDatabase WixlMsiDatabase;
typedef struct _WixlMsiDatabaseClass WixlMsiDatabaseClass;
typedef struct _WixlMsiDatabasePrivate WixlMsiDatabasePrivate;
typedef enum  {
	WIXL_ARCH_X86 = 0,
	WIXL_ARCH_INTEL = 0,
	WIXL_ARCH_IA64 = 1,
	WIXL_ARCH_INTEL64 = 1,
	WIXL_ARCH_X64
} WixlArch;

#define WIXL_TYPE_ARCH (wixl_arch_get_type ())
enum  {
	WIXL_MSI_DATABASE_0_PROPERTY,
	WIXL_MSI_DATABASE_ARCH_PROPERTY,
	WIXL_MSI_DATABASE_NUM_PROPERTIES
};
static GParamSpec* wixl_msi_database_properties[WIXL_MSI_DATABASE_NUM_PROPERTIES];

struct _WixlMsiTableFileHash {
	WixlMsiTable parent_instance;
	WixlMsiTableFileHashPrivate * priv;
};

struct _WixlMsiTableFileHashClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableIcon {
	WixlMsiTable parent_instance;
	WixlMsiTableIconPrivate * priv;
};

struct _WixlMsiTableIconClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableBinary {
	WixlMsiTable parent_instance;
	WixlMsiTableBinaryPrivate * priv;
};

struct _WixlMsiTableBinaryClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableSequencePrivate {
	GHashTable* actions;
};

struct _WixlMsiTableSequenceParamSpecAction {
	GParamSpec parent_instance;
};

struct _WixlMsiTableAdminExecuteSequence {
	WixlMsiTableSequence parent_instance;
	WixlMsiTableAdminExecuteSequencePrivate * priv;
};

struct _WixlMsiTableAdminExecuteSequenceClass {
	WixlMsiTableSequenceClass parent_class;
};

struct _WixlMsiTableAdminUISequence {
	WixlMsiTableSequence parent_instance;
	WixlMsiTableAdminUISequencePrivate * priv;
};

struct _WixlMsiTableAdminUISequenceClass {
	WixlMsiTableSequenceClass parent_class;
};

struct _WixlMsiTableAdvtExecuteSequence {
	WixlMsiTableSequence parent_instance;
	WixlMsiTableAdvtExecuteSequencePrivate * priv;
};

struct _WixlMsiTableAdvtExecuteSequenceClass {
	WixlMsiTableSequenceClass parent_class;
};

struct _WixlMsiTableInstallExecuteSequence {
	WixlMsiTableSequence parent_instance;
	WixlMsiTableInstallExecuteSequencePrivate * priv;
};

struct _WixlMsiTableInstallExecuteSequenceClass {
	WixlMsiTableSequenceClass parent_class;
};

struct _WixlMsiTableInstallUISequence {
	WixlMsiTableSequence parent_instance;
	WixlMsiTableInstallUISequencePrivate * priv;
};

struct _WixlMsiTableInstallUISequenceClass {
	WixlMsiTableSequenceClass parent_class;
};

struct _WixlMsiTableError {
	WixlMsiTable parent_instance;
	WixlMsiTableErrorPrivate * priv;
};

struct _WixlMsiTableErrorClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableFile {
	WixlMsiTable parent_instance;
	WixlMsiTableFilePrivate * priv;
};

struct _WixlMsiTableFileClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableMedia {
	WixlMsiTable parent_instance;
	WixlMsiTableMediaPrivate * priv;
};

struct _WixlMsiTableMediaClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableUpgrade {
	WixlMsiTable parent_instance;
	WixlMsiTableUpgradePrivate * priv;
};

struct _WixlMsiTableUpgradeClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableLaunchCondition {
	WixlMsiTable parent_instance;
	WixlMsiTableLaunchConditionPrivate * priv;
};

struct _WixlMsiTableLaunchConditionClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableProperty {
	WixlMsiTable parent_instance;
	WixlMsiTablePropertyPrivate * priv;
};

struct _WixlMsiTablePropertyClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableDirectory {
	WixlMsiTable parent_instance;
	WixlMsiTableDirectoryPrivate * priv;
};

struct _WixlMsiTableDirectoryClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableComponent {
	WixlMsiTable parent_instance;
	WixlMsiTableComponentPrivate * priv;
};

struct _WixlMsiTableComponentClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableFeatureComponents {
	WixlMsiTable parent_instance;
	WixlMsiTableFeatureComponentsPrivate * priv;
};

struct _WixlMsiTableFeatureComponentsClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableRegistry {
	WixlMsiTable parent_instance;
	WixlMsiTableRegistryPrivate * priv;
};

struct _WixlMsiTableRegistryClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableShortcut {
	WixlMsiTable parent_instance;
	WixlMsiTableShortcutPrivate * priv;
};

struct _WixlMsiTableShortcutClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableCreateFolder {
	WixlMsiTable parent_instance;
	WixlMsiTableCreateFolderPrivate * priv;
};

struct _WixlMsiTableCreateFolderClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableRemoveFile {
	WixlMsiTable parent_instance;
	WixlMsiTableRemoveFilePrivate * priv;
};

struct _WixlMsiTableRemoveFileClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableFeature {
	WixlMsiTable parent_instance;
	WixlMsiTableFeaturePrivate * priv;
};

struct _WixlMsiTableFeatureClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableServiceControl {
	WixlMsiTable parent_instance;
	WixlMsiTableServiceControlPrivate * priv;
};

struct _WixlMsiTableServiceControlClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableServiceInstall {
	WixlMsiTable parent_instance;
	WixlMsiTableServiceInstallPrivate * priv;
};

struct _WixlMsiTableServiceInstallClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableSignature {
	WixlMsiTable parent_instance;
	WixlMsiTableSignaturePrivate * priv;
};

struct _WixlMsiTableSignatureClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableAppSearch {
	WixlMsiTable parent_instance;
	WixlMsiTableAppSearchPrivate * priv;
};

struct _WixlMsiTableAppSearchClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableCustomAction {
	WixlMsiTable parent_instance;
	WixlMsiTableCustomActionPrivate * priv;
};

struct _WixlMsiTableCustomActionClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableRegLocator {
	WixlMsiTable parent_instance;
	WixlMsiTableRegLocatorPrivate * priv;
};

struct _WixlMsiTableRegLocatorClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableValidation {
	WixlMsiTable parent_instance;
	WixlMsiTableValidationPrivate * priv;
};

struct _WixlMsiTableValidationClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiTableStreams {
	WixlMsiTable parent_instance;
	WixlMsiTableStreamsPrivate * priv;
};

struct _WixlMsiTableStreamsClass {
	WixlMsiTableClass parent_class;
};

struct _WixlMsiSummaryInfo {
	GObject parent_instance;
	WixlMsiSummaryInfoPrivate * priv;
	LibmsiSummaryInfo* properties;
};

struct _WixlMsiSummaryInfoClass {
	GObjectClass parent_class;
};

struct _WixlMsiDatabase {
	GObject parent_instance;
	WixlMsiDatabasePrivate * priv;
	WixlMsiSummaryInfo* info;
	WixlMsiTableProperty* table_property;
	WixlMsiTableIcon* table_icon;
	WixlMsiTableBinary* table_binary;
	WixlMsiTableMedia* table_media;
	WixlMsiTableDirectory* table_directory;
	WixlMsiTableComponent* table_component;
	WixlMsiTableFeature* table_feature;
	WixlMsiTableFeatureComponents* table_feature_components;
	WixlMsiTableRemoveFile* table_remove_file;
	WixlMsiTableRegistry* table_registry;
	WixlMsiTableServiceControl* table_service_control;
	WixlMsiTableServiceInstall* table_service_install;
	WixlMsiTableFile* table_file;
	WixlMsiTableAdminExecuteSequence* table_admin_execute_sequence;
	WixlMsiTableAdminUISequence* table_admin_ui_sequence;
	WixlMsiTableAdvtExecuteSequence* table_advt_execute_sequence;
	WixlMsiTableInstallExecuteSequence* table_install_execute_sequence;
	WixlMsiTableInstallUISequence* table_install_ui_sequence;
	WixlMsiTableStreams* table_streams;
	WixlMsiTableShortcut* table_shortcut;
	WixlMsiTableUpgrade* table_upgrade;
	WixlMsiTableLaunchCondition* table_launch_condition;
	WixlMsiTableAppSearch* table_app_search;
	WixlMsiTableCustomAction* table_custom_action;
	WixlMsiTableRegLocator* table_reg_locator;
	WixlMsiTableCreateFolder* table_create_folder;
	WixlMsiTableSignature* table_signature;
	WixlMsiTableFileHash* table_file_hash;
	GHashTable* tables;
};

struct _WixlMsiDatabaseClass {
	GObjectClass parent_class;
};

struct _WixlMsiDatabasePrivate {
	WixlArch _arch;
};

static gpointer wixl_msi_table_parent_class = NULL;
static gpointer wixl_msi_table_file_hash_parent_class = NULL;
static gpointer wixl_msi_table_icon_parent_class = NULL;
static gpointer wixl_msi_table_binary_parent_class = NULL;
static gint WixlMsiTableSequence_private_offset;
static gpointer wixl_msi_table_sequence_parent_class = NULL;
static gpointer wixl_msi_table_sequence_action_parent_class = NULL;
static gpointer wixl_msi_table_admin_execute_sequence_parent_class = NULL;
static gpointer wixl_msi_table_admin_ui_sequence_parent_class = NULL;
static gpointer wixl_msi_table_advt_execute_sequence_parent_class = NULL;
static gpointer wixl_msi_table_install_execute_sequence_parent_class = NULL;
static gpointer wixl_msi_table_install_ui_sequence_parent_class = NULL;
static gpointer wixl_msi_table_error_parent_class = NULL;
static gpointer wixl_msi_table_file_parent_class = NULL;
static gpointer wixl_msi_table_media_parent_class = NULL;
static gpointer wixl_msi_table_upgrade_parent_class = NULL;
static gpointer wixl_msi_table_launch_condition_parent_class = NULL;
static gpointer wixl_msi_table_property_parent_class = NULL;
static gpointer wixl_msi_table_directory_parent_class = NULL;
static gpointer wixl_msi_table_component_parent_class = NULL;
static gpointer wixl_msi_table_feature_components_parent_class = NULL;
static gpointer wixl_msi_table_registry_parent_class = NULL;
static gpointer wixl_msi_table_shortcut_parent_class = NULL;
static gpointer wixl_msi_table_create_folder_parent_class = NULL;
static gpointer wixl_msi_table_remove_file_parent_class = NULL;
static gpointer wixl_msi_table_feature_parent_class = NULL;
static gpointer wixl_msi_table_service_control_parent_class = NULL;
static gpointer wixl_msi_table_service_install_parent_class = NULL;
static gpointer wixl_msi_table_signature_parent_class = NULL;
static gpointer wixl_msi_table_app_search_parent_class = NULL;
static gpointer wixl_msi_table_custom_action_parent_class = NULL;
static gpointer wixl_msi_table_reg_locator_parent_class = NULL;
static gpointer wixl_msi_table_validation_parent_class = NULL;
static gpointer wixl_msi_table_streams_parent_class = NULL;
static gpointer wixl_msi_summary_info_parent_class = NULL;
static gint WixlMsiDatabase_private_offset;
static gpointer wixl_msi_database_parent_class = NULL;

static void _g_object_unref0_ (gpointer var);
static inline void _g_list_free__g_object_unref0_ (GList* self);
static void wixl_msi_table_real_create (WixlMsiTable* self,
                                 LibmsiDatabase* db,
                                 GError** error);
static void wixl_msi_table_finalize (GObject * obj);
GType wixl_msi_table_file_hash_get_type (void) G_GNUC_CONST;
void wixl_msi_table_file_hash_add (WixlMsiTableFileHash* self,
                                   const gchar* file,
                                   gint hash1,
                                   gint hash2,
                                   gint hash3,
                                   gint hash4,
                                   gint* options,
                                   GError** error);
void wixl_msi_table_file_hash_add_with_file (WixlMsiTableFileHash* self,
                                             const gchar* FileId,
                                             GFile* file,
                                             GError** error);
WixlMsiTableFileHash* wixl_msi_table_file_hash_new (void);
WixlMsiTableFileHash* wixl_msi_table_file_hash_construct (GType object_type);
GType wixl_msi_table_icon_get_type (void) G_GNUC_CONST;
void wixl_msi_table_icon_add (WixlMsiTableIcon* self,
                              const gchar* id,
                              const gchar* filename,
                              GError** error);
WixlMsiTableIcon* wixl_msi_table_icon_new (void);
WixlMsiTableIcon* wixl_msi_table_icon_construct (GType object_type);
GType wixl_msi_table_binary_get_type (void) G_GNUC_CONST;
void wixl_msi_table_binary_add (WixlMsiTableBinary* self,
                                const gchar* id,
                                const gchar* filename,
                                GError** error);
WixlMsiTableBinary* wixl_msi_table_binary_new (void);
WixlMsiTableBinary* wixl_msi_table_binary_construct (GType object_type);
static void _g_free0_ (gpointer var);
static void _wixl_msi_table_sequence_action_unref0_ (gpointer var);
static void wixl_msi_table_sequence_add (WixlMsiTableSequence* self,
                                  const gchar* action,
                                  const gchar* condition,
                                  gint sequence,
                                  GError** error);
static void wixl_msi_table_sequence_sort_topological_visit (WixlMsiTableSequence* self,
                                                     WixlMsiTableSequenceAction* action,
                                                     GList* * sorted);
static GList* wixl_msi_table_sequence_sort_topological (WixlMsiTableSequence* self);
static inline void _g_list_free__wixl_msi_table_sequence_action_unref0_ (GList* self);
static void wixl_msi_table_sequence_add_implicit_deps (WixlMsiTableSequence* self);
static gint __lambda4_ (WixlMsiTableSequenceAction* a,
                 WixlMsiTableSequenceAction* b);
static gint ___lambda4__gcompare_func (gconstpointer a,
                                gconstpointer b);
static void wixl_msi_table_sequence_action_finalize (WixlMsiTableSequenceAction * obj);
static void wixl_msi_table_sequence_finalize (GObject * obj);
GType wixl_msi_table_admin_execute_sequence_get_type (void) G_GNUC_CONST;
WixlMsiTableAdminExecuteSequence* wixl_msi_table_admin_execute_sequence_new (void);
WixlMsiTableAdminExecuteSequence* wixl_msi_table_admin_execute_sequence_construct (GType object_type);
GType wixl_msi_table_admin_ui_sequence_get_type (void) G_GNUC_CONST;
WixlMsiTableAdminUISequence* wixl_msi_table_admin_ui_sequence_new (void);
WixlMsiTableAdminUISequence* wixl_msi_table_admin_ui_sequence_construct (GType object_type);
GType wixl_msi_table_advt_execute_sequence_get_type (void) G_GNUC_CONST;
WixlMsiTableAdvtExecuteSequence* wixl_msi_table_advt_execute_sequence_new (void);
WixlMsiTableAdvtExecuteSequence* wixl_msi_table_advt_execute_sequence_construct (GType object_type);
GType wixl_msi_table_install_execute_sequence_get_type (void) G_GNUC_CONST;
WixlMsiTableInstallExecuteSequence* wixl_msi_table_install_execute_sequence_new (void);
WixlMsiTableInstallExecuteSequence* wixl_msi_table_install_execute_sequence_construct (GType object_type);
GType wixl_msi_table_install_ui_sequence_get_type (void) G_GNUC_CONST;
WixlMsiTableInstallUISequence* wixl_msi_table_install_ui_sequence_new (void);
WixlMsiTableInstallUISequence* wixl_msi_table_install_ui_sequence_construct (GType object_type);
GType wixl_msi_table_error_get_type (void) G_GNUC_CONST;
WixlMsiTableError* wixl_msi_table_error_new (void);
WixlMsiTableError* wixl_msi_table_error_construct (GType object_type);
GType wixl_msi_table_file_get_type (void) G_GNUC_CONST;
LibmsiRecord* wixl_msi_table_file_add (WixlMsiTableFile* self,
                                       const gchar* File,
                                       const gchar* Component,
                                       const gchar* FileName,
                                       gint FileSize,
                                       gint Attributes,
                                       gint Sequence,
                                       GError** error);
gboolean wixl_msi_table_file_set_sequence (LibmsiRecord* rec,
                                           gint Sequence);
WixlMsiTableFile* wixl_msi_table_file_new (void);
WixlMsiTableFile* wixl_msi_table_file_construct (GType object_type);
GType wixl_msi_table_media_get_type (void) G_GNUC_CONST;
gboolean wixl_msi_table_media_set_last_sequence (WixlMsiTableMedia* self,
                                                 LibmsiRecord* rec,
                                                 gint last_sequence);
LibmsiRecord* wixl_msi_table_media_add (WixlMsiTableMedia* self,
                                        const gchar* DiskId,
                                        const gchar* DiskPrompt,
                                        const gchar* Cabinet,
                                        GError** error);
WixlMsiTableMedia* wixl_msi_table_media_new (void);
WixlMsiTableMedia* wixl_msi_table_media_construct (GType object_type);
GType wixl_msi_table_upgrade_get_type (void) G_GNUC_CONST;
void wixl_msi_table_upgrade_add (WixlMsiTableUpgrade* self,
                                 const gchar* UpgradeCode,
                                 const gchar* VersionMin,
                                 const gchar* VersionMax,
                                 gint Attributes,
                                 const gchar* ActionProperty,
                                 GError** error);
WixlMsiTableUpgrade* wixl_msi_table_upgrade_new (void);
WixlMsiTableUpgrade* wixl_msi_table_upgrade_construct (GType object_type);
GType wixl_msi_table_launch_condition_get_type (void) G_GNUC_CONST;
void wixl_msi_table_launch_condition_add (WixlMsiTableLaunchCondition* self,
                                          const gchar* condition,
                                          const gchar* description,
                                          GError** error);
WixlMsiTableLaunchCondition* wixl_msi_table_launch_condition_new (void);
WixlMsiTableLaunchCondition* wixl_msi_table_launch_condition_construct (GType object_type);
GType wixl_msi_table_property_get_type (void) G_GNUC_CONST;
void wixl_msi_table_property_add (WixlMsiTableProperty* self,
                                  const gchar* prop,
                                  const gchar* value,
                                  GError** error);
WixlMsiTableProperty* wixl_msi_table_property_new (void);
WixlMsiTableProperty* wixl_msi_table_property_construct (GType object_type);
GType wixl_msi_table_directory_get_type (void) G_GNUC_CONST;
void wixl_msi_table_directory_add (WixlMsiTableDirectory* self,
                                   const gchar* Directory,
                                   const gchar* Parent,
                                   const gchar* DefaultDir,
                                   GError** error);
WixlMsiTableDirectory* wixl_msi_table_directory_new (void);
WixlMsiTableDirectory* wixl_msi_table_directory_construct (GType object_type);
GType wixl_msi_table_component_get_type (void) G_GNUC_CONST;
void wixl_msi_table_component_add (WixlMsiTableComponent* self,
                                   const gchar* Component,
                                   const gchar* ComponentId,
                                   const gchar* Directory,
                                   gint Attributes,
                                   const gchar* KeyPath,
                                   GError** error);
WixlMsiTableComponent* wixl_msi_table_component_new (void);
WixlMsiTableComponent* wixl_msi_table_component_construct (GType object_type);
GType wixl_msi_table_feature_components_get_type (void) G_GNUC_CONST;
void wixl_msi_table_feature_components_add (WixlMsiTableFeatureComponents* self,
                                            const gchar* Feature,
                                            const gchar* Component,
                                            GError** error);
WixlMsiTableFeatureComponents* wixl_msi_table_feature_components_new (void);
WixlMsiTableFeatureComponents* wixl_msi_table_feature_components_construct (GType object_type);
GType wixl_msi_table_registry_get_type (void) G_GNUC_CONST;
void wixl_msi_table_registry_add (WixlMsiTableRegistry* self,
                                  const gchar* Registry,
                                  gint Root,
                                  const gchar* Key,
                                  const gchar* Component,
                                  const gchar* Name,
                                  const gchar* Value,
                                  GError** error);
WixlMsiTableRegistry* wixl_msi_table_registry_new (void);
WixlMsiTableRegistry* wixl_msi_table_registry_construct (GType object_type);
GType wixl_msi_table_shortcut_get_type (void) G_GNUC_CONST;
LibmsiRecord* wixl_msi_table_shortcut_add (WixlMsiTableShortcut* self,
                                           const gchar* Shortcut,
                                           const gchar* Directory,
                                           const gchar* Name,
                                           const gchar* Component,
                                           GError** error);
void wixl_msi_table_shortcut_set_target (LibmsiRecord* rec,
                                         const gchar* Target,
                                         GError** error);
void wixl_msi_table_shortcut_set_icon (LibmsiRecord* rec,
                                       const gchar* Icon,
                                       GError** error);
void wixl_msi_table_shortcut_set_icon_index (LibmsiRecord* rec,
                                             gint IconIndex,
                                             GError** error);
void wixl_msi_table_shortcut_set_working_dir (LibmsiRecord* rec,
                                              const gchar* WkDir,
                                              GError** error);
void wixl_msi_table_shortcut_set_description (LibmsiRecord* rec,
                                              const gchar* Description,
                                              GError** error);
void wixl_msi_table_shortcut_set_arguments (LibmsiRecord* rec,
                                            const gchar* Arguments,
                                            GError** error);
WixlMsiTableShortcut* wixl_msi_table_shortcut_new (void);
WixlMsiTableShortcut* wixl_msi_table_shortcut_construct (GType object_type);
GType wixl_msi_table_create_folder_get_type (void) G_GNUC_CONST;
void wixl_msi_table_create_folder_add (WixlMsiTableCreateFolder* self,
                                       const gchar* Directory,
                                       const gchar* Component,
                                       GError** error);
WixlMsiTableCreateFolder* wixl_msi_table_create_folder_new (void);
WixlMsiTableCreateFolder* wixl_msi_table_create_folder_construct (GType object_type);
GType wixl_msi_table_remove_file_get_type (void) G_GNUC_CONST;
void wixl_msi_table_remove_file_add (WixlMsiTableRemoveFile* self,
                                     const gchar* FileKey,
                                     const gchar* Component,
                                     const gchar* DirProperty,
                                     gint InstallMode,
                                     GError** error);
WixlMsiTableRemoveFile* wixl_msi_table_remove_file_new (void);
WixlMsiTableRemoveFile* wixl_msi_table_remove_file_construct (GType object_type);
GType wixl_msi_table_feature_get_type (void) G_GNUC_CONST;
void wixl_msi_table_feature_add (WixlMsiTableFeature* self,
                                 const gchar* Feature,
                                 gint Display,
                                 gint Level,
                                 gint Attributes,
                                 const gchar* Parent,
                                 const gchar* Title,
                                 const gchar* Description,
                                 const gchar* ConfigurableDirectory,
                                 GError** error);
WixlMsiTableFeature* wixl_msi_table_feature_new (void);
WixlMsiTableFeature* wixl_msi_table_feature_construct (GType object_type);
GType wixl_msi_table_service_control_get_type (void) G_GNUC_CONST;
void wixl_msi_table_service_control_add (WixlMsiTableServiceControl* self,
                                         const gchar* ServiceControl,
                                         const gchar* Name,
                                         gint Event,
                                         const gchar* Arguments,
                                         gboolean* Wait,
                                         const gchar* Component,
                                         GError** error);
WixlMsiTableServiceControl* wixl_msi_table_service_control_new (void);
WixlMsiTableServiceControl* wixl_msi_table_service_control_construct (GType object_type);
GType wixl_msi_table_service_install_get_type (void) G_GNUC_CONST;
void wixl_msi_table_service_install_add (WixlMsiTableServiceInstall* self,
                                         const gchar* ServiceInstall,
                                         const gchar* Name,
                                         const gchar* DisplayName,
                                         gint ServiceType,
                                         gint StartType,
                                         gint ErrorControl,
                                         const gchar* LoadOrderGroup,
                                         const gchar* Dependencies,
                                         const gchar* StartName,
                                         const gchar* Password,
                                         const gchar* Arguments,
                                         const gchar* Component,
                                         const gchar* Description,
                                         GError** error);
WixlMsiTableServiceInstall* wixl_msi_table_service_install_new (void);
WixlMsiTableServiceInstall* wixl_msi_table_service_install_construct (GType object_type);
GType wixl_msi_table_signature_get_type (void) G_GNUC_CONST;
WixlMsiTableSignature* wixl_msi_table_signature_new (void);
WixlMsiTableSignature* wixl_msi_table_signature_construct (GType object_type);
GType wixl_msi_table_app_search_get_type (void) G_GNUC_CONST;
void wixl_msi_table_app_search_add (WixlMsiTableAppSearch* self,
                                    const gchar* Property,
                                    const gchar* Signature,
                                    GError** error);
WixlMsiTableAppSearch* wixl_msi_table_app_search_new (void);
WixlMsiTableAppSearch* wixl_msi_table_app_search_construct (GType object_type);
GType wixl_msi_table_custom_action_get_type (void) G_GNUC_CONST;
void wixl_msi_table_custom_action_add (WixlMsiTableCustomAction* self,
                                       const gchar* Action,
                                       gint Type,
                                       const gchar* Source,
                                       const gchar* Target,
                                       gint* ExtendedType,
                                       GError** error);
WixlMsiTableCustomAction* wixl_msi_table_custom_action_new (void);
WixlMsiTableCustomAction* wixl_msi_table_custom_action_construct (GType object_type);
GType wixl_msi_table_reg_locator_get_type (void) G_GNUC_CONST;
void wixl_msi_table_reg_locator_add (WixlMsiTableRegLocator* self,
                                     const gchar* Signature,
                                     gint Root,
                                     const gchar* Key,
                                     const gchar* Name,
                                     gint Type,
                                     GError** error);
WixlMsiTableRegLocator* wixl_msi_table_reg_locator_new (void);
WixlMsiTableRegLocator* wixl_msi_table_reg_locator_construct (GType object_type);
GType wixl_msi_table_validation_get_type (void) G_GNUC_CONST;
static void wixl_msi_table_validation_real_create (WixlMsiTable* base,
                                            LibmsiDatabase* db,
                                            GError** error);
WixlMsiTableValidation* wixl_msi_table_validation_new (void);
WixlMsiTableValidation* wixl_msi_table_validation_construct (GType object_type);
GType wixl_msi_table_streams_get_type (void) G_GNUC_CONST;
void wixl_msi_table_streams_add (WixlMsiTableStreams* self,
                                 const gchar* name,
                                 GInputStream* input,
                                 gsize count,
                                 GError** error);
static void wixl_msi_table_streams_real_create (WixlMsiTable* base,
                                         LibmsiDatabase* db,
                                         GError** error);
WixlMsiTableStreams* wixl_msi_table_streams_new (void);
WixlMsiTableStreams* wixl_msi_table_streams_construct (GType object_type);
GType wixl_msi_summary_info_get_type (void) G_GNUC_CONST;
WixlMsiSummaryInfo* wixl_msi_summary_info_new (void);
WixlMsiSummaryInfo* wixl_msi_summary_info_construct (GType object_type);
void wixl_msi_summary_info_set_property (WixlMsiSummaryInfo* self,
                                         LibmsiProperty prop,
                                         GValue* value,
                                         GError** error);
void wixl_msi_summary_info_save (WixlMsiSummaryInfo* self,
                                 LibmsiDatabase* db,
                                 GError** error);
void wixl_msi_summary_info_set_codepage (WixlMsiSummaryInfo* self,
                                         gint value,
                                         GError** error);
void wixl_msi_summary_info_set_author (WixlMsiSummaryInfo* self,
                                       const gchar* value,
                                       GError** error);
void wixl_msi_summary_info_set_keywords (WixlMsiSummaryInfo* self,
                                         const gchar* value,
                                         GError** error);
void wixl_msi_summary_info_set_subject (WixlMsiSummaryInfo* self,
                                        const gchar* value,
                                        GError** error);
gchar* wixl_msi_summary_info_get_subject (WixlMsiSummaryInfo* self);
void wixl_msi_summary_info_set_comments (WixlMsiSummaryInfo* self,
                                         const gchar* value,
                                         GError** error);
gchar* wixl_msi_summary_info_get_comments (WixlMsiSummaryInfo* self);
static GObject * wixl_msi_summary_info_constructor (GType type,
                                             guint n_construct_properties,
                                             GObjectConstructParam * construct_properties);
static void wixl_msi_summary_info_finalize (GObject * obj);
GType wixl_msi_database_get_type (void) G_GNUC_CONST;
GType wixl_arch_get_type (void) G_GNUC_CONST;
static gint wixl_msi_database_get_default_version (WixlMsiDatabase* self);
WixlArch wixl_msi_database_get_arch (WixlMsiDatabase* self);
static gchar* wixl_msi_database_get_arch_template (WixlMsiDatabase* self);
WixlMsiDatabase* wixl_msi_database_new (WixlArch arch);
WixlMsiDatabase* wixl_msi_database_construct (GType object_type,
                                              WixlArch arch);
void wixl_msi_database_build (WixlMsiDatabase* self,
                              const gchar* filename,
                              GError** error);
void wixl_msi_database_set_arch (WixlMsiDatabase* self,
                                 WixlArch value);
static GObject * wixl_msi_database_constructor (GType type,
                                         guint n_construct_properties,
                                         GObjectConstructParam * construct_properties);
static void wixl_msi_database_finalize (GObject * obj);
static void _vala_wixl_msi_database_get_property (GObject * object,
                                           guint property_id,
                                           GValue * value,
                                           GParamSpec * pspec);
static void _vala_wixl_msi_database_set_property (GObject * object,
                                           guint property_id,
                                           const GValue * value,
                                           GParamSpec * pspec);
static void _vala_array_destroy (gpointer array,
                          gint array_length,
                          GDestroyNotify destroy_func);
static void _vala_array_free (gpointer array,
                       gint array_length,
                       GDestroyNotify destroy_func);

static void
_g_object_unref0_ (gpointer var)
{
	(var == NULL) ? NULL : (var = (g_object_unref (var), NULL));
}

static inline void
_g_list_free__g_object_unref0_ (GList* self)
{
	g_list_free_full (self, (GDestroyNotify) _g_object_unref0_);
}

static gpointer
_g_object_ref0 (gpointer self)
{
	return self ? g_object_ref (self) : NULL;
}

static void
wixl_msi_table_real_create (WixlMsiTable* self,
                            LibmsiDatabase* db,
                            GError** error)
{
	LibmsiQuery* query = NULL;
	const gchar* _tmp0_;
	LibmsiQuery* _tmp1_;
	LibmsiQuery* _tmp2_;
	const gchar* _tmp3_;
	LibmsiQuery* _tmp4_ = NULL;
	const gchar* _tmp5_;
	LibmsiQuery* _tmp6_;
	LibmsiQuery* _tmp7_;
	GList* _tmp8_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (db != NULL);
	_tmp0_ = WIXL_MSI_TABLE_CLASS (G_OBJECT_GET_CLASS (self))->sql_create;
	_tmp1_ = libmsi_query_new (db, _tmp0_, &_inner_error0_);
	query = _tmp1_;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
	_tmp2_ = query;
	libmsi_query_execute (_tmp2_, NULL, &_inner_error0_);
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (query);
		return;
	}
	_tmp3_ = WIXL_MSI_TABLE_CLASS (G_OBJECT_GET_CLASS (self))->sql_insert;
	if (_tmp3_ == NULL) {
		_g_object_unref0 (query);
		return;
	}
	_tmp5_ = WIXL_MSI_TABLE_CLASS (G_OBJECT_GET_CLASS (self))->sql_insert;
	_tmp6_ = libmsi_query_new (db, _tmp5_, &_inner_error0_);
	_tmp4_ = _tmp6_;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (query);
		return;
	}
	_tmp7_ = _tmp4_;
	_tmp4_ = NULL;
	_g_object_unref0 (query);
	query = _tmp7_;
	_tmp8_ = self->records;
	{
		GList* r_collection = NULL;
		GList* r_it = NULL;
		r_collection = _tmp8_;
		for (r_it = r_collection; r_it != NULL; r_it = r_it->next) {
			LibmsiRecord* _tmp9_;
			LibmsiRecord* r = NULL;
			_tmp9_ = _g_object_ref0 ((LibmsiRecord*) r_it->data);
			r = _tmp9_;
			{
				LibmsiQuery* _tmp10_;
				LibmsiRecord* _tmp11_;
				_tmp10_ = query;
				_tmp11_ = r;
				libmsi_query_execute (_tmp10_, _tmp11_, &_inner_error0_);
				if (G_UNLIKELY (_inner_error0_ != NULL)) {
					g_propagate_error (error, _inner_error0_);
					_g_object_unref0 (r);
					_g_object_unref0 (_tmp4_);
					_g_object_unref0 (query);
					return;
				}
				_g_object_unref0 (r);
			}
		}
	}
	_g_object_unref0 (_tmp4_);
	_g_object_unref0 (query);
}

void
wixl_msi_table_create (WixlMsiTable* self,
                       LibmsiDatabase* db,
                       GError** error)
{
	g_return_if_fail (self != NULL);
	WIXL_MSI_TABLE_GET_CLASS (self)->create (self, db, error);
}

WixlMsiTable*
wixl_msi_table_construct (GType object_type)
{
	WixlMsiTable * self = NULL;
	self = (WixlMsiTable*) g_object_new (object_type, NULL);
	return self;
}

static void
wixl_msi_table_class_init (WixlMsiTableClass * klass,
                           gpointer klass_data)
{
	wixl_msi_table_parent_class = g_type_class_peek_parent (klass);
	((WixlMsiTableClass *) klass)->create = (void (*) (WixlMsiTable*, LibmsiDatabase*, GError**)) wixl_msi_table_real_create;
	G_OBJECT_CLASS (klass)->finalize = wixl_msi_table_finalize;
}

static void
wixl_msi_table_instance_init (WixlMsiTable * self,
                              gpointer klass)
{
}

static void
wixl_msi_table_finalize (GObject * obj)
{
	WixlMsiTable * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, WIXL_TYPE_MSI_TABLE, WixlMsiTable);
	(self->records == NULL) ? NULL : (self->records = (_g_list_free__g_object_unref0_ (self->records), NULL));
	G_OBJECT_CLASS (wixl_msi_table_parent_class)->finalize (obj);
}

GType
wixl_msi_table_get_type (void)
{
	static volatile gsize wixl_msi_table_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTable), 0, (GInstanceInitFunc) wixl_msi_table_instance_init, NULL };
		GType wixl_msi_table_type_id;
		wixl_msi_table_type_id = g_type_register_static (G_TYPE_OBJECT, "WixlMsiTable", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
		g_once_init_leave (&wixl_msi_table_type_id__volatile, wixl_msi_table_type_id);
	}
	return wixl_msi_table_type_id__volatile;
}

void
wixl_msi_table_file_hash_add (WixlMsiTableFileHash* self,
                              const gchar* file,
                              gint hash1,
                              gint hash2,
                              gint hash3,
                              gint hash4,
                              gint* options,
                              GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	LibmsiRecord* _tmp6_;
	LibmsiRecord* _tmp13_;
	LibmsiRecord* _tmp14_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (file != NULL);
	_tmp0_ = libmsi_record_new ((guint) 6);
	rec = _tmp0_;
	_tmp6_ = rec;
	if (!libmsi_record_set_string (_tmp6_, (guint) 1, file)) {
		_tmp5_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp5_ = !libmsi_record_set_int (_tmp7_, (guint) 2, *options);
	}
	if (_tmp5_) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp4_ = !libmsi_record_set_int (_tmp8_, (guint) 3, hash1);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp9_;
		_tmp9_ = rec;
		_tmp3_ = !libmsi_record_set_int (_tmp9_, (guint) 4, hash2);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp10_;
		_tmp10_ = rec;
		_tmp2_ = !libmsi_record_set_int (_tmp10_, (guint) 5, hash3);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp11_;
		_tmp11_ = rec;
		_tmp1_ = !libmsi_record_set_int (_tmp11_, (guint) 6, hash4);
	}
	if (_tmp1_) {
		GError* _tmp12_;
		_tmp12_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp12_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp13_ = rec;
	_tmp14_ = _g_object_ref0 (_tmp13_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp14_);
	_g_object_unref0 (rec);
}

void
wixl_msi_table_file_hash_add_with_file (WixlMsiTableFileHash* self,
                                        const gchar* FileId,
                                        GFile* file,
                                        GError** error)
{
	gint hash1 = 0;
	gint hash2 = 0;
	gint hash3 = 0;
	gint hash4 = 0;
	gint _tmp0_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (FileId != NULL);
	g_return_if_fail (file != NULL);
	hash1 = 0;
	hash2 = 0;
	hash3 = 0;
	hash4 = 0;
	wixl_compute_md5 (file, &hash1, &hash2, &hash3, &hash4, &_inner_error0_);
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
	_tmp0_ = 0;
	wixl_msi_table_file_hash_add (self, FileId, hash1, hash2, hash3, hash4, &_tmp0_, &_inner_error0_);
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

WixlMsiTableFileHash*
wixl_msi_table_file_hash_construct (GType object_type)
{
	WixlMsiTableFileHash * self = NULL;
	self = (WixlMsiTableFileHash*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableFileHash*
wixl_msi_table_file_hash_new (void)
{
	return wixl_msi_table_file_hash_construct (WIXL_TYPE_MSI_TABLE_FILE_HASH);
}

static void
wixl_msi_table_file_hash_class_init (WixlMsiTableFileHashClass * klass,
                                     gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_file_hash_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("MsiFileHash");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `MsiFileHash` (`File_` CHAR(72) NOT NULL, `Options` INT N" \
"OT NULL, `HashPart1` LONG NOT NULL, `HashPart2` LONG NOT NULL, `HashPa" \
"rt3` LONG NOT NULL, `HashPart4` LONG NOT NULL PRIMARY KEY `File_`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `MsiFileHash` (`File_`, `Options`, `HashPart1`, `HashPart2" \
"`, `HashPart3`, `HashPart4`) VALUES (?, ?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_file_hash_instance_init (WixlMsiTableFileHash * self,
                                        gpointer klass)
{
}

GType
wixl_msi_table_file_hash_get_type (void)
{
	static volatile gsize wixl_msi_table_file_hash_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_file_hash_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableFileHashClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_file_hash_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableFileHash), 0, (GInstanceInitFunc) wixl_msi_table_file_hash_instance_init, NULL };
		GType wixl_msi_table_file_hash_type_id;
		wixl_msi_table_file_hash_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableFileHash", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_file_hash_type_id__volatile, wixl_msi_table_file_hash_type_id);
	}
	return wixl_msi_table_file_hash_type_id__volatile;
}

void
wixl_msi_table_icon_add (WixlMsiTableIcon* self,
                         const gchar* id,
                         const gchar* filename,
                         GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp6_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (id != NULL);
	g_return_if_fail (filename != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, id)) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp3_;
		_tmp3_ = rec;
		_tmp1_ = !libmsi_record_load_stream (_tmp3_, (guint) 2, filename);
	}
	if (_tmp1_) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp4_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp5_ = rec;
	_tmp6_ = _g_object_ref0 (_tmp5_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp6_);
	_g_object_unref0 (rec);
}

WixlMsiTableIcon*
wixl_msi_table_icon_construct (GType object_type)
{
	WixlMsiTableIcon * self = NULL;
	self = (WixlMsiTableIcon*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableIcon*
wixl_msi_table_icon_new (void)
{
	return wixl_msi_table_icon_construct (WIXL_TYPE_MSI_TABLE_ICON);
}

static void
wixl_msi_table_icon_class_init (WixlMsiTableIconClass * klass,
                                gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_icon_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Icon");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Icon` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NULL " \
"PRIMARY KEY `Name`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Icon` (`Name`, `Data`) VALUES (?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_icon_instance_init (WixlMsiTableIcon * self,
                                   gpointer klass)
{
}

GType
wixl_msi_table_icon_get_type (void)
{
	static volatile gsize wixl_msi_table_icon_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_icon_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableIconClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_icon_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableIcon), 0, (GInstanceInitFunc) wixl_msi_table_icon_instance_init, NULL };
		GType wixl_msi_table_icon_type_id;
		wixl_msi_table_icon_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableIcon", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_icon_type_id__volatile, wixl_msi_table_icon_type_id);
	}
	return wixl_msi_table_icon_type_id__volatile;
}

void
wixl_msi_table_binary_add (WixlMsiTableBinary* self,
                           const gchar* id,
                           const gchar* filename,
                           GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp6_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (id != NULL);
	g_return_if_fail (filename != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, id)) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp3_;
		_tmp3_ = rec;
		_tmp1_ = !libmsi_record_load_stream (_tmp3_, (guint) 2, filename);
	}
	if (_tmp1_) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp4_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp5_ = rec;
	_tmp6_ = _g_object_ref0 (_tmp5_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp6_);
	_g_object_unref0 (rec);
}

WixlMsiTableBinary*
wixl_msi_table_binary_construct (GType object_type)
{
	WixlMsiTableBinary * self = NULL;
	self = (WixlMsiTableBinary*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableBinary*
wixl_msi_table_binary_new (void)
{
	return wixl_msi_table_binary_construct (WIXL_TYPE_MSI_TABLE_BINARY);
}

static void
wixl_msi_table_binary_class_init (WixlMsiTableBinaryClass * klass,
                                  gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_binary_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Binary");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Binary` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NUL" \
"L PRIMARY KEY `Name`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Binary` (`Name`, `Data`) VALUES (?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_binary_instance_init (WixlMsiTableBinary * self,
                                     gpointer klass)
{
}

GType
wixl_msi_table_binary_get_type (void)
{
	static volatile gsize wixl_msi_table_binary_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_binary_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableBinaryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_binary_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableBinary), 0, (GInstanceInitFunc) wixl_msi_table_binary_instance_init, NULL };
		GType wixl_msi_table_binary_type_id;
		wixl_msi_table_binary_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableBinary", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_binary_type_id__volatile, wixl_msi_table_binary_type_id);
	}
	return wixl_msi_table_binary_type_id__volatile;
}

static inline gpointer
wixl_msi_table_sequence_get_instance_private (WixlMsiTableSequence* self)
{
	return G_STRUCT_MEMBER_P (self, WixlMsiTableSequence_private_offset);
}

static void
_g_free0_ (gpointer var)
{
	var = (g_free (var), NULL);
}

static void
_wixl_msi_table_sequence_action_unref0_ (gpointer var)
{
	(var == NULL) ? NULL : (var = (wixl_msi_table_sequence_action_unref (var), NULL));
}

static void
wixl_msi_table_sequence_add (WixlMsiTableSequence* self,
                             const gchar* action,
                             const gchar* condition,
                             gint sequence,
                             GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	LibmsiRecord* _tmp3_;
	LibmsiRecord* _tmp8_;
	LibmsiRecord* _tmp9_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (action != NULL);
	_tmp0_ = libmsi_record_new ((guint) 3);
	rec = _tmp0_;
	_tmp3_ = rec;
	if (!libmsi_record_set_string (_tmp3_, (guint) 1, action)) {
		_tmp2_ = TRUE;
	} else {
		gboolean _tmp4_ = FALSE;
		if (condition != NULL) {
			LibmsiRecord* _tmp5_;
			_tmp5_ = rec;
			_tmp4_ = !libmsi_record_set_string (_tmp5_, (guint) 2, condition);
		} else {
			_tmp4_ = FALSE;
		}
		_tmp2_ = _tmp4_;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp6_;
		_tmp6_ = rec;
		_tmp1_ = !libmsi_record_set_int (_tmp6_, (guint) 3, sequence);
	}
	if (_tmp1_) {
		GError* _tmp7_;
		_tmp7_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp7_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp8_ = rec;
	_tmp9_ = _g_object_ref0 (_tmp8_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp9_);
	_g_object_unref0 (rec);
}

void
wixl_msi_table_sequence_set_sequence_table_name (WixlMsiTableSequenceClass* klass,
                                                 const gchar* table)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	g_return_if_fail (table != NULL);
	_tmp0_ = g_strdup (table);
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup_printf ("CREATE TABLE `%s` (`Action` CHAR(72) NOT NULL, `Condition` CHAR(255), " \
"`Sequence` INT PRIMARY KEY `Action`)", table);
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup_printf ("INSERT INTO `%s` (`Action`, `Condition`, `Sequence`) VALUES (?, ?, ?)", table);
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static gpointer
_wixl_msi_table_sequence_action_ref0 (gpointer self)
{
	return self ? wixl_msi_table_sequence_action_ref (self) : NULL;
}

static void
wixl_msi_table_sequence_sort_topological_visit (WixlMsiTableSequence* self,
                                                WixlMsiTableSequenceAction* action,
                                                GList* * sorted)
{
	WixlMsiTableSequenceAction* dep = NULL;
	GHashTableIter it = {0};
	GHashTable* _tmp0_;
	WixlMsiTableSequenceAction* _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (action != NULL);
	if (action->visited) {
		return;
	}
	action->visited = TRUE;
	_tmp0_ = action->depends_on;
	g_hash_table_iter_init (&it, _tmp0_);
	while (TRUE) {
		gconstpointer _tmp1_ = NULL;
		gboolean _tmp2_;
		WixlMsiTableSequenceAction* _tmp3_;
		WixlMsiTableSequenceAction* _tmp4_;
		_tmp2_ = g_hash_table_iter_next (&it, (gpointer*) NULL, (gpointer*) (&_tmp1_));
		_wixl_msi_table_sequence_action_unref0 (dep);
		_tmp3_ = _wixl_msi_table_sequence_action_ref0 (_tmp1_);
		dep = _tmp3_;
		if (!_tmp2_) {
			break;
		}
		_tmp4_ = dep;
		wixl_msi_table_sequence_sort_topological_visit (self, _tmp4_, sorted);
	}
	_tmp5_ = _wixl_msi_table_sequence_action_ref0 (action);
	*sorted = g_list_append (*sorted, _tmp5_);
	_wixl_msi_table_sequence_action_unref0 (dep);
}

static inline void
_g_list_free__wixl_msi_table_sequence_action_unref0_ (GList* self)
{
	g_list_free_full (self, (GDestroyNotify) _wixl_msi_table_sequence_action_unref0_);
}

static GList*
wixl_msi_table_sequence_sort_topological (WixlMsiTableSequence* self)
{
	GList* sorted = NULL;
	WixlMsiTableSequenceAction* action = NULL;
	GHashTableIter it = {0};
	GHashTable* _tmp0_;
	GList* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	sorted = NULL;
	_tmp0_ = self->priv->actions;
	g_hash_table_iter_init (&it, _tmp0_);
	while (TRUE) {
		gconstpointer _tmp1_ = NULL;
		gboolean _tmp2_;
		WixlMsiTableSequenceAction* _tmp3_;
		WixlMsiTableSequenceAction* _tmp4_;
		WixlMsiTableSequenceAction* _tmp5_;
		_tmp2_ = g_hash_table_iter_next (&it, (gpointer*) NULL, (gpointer*) (&_tmp1_));
		_wixl_msi_table_sequence_action_unref0 (action);
		_tmp3_ = _wixl_msi_table_sequence_action_ref0 (_tmp1_);
		action = _tmp3_;
		if (!_tmp2_) {
			break;
		}
		_tmp4_ = action;
		if (_tmp4_->incoming_deps) {
			continue;
		}
		_tmp5_ = action;
		wixl_msi_table_sequence_sort_topological_visit (self, _tmp5_, &sorted);
	}
	result = sorted;
	_wixl_msi_table_sequence_action_unref0 (action);
	return result;
}

static gint
__lambda4_ (WixlMsiTableSequenceAction* a,
            WixlMsiTableSequenceAction* b)
{
	gint result = 0;
	g_return_val_if_fail (a != NULL, 0);
	g_return_val_if_fail (b != NULL, 0);
	result = a->sequence - b->sequence;
	return result;
}

static gint
___lambda4__gcompare_func (gconstpointer a,
                           gconstpointer b)
{
	gint result;
	result = __lambda4_ ((WixlMsiTableSequenceAction*) a, (WixlMsiTableSequenceAction*) b);
	return result;
}

static void
wixl_msi_table_sequence_add_implicit_deps (WixlMsiTableSequence* self)
{
	GCompareFunc cmp = NULL;
	GList* list = NULL;
	GHashTable* _tmp0_;
	GList* _tmp1_;
	GCompareFunc _tmp2_;
	WixlMsiTableSequenceAction* prev = NULL;
	GList* _tmp3_;
	g_return_if_fail (self != NULL);
	cmp = ___lambda4__gcompare_func;
	_tmp0_ = self->priv->actions;
	_tmp1_ = g_hash_table_get_values (_tmp0_);
	list = _tmp1_;
	_tmp2_ = cmp;
	list = g_list_sort (list, _tmp2_);
	prev = NULL;
	_tmp3_ = list;
	{
		GList* a_collection = NULL;
		GList* a_it = NULL;
		a_collection = _tmp3_;
		for (a_it = a_collection; a_it != NULL; a_it = a_it->next) {
			WixlMsiTableSequenceAction* a = NULL;
			a = (WixlMsiTableSequenceAction*) a_it->data;
			{
				WixlMsiTableSequenceAction* _tmp4_;
				WixlMsiTableSequenceAction* _tmp5_;
				WixlMsiTableSequenceAction* _tmp8_;
				WixlMsiTableSequenceAction* _tmp9_;
				_tmp4_ = a;
				if (_tmp4_->sequence == -1) {
					continue;
				}
				_tmp5_ = prev;
				if (_tmp5_ != NULL) {
					WixlMsiTableSequenceAction* _tmp6_;
					WixlMsiTableSequenceAction* _tmp7_;
					_tmp6_ = a;
					_tmp7_ = prev;
					wixl_msi_table_sequence_action_add_dep (_tmp6_, _tmp7_);
				}
				_tmp8_ = a;
				_tmp9_ = _wixl_msi_table_sequence_action_ref0 (_tmp8_);
				_wixl_msi_table_sequence_action_unref0 (prev);
				prev = _tmp9_;
			}
		}
	}
	_wixl_msi_table_sequence_action_unref0 (prev);
	(list == NULL) ? NULL : (list = (g_list_free (list), NULL));
}

void
wixl_msi_table_sequence_add_sorted_actions (WixlMsiTableSequence* self,
                                            GError** error)
{
	GList* sorted = NULL;
	GList* _tmp0_;
	gint sequence = 0;
	GList* _tmp1_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	wixl_msi_table_sequence_add_implicit_deps (self);
	_tmp0_ = wixl_msi_table_sequence_sort_topological (self);
	sorted = _tmp0_;
	sequence = 0;
	_tmp1_ = sorted;
	{
		GList* action_collection = NULL;
		GList* action_it = NULL;
		action_collection = _tmp1_;
		for (action_it = action_collection; action_it != NULL; action_it = action_it->next) {
			WixlMsiTableSequenceAction* _tmp2_;
			WixlMsiTableSequenceAction* action = NULL;
			_tmp2_ = _wixl_msi_table_sequence_action_ref0 ((WixlMsiTableSequenceAction*) action_it->data);
			action = _tmp2_;
			{
				WixlMsiTableSequenceAction* _tmp3_;
				WixlMsiTableSequenceAction* _tmp5_;
				WixlMsiTableSequenceAction* _tmp6_;
				const gchar* _tmp7_;
				WixlMsiTableSequenceAction* _tmp8_;
				const gchar* _tmp9_;
				WixlMsiTableSequenceAction* _tmp10_;
				_tmp3_ = action;
				if (_tmp3_->sequence == -1) {
					WixlMsiTableSequenceAction* _tmp4_;
					_tmp4_ = action;
					sequence = sequence + 1;
					_tmp4_->sequence = sequence;
				}
				_tmp5_ = action;
				sequence = _tmp5_->sequence;
				_tmp6_ = action;
				_tmp7_ = _tmp6_->name;
				_tmp8_ = action;
				_tmp9_ = _tmp8_->condition;
				_tmp10_ = action;
				wixl_msi_table_sequence_add (self, _tmp7_, _tmp9_, _tmp10_->sequence, &_inner_error0_);
				if (G_UNLIKELY (_inner_error0_ != NULL)) {
					g_propagate_error (error, _inner_error0_);
					_wixl_msi_table_sequence_action_unref0 (action);
					(sorted == NULL) ? NULL : (sorted = (_g_list_free__wixl_msi_table_sequence_action_unref0_ (sorted), NULL));
					return;
				}
				_wixl_msi_table_sequence_action_unref0 (action);
			}
		}
	}
	(sorted == NULL) ? NULL : (sorted = (_g_list_free__wixl_msi_table_sequence_action_unref0_ (sorted), NULL));
}

WixlMsiTableSequenceAction*
wixl_msi_table_sequence_get_action (WixlMsiTableSequence* self,
                                    const gchar* name)
{
	WixlMsiTableSequenceAction* action = NULL;
	GHashTable* _tmp0_;
	gconstpointer _tmp1_;
	WixlMsiTableSequenceAction* _tmp2_;
	WixlMsiTableSequenceAction* _tmp3_;
	WixlMsiTableSequenceAction* _tmp4_;
	GHashTable* _tmp5_;
	gchar* _tmp6_;
	WixlMsiTableSequenceAction* _tmp7_;
	WixlMsiTableSequenceAction* _tmp8_;
	WixlMsiTableSequenceAction* _tmp9_;
	gchar* _tmp10_;
	WixlMSIDefaultActionInfo* _default_ = NULL;
	WixlMSIDefaultActionInfo* _tmp11_;
	WixlMSIDefaultActionInfo* _tmp12_;
	WixlMsiTableSequenceAction* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (name != NULL, NULL);
	_tmp0_ = self->priv->actions;
	_tmp1_ = g_hash_table_lookup (_tmp0_, name);
	_tmp2_ = _wixl_msi_table_sequence_action_ref0 ((WixlMsiTableSequenceAction*) _tmp1_);
	action = _tmp2_;
	_tmp3_ = action;
	if (_tmp3_ != NULL) {
		result = action;
		return result;
	}
	_tmp4_ = wixl_msi_table_sequence_action_new ();
	_wixl_msi_table_sequence_action_unref0 (action);
	action = _tmp4_;
	_tmp5_ = self->priv->actions;
	_tmp6_ = g_strdup (name);
	_tmp7_ = action;
	_tmp8_ = _wixl_msi_table_sequence_action_ref0 (_tmp7_);
	g_hash_table_insert (_tmp5_, _tmp6_, _tmp8_);
	_tmp9_ = action;
	_tmp10_ = g_strdup (name);
	_g_free0 (_tmp9_->name);
	_tmp9_->name = _tmp10_;
	_tmp11_ = wixl_msi_default_get_action_by_name (name);
	_default_ = _tmp11_;
	_tmp12_ = _default_;
	if (_tmp12_ != NULL) {
		WixlMsiTableSequenceAction* _tmp13_;
		WixlMSIDefaultActionInfo* _tmp14_;
		_tmp13_ = action;
		_tmp14_ = _default_;
		_tmp13_->sequence = (*_tmp14_).sequence;
	}
	result = action;
	_wixl_msi_default_action_info_free0 (_default_);
	return result;
}

void
wixl_msi_table_sequence_add_default_action (WixlMsiTableSequence* self,
                                            WixlMSIDefaultAction action)
{
	WixlMSIDefaultActionInfo _default_ = {0};
	WixlMSIDefaultActionInfo _tmp0_ = {0};
	WixlMSIDefaultActionFlags _tmp1_;
	WixlMSIDefaultActionInfo _tmp2_;
	WixlMSIDefaultActionFlags _tmp3_;
	WixlMsiTableSequenceAction* seq = NULL;
	GHashTable* _tmp7_;
	WixlMSIDefaultActionInfo _tmp8_;
	const gchar* _tmp9_;
	gconstpointer _tmp10_;
	WixlMsiTableSequenceAction* _tmp11_;
	WixlMsiTableSequenceAction* _tmp12_;
	WixlMsiTableSequenceAction* _tmp13_;
	GHashTable* _tmp14_;
	WixlMSIDefaultActionInfo _tmp15_;
	const gchar* _tmp16_;
	gchar* _tmp17_;
	WixlMsiTableSequenceAction* _tmp18_;
	WixlMsiTableSequenceAction* _tmp19_;
	WixlMsiTableSequenceAction* _tmp20_;
	WixlMSIDefaultActionInfo _tmp21_;
	const gchar* _tmp22_;
	gchar* _tmp23_;
	WixlMsiTableSequenceAction* _tmp24_;
	WixlMSIDefaultActionInfo _tmp25_;
	WixlMsiTableSequenceAction* _tmp26_;
	WixlMSIDefaultActionInfo _tmp27_;
	const gchar* _tmp28_;
	gchar* _tmp29_;
	g_return_if_fail (self != NULL);
	wixl_msi_default_get_action (action, &_tmp0_);
	_default_ = _tmp0_;
	_tmp1_ = WIXL_MSI_TABLE_SEQUENCE_CLASS (G_OBJECT_GET_CLASS (self))->flags;
	_tmp2_ = _default_;
	_tmp3_ = _tmp2_.flags;
	if (!((_tmp3_ & _tmp1_) == _tmp1_)) {
		WixlMSIDefaultActionInfo _tmp4_;
		const gchar* _tmp5_;
		const gchar* _tmp6_;
		_tmp4_ = _default_;
		_tmp5_ = _tmp4_.name;
		_tmp6_ = WIXL_MSI_TABLE_CLASS (G_OBJECT_GET_CLASS (self))->name;
		g_critical ("msi.vala:208: Action %s shouldn't be added in %s", _tmp5_, _tmp6_);
	}
	_tmp7_ = self->priv->actions;
	_tmp8_ = _default_;
	_tmp9_ = _tmp8_.name;
	_tmp10_ = g_hash_table_lookup (_tmp7_, _tmp9_);
	_tmp11_ = _wixl_msi_table_sequence_action_ref0 ((WixlMsiTableSequenceAction*) _tmp10_);
	seq = _tmp11_;
	_tmp12_ = seq;
	if (_tmp12_ != NULL) {
		_wixl_msi_table_sequence_action_unref0 (seq);
		wixl_msi_default_action_info_destroy (&_default_);
		return;
	}
	_tmp13_ = wixl_msi_table_sequence_action_new ();
	_wixl_msi_table_sequence_action_unref0 (seq);
	seq = _tmp13_;
	_tmp14_ = self->priv->actions;
	_tmp15_ = _default_;
	_tmp16_ = _tmp15_.name;
	_tmp17_ = g_strdup (_tmp16_);
	_tmp18_ = seq;
	_tmp19_ = _wixl_msi_table_sequence_action_ref0 (_tmp18_);
	g_hash_table_insert (_tmp14_, _tmp17_, _tmp19_);
	_tmp20_ = seq;
	_tmp21_ = _default_;
	_tmp22_ = _tmp21_.name;
	_tmp23_ = g_strdup (_tmp22_);
	_g_free0 (_tmp20_->name);
	_tmp20_->name = _tmp23_;
	_tmp24_ = seq;
	_tmp25_ = _default_;
	_tmp24_->sequence = _tmp25_.sequence;
	_tmp26_ = seq;
	_tmp27_ = _default_;
	_tmp28_ = _tmp27_.condition;
	_tmp29_ = g_strdup (_tmp28_);
	_g_free0 (_tmp26_->condition);
	_tmp26_->condition = _tmp29_;
	_wixl_msi_table_sequence_action_unref0 (seq);
	wixl_msi_default_action_info_destroy (&_default_);
}

WixlMsiTableSequence*
wixl_msi_table_sequence_construct (GType object_type)
{
	WixlMsiTableSequence * self = NULL;
	self = (WixlMsiTableSequence*) wixl_msi_table_construct (object_type);
	return self;
}

void
wixl_msi_table_sequence_action_add_dep (WixlMsiTableSequenceAction* self,
                                        WixlMsiTableSequenceAction* a)
{
	GHashTable* _tmp0_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (a != NULL);
	_tmp0_ = self->depends_on;
	wixl_hash_table_add (WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION, (GBoxedCopyFunc) wixl_msi_table_sequence_action_ref, (GDestroyNotify) wixl_msi_table_sequence_action_unref, _tmp0_, a);
	a->incoming_deps = TRUE;
}

WixlMsiTableSequenceAction*
wixl_msi_table_sequence_action_construct (GType object_type)
{
	WixlMsiTableSequenceAction* self = NULL;
	self = (WixlMsiTableSequenceAction*) g_type_create_instance (object_type);
	return self;
}

WixlMsiTableSequenceAction*
wixl_msi_table_sequence_action_new (void)
{
	return wixl_msi_table_sequence_action_construct (WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION);
}

static void
wixl_msi_table_sequence_value_action_init (GValue* value)
{
	value->data[0].v_pointer = NULL;
}

static void
wixl_msi_table_sequence_value_action_free_value (GValue* value)
{
	if (value->data[0].v_pointer) {
		wixl_msi_table_sequence_action_unref (value->data[0].v_pointer);
	}
}

static void
wixl_msi_table_sequence_value_action_copy_value (const GValue* src_value,
                                                 GValue* dest_value)
{
	if (src_value->data[0].v_pointer) {
		dest_value->data[0].v_pointer = wixl_msi_table_sequence_action_ref (src_value->data[0].v_pointer);
	} else {
		dest_value->data[0].v_pointer = NULL;
	}
}

static gpointer
wixl_msi_table_sequence_value_action_peek_pointer (const GValue* value)
{
	return value->data[0].v_pointer;
}

static gchar*
wixl_msi_table_sequence_value_action_collect_value (GValue* value,
                                                    guint n_collect_values,
                                                    GTypeCValue* collect_values,
                                                    guint collect_flags)
{
	if (collect_values[0].v_pointer) {
		WixlMsiTableSequenceAction * object;
		object = collect_values[0].v_pointer;
		if (object->parent_instance.g_class == NULL) {
			return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
			return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
		}
		value->data[0].v_pointer = wixl_msi_table_sequence_action_ref (object);
	} else {
		value->data[0].v_pointer = NULL;
	}
	return NULL;
}

static gchar*
wixl_msi_table_sequence_value_action_lcopy_value (const GValue* value,
                                                  guint n_collect_values,
                                                  GTypeCValue* collect_values,
                                                  guint collect_flags)
{
	WixlMsiTableSequenceAction ** object_p;
	object_p = collect_values[0].v_pointer;
	if (!object_p) {
		return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
	}
	if (!value->data[0].v_pointer) {
		*object_p = NULL;
	} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
		*object_p = value->data[0].v_pointer;
	} else {
		*object_p = wixl_msi_table_sequence_action_ref (value->data[0].v_pointer);
	}
	return NULL;
}

GParamSpec*
wixl_msi_table_sequence_param_spec_action (const gchar* name,
                                           const gchar* nick,
                                           const gchar* blurb,
                                           GType object_type,
                                           GParamFlags flags)
{
	WixlMsiTableSequenceParamSpecAction* spec;
	g_return_val_if_fail (g_type_is_a (object_type, WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION), NULL);
	spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
	G_PARAM_SPEC (spec)->value_type = object_type;
	return G_PARAM_SPEC (spec);
}

gpointer
wixl_msi_table_sequence_value_get_action (const GValue* value)
{
	g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION), NULL);
	return value->data[0].v_pointer;
}

void
wixl_msi_table_sequence_value_set_action (GValue* value,
                                          gpointer v_object)
{
	WixlMsiTableSequenceAction * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
		wixl_msi_table_sequence_action_ref (value->data[0].v_pointer);
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		wixl_msi_table_sequence_action_unref (old);
	}
}

void
wixl_msi_table_sequence_value_take_action (GValue* value,
                                           gpointer v_object)
{
	WixlMsiTableSequenceAction * old;
	g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION));
	old = value->data[0].v_pointer;
	if (v_object) {
		g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION));
		g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
		value->data[0].v_pointer = v_object;
	} else {
		value->data[0].v_pointer = NULL;
	}
	if (old) {
		wixl_msi_table_sequence_action_unref (old);
	}
}

static void
wixl_msi_table_sequence_action_class_init (WixlMsiTableSequenceActionClass * klass,
                                           gpointer klass_data)
{
	wixl_msi_table_sequence_action_parent_class = g_type_class_peek_parent (klass);
	((WixlMsiTableSequenceActionClass *) klass)->finalize = wixl_msi_table_sequence_action_finalize;
}

static void
wixl_msi_table_sequence_action_instance_init (WixlMsiTableSequenceAction * self,
                                              gpointer klass)
{
	GHashFunc _tmp0_;
	GEqualFunc _tmp1_;
	GHashTable* _tmp2_;
	self->sequence = -1;
	self->visited = FALSE;
	self->incoming_deps = FALSE;
	_tmp0_ = g_direct_hash;
	_tmp1_ = g_direct_equal;
	_tmp2_ = g_hash_table_new_full (_tmp0_, _tmp1_, _wixl_msi_table_sequence_action_unref0_, NULL);
	self->depends_on = _tmp2_;
	self->ref_count = 1;
}

static void
wixl_msi_table_sequence_action_finalize (WixlMsiTableSequenceAction * obj)
{
	WixlMsiTableSequenceAction * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, WIXL_MSI_TABLE_SEQUENCE_TYPE_ACTION, WixlMsiTableSequenceAction);
	g_signal_handlers_destroy (self);
	_g_free0 (self->name);
	_g_free0 (self->condition);
	_g_object_unref0 (self->action);
	_g_hash_table_unref0 (self->depends_on);
}

GType
wixl_msi_table_sequence_action_get_type (void)
{
	static volatile gsize wixl_msi_table_sequence_action_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_sequence_action_type_id__volatile)) {
		static const GTypeValueTable g_define_type_value_table = { wixl_msi_table_sequence_value_action_init, wixl_msi_table_sequence_value_action_free_value, wixl_msi_table_sequence_value_action_copy_value, wixl_msi_table_sequence_value_action_peek_pointer, "p", wixl_msi_table_sequence_value_action_collect_value, "p", wixl_msi_table_sequence_value_action_lcopy_value };
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableSequenceActionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_sequence_action_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableSequenceAction), 0, (GInstanceInitFunc) wixl_msi_table_sequence_action_instance_init, &g_define_type_value_table };
		static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
		GType wixl_msi_table_sequence_action_type_id;
		wixl_msi_table_sequence_action_type_id = g_type_register_fundamental (g_type_fundamental_next (), "WixlMsiTableSequenceAction", &g_define_type_info, &g_define_type_fundamental_info, 0);
		g_once_init_leave (&wixl_msi_table_sequence_action_type_id__volatile, wixl_msi_table_sequence_action_type_id);
	}
	return wixl_msi_table_sequence_action_type_id__volatile;
}

gpointer
wixl_msi_table_sequence_action_ref (gpointer instance)
{
	WixlMsiTableSequenceAction * self;
	self = instance;
	g_atomic_int_inc (&self->ref_count);
	return instance;
}

void
wixl_msi_table_sequence_action_unref (gpointer instance)
{
	WixlMsiTableSequenceAction * self;
	self = instance;
	if (g_atomic_int_dec_and_test (&self->ref_count)) {
		WIXL_MSI_TABLE_SEQUENCE_ACTION_GET_CLASS (self)->finalize (self);
		g_type_free_instance ((GTypeInstance *) self);
	}
}

static void
wixl_msi_table_sequence_class_init (WixlMsiTableSequenceClass * klass,
                                    gpointer klass_data)
{
	wixl_msi_table_sequence_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &WixlMsiTableSequence_private_offset);
	G_OBJECT_CLASS (klass)->finalize = wixl_msi_table_sequence_finalize;
}

static void
wixl_msi_table_sequence_instance_init (WixlMsiTableSequence * self,
                                       gpointer klass)
{
	GHashFunc _tmp0_;
	GEqualFunc _tmp1_;
	GHashTable* _tmp2_;
	self->priv = wixl_msi_table_sequence_get_instance_private (self);
	_tmp0_ = g_str_hash;
	_tmp1_ = g_str_equal;
	_tmp2_ = g_hash_table_new_full (_tmp0_, _tmp1_, _g_free0_, _wixl_msi_table_sequence_action_unref0_);
	self->priv->actions = _tmp2_;
}

static void
wixl_msi_table_sequence_finalize (GObject * obj)
{
	WixlMsiTableSequence * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, WIXL_TYPE_MSI_TABLE_SEQUENCE, WixlMsiTableSequence);
	_g_hash_table_unref0 (self->priv->actions);
	G_OBJECT_CLASS (wixl_msi_table_sequence_parent_class)->finalize (obj);
}

GType
wixl_msi_table_sequence_get_type (void)
{
	static volatile gsize wixl_msi_table_sequence_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_sequence_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableSequenceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_sequence_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableSequence), 0, (GInstanceInitFunc) wixl_msi_table_sequence_instance_init, NULL };
		GType wixl_msi_table_sequence_type_id;
		wixl_msi_table_sequence_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableSequence", &g_define_type_info, G_TYPE_FLAG_ABSTRACT);
		WixlMsiTableSequence_private_offset = g_type_add_instance_private (wixl_msi_table_sequence_type_id, sizeof (WixlMsiTableSequencePrivate));
		g_once_init_leave (&wixl_msi_table_sequence_type_id__volatile, wixl_msi_table_sequence_type_id);
	}
	return wixl_msi_table_sequence_type_id__volatile;
}

WixlMsiTableAdminExecuteSequence*
wixl_msi_table_admin_execute_sequence_construct (GType object_type)
{
	WixlMsiTableAdminExecuteSequence * self = NULL;
	self = (WixlMsiTableAdminExecuteSequence*) wixl_msi_table_sequence_construct (object_type);
	return self;
}

WixlMsiTableAdminExecuteSequence*
wixl_msi_table_admin_execute_sequence_new (void)
{
	return wixl_msi_table_admin_execute_sequence_construct (WIXL_TYPE_MSI_TABLE_ADMIN_EXECUTE_SEQUENCE);
}

static void
wixl_msi_table_admin_execute_sequence_class_init (WixlMsiTableAdminExecuteSequenceClass * klass,
                                                  gpointer klass_data)
{
	wixl_msi_table_admin_execute_sequence_parent_class = g_type_class_peek_parent (klass);
	wixl_msi_table_sequence_set_sequence_table_name (WIXL_MSI_TABLE_SEQUENCE_CLASS (klass), "AdminExecuteSequence");
	WIXL_MSI_TABLE_SEQUENCE_CLASS (klass)->flags = WIXL_MSI_DEFAULT_ACTION_FLAGS_ADMIN_EXECUTE_SEQUENCE;
}

static void
wixl_msi_table_admin_execute_sequence_instance_init (WixlMsiTableAdminExecuteSequence * self,
                                                     gpointer klass)
{
}

GType
wixl_msi_table_admin_execute_sequence_get_type (void)
{
	static volatile gsize wixl_msi_table_admin_execute_sequence_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_admin_execute_sequence_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableAdminExecuteSequenceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_admin_execute_sequence_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableAdminExecuteSequence), 0, (GInstanceInitFunc) wixl_msi_table_admin_execute_sequence_instance_init, NULL };
		GType wixl_msi_table_admin_execute_sequence_type_id;
		wixl_msi_table_admin_execute_sequence_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE_SEQUENCE, "WixlMsiTableAdminExecuteSequence", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_admin_execute_sequence_type_id__volatile, wixl_msi_table_admin_execute_sequence_type_id);
	}
	return wixl_msi_table_admin_execute_sequence_type_id__volatile;
}

WixlMsiTableAdminUISequence*
wixl_msi_table_admin_ui_sequence_construct (GType object_type)
{
	WixlMsiTableAdminUISequence * self = NULL;
	self = (WixlMsiTableAdminUISequence*) wixl_msi_table_sequence_construct (object_type);
	return self;
}

WixlMsiTableAdminUISequence*
wixl_msi_table_admin_ui_sequence_new (void)
{
	return wixl_msi_table_admin_ui_sequence_construct (WIXL_TYPE_MSI_TABLE_ADMIN_UI_SEQUENCE);
}

static void
wixl_msi_table_admin_ui_sequence_class_init (WixlMsiTableAdminUISequenceClass * klass,
                                             gpointer klass_data)
{
	wixl_msi_table_admin_ui_sequence_parent_class = g_type_class_peek_parent (klass);
	wixl_msi_table_sequence_set_sequence_table_name (WIXL_MSI_TABLE_SEQUENCE_CLASS (klass), "AdminUISequence");
	WIXL_MSI_TABLE_SEQUENCE_CLASS (klass)->flags = WIXL_MSI_DEFAULT_ACTION_FLAGS_ADMIN_UI_SEQUENCE;
}

static void
wixl_msi_table_admin_ui_sequence_instance_init (WixlMsiTableAdminUISequence * self,
                                                gpointer klass)
{
}

GType
wixl_msi_table_admin_ui_sequence_get_type (void)
{
	static volatile gsize wixl_msi_table_admin_ui_sequence_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_admin_ui_sequence_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableAdminUISequenceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_admin_ui_sequence_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableAdminUISequence), 0, (GInstanceInitFunc) wixl_msi_table_admin_ui_sequence_instance_init, NULL };
		GType wixl_msi_table_admin_ui_sequence_type_id;
		wixl_msi_table_admin_ui_sequence_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE_SEQUENCE, "WixlMsiTableAdminUISequence", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_admin_ui_sequence_type_id__volatile, wixl_msi_table_admin_ui_sequence_type_id);
	}
	return wixl_msi_table_admin_ui_sequence_type_id__volatile;
}

WixlMsiTableAdvtExecuteSequence*
wixl_msi_table_advt_execute_sequence_construct (GType object_type)
{
	WixlMsiTableAdvtExecuteSequence * self = NULL;
	self = (WixlMsiTableAdvtExecuteSequence*) wixl_msi_table_sequence_construct (object_type);
	return self;
}

WixlMsiTableAdvtExecuteSequence*
wixl_msi_table_advt_execute_sequence_new (void)
{
	return wixl_msi_table_advt_execute_sequence_construct (WIXL_TYPE_MSI_TABLE_ADVT_EXECUTE_SEQUENCE);
}

static void
wixl_msi_table_advt_execute_sequence_class_init (WixlMsiTableAdvtExecuteSequenceClass * klass,
                                                 gpointer klass_data)
{
	wixl_msi_table_advt_execute_sequence_parent_class = g_type_class_peek_parent (klass);
	wixl_msi_table_sequence_set_sequence_table_name (WIXL_MSI_TABLE_SEQUENCE_CLASS (klass), "AdvtExecuteSequence");
	WIXL_MSI_TABLE_SEQUENCE_CLASS (klass)->flags = WIXL_MSI_DEFAULT_ACTION_FLAGS_ADVT_EXECUTE_SEQUENCE;
}

static void
wixl_msi_table_advt_execute_sequence_instance_init (WixlMsiTableAdvtExecuteSequence * self,
                                                    gpointer klass)
{
}

GType
wixl_msi_table_advt_execute_sequence_get_type (void)
{
	static volatile gsize wixl_msi_table_advt_execute_sequence_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_advt_execute_sequence_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableAdvtExecuteSequenceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_advt_execute_sequence_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableAdvtExecuteSequence), 0, (GInstanceInitFunc) wixl_msi_table_advt_execute_sequence_instance_init, NULL };
		GType wixl_msi_table_advt_execute_sequence_type_id;
		wixl_msi_table_advt_execute_sequence_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE_SEQUENCE, "WixlMsiTableAdvtExecuteSequence", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_advt_execute_sequence_type_id__volatile, wixl_msi_table_advt_execute_sequence_type_id);
	}
	return wixl_msi_table_advt_execute_sequence_type_id__volatile;
}

WixlMsiTableInstallExecuteSequence*
wixl_msi_table_install_execute_sequence_construct (GType object_type)
{
	WixlMsiTableInstallExecuteSequence * self = NULL;
	self = (WixlMsiTableInstallExecuteSequence*) wixl_msi_table_sequence_construct (object_type);
	return self;
}

WixlMsiTableInstallExecuteSequence*
wixl_msi_table_install_execute_sequence_new (void)
{
	return wixl_msi_table_install_execute_sequence_construct (WIXL_TYPE_MSI_TABLE_INSTALL_EXECUTE_SEQUENCE);
}

static void
wixl_msi_table_install_execute_sequence_class_init (WixlMsiTableInstallExecuteSequenceClass * klass,
                                                    gpointer klass_data)
{
	wixl_msi_table_install_execute_sequence_parent_class = g_type_class_peek_parent (klass);
	wixl_msi_table_sequence_set_sequence_table_name (WIXL_MSI_TABLE_SEQUENCE_CLASS (klass), "InstallExecuteSequence");
	WIXL_MSI_TABLE_SEQUENCE_CLASS (klass)->flags = WIXL_MSI_DEFAULT_ACTION_FLAGS_INSTALL_EXECUTE_SEQUENCE;
}

static void
wixl_msi_table_install_execute_sequence_instance_init (WixlMsiTableInstallExecuteSequence * self,
                                                       gpointer klass)
{
}

GType
wixl_msi_table_install_execute_sequence_get_type (void)
{
	static volatile gsize wixl_msi_table_install_execute_sequence_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_install_execute_sequence_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableInstallExecuteSequenceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_install_execute_sequence_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableInstallExecuteSequence), 0, (GInstanceInitFunc) wixl_msi_table_install_execute_sequence_instance_init, NULL };
		GType wixl_msi_table_install_execute_sequence_type_id;
		wixl_msi_table_install_execute_sequence_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE_SEQUENCE, "WixlMsiTableInstallExecuteSequence", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_install_execute_sequence_type_id__volatile, wixl_msi_table_install_execute_sequence_type_id);
	}
	return wixl_msi_table_install_execute_sequence_type_id__volatile;
}

WixlMsiTableInstallUISequence*
wixl_msi_table_install_ui_sequence_construct (GType object_type)
{
	WixlMsiTableInstallUISequence * self = NULL;
	self = (WixlMsiTableInstallUISequence*) wixl_msi_table_sequence_construct (object_type);
	return self;
}

WixlMsiTableInstallUISequence*
wixl_msi_table_install_ui_sequence_new (void)
{
	return wixl_msi_table_install_ui_sequence_construct (WIXL_TYPE_MSI_TABLE_INSTALL_UI_SEQUENCE);
}

static void
wixl_msi_table_install_ui_sequence_class_init (WixlMsiTableInstallUISequenceClass * klass,
                                               gpointer klass_data)
{
	wixl_msi_table_install_ui_sequence_parent_class = g_type_class_peek_parent (klass);
	wixl_msi_table_sequence_set_sequence_table_name (WIXL_MSI_TABLE_SEQUENCE_CLASS (klass), "InstallUISequence");
	WIXL_MSI_TABLE_SEQUENCE_CLASS (klass)->flags = WIXL_MSI_DEFAULT_ACTION_FLAGS_INSTALL_UI_SEQUENCE;
}

static void
wixl_msi_table_install_ui_sequence_instance_init (WixlMsiTableInstallUISequence * self,
                                                  gpointer klass)
{
}

GType
wixl_msi_table_install_ui_sequence_get_type (void)
{
	static volatile gsize wixl_msi_table_install_ui_sequence_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_install_ui_sequence_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableInstallUISequenceClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_install_ui_sequence_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableInstallUISequence), 0, (GInstanceInitFunc) wixl_msi_table_install_ui_sequence_instance_init, NULL };
		GType wixl_msi_table_install_ui_sequence_type_id;
		wixl_msi_table_install_ui_sequence_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE_SEQUENCE, "WixlMsiTableInstallUISequence", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_install_ui_sequence_type_id__volatile, wixl_msi_table_install_ui_sequence_type_id);
	}
	return wixl_msi_table_install_ui_sequence_type_id__volatile;
}

WixlMsiTableError*
wixl_msi_table_error_construct (GType object_type)
{
	WixlMsiTableError * self = NULL;
	self = (WixlMsiTableError*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableError*
wixl_msi_table_error_new (void)
{
	return wixl_msi_table_error_construct (WIXL_TYPE_MSI_TABLE_ERROR);
}

static void
wixl_msi_table_error_class_init (WixlMsiTableErrorClass * klass,
                                 gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	wixl_msi_table_error_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Error");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Error` (`Error` INT NOT NULL, `Message` CHAR(0) LOCALIZA" \
"BLE PRIMARY KEY `Error`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
}

static void
wixl_msi_table_error_instance_init (WixlMsiTableError * self,
                                    gpointer klass)
{
}

GType
wixl_msi_table_error_get_type (void)
{
	static volatile gsize wixl_msi_table_error_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_error_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableErrorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_error_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableError), 0, (GInstanceInitFunc) wixl_msi_table_error_instance_init, NULL };
		GType wixl_msi_table_error_type_id;
		wixl_msi_table_error_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableError", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_error_type_id__volatile, wixl_msi_table_error_type_id);
	}
	return wixl_msi_table_error_type_id__volatile;
}

LibmsiRecord*
wixl_msi_table_file_add (WixlMsiTableFile* self,
                         const gchar* File,
                         const gchar* Component,
                         const gchar* FileName,
                         gint FileSize,
                         gint Attributes,
                         gint Sequence,
                         GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	LibmsiRecord* _tmp6_;
	LibmsiRecord* _tmp13_;
	LibmsiRecord* _tmp14_;
	GError* _inner_error0_ = NULL;
	LibmsiRecord* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (File != NULL, NULL);
	g_return_val_if_fail (Component != NULL, NULL);
	g_return_val_if_fail (FileName != NULL, NULL);
	_tmp0_ = libmsi_record_new ((guint) 6);
	rec = _tmp0_;
	_tmp6_ = rec;
	if (!libmsi_record_set_string (_tmp6_, (guint) 1, File)) {
		_tmp5_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp5_ = !libmsi_record_set_string (_tmp7_, (guint) 2, Component);
	}
	if (_tmp5_) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp4_ = !libmsi_record_set_string (_tmp8_, (guint) 3, FileName);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp9_;
		_tmp9_ = rec;
		_tmp3_ = !libmsi_record_set_int (_tmp9_, (guint) 4, FileSize);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp10_;
		_tmp10_ = rec;
		_tmp2_ = !libmsi_record_set_int (_tmp10_, (guint) 5, Attributes);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp11_;
		_tmp11_ = rec;
		_tmp1_ = !libmsi_record_set_int (_tmp11_, (guint) 6, Sequence);
	}
	if (_tmp1_) {
		GError* _tmp12_;
		_tmp12_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp12_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return NULL;
	}
	_tmp13_ = rec;
	_tmp14_ = _g_object_ref0 (_tmp13_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp14_);
	result = rec;
	return result;
}

gboolean
wixl_msi_table_file_set_sequence (LibmsiRecord* rec,
                                  gint Sequence)
{
	gboolean result = FALSE;
	g_return_val_if_fail (rec != NULL, FALSE);
	result = libmsi_record_set_int (rec, (guint) 6, Sequence);
	return result;
}

WixlMsiTableFile*
wixl_msi_table_file_construct (GType object_type)
{
	WixlMsiTableFile * self = NULL;
	self = (WixlMsiTableFile*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableFile*
wixl_msi_table_file_new (void)
{
	return wixl_msi_table_file_construct (WIXL_TYPE_MSI_TABLE_FILE);
}

static void
wixl_msi_table_file_class_init (WixlMsiTableFileClass * klass,
                                gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_file_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("File");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `File` (`File` CHAR(72) NOT NULL, `Component_` CHAR(72) N" \
"OT NULL, `FileName` CHAR(255) NOT NULL LOCALIZABLE, `FileSize` LONG NO" \
"T NULL, `Version` CHAR(72), `Language` CHAR(20), `Attributes` INT, `Se" \
"quence` LONG NOT NULL PRIMARY KEY `File`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `File` (`File`, `Component_`, `FileName`, `FileSize`, `Att" \
"ributes`, `Sequence`) VALUES (?, ?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_file_instance_init (WixlMsiTableFile * self,
                                   gpointer klass)
{
}

GType
wixl_msi_table_file_get_type (void)
{
	static volatile gsize wixl_msi_table_file_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_file_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableFileClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_file_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableFile), 0, (GInstanceInitFunc) wixl_msi_table_file_instance_init, NULL };
		GType wixl_msi_table_file_type_id;
		wixl_msi_table_file_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableFile", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_file_type_id__volatile, wixl_msi_table_file_type_id);
	}
	return wixl_msi_table_file_type_id__volatile;
}

gboolean
wixl_msi_table_media_set_last_sequence (WixlMsiTableMedia* self,
                                        LibmsiRecord* rec,
                                        gint last_sequence)
{
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	g_return_val_if_fail (rec != NULL, FALSE);
	result = libmsi_record_set_int (rec, (guint) 2, last_sequence);
	return result;
}

LibmsiRecord*
wixl_msi_table_media_add (WixlMsiTableMedia* self,
                          const gchar* DiskId,
                          const gchar* DiskPrompt,
                          const gchar* Cabinet,
                          GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	LibmsiRecord* _tmp4_;
	LibmsiRecord* _tmp10_;
	LibmsiRecord* _tmp11_;
	GError* _inner_error0_ = NULL;
	LibmsiRecord* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (DiskId != NULL, NULL);
	g_return_val_if_fail (Cabinet != NULL, NULL);
	_tmp0_ = libmsi_record_new ((guint) 4);
	rec = _tmp0_;
	_tmp4_ = rec;
	if (!libmsi_record_set_int (_tmp4_, (guint) 1, atoi (DiskId))) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp5_;
		_tmp5_ = rec;
		_tmp3_ = !libmsi_record_set_int (_tmp5_, (guint) 2, 0);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		gboolean _tmp6_ = FALSE;
		if (DiskPrompt != NULL) {
			LibmsiRecord* _tmp7_;
			_tmp7_ = rec;
			_tmp6_ = !libmsi_record_set_string (_tmp7_, (guint) 3, DiskPrompt);
		} else {
			_tmp6_ = FALSE;
		}
		_tmp2_ = _tmp6_;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp8_, (guint) 4, Cabinet);
	}
	if (_tmp1_) {
		GError* _tmp9_;
		_tmp9_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp9_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return NULL;
	}
	_tmp10_ = rec;
	_tmp11_ = _g_object_ref0 (_tmp10_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp11_);
	result = rec;
	return result;
}

WixlMsiTableMedia*
wixl_msi_table_media_construct (GType object_type)
{
	WixlMsiTableMedia * self = NULL;
	self = (WixlMsiTableMedia*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableMedia*
wixl_msi_table_media_new (void)
{
	return wixl_msi_table_media_construct (WIXL_TYPE_MSI_TABLE_MEDIA);
}

static void
wixl_msi_table_media_class_init (WixlMsiTableMediaClass * klass,
                                 gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_media_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Media");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Media` (`DiskId` INT NOT NULL, `LastSequence` LONG NOT N" \
"ULL, `DiskPrompt` CHAR(64) LOCALIZABLE, `Cabinet` CHAR(255), `VolumeLa" \
"bel` CHAR(32), `Source` CHAR(72) PRIMARY KEY `DiskId`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Media` (`DiskId`, `LastSequence`, `DiskPrompt`, `Cabinet`" \
") VALUES (?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_media_instance_init (WixlMsiTableMedia * self,
                                    gpointer klass)
{
}

GType
wixl_msi_table_media_get_type (void)
{
	static volatile gsize wixl_msi_table_media_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_media_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableMediaClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_media_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableMedia), 0, (GInstanceInitFunc) wixl_msi_table_media_instance_init, NULL };
		GType wixl_msi_table_media_type_id;
		wixl_msi_table_media_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableMedia", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_media_type_id__volatile, wixl_msi_table_media_type_id);
	}
	return wixl_msi_table_media_type_id__volatile;
}

void
wixl_msi_table_upgrade_add (WixlMsiTableUpgrade* self,
                            const gchar* UpgradeCode,
                            const gchar* VersionMin,
                            const gchar* VersionMax,
                            gint Attributes,
                            const gchar* ActionProperty,
                            GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp12_;
	LibmsiRecord* _tmp13_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (UpgradeCode != NULL);
	g_return_if_fail (VersionMin != NULL);
	g_return_if_fail (ActionProperty != NULL);
	_tmp0_ = libmsi_record_new ((guint) 5);
	rec = _tmp0_;
	_tmp5_ = rec;
	if (!libmsi_record_set_string (_tmp5_, (guint) 1, UpgradeCode)) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp6_;
		_tmp6_ = rec;
		_tmp4_ = !libmsi_record_set_string (_tmp6_, (guint) 2, VersionMin);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		gboolean _tmp7_ = FALSE;
		if (VersionMax != NULL) {
			LibmsiRecord* _tmp8_;
			_tmp8_ = rec;
			_tmp7_ = !libmsi_record_set_string (_tmp8_, (guint) 3, VersionMax);
		} else {
			_tmp7_ = FALSE;
		}
		_tmp3_ = _tmp7_;
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp9_;
		_tmp9_ = rec;
		_tmp2_ = !libmsi_record_set_int (_tmp9_, (guint) 4, Attributes);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp10_;
		_tmp10_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp10_, (guint) 5, ActionProperty);
	}
	if (_tmp1_) {
		GError* _tmp11_;
		_tmp11_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp11_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp12_ = rec;
	_tmp13_ = _g_object_ref0 (_tmp12_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp13_);
	_g_object_unref0 (rec);
}

WixlMsiTableUpgrade*
wixl_msi_table_upgrade_construct (GType object_type)
{
	WixlMsiTableUpgrade * self = NULL;
	self = (WixlMsiTableUpgrade*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableUpgrade*
wixl_msi_table_upgrade_new (void)
{
	return wixl_msi_table_upgrade_construct (WIXL_TYPE_MSI_TABLE_UPGRADE);
}

static void
wixl_msi_table_upgrade_class_init (WixlMsiTableUpgradeClass * klass,
                                   gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_upgrade_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Upgrade");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Upgrade` (`UpgradeCode` CHAR(38) NOT NULL, `VersionMin` " \
"CHAR(20), `VersionMax` CHAR(20), `Language` CHAR(255), `Attributes` LO" \
"NG NOT NULL, `Remove` CHAR(255), `ActionProperty` CHAR(72) NOT NULL PR" \
"IMARY KEY `UpgradeCode`, `VersionMin`, `VersionMax`, `Language`, `Attr" \
"ibutes`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Upgrade` (`UpgradeCode`, `VersionMin`, `VersionMax`, `Att" \
"ributes`, `ActionProperty`) VALUES (?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_upgrade_instance_init (WixlMsiTableUpgrade * self,
                                      gpointer klass)
{
}

GType
wixl_msi_table_upgrade_get_type (void)
{
	static volatile gsize wixl_msi_table_upgrade_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_upgrade_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableUpgradeClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_upgrade_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableUpgrade), 0, (GInstanceInitFunc) wixl_msi_table_upgrade_instance_init, NULL };
		GType wixl_msi_table_upgrade_type_id;
		wixl_msi_table_upgrade_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableUpgrade", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_upgrade_type_id__volatile, wixl_msi_table_upgrade_type_id);
	}
	return wixl_msi_table_upgrade_type_id__volatile;
}

void
wixl_msi_table_launch_condition_add (WixlMsiTableLaunchCondition* self,
                                     const gchar* condition,
                                     const gchar* description,
                                     GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp6_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (condition != NULL);
	g_return_if_fail (description != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, condition)) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp3_;
		_tmp3_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp3_, (guint) 2, description);
	}
	if (_tmp1_) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp4_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp5_ = rec;
	_tmp6_ = _g_object_ref0 (_tmp5_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp6_);
	_g_object_unref0 (rec);
}

WixlMsiTableLaunchCondition*
wixl_msi_table_launch_condition_construct (GType object_type)
{
	WixlMsiTableLaunchCondition * self = NULL;
	self = (WixlMsiTableLaunchCondition*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableLaunchCondition*
wixl_msi_table_launch_condition_new (void)
{
	return wixl_msi_table_launch_condition_construct (WIXL_TYPE_MSI_TABLE_LAUNCH_CONDITION);
}

static void
wixl_msi_table_launch_condition_class_init (WixlMsiTableLaunchConditionClass * klass,
                                            gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_launch_condition_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("LaunchCondition");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `LaunchCondition` (`Condition` CHAR(255) NOT NULL, `Descr" \
"iption` CHAR(255) NOT NULL LOCALIZABLE PRIMARY KEY `Condition`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `LaunchCondition` (`Condition`, `Description`) VALUES (?, " \
"?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_launch_condition_instance_init (WixlMsiTableLaunchCondition * self,
                                               gpointer klass)
{
}

GType
wixl_msi_table_launch_condition_get_type (void)
{
	static volatile gsize wixl_msi_table_launch_condition_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_launch_condition_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableLaunchConditionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_launch_condition_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableLaunchCondition), 0, (GInstanceInitFunc) wixl_msi_table_launch_condition_instance_init, NULL };
		GType wixl_msi_table_launch_condition_type_id;
		wixl_msi_table_launch_condition_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableLaunchCondition", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_launch_condition_type_id__volatile, wixl_msi_table_launch_condition_type_id);
	}
	return wixl_msi_table_launch_condition_type_id__volatile;
}

void
wixl_msi_table_property_add (WixlMsiTableProperty* self,
                             const gchar* prop,
                             const gchar* value,
                             GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp6_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (prop != NULL);
	g_return_if_fail (value != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, prop)) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp3_;
		_tmp3_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp3_, (guint) 2, value);
	}
	if (_tmp1_) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp4_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp5_ = rec;
	_tmp6_ = _g_object_ref0 (_tmp5_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp6_);
	_g_object_unref0 (rec);
}

WixlMsiTableProperty*
wixl_msi_table_property_construct (GType object_type)
{
	WixlMsiTableProperty * self = NULL;
	self = (WixlMsiTableProperty*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableProperty*
wixl_msi_table_property_new (void)
{
	return wixl_msi_table_property_construct (WIXL_TYPE_MSI_TABLE_PROPERTY);
}

static void
wixl_msi_table_property_class_init (WixlMsiTablePropertyClass * klass,
                                    gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_property_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Property");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Property` (`Property` CHAR(72) NOT NULL, `Value` CHAR(0)" \
" NOT NULL LOCALIZABLE PRIMARY KEY `Property`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Property` (`Property`, `Value`) VALUES (?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_property_instance_init (WixlMsiTableProperty * self,
                                       gpointer klass)
{
}

GType
wixl_msi_table_property_get_type (void)
{
	static volatile gsize wixl_msi_table_property_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_property_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTablePropertyClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_property_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableProperty), 0, (GInstanceInitFunc) wixl_msi_table_property_instance_init, NULL };
		GType wixl_msi_table_property_type_id;
		wixl_msi_table_property_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableProperty", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_property_type_id__volatile, wixl_msi_table_property_type_id);
	}
	return wixl_msi_table_property_type_id__volatile;
}

void
wixl_msi_table_directory_add (WixlMsiTableDirectory* self,
                              const gchar* Directory,
                              const gchar* Parent,
                              const gchar* DefaultDir,
                              GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	LibmsiRecord* _tmp3_;
	LibmsiRecord* _tmp7_;
	LibmsiRecord* _tmp8_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Directory != NULL);
	g_return_if_fail (DefaultDir != NULL);
	_tmp0_ = libmsi_record_new ((guint) 3);
	rec = _tmp0_;
	_tmp3_ = rec;
	if (!libmsi_record_set_string (_tmp3_, (guint) 1, Directory)) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp4_;
		_tmp4_ = rec;
		_tmp2_ = !libmsi_record_set_string (_tmp4_, (guint) 2, Parent);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp5_;
		_tmp5_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp5_, (guint) 3, DefaultDir);
	}
	if (_tmp1_) {
		GError* _tmp6_;
		_tmp6_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp6_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp7_ = rec;
	_tmp8_ = _g_object_ref0 (_tmp7_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp8_);
	_g_object_unref0 (rec);
}

WixlMsiTableDirectory*
wixl_msi_table_directory_construct (GType object_type)
{
	WixlMsiTableDirectory * self = NULL;
	self = (WixlMsiTableDirectory*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableDirectory*
wixl_msi_table_directory_new (void)
{
	return wixl_msi_table_directory_construct (WIXL_TYPE_MSI_TABLE_DIRECTORY);
}

static void
wixl_msi_table_directory_class_init (WixlMsiTableDirectoryClass * klass,
                                     gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_directory_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Directory");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Directory` (`Directory` CHAR(72) NOT NULL, `Directory_Pa" \
"rent` CHAR(72), `DefaultDir` CHAR(255) NOT NULL LOCALIZABLE PRIMARY KE" \
"Y `Directory`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Directory` (`Directory`, `Directory_Parent`, `DefaultDir`" \
") VALUES (?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_directory_instance_init (WixlMsiTableDirectory * self,
                                        gpointer klass)
{
}

GType
wixl_msi_table_directory_get_type (void)
{
	static volatile gsize wixl_msi_table_directory_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_directory_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableDirectoryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_directory_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableDirectory), 0, (GInstanceInitFunc) wixl_msi_table_directory_instance_init, NULL };
		GType wixl_msi_table_directory_type_id;
		wixl_msi_table_directory_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableDirectory", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_directory_type_id__volatile, wixl_msi_table_directory_type_id);
	}
	return wixl_msi_table_directory_type_id__volatile;
}

void
wixl_msi_table_component_add (WixlMsiTableComponent* self,
                              const gchar* Component,
                              const gchar* ComponentId,
                              const gchar* Directory,
                              gint Attributes,
                              const gchar* KeyPath,
                              GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp11_;
	LibmsiRecord* _tmp12_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Component != NULL);
	g_return_if_fail (ComponentId != NULL);
	g_return_if_fail (Directory != NULL);
	_tmp0_ = libmsi_record_new ((guint) 5);
	rec = _tmp0_;
	_tmp5_ = rec;
	if (!libmsi_record_set_string (_tmp5_, (guint) 1, Component)) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp6_;
		_tmp6_ = rec;
		_tmp4_ = !libmsi_record_set_string (_tmp6_, (guint) 2, ComponentId);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp3_ = !libmsi_record_set_string (_tmp7_, (guint) 3, Directory);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp2_ = !libmsi_record_set_int (_tmp8_, (guint) 4, Attributes);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp9_;
		_tmp9_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp9_, (guint) 5, KeyPath);
	}
	if (_tmp1_) {
		GError* _tmp10_;
		_tmp10_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp10_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp11_ = rec;
	_tmp12_ = _g_object_ref0 (_tmp11_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp12_);
	_g_object_unref0 (rec);
}

WixlMsiTableComponent*
wixl_msi_table_component_construct (GType object_type)
{
	WixlMsiTableComponent * self = NULL;
	self = (WixlMsiTableComponent*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableComponent*
wixl_msi_table_component_new (void)
{
	return wixl_msi_table_component_construct (WIXL_TYPE_MSI_TABLE_COMPONENT);
}

static void
wixl_msi_table_component_class_init (WixlMsiTableComponentClass * klass,
                                     gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_component_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Component");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Component` (`Component` CHAR(72) NOT NULL, `ComponentId`" \
" CHAR(38), `Directory_` CHAR(72) NOT NULL, `Attributes` INT NOT NULL, " \
"`Condition` CHAR(255), `KeyPath` CHAR(72) PRIMARY KEY `Component`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Component` (`Component`, `ComponentId`, `Directory_`, `At" \
"tributes`, `KeyPath`) VALUES (?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_component_instance_init (WixlMsiTableComponent * self,
                                        gpointer klass)
{
}

GType
wixl_msi_table_component_get_type (void)
{
	static volatile gsize wixl_msi_table_component_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_component_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableComponentClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_component_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableComponent), 0, (GInstanceInitFunc) wixl_msi_table_component_instance_init, NULL };
		GType wixl_msi_table_component_type_id;
		wixl_msi_table_component_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableComponent", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_component_type_id__volatile, wixl_msi_table_component_type_id);
	}
	return wixl_msi_table_component_type_id__volatile;
}

void
wixl_msi_table_feature_components_add (WixlMsiTableFeatureComponents* self,
                                       const gchar* Feature,
                                       const gchar* Component,
                                       GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp6_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Feature != NULL);
	g_return_if_fail (Component != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, Feature)) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp3_;
		_tmp3_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp3_, (guint) 2, Component);
	}
	if (_tmp1_) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp4_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp5_ = rec;
	_tmp6_ = _g_object_ref0 (_tmp5_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp6_);
	_g_object_unref0 (rec);
}

WixlMsiTableFeatureComponents*
wixl_msi_table_feature_components_construct (GType object_type)
{
	WixlMsiTableFeatureComponents * self = NULL;
	self = (WixlMsiTableFeatureComponents*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableFeatureComponents*
wixl_msi_table_feature_components_new (void)
{
	return wixl_msi_table_feature_components_construct (WIXL_TYPE_MSI_TABLE_FEATURE_COMPONENTS);
}

static void
wixl_msi_table_feature_components_class_init (WixlMsiTableFeatureComponentsClass * klass,
                                              gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_feature_components_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("FeatureComponents");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `FeatureComponents` (`Feature_` CHAR(38) NOT NULL, `Compo" \
"nent_` CHAR(72) NOT NULL PRIMARY KEY `Feature_`, `Component_`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `FeatureComponents` (`Feature_`, `Component_`) VALUES (?, " \
"?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_feature_components_instance_init (WixlMsiTableFeatureComponents * self,
                                                 gpointer klass)
{
}

GType
wixl_msi_table_feature_components_get_type (void)
{
	static volatile gsize wixl_msi_table_feature_components_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_feature_components_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableFeatureComponentsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_feature_components_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableFeatureComponents), 0, (GInstanceInitFunc) wixl_msi_table_feature_components_instance_init, NULL };
		GType wixl_msi_table_feature_components_type_id;
		wixl_msi_table_feature_components_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableFeatureComponents", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_feature_components_type_id__volatile, wixl_msi_table_feature_components_type_id);
	}
	return wixl_msi_table_feature_components_type_id__volatile;
}

void
wixl_msi_table_registry_add (WixlMsiTableRegistry* self,
                             const gchar* Registry,
                             gint Root,
                             const gchar* Key,
                             const gchar* Component,
                             const gchar* Name,
                             const gchar* Value,
                             GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	LibmsiRecord* _tmp6_;
	LibmsiRecord* _tmp15_;
	LibmsiRecord* _tmp16_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Registry != NULL);
	g_return_if_fail (Key != NULL);
	g_return_if_fail (Component != NULL);
	_tmp0_ = libmsi_record_new ((guint) 6);
	rec = _tmp0_;
	_tmp6_ = rec;
	if (!libmsi_record_set_string (_tmp6_, (guint) 1, Registry)) {
		_tmp5_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp5_ = !libmsi_record_set_int (_tmp7_, (guint) 2, Root);
	}
	if (_tmp5_) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp4_ = !libmsi_record_set_string (_tmp8_, (guint) 3, Key);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp9_;
		_tmp9_ = rec;
		_tmp3_ = !libmsi_record_set_string (_tmp9_, (guint) 4, Component);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		gboolean _tmp10_ = FALSE;
		if (Name != NULL) {
			LibmsiRecord* _tmp11_;
			_tmp11_ = rec;
			_tmp10_ = !libmsi_record_set_string (_tmp11_, (guint) 5, Name);
		} else {
			_tmp10_ = FALSE;
		}
		_tmp2_ = _tmp10_;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		gboolean _tmp12_ = FALSE;
		if (Value != NULL) {
			LibmsiRecord* _tmp13_;
			_tmp13_ = rec;
			_tmp12_ = !libmsi_record_set_string (_tmp13_, (guint) 6, Value);
		} else {
			_tmp12_ = FALSE;
		}
		_tmp1_ = _tmp12_;
	}
	if (_tmp1_) {
		GError* _tmp14_;
		_tmp14_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp14_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp15_ = rec;
	_tmp16_ = _g_object_ref0 (_tmp15_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp16_);
	_g_object_unref0 (rec);
}

WixlMsiTableRegistry*
wixl_msi_table_registry_construct (GType object_type)
{
	WixlMsiTableRegistry * self = NULL;
	self = (WixlMsiTableRegistry*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableRegistry*
wixl_msi_table_registry_new (void)
{
	return wixl_msi_table_registry_construct (WIXL_TYPE_MSI_TABLE_REGISTRY);
}

static void
wixl_msi_table_registry_class_init (WixlMsiTableRegistryClass * klass,
                                    gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_registry_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Registry");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Registry` (`Registry` CHAR(72) NOT NULL, `Root` INT NOT " \
"NULL, `Key` CHAR(255) NOT NULL LOCALIZABLE, `Name` CHAR(255) LOCALIZAB" \
"LE, `Value` CHAR(0) LOCALIZABLE, `Component_` CHAR(72) NOT NULL PRIMAR" \
"Y KEY `Registry`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Registry` (`Registry`, `Root`, `Key`, `Component_`, `Name" \
"`, `Value`) VALUES (?, ?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_registry_instance_init (WixlMsiTableRegistry * self,
                                       gpointer klass)
{
}

GType
wixl_msi_table_registry_get_type (void)
{
	static volatile gsize wixl_msi_table_registry_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_registry_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableRegistryClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_registry_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableRegistry), 0, (GInstanceInitFunc) wixl_msi_table_registry_instance_init, NULL };
		GType wixl_msi_table_registry_type_id;
		wixl_msi_table_registry_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableRegistry", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_registry_type_id__volatile, wixl_msi_table_registry_type_id);
	}
	return wixl_msi_table_registry_type_id__volatile;
}

LibmsiRecord*
wixl_msi_table_shortcut_add (WixlMsiTableShortcut* self,
                             const gchar* Shortcut,
                             const gchar* Directory,
                             const gchar* Name,
                             const gchar* Component,
                             GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	LibmsiRecord* _tmp4_;
	LibmsiRecord* _tmp9_;
	LibmsiRecord* _tmp10_;
	GError* _inner_error0_ = NULL;
	LibmsiRecord* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (Shortcut != NULL, NULL);
	g_return_val_if_fail (Directory != NULL, NULL);
	g_return_val_if_fail (Name != NULL, NULL);
	g_return_val_if_fail (Component != NULL, NULL);
	_tmp0_ = libmsi_record_new ((guint) 10);
	rec = _tmp0_;
	_tmp4_ = rec;
	if (!libmsi_record_set_string (_tmp4_, (guint) 1, Shortcut)) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp5_;
		_tmp5_ = rec;
		_tmp3_ = !libmsi_record_set_string (_tmp5_, (guint) 2, Directory);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp6_;
		_tmp6_ = rec;
		_tmp2_ = !libmsi_record_set_string (_tmp6_, (guint) 3, Name);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp7_, (guint) 4, Component);
	}
	if (_tmp1_) {
		GError* _tmp8_;
		_tmp8_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp8_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return NULL;
	}
	_tmp9_ = rec;
	_tmp10_ = _g_object_ref0 (_tmp9_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp10_);
	result = rec;
	return result;
}

void
wixl_msi_table_shortcut_set_target (LibmsiRecord* rec,
                                    const gchar* Target,
                                    GError** error)
{
	GError* _inner_error0_ = NULL;
	g_return_if_fail (rec != NULL);
	g_return_if_fail (Target != NULL);
	if (!libmsi_record_set_string (rec, (guint) 5, Target)) {
		GError* _tmp0_;
		_tmp0_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to set record");
		_inner_error0_ = _tmp0_;
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_table_shortcut_set_icon (LibmsiRecord* rec,
                                  const gchar* Icon,
                                  GError** error)
{
	GError* _inner_error0_ = NULL;
	g_return_if_fail (rec != NULL);
	g_return_if_fail (Icon != NULL);
	if (!libmsi_record_set_string (rec, (guint) 6, Icon)) {
		GError* _tmp0_;
		_tmp0_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to set record");
		_inner_error0_ = _tmp0_;
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_table_shortcut_set_icon_index (LibmsiRecord* rec,
                                        gint IconIndex,
                                        GError** error)
{
	GError* _inner_error0_ = NULL;
	g_return_if_fail (rec != NULL);
	if (!libmsi_record_set_int (rec, (guint) 7, IconIndex)) {
		GError* _tmp0_;
		_tmp0_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to set record");
		_inner_error0_ = _tmp0_;
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_table_shortcut_set_working_dir (LibmsiRecord* rec,
                                         const gchar* WkDir,
                                         GError** error)
{
	GError* _inner_error0_ = NULL;
	g_return_if_fail (rec != NULL);
	g_return_if_fail (WkDir != NULL);
	if (!libmsi_record_set_string (rec, (guint) 8, WkDir)) {
		GError* _tmp0_;
		_tmp0_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to set record");
		_inner_error0_ = _tmp0_;
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_table_shortcut_set_description (LibmsiRecord* rec,
                                         const gchar* Description,
                                         GError** error)
{
	GError* _inner_error0_ = NULL;
	g_return_if_fail (rec != NULL);
	g_return_if_fail (Description != NULL);
	if (!libmsi_record_set_string (rec, (guint) 9, Description)) {
		GError* _tmp0_;
		_tmp0_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to set record");
		_inner_error0_ = _tmp0_;
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_table_shortcut_set_arguments (LibmsiRecord* rec,
                                       const gchar* Arguments,
                                       GError** error)
{
	GError* _inner_error0_ = NULL;
	g_return_if_fail (rec != NULL);
	g_return_if_fail (Arguments != NULL);
	if (!libmsi_record_set_string (rec, (guint) 10, Arguments)) {
		GError* _tmp0_;
		_tmp0_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to set record");
		_inner_error0_ = _tmp0_;
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

WixlMsiTableShortcut*
wixl_msi_table_shortcut_construct (GType object_type)
{
	WixlMsiTableShortcut * self = NULL;
	self = (WixlMsiTableShortcut*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableShortcut*
wixl_msi_table_shortcut_new (void)
{
	return wixl_msi_table_shortcut_construct (WIXL_TYPE_MSI_TABLE_SHORTCUT);
}

static void
wixl_msi_table_shortcut_class_init (WixlMsiTableShortcutClass * klass,
                                    gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_shortcut_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Shortcut");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Shortcut` (`Shortcut` CHAR(72) NOT NULL, `Directory_` CH" \
"AR(72) NOT NULL, `Name` CHAR(128) NOT NULL LOCALIZABLE, `Component_` C" \
"HAR(72) NOT NULL, `Target` CHAR(72) NOT NULL, `Arguments` CHAR(255), `" \
"Description` CHAR(255) LOCALIZABLE, `Hotkey` INT, `Icon_` CHAR(72), `I" \
"conIndex` INT, `ShowCmd` INT, `WkDir` CHAR(72), `DisplayResourceDLL` C" \
"HAR(255), `DisplayResourceId` INT, `DescriptionResourceDLL` CHAR(255)," \
" `DescriptionResourceId` INT PRIMARY KEY `Shortcut`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Shortcut` (`Shortcut`, `Directory_`, `Name`, `Component_`" \
", `Target`, `Icon_`, `IconIndex`, `WkDir`, `Description`, `Arguments`)" \
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_shortcut_instance_init (WixlMsiTableShortcut * self,
                                       gpointer klass)
{
}

GType
wixl_msi_table_shortcut_get_type (void)
{
	static volatile gsize wixl_msi_table_shortcut_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_shortcut_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableShortcutClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_shortcut_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableShortcut), 0, (GInstanceInitFunc) wixl_msi_table_shortcut_instance_init, NULL };
		GType wixl_msi_table_shortcut_type_id;
		wixl_msi_table_shortcut_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableShortcut", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_shortcut_type_id__volatile, wixl_msi_table_shortcut_type_id);
	}
	return wixl_msi_table_shortcut_type_id__volatile;
}

void
wixl_msi_table_create_folder_add (WixlMsiTableCreateFolder* self,
                                  const gchar* Directory,
                                  const gchar* Component,
                                  GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp6_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Directory != NULL);
	g_return_if_fail (Component != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, Directory)) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp3_;
		_tmp3_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp3_, (guint) 2, Component);
	}
	if (_tmp1_) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp4_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp5_ = rec;
	_tmp6_ = _g_object_ref0 (_tmp5_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp6_);
	_g_object_unref0 (rec);
}

WixlMsiTableCreateFolder*
wixl_msi_table_create_folder_construct (GType object_type)
{
	WixlMsiTableCreateFolder * self = NULL;
	self = (WixlMsiTableCreateFolder*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableCreateFolder*
wixl_msi_table_create_folder_new (void)
{
	return wixl_msi_table_create_folder_construct (WIXL_TYPE_MSI_TABLE_CREATE_FOLDER);
}

static void
wixl_msi_table_create_folder_class_init (WixlMsiTableCreateFolderClass * klass,
                                         gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_create_folder_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("CreateFolder");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `CreateFolder` (`Directory_` CHAR(72) NOT NULL, `Componen" \
"t_` CHAR(72) NOT NULL PRIMARY KEY `Directory_`, `Component_`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `CreateFolder` (`Directory_`, `Component_`) VALUES (?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_create_folder_instance_init (WixlMsiTableCreateFolder * self,
                                            gpointer klass)
{
}

GType
wixl_msi_table_create_folder_get_type (void)
{
	static volatile gsize wixl_msi_table_create_folder_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_create_folder_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableCreateFolderClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_create_folder_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableCreateFolder), 0, (GInstanceInitFunc) wixl_msi_table_create_folder_instance_init, NULL };
		GType wixl_msi_table_create_folder_type_id;
		wixl_msi_table_create_folder_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableCreateFolder", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_create_folder_type_id__volatile, wixl_msi_table_create_folder_type_id);
	}
	return wixl_msi_table_create_folder_type_id__volatile;
}

void
wixl_msi_table_remove_file_add (WixlMsiTableRemoveFile* self,
                                const gchar* FileKey,
                                const gchar* Component,
                                const gchar* DirProperty,
                                gint InstallMode,
                                GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	LibmsiRecord* _tmp4_;
	LibmsiRecord* _tmp9_;
	LibmsiRecord* _tmp10_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (FileKey != NULL);
	g_return_if_fail (Component != NULL);
	g_return_if_fail (DirProperty != NULL);
	_tmp0_ = libmsi_record_new ((guint) 4);
	rec = _tmp0_;
	_tmp4_ = rec;
	if (!libmsi_record_set_string (_tmp4_, (guint) 1, FileKey)) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp5_;
		_tmp5_ = rec;
		_tmp3_ = !libmsi_record_set_string (_tmp5_, (guint) 2, Component);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp6_;
		_tmp6_ = rec;
		_tmp2_ = !libmsi_record_set_string (_tmp6_, (guint) 3, DirProperty);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp1_ = !libmsi_record_set_int (_tmp7_, (guint) 4, InstallMode);
	}
	if (_tmp1_) {
		GError* _tmp8_;
		_tmp8_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp8_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp9_ = rec;
	_tmp10_ = _g_object_ref0 (_tmp9_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp10_);
	_g_object_unref0 (rec);
}

WixlMsiTableRemoveFile*
wixl_msi_table_remove_file_construct (GType object_type)
{
	WixlMsiTableRemoveFile * self = NULL;
	self = (WixlMsiTableRemoveFile*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableRemoveFile*
wixl_msi_table_remove_file_new (void)
{
	return wixl_msi_table_remove_file_construct (WIXL_TYPE_MSI_TABLE_REMOVE_FILE);
}

static void
wixl_msi_table_remove_file_class_init (WixlMsiTableRemoveFileClass * klass,
                                       gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_remove_file_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("RemoveFile");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `RemoveFile` (`FileKey` CHAR(72) NOT NULL, `Component_` C" \
"HAR(72) NOT NULL, `FileName` CHAR(255) LOCALIZABLE, `DirProperty` CHAR" \
"(72) NOT NULL, `InstallMode` INT NOT NULL PRIMARY KEY `FileKey`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `RemoveFile` (`FileKey`, `Component_`, `DirProperty`, `Ins" \
"tallMode`) VALUES (?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_remove_file_instance_init (WixlMsiTableRemoveFile * self,
                                          gpointer klass)
{
}

GType
wixl_msi_table_remove_file_get_type (void)
{
	static volatile gsize wixl_msi_table_remove_file_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_remove_file_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableRemoveFileClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_remove_file_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableRemoveFile), 0, (GInstanceInitFunc) wixl_msi_table_remove_file_instance_init, NULL };
		GType wixl_msi_table_remove_file_type_id;
		wixl_msi_table_remove_file_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableRemoveFile", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_remove_file_type_id__volatile, wixl_msi_table_remove_file_type_id);
	}
	return wixl_msi_table_remove_file_type_id__volatile;
}

void
wixl_msi_table_feature_add (WixlMsiTableFeature* self,
                            const gchar* Feature,
                            gint Display,
                            gint Level,
                            gint Attributes,
                            const gchar* Parent,
                            const gchar* Title,
                            const gchar* Description,
                            const gchar* ConfigurableDirectory,
                            GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	gboolean _tmp6_ = FALSE;
	gboolean _tmp7_ = FALSE;
	LibmsiRecord* _tmp8_;
	LibmsiRecord* _tmp21_;
	LibmsiRecord* _tmp22_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Feature != NULL);
	_tmp0_ = libmsi_record_new ((guint) 8);
	rec = _tmp0_;
	_tmp8_ = rec;
	if (!libmsi_record_set_string (_tmp8_, (guint) 1, Feature)) {
		_tmp7_ = TRUE;
	} else {
		LibmsiRecord* _tmp9_;
		_tmp9_ = rec;
		_tmp7_ = !libmsi_record_set_int (_tmp9_, (guint) 2, Display);
	}
	if (_tmp7_) {
		_tmp6_ = TRUE;
	} else {
		LibmsiRecord* _tmp10_;
		_tmp10_ = rec;
		_tmp6_ = !libmsi_record_set_int (_tmp10_, (guint) 3, Level);
	}
	if (_tmp6_) {
		_tmp5_ = TRUE;
	} else {
		LibmsiRecord* _tmp11_;
		_tmp11_ = rec;
		_tmp5_ = !libmsi_record_set_int (_tmp11_, (guint) 4, Attributes);
	}
	if (_tmp5_) {
		_tmp4_ = TRUE;
	} else {
		gboolean _tmp12_ = FALSE;
		if (Parent != NULL) {
			LibmsiRecord* _tmp13_;
			_tmp13_ = rec;
			_tmp12_ = !libmsi_record_set_string (_tmp13_, (guint) 5, Parent);
		} else {
			_tmp12_ = FALSE;
		}
		_tmp4_ = _tmp12_;
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		gboolean _tmp14_ = FALSE;
		if (Title != NULL) {
			LibmsiRecord* _tmp15_;
			_tmp15_ = rec;
			_tmp14_ = !libmsi_record_set_string (_tmp15_, (guint) 6, Title);
		} else {
			_tmp14_ = FALSE;
		}
		_tmp3_ = _tmp14_;
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		gboolean _tmp16_ = FALSE;
		if (Description != NULL) {
			LibmsiRecord* _tmp17_;
			_tmp17_ = rec;
			_tmp16_ = !libmsi_record_set_string (_tmp17_, (guint) 7, Description);
		} else {
			_tmp16_ = FALSE;
		}
		_tmp2_ = _tmp16_;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		gboolean _tmp18_ = FALSE;
		if (ConfigurableDirectory != NULL) {
			LibmsiRecord* _tmp19_;
			_tmp19_ = rec;
			_tmp18_ = !libmsi_record_set_string (_tmp19_, (guint) 8, ConfigurableDirectory);
		} else {
			_tmp18_ = FALSE;
		}
		_tmp1_ = _tmp18_;
	}
	if (_tmp1_) {
		GError* _tmp20_;
		_tmp20_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp20_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp21_ = rec;
	_tmp22_ = _g_object_ref0 (_tmp21_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp22_);
	_g_object_unref0 (rec);
}

WixlMsiTableFeature*
wixl_msi_table_feature_construct (GType object_type)
{
	WixlMsiTableFeature * self = NULL;
	self = (WixlMsiTableFeature*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableFeature*
wixl_msi_table_feature_new (void)
{
	return wixl_msi_table_feature_construct (WIXL_TYPE_MSI_TABLE_FEATURE);
}

static void
wixl_msi_table_feature_class_init (WixlMsiTableFeatureClass * klass,
                                   gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_feature_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Feature");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Feature` (`Feature` CHAR(38) NOT NULL, `Feature_Parent` " \
"CHAR(38), `Title` CHAR(64) LOCALIZABLE, `Description` CHAR(255) LOCALI" \
"ZABLE, `Display` INT, `Level` INT NOT NULL, `Directory_` CHAR(72), `At" \
"tributes` INT NOT NULL PRIMARY KEY `Feature`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `Feature` (`Feature`, `Display`, `Level`, `Attributes`, `F" \
"eature_Parent`, `Title`, `Description`, `Directory_`) VALUES (?, ?, ?," \
" ?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_feature_instance_init (WixlMsiTableFeature * self,
                                      gpointer klass)
{
}

GType
wixl_msi_table_feature_get_type (void)
{
	static volatile gsize wixl_msi_table_feature_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_feature_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableFeatureClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_feature_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableFeature), 0, (GInstanceInitFunc) wixl_msi_table_feature_instance_init, NULL };
		GType wixl_msi_table_feature_type_id;
		wixl_msi_table_feature_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableFeature", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_feature_type_id__volatile, wixl_msi_table_feature_type_id);
	}
	return wixl_msi_table_feature_type_id__volatile;
}

void
wixl_msi_table_service_control_add (WixlMsiTableServiceControl* self,
                                    const gchar* ServiceControl,
                                    const gchar* Name,
                                    gint Event,
                                    const gchar* Arguments,
                                    gboolean* Wait,
                                    const gchar* Component,
                                    GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	LibmsiRecord* _tmp6_;
	LibmsiRecord* _tmp16_;
	LibmsiRecord* _tmp17_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (ServiceControl != NULL);
	g_return_if_fail (Name != NULL);
	g_return_if_fail (Component != NULL);
	_tmp0_ = libmsi_record_new ((guint) 6);
	rec = _tmp0_;
	_tmp6_ = rec;
	if (!libmsi_record_set_string (_tmp6_, (guint) 1, ServiceControl)) {
		_tmp5_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp5_ = !libmsi_record_set_string (_tmp7_, (guint) 2, Name);
	}
	if (_tmp5_) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp4_ = !libmsi_record_set_int (_tmp8_, (guint) 3, Event);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		gboolean _tmp9_ = FALSE;
		if (Arguments != NULL) {
			LibmsiRecord* _tmp10_;
			_tmp10_ = rec;
			_tmp9_ = !libmsi_record_set_string (_tmp10_, (guint) 4, Arguments);
		} else {
			_tmp9_ = FALSE;
		}
		_tmp3_ = _tmp9_;
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		gboolean _tmp11_ = FALSE;
		if (Wait != NULL) {
			gint _tmp12_ = 0;
			LibmsiRecord* _tmp13_;
			if (*Wait) {
				_tmp12_ = 1;
			} else {
				_tmp12_ = 0;
			}
			_tmp13_ = rec;
			_tmp11_ = !libmsi_record_set_int (_tmp13_, (guint) 5, _tmp12_);
		} else {
			_tmp11_ = FALSE;
		}
		_tmp2_ = _tmp11_;
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp14_;
		_tmp14_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp14_, (guint) 6, Component);
	}
	if (_tmp1_) {
		GError* _tmp15_;
		_tmp15_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp15_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp16_ = rec;
	_tmp17_ = _g_object_ref0 (_tmp16_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp17_);
	_g_object_unref0 (rec);
}

WixlMsiTableServiceControl*
wixl_msi_table_service_control_construct (GType object_type)
{
	WixlMsiTableServiceControl * self = NULL;
	self = (WixlMsiTableServiceControl*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableServiceControl*
wixl_msi_table_service_control_new (void)
{
	return wixl_msi_table_service_control_construct (WIXL_TYPE_MSI_TABLE_SERVICE_CONTROL);
}

static void
wixl_msi_table_service_control_class_init (WixlMsiTableServiceControlClass * klass,
                                           gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_service_control_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("ServiceControl");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `ServiceControl` (`ServiceControl` CHAR(72) NOT NULL, `Na" \
"me` CHAR(255) NOT NULL LOCALIZABLE, `Event` INT NOT NULL, `Arguments` " \
"CHAR(255) LOCALIZABLE, `Wait` INT, `Component_` CHAR(72) NOT NULL PRIM" \
"ARY KEY `ServiceControl`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `ServiceControl` (`ServiceControl`, `Name`, `Event`, `Argu" \
"ments`, `Wait`, `Component_`) VALUES (?, ?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_service_control_instance_init (WixlMsiTableServiceControl * self,
                                              gpointer klass)
{
}

GType
wixl_msi_table_service_control_get_type (void)
{
	static volatile gsize wixl_msi_table_service_control_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_service_control_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableServiceControlClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_service_control_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableServiceControl), 0, (GInstanceInitFunc) wixl_msi_table_service_control_instance_init, NULL };
		GType wixl_msi_table_service_control_type_id;
		wixl_msi_table_service_control_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableServiceControl", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_service_control_type_id__volatile, wixl_msi_table_service_control_type_id);
	}
	return wixl_msi_table_service_control_type_id__volatile;
}

void
wixl_msi_table_service_install_add (WixlMsiTableServiceInstall* self,
                                    const gchar* ServiceInstall,
                                    const gchar* Name,
                                    const gchar* DisplayName,
                                    gint ServiceType,
                                    gint StartType,
                                    gint ErrorControl,
                                    const gchar* LoadOrderGroup,
                                    const gchar* Dependencies,
                                    const gchar* StartName,
                                    const gchar* Password,
                                    const gchar* Arguments,
                                    const gchar* Component,
                                    const gchar* Description,
                                    GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	gboolean _tmp5_ = FALSE;
	gboolean _tmp6_ = FALSE;
	gboolean _tmp7_ = FALSE;
	gboolean _tmp8_ = FALSE;
	gboolean _tmp9_ = FALSE;
	gboolean _tmp10_ = FALSE;
	gboolean _tmp11_ = FALSE;
	gboolean _tmp12_ = FALSE;
	LibmsiRecord* _tmp13_;
	LibmsiRecord* _tmp34_;
	LibmsiRecord* _tmp35_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (ServiceInstall != NULL);
	g_return_if_fail (Name != NULL);
	g_return_if_fail (Component != NULL);
	_tmp0_ = libmsi_record_new ((guint) 13);
	rec = _tmp0_;
	_tmp13_ = rec;
	if (!libmsi_record_set_string (_tmp13_, (guint) 1, ServiceInstall)) {
		_tmp12_ = TRUE;
	} else {
		LibmsiRecord* _tmp14_;
		_tmp14_ = rec;
		_tmp12_ = !libmsi_record_set_string (_tmp14_, (guint) 2, Name);
	}
	if (_tmp12_) {
		_tmp11_ = TRUE;
	} else {
		gboolean _tmp15_ = FALSE;
		if (DisplayName != NULL) {
			LibmsiRecord* _tmp16_;
			_tmp16_ = rec;
			_tmp15_ = !libmsi_record_set_string (_tmp16_, (guint) 3, DisplayName);
		} else {
			_tmp15_ = FALSE;
		}
		_tmp11_ = _tmp15_;
	}
	if (_tmp11_) {
		_tmp10_ = TRUE;
	} else {
		LibmsiRecord* _tmp17_;
		_tmp17_ = rec;
		_tmp10_ = !libmsi_record_set_int (_tmp17_, (guint) 4, ServiceType);
	}
	if (_tmp10_) {
		_tmp9_ = TRUE;
	} else {
		LibmsiRecord* _tmp18_;
		_tmp18_ = rec;
		_tmp9_ = !libmsi_record_set_int (_tmp18_, (guint) 5, StartType);
	}
	if (_tmp9_) {
		_tmp8_ = TRUE;
	} else {
		LibmsiRecord* _tmp19_;
		_tmp19_ = rec;
		_tmp8_ = !libmsi_record_set_int (_tmp19_, (guint) 6, ErrorControl);
	}
	if (_tmp8_) {
		_tmp7_ = TRUE;
	} else {
		gboolean _tmp20_ = FALSE;
		if (LoadOrderGroup != NULL) {
			LibmsiRecord* _tmp21_;
			_tmp21_ = rec;
			_tmp20_ = !libmsi_record_set_string (_tmp21_, (guint) 7, LoadOrderGroup);
		} else {
			_tmp20_ = FALSE;
		}
		_tmp7_ = _tmp20_;
	}
	if (_tmp7_) {
		_tmp6_ = TRUE;
	} else {
		gboolean _tmp22_ = FALSE;
		if (Dependencies != NULL) {
			LibmsiRecord* _tmp23_;
			_tmp23_ = rec;
			_tmp22_ = !libmsi_record_set_string (_tmp23_, (guint) 8, Dependencies);
		} else {
			_tmp22_ = FALSE;
		}
		_tmp6_ = _tmp22_;
	}
	if (_tmp6_) {
		_tmp5_ = TRUE;
	} else {
		gboolean _tmp24_ = FALSE;
		if (StartName != NULL) {
			LibmsiRecord* _tmp25_;
			_tmp25_ = rec;
			_tmp24_ = !libmsi_record_set_string (_tmp25_, (guint) 9, StartName);
		} else {
			_tmp24_ = FALSE;
		}
		_tmp5_ = _tmp24_;
	}
	if (_tmp5_) {
		_tmp4_ = TRUE;
	} else {
		gboolean _tmp26_ = FALSE;
		if (Password != NULL) {
			LibmsiRecord* _tmp27_;
			_tmp27_ = rec;
			_tmp26_ = !libmsi_record_set_string (_tmp27_, (guint) 10, Password);
		} else {
			_tmp26_ = FALSE;
		}
		_tmp4_ = _tmp26_;
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		gboolean _tmp28_ = FALSE;
		if (Arguments != NULL) {
			LibmsiRecord* _tmp29_;
			_tmp29_ = rec;
			_tmp28_ = !libmsi_record_set_string (_tmp29_, (guint) 11, Arguments);
		} else {
			_tmp28_ = FALSE;
		}
		_tmp3_ = _tmp28_;
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp30_;
		_tmp30_ = rec;
		_tmp2_ = !libmsi_record_set_string (_tmp30_, (guint) 12, Component);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		gboolean _tmp31_ = FALSE;
		if (Description != NULL) {
			LibmsiRecord* _tmp32_;
			_tmp32_ = rec;
			_tmp31_ = !libmsi_record_set_string (_tmp32_, (guint) 13, Description);
		} else {
			_tmp31_ = FALSE;
		}
		_tmp1_ = _tmp31_;
	}
	if (_tmp1_) {
		GError* _tmp33_;
		_tmp33_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp33_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp34_ = rec;
	_tmp35_ = _g_object_ref0 (_tmp34_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp35_);
	_g_object_unref0 (rec);
}

WixlMsiTableServiceInstall*
wixl_msi_table_service_install_construct (GType object_type)
{
	WixlMsiTableServiceInstall * self = NULL;
	self = (WixlMsiTableServiceInstall*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableServiceInstall*
wixl_msi_table_service_install_new (void)
{
	return wixl_msi_table_service_install_construct (WIXL_TYPE_MSI_TABLE_SERVICE_INSTALL);
}

static void
wixl_msi_table_service_install_class_init (WixlMsiTableServiceInstallClass * klass,
                                           gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_service_install_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("ServiceInstall");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `ServiceInstall` (`ServiceInstall` CHAR(72) NOT NULL, `Na" \
"me` CHAR(255) NOT NULL, `DisplayName` CHAR(255) LOCALIZABLE, `ServiceT" \
"ype` LONG NOT NULL, `StartType` LONG NOT NULL, `ErrorControl` LONG NOT" \
" NULL, `LoadOrderGroup` CHAR(255), `Dependencies` CHAR(255), `StartNam" \
"e` CHAR(255), `Password` CHAR(255), `Arguments` CHAR(255), `Component_" \
"` CHAR(72) NOT NULL, `Description` CHAR(255) LOCALIZABLE PRIMARY KEY `" \
"ServiceInstall`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `ServiceInstall` (`ServiceInstall`, `Name`, `DisplayName`," \
" `ServiceType`, `StartType`, `ErrorControl`, `LoadOrderGroup`, `Depend" \
"encies`, `StartName`, `Password`, `Arguments`, `Component_`, `Descript" \
"ion`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_service_install_instance_init (WixlMsiTableServiceInstall * self,
                                              gpointer klass)
{
}

GType
wixl_msi_table_service_install_get_type (void)
{
	static volatile gsize wixl_msi_table_service_install_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_service_install_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableServiceInstallClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_service_install_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableServiceInstall), 0, (GInstanceInitFunc) wixl_msi_table_service_install_instance_init, NULL };
		GType wixl_msi_table_service_install_type_id;
		wixl_msi_table_service_install_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableServiceInstall", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_service_install_type_id__volatile, wixl_msi_table_service_install_type_id);
	}
	return wixl_msi_table_service_install_type_id__volatile;
}

WixlMsiTableSignature*
wixl_msi_table_signature_construct (GType object_type)
{
	WixlMsiTableSignature * self = NULL;
	self = (WixlMsiTableSignature*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableSignature*
wixl_msi_table_signature_new (void)
{
	return wixl_msi_table_signature_construct (WIXL_TYPE_MSI_TABLE_SIGNATURE);
}

static void
wixl_msi_table_signature_class_init (WixlMsiTableSignatureClass * klass,
                                     gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	wixl_msi_table_signature_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("Signature");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `Signature` (`Signature` CHAR(72) NOT NULL, `FileName` CH" \
"AR(255) NOT NULL, `MinVersion` CHAR(20), `MaxVersion` CHAR(20), `MinSi" \
"ze` LONG, `MaxSize` LONG, `MinDate` LONG, `MaxDate` LONG, `Languages` " \
"CHAR(255) PRIMARY KEY `Signature`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
}

static void
wixl_msi_table_signature_instance_init (WixlMsiTableSignature * self,
                                        gpointer klass)
{
}

GType
wixl_msi_table_signature_get_type (void)
{
	static volatile gsize wixl_msi_table_signature_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_signature_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableSignatureClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_signature_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableSignature), 0, (GInstanceInitFunc) wixl_msi_table_signature_instance_init, NULL };
		GType wixl_msi_table_signature_type_id;
		wixl_msi_table_signature_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableSignature", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_signature_type_id__volatile, wixl_msi_table_signature_type_id);
	}
	return wixl_msi_table_signature_type_id__volatile;
}

void
wixl_msi_table_app_search_add (WixlMsiTableAppSearch* self,
                               const gchar* Property,
                               const gchar* Signature,
                               GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp6_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Property != NULL);
	g_return_if_fail (Signature != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, Property)) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp3_;
		_tmp3_ = rec;
		_tmp1_ = !libmsi_record_set_string (_tmp3_, (guint) 2, Signature);
	}
	if (_tmp1_) {
		GError* _tmp4_;
		_tmp4_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp4_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp5_ = rec;
	_tmp6_ = _g_object_ref0 (_tmp5_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp6_);
	_g_object_unref0 (rec);
}

WixlMsiTableAppSearch*
wixl_msi_table_app_search_construct (GType object_type)
{
	WixlMsiTableAppSearch * self = NULL;
	self = (WixlMsiTableAppSearch*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableAppSearch*
wixl_msi_table_app_search_new (void)
{
	return wixl_msi_table_app_search_construct (WIXL_TYPE_MSI_TABLE_APP_SEARCH);
}

static void
wixl_msi_table_app_search_class_init (WixlMsiTableAppSearchClass * klass,
                                      gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_app_search_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("AppSearch");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `AppSearch` (`Property` CHAR(72) NOT NULL, `Signature_` C" \
"HAR(72) NOT NULL PRIMARY KEY `Property`, `Signature_`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `AppSearch` (`Property`, `Signature_`) VALUES (?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_app_search_instance_init (WixlMsiTableAppSearch * self,
                                         gpointer klass)
{
}

GType
wixl_msi_table_app_search_get_type (void)
{
	static volatile gsize wixl_msi_table_app_search_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_app_search_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableAppSearchClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_app_search_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableAppSearch), 0, (GInstanceInitFunc) wixl_msi_table_app_search_instance_init, NULL };
		GType wixl_msi_table_app_search_type_id;
		wixl_msi_table_app_search_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableAppSearch", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_app_search_type_id__volatile, wixl_msi_table_app_search_type_id);
	}
	return wixl_msi_table_app_search_type_id__volatile;
}

void
wixl_msi_table_custom_action_add (WixlMsiTableCustomAction* self,
                                  const gchar* Action,
                                  gint Type,
                                  const gchar* Source,
                                  const gchar* Target,
                                  gint* ExtendedType,
                                  GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp12_;
	LibmsiRecord* _tmp13_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Action != NULL);
	g_return_if_fail (Source != NULL);
	g_return_if_fail (Target != NULL);
	_tmp0_ = libmsi_record_new ((guint) 5);
	rec = _tmp0_;
	_tmp5_ = rec;
	if (!libmsi_record_set_string (_tmp5_, (guint) 1, Action)) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp6_;
		_tmp6_ = rec;
		_tmp4_ = !libmsi_record_set_int (_tmp6_, (guint) 2, Type);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp3_ = !libmsi_record_set_string (_tmp7_, (guint) 3, Source);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp2_ = !libmsi_record_set_string (_tmp8_, (guint) 4, Target);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		gboolean _tmp9_ = FALSE;
		if (ExtendedType != NULL) {
			LibmsiRecord* _tmp10_;
			_tmp10_ = rec;
			_tmp9_ = !libmsi_record_set_int (_tmp10_, (guint) 5, *ExtendedType);
		} else {
			_tmp9_ = FALSE;
		}
		_tmp1_ = _tmp9_;
	}
	if (_tmp1_) {
		GError* _tmp11_;
		_tmp11_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp11_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp12_ = rec;
	_tmp13_ = _g_object_ref0 (_tmp12_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp13_);
	_g_object_unref0 (rec);
}

WixlMsiTableCustomAction*
wixl_msi_table_custom_action_construct (GType object_type)
{
	WixlMsiTableCustomAction * self = NULL;
	self = (WixlMsiTableCustomAction*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableCustomAction*
wixl_msi_table_custom_action_new (void)
{
	return wixl_msi_table_custom_action_construct (WIXL_TYPE_MSI_TABLE_CUSTOM_ACTION);
}

static void
wixl_msi_table_custom_action_class_init (WixlMsiTableCustomActionClass * klass,
                                         gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_custom_action_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("CustomAction");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `CustomAction` (`Action` CHAR(72) NOT NULL, `Type` INT NO" \
"T NULL, `Source` CHAR(72), `Target` CHAR(255), `ExtendedType` LONG PRI" \
"MARY KEY `Action`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `CustomAction` (`Action`, `Type`, `Source`, `Target`, `Ext" \
"endedType`) VALUES (?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_custom_action_instance_init (WixlMsiTableCustomAction * self,
                                            gpointer klass)
{
}

GType
wixl_msi_table_custom_action_get_type (void)
{
	static volatile gsize wixl_msi_table_custom_action_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_custom_action_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableCustomActionClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_custom_action_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableCustomAction), 0, (GInstanceInitFunc) wixl_msi_table_custom_action_instance_init, NULL };
		GType wixl_msi_table_custom_action_type_id;
		wixl_msi_table_custom_action_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableCustomAction", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_custom_action_type_id__volatile, wixl_msi_table_custom_action_type_id);
	}
	return wixl_msi_table_custom_action_type_id__volatile;
}

void
wixl_msi_table_reg_locator_add (WixlMsiTableRegLocator* self,
                                const gchar* Signature,
                                gint Root,
                                const gchar* Key,
                                const gchar* Name,
                                gint Type,
                                GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	gboolean _tmp2_ = FALSE;
	gboolean _tmp3_ = FALSE;
	gboolean _tmp4_ = FALSE;
	LibmsiRecord* _tmp5_;
	LibmsiRecord* _tmp11_;
	LibmsiRecord* _tmp12_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (Signature != NULL);
	g_return_if_fail (Key != NULL);
	g_return_if_fail (Name != NULL);
	_tmp0_ = libmsi_record_new ((guint) 5);
	rec = _tmp0_;
	_tmp5_ = rec;
	if (!libmsi_record_set_string (_tmp5_, (guint) 1, Signature)) {
		_tmp4_ = TRUE;
	} else {
		LibmsiRecord* _tmp6_;
		_tmp6_ = rec;
		_tmp4_ = !libmsi_record_set_int (_tmp6_, (guint) 2, Root);
	}
	if (_tmp4_) {
		_tmp3_ = TRUE;
	} else {
		LibmsiRecord* _tmp7_;
		_tmp7_ = rec;
		_tmp3_ = !libmsi_record_set_string (_tmp7_, (guint) 3, Key);
	}
	if (_tmp3_) {
		_tmp2_ = TRUE;
	} else {
		LibmsiRecord* _tmp8_;
		_tmp8_ = rec;
		_tmp2_ = !libmsi_record_set_string (_tmp8_, (guint) 4, Name);
	}
	if (_tmp2_) {
		_tmp1_ = TRUE;
	} else {
		LibmsiRecord* _tmp9_;
		_tmp9_ = rec;
		_tmp1_ = !libmsi_record_set_int (_tmp9_, (guint) 5, Type);
	}
	if (_tmp1_) {
		GError* _tmp10_;
		_tmp10_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp10_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp11_ = rec;
	_tmp12_ = _g_object_ref0 (_tmp11_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp12_);
	_g_object_unref0 (rec);
}

WixlMsiTableRegLocator*
wixl_msi_table_reg_locator_construct (GType object_type)
{
	WixlMsiTableRegLocator * self = NULL;
	self = (WixlMsiTableRegLocator*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableRegLocator*
wixl_msi_table_reg_locator_new (void)
{
	return wixl_msi_table_reg_locator_construct (WIXL_TYPE_MSI_TABLE_REG_LOCATOR);
}

static void
wixl_msi_table_reg_locator_class_init (WixlMsiTableRegLocatorClass * klass,
                                       gpointer klass_data)
{
	gchar* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	wixl_msi_table_reg_locator_parent_class = g_type_class_peek_parent (klass);
	_tmp0_ = g_strdup ("RegLocator");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
	_tmp1_ = g_strdup ("CREATE TABLE `RegLocator` (`Signature_` CHAR(72) NOT NULL, `Root` INT " \
"NOT NULL, `Key` CHAR(255) NOT NULL, `Name` CHAR(255), `Type` INT PRIMA" \
"RY KEY `Signature_`)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_create);
	WIXL_MSI_TABLE_CLASS (klass)->sql_create = _tmp1_;
	_tmp2_ = g_strdup ("INSERT INTO `RegLocator` (`Signature_`, `Root`, `Key`, `Name`, `Type`)" \
" VALUES (?, ?, ?, ?, ?)");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->sql_insert);
	WIXL_MSI_TABLE_CLASS (klass)->sql_insert = _tmp2_;
}

static void
wixl_msi_table_reg_locator_instance_init (WixlMsiTableRegLocator * self,
                                          gpointer klass)
{
}

GType
wixl_msi_table_reg_locator_get_type (void)
{
	static volatile gsize wixl_msi_table_reg_locator_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_reg_locator_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableRegLocatorClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_reg_locator_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableRegLocator), 0, (GInstanceInitFunc) wixl_msi_table_reg_locator_instance_init, NULL };
		GType wixl_msi_table_reg_locator_type_id;
		wixl_msi_table_reg_locator_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableRegLocator", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_reg_locator_type_id__volatile, wixl_msi_table_reg_locator_type_id);
	}
	return wixl_msi_table_reg_locator_type_id__volatile;
}

static void
wixl_msi_table_validation_real_create (WixlMsiTable* base,
                                       LibmsiDatabase* db,
                                       GError** error)
{
	WixlMsiTableValidation * self;
	self = (WixlMsiTableValidation*) base;
	g_return_if_fail (db != NULL);
}

WixlMsiTableValidation*
wixl_msi_table_validation_construct (GType object_type)
{
	WixlMsiTableValidation * self = NULL;
	self = (WixlMsiTableValidation*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableValidation*
wixl_msi_table_validation_new (void)
{
	return wixl_msi_table_validation_construct (WIXL_TYPE_MSI_TABLE_VALIDATION);
}

static void
wixl_msi_table_validation_class_init (WixlMsiTableValidationClass * klass,
                                      gpointer klass_data)
{
	gchar* _tmp0_;
	wixl_msi_table_validation_parent_class = g_type_class_peek_parent (klass);
	((WixlMsiTableClass *) klass)->create = (void (*) (WixlMsiTable*, LibmsiDatabase*, GError**)) wixl_msi_table_validation_real_create;
	_tmp0_ = g_strdup ("_Validation");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
}

static void
wixl_msi_table_validation_instance_init (WixlMsiTableValidation * self,
                                         gpointer klass)
{
}

GType
wixl_msi_table_validation_get_type (void)
{
	static volatile gsize wixl_msi_table_validation_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_validation_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableValidationClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_validation_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableValidation), 0, (GInstanceInitFunc) wixl_msi_table_validation_instance_init, NULL };
		GType wixl_msi_table_validation_type_id;
		wixl_msi_table_validation_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableValidation", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_validation_type_id__volatile, wixl_msi_table_validation_type_id);
	}
	return wixl_msi_table_validation_type_id__volatile;
}

void
wixl_msi_table_streams_add (WixlMsiTableStreams* self,
                            const gchar* name,
                            GInputStream* input,
                            gsize count,
                            GError** error)
{
	LibmsiRecord* rec = NULL;
	LibmsiRecord* _tmp0_;
	gboolean _tmp1_ = FALSE;
	LibmsiRecord* _tmp2_;
	LibmsiRecord* _tmp6_;
	LibmsiRecord* _tmp7_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (name != NULL);
	g_return_if_fail (input != NULL);
	_tmp0_ = libmsi_record_new ((guint) 2);
	rec = _tmp0_;
	_tmp2_ = rec;
	if (!libmsi_record_set_string (_tmp2_, (guint) 1, name)) {
		_tmp1_ = TRUE;
	} else {
		gboolean _tmp3_ = FALSE;
		LibmsiRecord* _tmp4_;
		_tmp4_ = rec;
		_tmp3_ = libmsi_record_set_stream (_tmp4_, (guint) 2, input, count, NULL, &_inner_error0_);
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			g_propagate_error (error, _inner_error0_);
			_g_object_unref0 (rec);
			return;
		}
		_tmp1_ = !_tmp3_;
	}
	if (_tmp1_) {
		GError* _tmp5_;
		_tmp5_ = g_error_new_literal (WIXL_ERROR, WIXL_ERROR_FAILED, "failed to add record");
		_inner_error0_ = _tmp5_;
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (rec);
		return;
	}
	_tmp6_ = rec;
	_tmp7_ = _g_object_ref0 (_tmp6_);
	((WixlMsiTable*) self)->records = g_list_append (((WixlMsiTable*) self)->records, _tmp7_);
	_g_object_unref0 (rec);
}

static void
wixl_msi_table_streams_real_create (WixlMsiTable* base,
                                    LibmsiDatabase* db,
                                    GError** error)
{
	WixlMsiTableStreams * self;
	LibmsiQuery* query = NULL;
	LibmsiQuery* _tmp0_;
	GList* _tmp1_;
	GError* _inner_error0_ = NULL;
	self = (WixlMsiTableStreams*) base;
	g_return_if_fail (db != NULL);
	_tmp0_ = libmsi_query_new (db, "INSERT INTO `_Streams` (`Name`, `Data`) VALUES (?, ?)", &_inner_error0_);
	query = _tmp0_;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
	_tmp1_ = ((WixlMsiTable*) self)->records;
	{
		GList* r_collection = NULL;
		GList* r_it = NULL;
		r_collection = _tmp1_;
		for (r_it = r_collection; r_it != NULL; r_it = r_it->next) {
			LibmsiRecord* _tmp2_;
			LibmsiRecord* r = NULL;
			_tmp2_ = _g_object_ref0 ((LibmsiRecord*) r_it->data);
			r = _tmp2_;
			{
				LibmsiQuery* _tmp3_;
				LibmsiRecord* _tmp4_;
				_tmp3_ = query;
				_tmp4_ = r;
				libmsi_query_execute (_tmp3_, _tmp4_, &_inner_error0_);
				if (G_UNLIKELY (_inner_error0_ != NULL)) {
					g_propagate_error (error, _inner_error0_);
					_g_object_unref0 (r);
					_g_object_unref0 (query);
					return;
				}
				_g_object_unref0 (r);
			}
		}
	}
	_g_object_unref0 (query);
}

WixlMsiTableStreams*
wixl_msi_table_streams_construct (GType object_type)
{
	WixlMsiTableStreams * self = NULL;
	self = (WixlMsiTableStreams*) wixl_msi_table_construct (object_type);
	return self;
}

WixlMsiTableStreams*
wixl_msi_table_streams_new (void)
{
	return wixl_msi_table_streams_construct (WIXL_TYPE_MSI_TABLE_STREAMS);
}

static void
wixl_msi_table_streams_class_init (WixlMsiTableStreamsClass * klass,
                                   gpointer klass_data)
{
	gchar* _tmp0_;
	wixl_msi_table_streams_parent_class = g_type_class_peek_parent (klass);
	((WixlMsiTableClass *) klass)->create = (void (*) (WixlMsiTable*, LibmsiDatabase*, GError**)) wixl_msi_table_streams_real_create;
	_tmp0_ = g_strdup ("_Streams");
	_g_free0 (WIXL_MSI_TABLE_CLASS (klass)->name);
	WIXL_MSI_TABLE_CLASS (klass)->name = _tmp0_;
}

static void
wixl_msi_table_streams_instance_init (WixlMsiTableStreams * self,
                                      gpointer klass)
{
}

GType
wixl_msi_table_streams_get_type (void)
{
	static volatile gsize wixl_msi_table_streams_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_table_streams_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiTableStreamsClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_table_streams_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiTableStreams), 0, (GInstanceInitFunc) wixl_msi_table_streams_instance_init, NULL };
		GType wixl_msi_table_streams_type_id;
		wixl_msi_table_streams_type_id = g_type_register_static (WIXL_TYPE_MSI_TABLE, "WixlMsiTableStreams", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_table_streams_type_id__volatile, wixl_msi_table_streams_type_id);
	}
	return wixl_msi_table_streams_type_id__volatile;
}

WixlMsiSummaryInfo*
wixl_msi_summary_info_construct (GType object_type)
{
	WixlMsiSummaryInfo * self = NULL;
	self = (WixlMsiSummaryInfo*) g_object_new (object_type, NULL);
	return self;
}

WixlMsiSummaryInfo*
wixl_msi_summary_info_new (void)
{
	return wixl_msi_summary_info_construct (WIXL_TYPE_MSI_SUMMARY_INFO);
}

void
wixl_msi_summary_info_set_property (WixlMsiSummaryInfo* self,
                                    LibmsiProperty prop,
                                    GValue* value,
                                    GError** error)
{
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (value != NULL);
	if (G_VALUE_TYPE (value) == G_TYPE_STRING) {
		LibmsiSummaryInfo* _tmp0_;
		GValue _tmp1_;
		_tmp0_ = self->properties;
		_tmp1_ = *value;
		libmsi_summary_info_set_string (_tmp0_, prop, g_value_get_string (&_tmp1_), &_inner_error0_);
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			g_propagate_error (error, _inner_error0_);
			return;
		}
	} else {
		if (G_VALUE_TYPE (value) == G_TYPE_INT) {
			LibmsiSummaryInfo* _tmp2_;
			GValue _tmp3_;
			_tmp2_ = self->properties;
			_tmp3_ = *value;
			libmsi_summary_info_set_int (_tmp2_, prop, g_value_get_int (&_tmp3_), &_inner_error0_);
			if (G_UNLIKELY (_inner_error0_ != NULL)) {
				g_propagate_error (error, _inner_error0_);
				return;
			}
		} else {
			if (G_VALUE_TYPE (value) == G_TYPE_UINT64) {
				LibmsiSummaryInfo* _tmp4_;
				GValue _tmp5_;
				_tmp4_ = self->properties;
				_tmp5_ = *value;
				libmsi_summary_info_set_filetime (_tmp4_, prop, g_value_get_uint64 (&_tmp5_), &_inner_error0_);
				if (G_UNLIKELY (_inner_error0_ != NULL)) {
					g_propagate_error (error, _inner_error0_);
					return;
				}
			} else {
				g_critical ("msi.vala:727: Unhandled property type");
			}
		}
	}
}

void
wixl_msi_summary_info_save (WixlMsiSummaryInfo* self,
                            LibmsiDatabase* db,
                            GError** error)
{
	LibmsiSummaryInfo* _tmp0_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (db != NULL);
	_tmp0_ = self->properties;
	libmsi_summary_info_save (_tmp0_, db, &_inner_error0_);
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_summary_info_set_codepage (WixlMsiSummaryInfo* self,
                                    gint value,
                                    GError** error)
{
	GValue _tmp0_ = {0};
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_value_init (&_tmp0_, G_TYPE_INT);
	g_value_set_int (&_tmp0_, value);
	wixl_msi_summary_info_set_property (self, LIBMSI_PROPERTY_CODEPAGE, &_tmp0_, &_inner_error0_);
	G_IS_VALUE (&_tmp0_) ? (g_value_unset (&_tmp0_), NULL) : NULL;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_summary_info_set_author (WixlMsiSummaryInfo* self,
                                  const gchar* value,
                                  GError** error)
{
	GValue _tmp0_ = {0};
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (value != NULL);
	g_value_init (&_tmp0_, G_TYPE_STRING);
	g_value_set_string (&_tmp0_, value);
	wixl_msi_summary_info_set_property (self, LIBMSI_PROPERTY_AUTHOR, &_tmp0_, &_inner_error0_);
	G_IS_VALUE (&_tmp0_) ? (g_value_unset (&_tmp0_), NULL) : NULL;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_summary_info_set_keywords (WixlMsiSummaryInfo* self,
                                    const gchar* value,
                                    GError** error)
{
	GValue _tmp0_ = {0};
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (value != NULL);
	g_value_init (&_tmp0_, G_TYPE_STRING);
	g_value_set_string (&_tmp0_, value);
	wixl_msi_summary_info_set_property (self, LIBMSI_PROPERTY_KEYWORDS, &_tmp0_, &_inner_error0_);
	G_IS_VALUE (&_tmp0_) ? (g_value_unset (&_tmp0_), NULL) : NULL;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

void
wixl_msi_summary_info_set_subject (WixlMsiSummaryInfo* self,
                                   const gchar* value,
                                   GError** error)
{
	GValue _tmp0_ = {0};
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (value != NULL);
	g_value_init (&_tmp0_, G_TYPE_STRING);
	g_value_set_string (&_tmp0_, value);
	wixl_msi_summary_info_set_property (self, LIBMSI_PROPERTY_SUBJECT, &_tmp0_, &_inner_error0_);
	G_IS_VALUE (&_tmp0_) ? (g_value_unset (&_tmp0_), NULL) : NULL;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

gchar*
wixl_msi_summary_info_get_subject (WixlMsiSummaryInfo* self)
{
	GError* _inner_error0_ = NULL;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	{
		const gchar* _tmp0_ = NULL;
		LibmsiSummaryInfo* _tmp1_;
		const gchar* _tmp2_;
		gchar* _tmp3_;
		_tmp1_ = self->properties;
		_tmp2_ = libmsi_summary_info_get_string (_tmp1_, LIBMSI_PROPERTY_SUBJECT, &_inner_error0_);
		_tmp0_ = _tmp2_;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch3_g_error;
		}
		_tmp3_ = g_strdup (_tmp0_);
		result = _tmp3_;
		return result;
	}
	goto __finally3;
	__catch3_g_error:
	{
		GError* err = NULL;
		err = _inner_error0_;
		_inner_error0_ = NULL;
		result = NULL;
		_g_error_free0 (err);
		return result;
	}
	__finally3:
	g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
	g_clear_error (&_inner_error0_);
	return NULL;
}

void
wixl_msi_summary_info_set_comments (WixlMsiSummaryInfo* self,
                                    const gchar* value,
                                    GError** error)
{
	GValue _tmp0_ = {0};
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (value != NULL);
	g_value_init (&_tmp0_, G_TYPE_STRING);
	g_value_set_string (&_tmp0_, value);
	wixl_msi_summary_info_set_property (self, LIBMSI_PROPERTY_COMMENTS, &_tmp0_, &_inner_error0_);
	G_IS_VALUE (&_tmp0_) ? (g_value_unset (&_tmp0_), NULL) : NULL;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		return;
	}
}

gchar*
wixl_msi_summary_info_get_comments (WixlMsiSummaryInfo* self)
{
	GError* _inner_error0_ = NULL;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	{
		const gchar* _tmp0_ = NULL;
		LibmsiSummaryInfo* _tmp1_;
		const gchar* _tmp2_;
		gchar* _tmp3_;
		_tmp1_ = self->properties;
		_tmp2_ = libmsi_summary_info_get_string (_tmp1_, LIBMSI_PROPERTY_COMMENTS, &_inner_error0_);
		_tmp0_ = _tmp2_;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch4_g_error;
		}
		_tmp3_ = g_strdup (_tmp0_);
		result = _tmp3_;
		return result;
	}
	goto __finally4;
	__catch4_g_error:
	{
		GError* err = NULL;
		err = _inner_error0_;
		_inner_error0_ = NULL;
		result = NULL;
		_g_error_free0 (err);
		return result;
	}
	__finally4:
	g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
	g_clear_error (&_inner_error0_);
	return NULL;
}

static GObject *
wixl_msi_summary_info_constructor (GType type,
                                   guint n_construct_properties,
                                   GObjectConstructParam * construct_properties)
{
	GObject * obj;
	GObjectClass * parent_class;
	WixlMsiSummaryInfo * self;
	GError* _inner_error0_ = NULL;
	parent_class = G_OBJECT_CLASS (wixl_msi_summary_info_parent_class);
	obj = parent_class->constructor (type, n_construct_properties, construct_properties);
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, WIXL_TYPE_MSI_SUMMARY_INFO, WixlMsiSummaryInfo);
	{
		LibmsiSummaryInfo* _tmp0_ = NULL;
		LibmsiSummaryInfo* _tmp1_;
		LibmsiSummaryInfo* _tmp2_;
		_tmp1_ = libmsi_summary_info_new (NULL, G_MAXUINT, &_inner_error0_);
		_tmp0_ = _tmp1_;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch5_g_error;
		}
		_tmp2_ = _tmp0_;
		_tmp0_ = NULL;
		_g_object_unref0 (self->properties);
		self->properties = _tmp2_;
		_g_object_unref0 (_tmp0_);
	}
	goto __finally5;
	__catch5_g_error:
	{
		GError* _error_ = NULL;
		GError* _tmp3_;
		const gchar* _tmp4_;
		_error_ = _inner_error0_;
		_inner_error0_ = NULL;
		_tmp3_ = _error_;
		_tmp4_ = _tmp3_->message;
		g_critical ("msi.vala:712: %s", _tmp4_);
		_g_error_free0 (_error_);
	}
	__finally5:
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
		g_clear_error (&_inner_error0_);
	}
	return obj;
}

static void
wixl_msi_summary_info_class_init (WixlMsiSummaryInfoClass * klass,
                                  gpointer klass_data)
{
	wixl_msi_summary_info_parent_class = g_type_class_peek_parent (klass);
	G_OBJECT_CLASS (klass)->constructor = wixl_msi_summary_info_constructor;
	G_OBJECT_CLASS (klass)->finalize = wixl_msi_summary_info_finalize;
}

static void
wixl_msi_summary_info_instance_init (WixlMsiSummaryInfo * self,
                                     gpointer klass)
{
}

static void
wixl_msi_summary_info_finalize (GObject * obj)
{
	WixlMsiSummaryInfo * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, WIXL_TYPE_MSI_SUMMARY_INFO, WixlMsiSummaryInfo);
	_g_object_unref0 (self->properties);
	G_OBJECT_CLASS (wixl_msi_summary_info_parent_class)->finalize (obj);
}

GType
wixl_msi_summary_info_get_type (void)
{
	static volatile gsize wixl_msi_summary_info_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_summary_info_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiSummaryInfoClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_summary_info_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiSummaryInfo), 0, (GInstanceInitFunc) wixl_msi_summary_info_instance_init, NULL };
		GType wixl_msi_summary_info_type_id;
		wixl_msi_summary_info_type_id = g_type_register_static (G_TYPE_OBJECT, "WixlMsiSummaryInfo", &g_define_type_info, 0);
		g_once_init_leave (&wixl_msi_summary_info_type_id__volatile, wixl_msi_summary_info_type_id);
	}
	return wixl_msi_summary_info_type_id__volatile;
}

static inline gpointer
wixl_msi_database_get_instance_private (WixlMsiDatabase* self)
{
	return G_STRUCT_MEMBER_P (self, WixlMsiDatabase_private_offset);
}

static gint
wixl_msi_database_get_default_version (WixlMsiDatabase* self)
{
	WixlArch _tmp0_;
	gint result = 0;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->_arch;
	if (_tmp0_ == WIXL_ARCH_X86) {
		result = 100;
		return result;
	} else {
		result = 200;
		return result;
	}
}

static gchar*
wixl_msi_database_get_arch_template (WixlMsiDatabase* self)
{
	WixlArch _tmp0_;
	gchar* result = NULL;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_arch;
	if (_tmp0_ == WIXL_ARCH_X86) {
		gchar* _tmp1_;
		_tmp1_ = g_strdup ("Intel");
		result = _tmp1_;
		return result;
	} else {
		gchar* _tmp2_;
		_tmp2_ = g_strdup ("x64");
		result = _tmp2_;
		return result;
	}
}

WixlMsiDatabase*
wixl_msi_database_construct (GType object_type,
                             WixlArch arch)
{
	WixlMsiDatabase * self = NULL;
	self = (WixlMsiDatabase*) g_object_new (object_type, "arch", arch, NULL);
	return self;
}

WixlMsiDatabase*
wixl_msi_database_new (WixlArch arch)
{
	return wixl_msi_database_construct (WIXL_TYPE_MSI_DATABASE, arch);
}

void
wixl_msi_database_build (WixlMsiDatabase* self,
                         const gchar* filename,
                         GError** error)
{
	gchar* name = NULL;
	WixlMsiTable* table = NULL;
	LibmsiDatabase* db = NULL;
	LibmsiDatabase* _tmp0_;
	WixlMsiSummaryInfo* _tmp1_;
	LibmsiDatabase* _tmp2_;
	GHashTableIter it = {0};
	GHashTable* _tmp3_;
	LibmsiDatabase* _tmp11_;
	GError* _inner_error0_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (filename != NULL);
	_tmp0_ = libmsi_database_new (filename, (guint) LIBMSI_DB_FLAGS_CREATE, NULL, &_inner_error0_);
	db = _tmp0_;
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (table);
		_g_free0 (name);
		return;
	}
	_tmp1_ = self->info;
	_tmp2_ = db;
	wixl_msi_summary_info_save (_tmp1_, _tmp2_, &_inner_error0_);
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (db);
		_g_object_unref0 (table);
		_g_free0 (name);
		return;
	}
	_tmp3_ = self->tables;
	g_hash_table_iter_init (&it, _tmp3_);
	while (TRUE) {
		gconstpointer _tmp4_ = NULL;
		gconstpointer _tmp5_ = NULL;
		gboolean _tmp6_;
		gchar* _tmp7_;
		WixlMsiTable* _tmp8_;
		WixlMsiTable* _tmp9_;
		LibmsiDatabase* _tmp10_;
		_tmp6_ = g_hash_table_iter_next (&it, (gpointer*) (&_tmp4_), (gpointer*) (&_tmp5_));
		_g_free0 (name);
		_tmp7_ = g_strdup (_tmp4_);
		name = _tmp7_;
		_g_object_unref0 (table);
		_tmp8_ = _g_object_ref0 (_tmp5_);
		table = _tmp8_;
		if (!_tmp6_) {
			break;
		}
		_tmp9_ = table;
		_tmp10_ = db;
		wixl_msi_table_create (_tmp9_, _tmp10_, &_inner_error0_);
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			g_propagate_error (error, _inner_error0_);
			_g_object_unref0 (db);
			_g_object_unref0 (table);
			_g_free0 (name);
			return;
		}
	}
	_tmp11_ = db;
	libmsi_database_commit (_tmp11_, &_inner_error0_);
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_propagate_error (error, _inner_error0_);
		_g_object_unref0 (db);
		_g_object_unref0 (table);
		_g_free0 (name);
		return;
	}
	_g_object_unref0 (db);
	_g_object_unref0 (table);
	_g_free0 (name);
}

WixlArch
wixl_msi_database_get_arch (WixlMsiDatabase* self)
{
	WixlArch result;
	WixlArch _tmp0_;
	g_return_val_if_fail (self != NULL, 0);
	_tmp0_ = self->priv->_arch;
	result = _tmp0_;
	return result;
}

void
wixl_msi_database_set_arch (WixlMsiDatabase* self,
                            WixlArch value)
{
	g_return_if_fail (self != NULL);
	if (wixl_msi_database_get_arch (self) != value) {
		self->priv->_arch = value;
		g_object_notify_by_pspec ((GObject *) self, wixl_msi_database_properties[WIXL_MSI_DATABASE_ARCH_PROPERTY]);
	}
}

static GObject *
wixl_msi_database_constructor (GType type,
                               guint n_construct_properties,
                               GObjectConstructParam * construct_properties)
{
	GObject * obj;
	GObjectClass * parent_class;
	WixlMsiDatabase * self;
	WixlMsiSummaryInfo* _tmp0_;
	GHashFunc _tmp29_;
	GEqualFunc _tmp30_;
	GHashTable* _tmp31_;
	WixlMsiTableProperty* _tmp32_;
	WixlMsiTableIcon* _tmp33_;
	WixlMsiTableBinary* _tmp34_;
	WixlMsiTableMedia* _tmp35_;
	WixlMsiTableDirectory* _tmp36_;
	WixlMsiTableComponent* _tmp37_;
	WixlMsiTableFeature* _tmp38_;
	WixlMsiTableFeatureComponents* _tmp39_;
	WixlMsiTableRemoveFile* _tmp40_;
	WixlMsiTableRegistry* _tmp41_;
	WixlMsiTableServiceControl* _tmp42_;
	WixlMsiTableServiceInstall* _tmp43_;
	WixlMsiTableFile* _tmp44_;
	WixlMsiTableAdminExecuteSequence* _tmp45_;
	WixlMsiTableAdminUISequence* _tmp46_;
	WixlMsiTableAdvtExecuteSequence* _tmp47_;
	WixlMsiTableInstallExecuteSequence* _tmp48_;
	WixlMsiTableInstallUISequence* _tmp49_;
	WixlMsiTableStreams* _tmp50_;
	WixlMsiTableShortcut* _tmp51_;
	WixlMsiTableUpgrade* _tmp52_;
	WixlMsiTableLaunchCondition* _tmp53_;
	WixlMsiTableAppSearch* _tmp54_;
	WixlMsiTableSignature* _tmp55_;
	WixlMsiTableCustomAction* _tmp56_;
	WixlMsiTableRegLocator* _tmp57_;
	WixlMsiTableCreateFolder* _tmp58_;
	WixlMsiTableFileHash* _tmp59_;
	WixlMsiTableAdminExecuteSequence* _tmp60_;
	WixlMsiTable* _tmp61_;
	WixlMsiTableAdminUISequence* _tmp62_;
	WixlMsiTable* _tmp63_;
	WixlMsiTableAdvtExecuteSequence* _tmp64_;
	WixlMsiTable* _tmp65_;
	WixlMsiTableInstallExecuteSequence* _tmp66_;
	WixlMsiTable* _tmp67_;
	WixlMsiTableInstallUISequence* _tmp68_;
	WixlMsiTable* _tmp69_;
	WixlMsiTableDirectory* _tmp70_;
	WixlMsiTable* _tmp71_;
	WixlMsiTableMedia* _tmp72_;
	WixlMsiTable* _tmp73_;
	WixlMsiTableProperty* _tmp74_;
	WixlMsiTable* _tmp75_;
	WixlMsiTableIcon* _tmp76_;
	WixlMsiTable* _tmp77_;
	WixlMsiTableBinary* _tmp78_;
	WixlMsiTable* _tmp79_;
	WixlMsiTableComponent* _tmp80_;
	WixlMsiTable* _tmp81_;
	WixlMsiTableFeature* _tmp82_;
	WixlMsiTable* _tmp83_;
	WixlMsiTableFeatureComponents* _tmp84_;
	WixlMsiTable* _tmp85_;
	WixlMsiTableRemoveFile* _tmp86_;
	WixlMsiTable* _tmp87_;
	WixlMsiTableRegistry* _tmp88_;
	WixlMsiTable* _tmp89_;
	WixlMsiTableServiceControl* _tmp90_;
	WixlMsiTable* _tmp91_;
	WixlMsiTableServiceInstall* _tmp92_;
	WixlMsiTable* _tmp93_;
	WixlMsiTableFile* _tmp94_;
	WixlMsiTable* _tmp95_;
	WixlMsiTableStreams* _tmp96_;
	WixlMsiTable* _tmp97_;
	WixlMsiTableShortcut* _tmp98_;
	WixlMsiTable* _tmp99_;
	WixlMsiTableUpgrade* _tmp100_;
	WixlMsiTable* _tmp101_;
	WixlMsiTableLaunchCondition* _tmp102_;
	WixlMsiTable* _tmp103_;
	WixlMsiTableAppSearch* _tmp104_;
	WixlMsiTable* _tmp105_;
	WixlMsiTableSignature* _tmp106_;
	WixlMsiTable* _tmp107_;
	WixlMsiTableCustomAction* _tmp108_;
	WixlMsiTable* _tmp109_;
	WixlMsiTableRegLocator* _tmp110_;
	WixlMsiTable* _tmp111_;
	WixlMsiTableCreateFolder* _tmp112_;
	WixlMsiTable* _tmp113_;
	WixlMsiTableFileHash* _tmp114_;
	WixlMsiTable* _tmp115_;
	WixlMsiTableError* _tmp116_;
	WixlMsiTableValidation* _tmp117_;
	WixlMsiTable** _tmp118_;
	GError* _inner_error0_ = NULL;
	parent_class = G_OBJECT_CLASS (wixl_msi_database_parent_class);
	obj = parent_class->constructor (type, n_construct_properties, construct_properties);
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, WIXL_TYPE_MSI_DATABASE, WixlMsiDatabase);
	_tmp0_ = wixl_msi_summary_info_new ();
	_g_object_unref0 (self->info);
	self->info = _tmp0_;
	{
		WixlMsiSummaryInfo* _tmp1_;
		GValue _tmp2_ = {0};
		WixlMsiSummaryInfo* _tmp3_;
		gchar* _tmp4_;
		gchar* _tmp5_;
		gchar* _tmp6_;
		GValue _tmp7_ = {0};
		WixlMsiSummaryInfo* _tmp8_;
		GValue _tmp9_ = {0};
		WixlMsiSummaryInfo* _tmp10_;
		GValue _tmp11_ = {0};
		gchar* _tmp12_ = NULL;
		gchar* _tmp13_;
		gchar* _tmp14_;
		WixlMsiSummaryInfo* _tmp15_;
		GValue _tmp16_ = {0};
		WixlMsiSummaryInfo* _tmp17_;
		GValue _tmp18_ = {0};
		WixlMsiSummaryInfo* _tmp19_;
		GValue _tmp20_ = {0};
		WixlMsiSummaryInfo* _tmp21_;
		GValue _tmp22_ = {0};
		WixlMsiSummaryInfo* _tmp23_;
		GValue _tmp24_ = {0};
		WixlMsiSummaryInfo* _tmp25_;
		GValue _tmp26_ = {0};
		_tmp1_ = self->info;
		g_value_init (&_tmp2_, G_TYPE_STRING);
		g_value_set_string (&_tmp2_, "Installation Database");
		wixl_msi_summary_info_set_property (_tmp1_, LIBMSI_PROPERTY_TITLE, &_tmp2_, &_inner_error0_);
		G_IS_VALUE (&_tmp2_) ? (g_value_unset (&_tmp2_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch6_g_error;
		}
		_tmp3_ = self->info;
		_tmp4_ = wixl_msi_database_get_arch_template (self);
		_tmp5_ = _tmp4_;
		_tmp6_ = g_strdup_printf ("%s;1033", _tmp5_);
		g_value_init (&_tmp7_, G_TYPE_STRING);
		g_value_take_string (&_tmp7_, _tmp6_);
		wixl_msi_summary_info_set_property (_tmp3_, LIBMSI_PROPERTY_TEMPLATE, &_tmp7_, &_inner_error0_);
		G_IS_VALUE (&_tmp7_) ? (g_value_unset (&_tmp7_), NULL) : NULL;
		_g_free0 (_tmp5_);
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch6_g_error;
		}
		_tmp8_ = self->info;
		g_value_init (&_tmp9_, G_TYPE_STRING);
		g_value_set_string (&_tmp9_, "Installer");
		wixl_msi_summary_info_set_property (_tmp8_, LIBMSI_PROPERTY_KEYWORDS, &_tmp9_, &_inner_error0_);
		G_IS_VALUE (&_tmp9_) ? (g_value_unset (&_tmp9_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch6_g_error;
		}
		_tmp10_ = self->info;
		g_value_init (&_tmp11_, G_TYPE_INT);
		g_value_set_int (&_tmp11_, 1252);
		wixl_msi_summary_info_set_property (_tmp10_, LIBMSI_PROPERTY_CODEPAGE, &_tmp11_, &_inner_error0_);
		G_IS_VALUE (&_tmp11_) ? (g_value_unset (&_tmp11_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch6_g_error;
		}
		_tmp13_ = g_strdup ("*");
		_tmp14_ = wixl_get_uuid (_tmp13_, &_inner_error0_);
		_tmp12_ = _tmp14_;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			goto __catch6_g_error;
		}
		_tmp15_ = self->info;
		g_value_init (&_tmp16_, G_TYPE_STRING);
		g_value_set_string (&_tmp16_, _tmp12_);
		wixl_msi_summary_info_set_property (_tmp15_, LIBMSI_PROPERTY_UUID, &_tmp16_, &_inner_error0_);
		G_IS_VALUE (&_tmp16_) ? (g_value_unset (&_tmp16_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			_g_free0 (_tmp12_);
			goto __catch6_g_error;
		}
		_tmp17_ = self->info;
		g_value_init (&_tmp18_, G_TYPE_UINT64);
		g_value_set_uint64 (&_tmp18_, wixl_time_to_filetime (wixl_now ()));
		wixl_msi_summary_info_set_property (_tmp17_, LIBMSI_PROPERTY_CREATED_TM, &_tmp18_, &_inner_error0_);
		G_IS_VALUE (&_tmp18_) ? (g_value_unset (&_tmp18_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			_g_free0 (_tmp12_);
			goto __catch6_g_error;
		}
		_tmp19_ = self->info;
		g_value_init (&_tmp20_, G_TYPE_UINT64);
		g_value_set_uint64 (&_tmp20_, wixl_time_to_filetime (wixl_now ()));
		wixl_msi_summary_info_set_property (_tmp19_, LIBMSI_PROPERTY_LASTSAVED_TM, &_tmp20_, &_inner_error0_);
		G_IS_VALUE (&_tmp20_) ? (g_value_unset (&_tmp20_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			_g_free0 (_tmp12_);
			goto __catch6_g_error;
		}
		_tmp21_ = self->info;
		g_value_init (&_tmp22_, G_TYPE_INT);
		g_value_set_int (&_tmp22_, wixl_msi_database_get_default_version (self));
		wixl_msi_summary_info_set_property (_tmp21_, LIBMSI_PROPERTY_VERSION, &_tmp22_, &_inner_error0_);
		G_IS_VALUE (&_tmp22_) ? (g_value_unset (&_tmp22_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			_g_free0 (_tmp12_);
			goto __catch6_g_error;
		}
		_tmp23_ = self->info;
		g_value_init (&_tmp24_, G_TYPE_STRING);
		g_value_set_string (&_tmp24_, PACKAGE_STRING);
		wixl_msi_summary_info_set_property (_tmp23_, LIBMSI_PROPERTY_APPNAME, &_tmp24_, &_inner_error0_);
		G_IS_VALUE (&_tmp24_) ? (g_value_unset (&_tmp24_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			_g_free0 (_tmp12_);
			goto __catch6_g_error;
		}
		_tmp25_ = self->info;
		g_value_init (&_tmp26_, G_TYPE_INT);
		g_value_set_int (&_tmp26_, 2);
		wixl_msi_summary_info_set_property (_tmp25_, LIBMSI_PROPERTY_SECURITY, &_tmp26_, &_inner_error0_);
		G_IS_VALUE (&_tmp26_) ? (g_value_unset (&_tmp26_), NULL) : NULL;
		if (G_UNLIKELY (_inner_error0_ != NULL)) {
			_g_free0 (_tmp12_);
			goto __catch6_g_error;
		}
		_g_free0 (_tmp12_);
	}
	goto __finally6;
	__catch6_g_error:
	{
		GError* _error_ = NULL;
		GError* _tmp27_;
		const gchar* _tmp28_;
		_error_ = _inner_error0_;
		_inner_error0_ = NULL;
		_tmp27_ = _error_;
		_tmp28_ = _tmp27_->message;
		g_critical ("msi.vala:837: %s", _tmp28_);
		_g_error_free0 (_error_);
	}
	__finally6:
	if (G_UNLIKELY (_inner_error0_ != NULL)) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error0_->message, g_quark_to_string (_inner_error0_->domain), _inner_error0_->code);
		g_clear_error (&_inner_error0_);
	}
	_tmp29_ = g_str_hash;
	_tmp30_ = g_str_equal;
	_tmp31_ = g_hash_table_new_full (_tmp29_, _tmp30_, _g_free0_, _g_object_unref0_);
	_g_hash_table_unref0 (self->tables);
	self->tables = _tmp31_;
	_tmp32_ = wixl_msi_table_property_new ();
	_g_object_unref0 (self->table_property);
	self->table_property = _tmp32_;
	_tmp33_ = wixl_msi_table_icon_new ();
	_g_object_unref0 (self->table_icon);
	self->table_icon = _tmp33_;
	_tmp34_ = wixl_msi_table_binary_new ();
	_g_object_unref0 (self->table_binary);
	self->table_binary = _tmp34_;
	_tmp35_ = wixl_msi_table_media_new ();
	_g_object_unref0 (self->table_media);
	self->table_media = _tmp35_;
	_tmp36_ = wixl_msi_table_directory_new ();
	_g_object_unref0 (self->table_directory);
	self->table_directory = _tmp36_;
	_tmp37_ = wixl_msi_table_component_new ();
	_g_object_unref0 (self->table_component);
	self->table_component = _tmp37_;
	_tmp38_ = wixl_msi_table_feature_new ();
	_g_object_unref0 (self->table_feature);
	self->table_feature = _tmp38_;
	_tmp39_ = wixl_msi_table_feature_components_new ();
	_g_object_unref0 (self->table_feature_components);
	self->table_feature_components = _tmp39_;
	_tmp40_ = wixl_msi_table_remove_file_new ();
	_g_object_unref0 (self->table_remove_file);
	self->table_remove_file = _tmp40_;
	_tmp41_ = wixl_msi_table_registry_new ();
	_g_object_unref0 (self->table_registry);
	self->table_registry = _tmp41_;
	_tmp42_ = wixl_msi_table_service_control_new ();
	_g_object_unref0 (self->table_service_control);
	self->table_service_control = _tmp42_;
	_tmp43_ = wixl_msi_table_service_install_new ();
	_g_object_unref0 (self->table_service_install);
	self->table_service_install = _tmp43_;
	_tmp44_ = wixl_msi_table_file_new ();
	_g_object_unref0 (self->table_file);
	self->table_file = _tmp44_;
	_tmp45_ = wixl_msi_table_admin_execute_sequence_new ();
	_g_object_unref0 (self->table_admin_execute_sequence);
	self->table_admin_execute_sequence = _tmp45_;
	_tmp46_ = wixl_msi_table_admin_ui_sequence_new ();
	_g_object_unref0 (self->table_admin_ui_sequence);
	self->table_admin_ui_sequence = _tmp46_;
	_tmp47_ = wixl_msi_table_advt_execute_sequence_new ();
	_g_object_unref0 (self->table_advt_execute_sequence);
	self->table_advt_execute_sequence = _tmp47_;
	_tmp48_ = wixl_msi_table_install_execute_sequence_new ();
	_g_object_unref0 (self->table_install_execute_sequence);
	self->table_install_execute_sequence = _tmp48_;
	_tmp49_ = wixl_msi_table_install_ui_sequence_new ();
	_g_object_unref0 (self->table_install_ui_sequence);
	self->table_install_ui_sequence = _tmp49_;
	_tmp50_ = wixl_msi_table_streams_new ();
	_g_object_unref0 (self->table_streams);
	self->table_streams = _tmp50_;
	_tmp51_ = wixl_msi_table_shortcut_new ();
	_g_object_unref0 (self->table_shortcut);
	self->table_shortcut = _tmp51_;
	_tmp52_ = wixl_msi_table_upgrade_new ();
	_g_object_unref0 (self->table_upgrade);
	self->table_upgrade = _tmp52_;
	_tmp53_ = wixl_msi_table_launch_condition_new ();
	_g_object_unref0 (self->table_launch_condition);
	self->table_launch_condition = _tmp53_;
	_tmp54_ = wixl_msi_table_app_search_new ();
	_g_object_unref0 (self->table_app_search);
	self->table_app_search = _tmp54_;
	_tmp55_ = wixl_msi_table_signature_new ();
	_g_object_unref0 (self->table_signature);
	self->table_signature = _tmp55_;
	_tmp56_ = wixl_msi_table_custom_action_new ();
	_g_object_unref0 (self->table_custom_action);
	self->table_custom_action = _tmp56_;
	_tmp57_ = wixl_msi_table_reg_locator_new ();
	_g_object_unref0 (self->table_reg_locator);
	self->table_reg_locator = _tmp57_;
	_tmp58_ = wixl_msi_table_create_folder_new ();
	_g_object_unref0 (self->table_create_folder);
	self->table_create_folder = _tmp58_;
	_tmp59_ = wixl_msi_table_file_hash_new ();
	_g_object_unref0 (self->table_file_hash);
	self->table_file_hash = _tmp59_;
	_tmp60_ = self->table_admin_execute_sequence;
	_tmp61_ = _g_object_ref0 ((WixlMsiTable*) _tmp60_);
	_tmp62_ = self->table_admin_ui_sequence;
	_tmp63_ = _g_object_ref0 ((WixlMsiTable*) _tmp62_);
	_tmp64_ = self->table_advt_execute_sequence;
	_tmp65_ = _g_object_ref0 ((WixlMsiTable*) _tmp64_);
	_tmp66_ = self->table_install_execute_sequence;
	_tmp67_ = _g_object_ref0 ((WixlMsiTable*) _tmp66_);
	_tmp68_ = self->table_install_ui_sequence;
	_tmp69_ = _g_object_ref0 ((WixlMsiTable*) _tmp68_);
	_tmp70_ = self->table_directory;
	_tmp71_ = _g_object_ref0 ((WixlMsiTable*) _tmp70_);
	_tmp72_ = self->table_media;
	_tmp73_ = _g_object_ref0 ((WixlMsiTable*) _tmp72_);
	_tmp74_ = self->table_property;
	_tmp75_ = _g_object_ref0 ((WixlMsiTable*) _tmp74_);
	_tmp76_ = self->table_icon;
	_tmp77_ = _g_object_ref0 ((WixlMsiTable*) _tmp76_);
	_tmp78_ = self->table_binary;
	_tmp79_ = _g_object_ref0 ((WixlMsiTable*) _tmp78_);
	_tmp80_ = self->table_component;
	_tmp81_ = _g_object_ref0 ((WixlMsiTable*) _tmp80_);
	_tmp82_ = self->table_feature;
	_tmp83_ = _g_object_ref0 ((WixlMsiTable*) _tmp82_);
	_tmp84_ = self->table_feature_components;
	_tmp85_ = _g_object_ref0 ((WixlMsiTable*) _tmp84_);
	_tmp86_ = self->table_remove_file;
	_tmp87_ = _g_object_ref0 ((WixlMsiTable*) _tmp86_);
	_tmp88_ = self->table_registry;
	_tmp89_ = _g_object_ref0 ((WixlMsiTable*) _tmp88_);
	_tmp90_ = self->table_service_control;
	_tmp91_ = _g_object_ref0 ((WixlMsiTable*) _tmp90_);
	_tmp92_ = self->table_service_install;
	_tmp93_ = _g_object_ref0 ((WixlMsiTable*) _tmp92_);
	_tmp94_ = self->table_file;
	_tmp95_ = _g_object_ref0 ((WixlMsiTable*) _tmp94_);
	_tmp96_ = self->table_streams;
	_tmp97_ = _g_object_ref0 ((WixlMsiTable*) _tmp96_);
	_tmp98_ = self->table_shortcut;
	_tmp99_ = _g_object_ref0 ((WixlMsiTable*) _tmp98_);
	_tmp100_ = self->table_upgrade;
	_tmp101_ = _g_object_ref0 ((WixlMsiTable*) _tmp100_);
	_tmp102_ = self->table_launch_condition;
	_tmp103_ = _g_object_ref0 ((WixlMsiTable*) _tmp102_);
	_tmp104_ = self->table_app_search;
	_tmp105_ = _g_object_ref0 ((WixlMsiTable*) _tmp104_);
	_tmp106_ = self->table_signature;
	_tmp107_ = _g_object_ref0 ((WixlMsiTable*) _tmp106_);
	_tmp108_ = self->table_custom_action;
	_tmp109_ = _g_object_ref0 ((WixlMsiTable*) _tmp108_);
	_tmp110_ = self->table_reg_locator;
	_tmp111_ = _g_object_ref0 ((WixlMsiTable*) _tmp110_);
	_tmp112_ = self->table_create_folder;
	_tmp113_ = _g_object_ref0 ((WixlMsiTable*) _tmp112_);
	_tmp114_ = self->table_file_hash;
	_tmp115_ = _g_object_ref0 ((WixlMsiTable*) _tmp114_);
	_tmp116_ = wixl_msi_table_error_new ();
	_tmp117_ = wixl_msi_table_validation_new ();
	_tmp118_ = g_new0 (WixlMsiTable*, 30 + 1);
	_tmp118_[0] = _tmp61_;
	_tmp118_[1] = _tmp63_;
	_tmp118_[2] = _tmp65_;
	_tmp118_[3] = _tmp67_;
	_tmp118_[4] = _tmp69_;
	_tmp118_[5] = _tmp71_;
	_tmp118_[6] = _tmp73_;
	_tmp118_[7] = _tmp75_;
	_tmp118_[8] = _tmp77_;
	_tmp118_[9] = _tmp79_;
	_tmp118_[10] = _tmp81_;
	_tmp118_[11] = _tmp83_;
	_tmp118_[12] = _tmp85_;
	_tmp118_[13] = _tmp87_;
	_tmp118_[14] = _tmp89_;
	_tmp118_[15] = _tmp91_;
	_tmp118_[16] = _tmp93_;
	_tmp118_[17] = _tmp95_;
	_tmp118_[18] = _tmp97_;
	_tmp118_[19] = _tmp99_;
	_tmp118_[20] = _tmp101_;
	_tmp118_[21] = _tmp103_;
	_tmp118_[22] = _tmp105_;
	_tmp118_[23] = _tmp107_;
	_tmp118_[24] = _tmp109_;
	_tmp118_[25] = _tmp111_;
	_tmp118_[26] = _tmp113_;
	_tmp118_[27] = _tmp115_;
	_tmp118_[28] = (WixlMsiTable*) _tmp116_;
	_tmp118_[29] = (WixlMsiTable*) _tmp117_;
	{
		WixlMsiTable** t_collection = NULL;
		gint t_collection_length1 = 0;
		gint _t_collection_size_ = 0;
		gint t_it = 0;
		t_collection = _tmp118_;
		t_collection_length1 = 30;
		for (t_it = 0; t_it < t_collection_length1; t_it = t_it + 1) {
			WixlMsiTable* _tmp119_;
			WixlMsiTable* t = NULL;
			_tmp119_ = _g_object_ref0 (t_collection[t_it]);
			t = _tmp119_;
			{
				GHashTable* _tmp120_;
				WixlMsiTable* _tmp121_;
				const gchar* _tmp122_;
				gchar* _tmp123_;
				WixlMsiTable* _tmp124_;
				WixlMsiTable* _tmp125_;
				_tmp120_ = self->tables;
				_tmp121_ = t;
				_tmp122_ = WIXL_MSI_TABLE_CLASS (G_OBJECT_GET_CLASS (_tmp121_))->name;
				_tmp123_ = g_strdup (_tmp122_);
				_tmp124_ = t;
				_tmp125_ = _g_object_ref0 (_tmp124_);
				g_hash_table_insert (_tmp120_, _tmp123_, _tmp125_);
				_g_object_unref0 (t);
			}
		}
		t_collection = (_vala_array_free (t_collection, t_collection_length1, (GDestroyNotify) g_object_unref), NULL);
	}
	return obj;
}

static void
wixl_msi_database_class_init (WixlMsiDatabaseClass * klass,
                              gpointer klass_data)
{
	wixl_msi_database_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &WixlMsiDatabase_private_offset);
	G_OBJECT_CLASS (klass)->get_property = _vala_wixl_msi_database_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_wixl_msi_database_set_property;
	G_OBJECT_CLASS (klass)->constructor = wixl_msi_database_constructor;
	G_OBJECT_CLASS (klass)->finalize = wixl_msi_database_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), WIXL_MSI_DATABASE_ARCH_PROPERTY, wixl_msi_database_properties[WIXL_MSI_DATABASE_ARCH_PROPERTY] = g_param_spec_enum ("arch", "arch", "arch", WIXL_TYPE_ARCH, 0, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT));
}

static void
wixl_msi_database_instance_init (WixlMsiDatabase * self,
                                 gpointer klass)
{
	self->priv = wixl_msi_database_get_instance_private (self);
}

static void
wixl_msi_database_finalize (GObject * obj)
{
	WixlMsiDatabase * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, WIXL_TYPE_MSI_DATABASE, WixlMsiDatabase);
	_g_object_unref0 (self->info);
	_g_object_unref0 (self->table_property);
	_g_object_unref0 (self->table_icon);
	_g_object_unref0 (self->table_binary);
	_g_object_unref0 (self->table_media);
	_g_object_unref0 (self->table_directory);
	_g_object_unref0 (self->table_component);
	_g_object_unref0 (self->table_feature);
	_g_object_unref0 (self->table_feature_components);
	_g_object_unref0 (self->table_remove_file);
	_g_object_unref0 (self->table_registry);
	_g_object_unref0 (self->table_service_control);
	_g_object_unref0 (self->table_service_install);
	_g_object_unref0 (self->table_file);
	_g_object_unref0 (self->table_admin_execute_sequence);
	_g_object_unref0 (self->table_admin_ui_sequence);
	_g_object_unref0 (self->table_advt_execute_sequence);
	_g_object_unref0 (self->table_install_execute_sequence);
	_g_object_unref0 (self->table_install_ui_sequence);
	_g_object_unref0 (self->table_streams);
	_g_object_unref0 (self->table_shortcut);
	_g_object_unref0 (self->table_upgrade);
	_g_object_unref0 (self->table_launch_condition);
	_g_object_unref0 (self->table_app_search);
	_g_object_unref0 (self->table_custom_action);
	_g_object_unref0 (self->table_reg_locator);
	_g_object_unref0 (self->table_create_folder);
	_g_object_unref0 (self->table_signature);
	_g_object_unref0 (self->table_file_hash);
	_g_hash_table_unref0 (self->tables);
	G_OBJECT_CLASS (wixl_msi_database_parent_class)->finalize (obj);
}

GType
wixl_msi_database_get_type (void)
{
	static volatile gsize wixl_msi_database_type_id__volatile = 0;
	if (g_once_init_enter (&wixl_msi_database_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (WixlMsiDatabaseClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) wixl_msi_database_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (WixlMsiDatabase), 0, (GInstanceInitFunc) wixl_msi_database_instance_init, NULL };
		GType wixl_msi_database_type_id;
		wixl_msi_database_type_id = g_type_register_static (G_TYPE_OBJECT, "WixlMsiDatabase", &g_define_type_info, 0);
		WixlMsiDatabase_private_offset = g_type_add_instance_private (wixl_msi_database_type_id, sizeof (WixlMsiDatabasePrivate));
		g_once_init_leave (&wixl_msi_database_type_id__volatile, wixl_msi_database_type_id);
	}
	return wixl_msi_database_type_id__volatile;
}

static void
_vala_wixl_msi_database_get_property (GObject * object,
                                      guint property_id,
                                      GValue * value,
                                      GParamSpec * pspec)
{
	WixlMsiDatabase * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, WIXL_TYPE_MSI_DATABASE, WixlMsiDatabase);
	switch (property_id) {
		case WIXL_MSI_DATABASE_ARCH_PROPERTY:
		g_value_set_enum (value, wixl_msi_database_get_arch (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_wixl_msi_database_set_property (GObject * object,
                                      guint property_id,
                                      const GValue * value,
                                      GParamSpec * pspec)
{
	WixlMsiDatabase * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, WIXL_TYPE_MSI_DATABASE, WixlMsiDatabase);
	switch (property_id) {
		case WIXL_MSI_DATABASE_ARCH_PROPERTY:
		wixl_msi_database_set_arch (self, g_value_get_enum (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_array_destroy (gpointer array,
                     gint array_length,
                     GDestroyNotify destroy_func)
{
	if ((array != NULL) && (destroy_func != NULL)) {
		int i;
		for (i = 0; i < array_length; i = i + 1) {
			if (((gpointer*) array)[i] != NULL) {
				destroy_func (((gpointer*) array)[i]);
			}
		}
	}
}

static void
_vala_array_free (gpointer array,
                  gint array_length,
                  GDestroyNotify destroy_func)
{
	_vala_array_destroy (array, array_length, destroy_func);
	g_free (array);
}

